1. 为什么选AD9226加AD8421这套组合1.1 从一颗ADC的选型说起搞交流信号采集绕不开两个核心问题前端信号怎么调理后端怎么把它数字化。很多人一上来就盯着ADC看觉得位数越高越好、采样率越快越好结果板子打回来一测噪声大得没法看有效位数连10位都不到。问题往往不出在ADC本身而是前端驱动没做好。AD9226是一颗12位、最高65MSPS的流水线型ADC并行输出接口简单不需要配置寄存器上电就能跑。对于做简易交流信号采集模块来说它的几个特性非常关键第一模拟输入带宽高内部自带采样保持放大器能直接采交流第二输入范围可以通过VREF引脚灵活配置1V到2V峰峰值都能设第三并行CMOS输出配合FPGA或者STM32的FSMC接口读取非常方便不需要高速串行解串。但AD9226有个脾气它的模拟输入端是差分输入的而且内部开关电容结构对驱动源的输出阻抗和建立时间有要求。你要是直接拿个单端信号源怼上去或者用普通运放随便跟一下采样精度会大打折扣。这就是为什么必须配一个差分驱动器。1.2 AD8421为什么适合做前端AD8421是一颗仪表放大器增益通过单个电阻设定从1到10000都能配。它的输入噪声很低0.1Hz到10Hz的峰峰噪声只有0.2微伏共模抑制比在增益为1时也有80dB以上。对于交流信号采集来说这两点直接决定了你能不能从工频干扰和共模噪声里把有用信号抠出来。用AD8421做前端的逻辑是这样的先把单端交流信号转成差分同时把共模电平抬到AD9226要求的偏置电压上。AD9226的模拟输入共模电压典型值是2.5V当VREF1V时所以前端输出的差分信号需要围绕2.5V摆动。AD8421本身输出的是单端信号要配合后面的单端转差分电路才能满足AD9226的输入要求。这里有个常见的误区有人觉得AD8421输出直接接AD9226的VINVIN-接一个固定的2.5V参考就行了。理论上差分输入允许一端固定但实际效果很差。因为AD9226的VIN和VIN-内部开关电容是交替采样的如果一端是直流另一端是交流采样保持电路的建立过程会不对称导致偶次谐波失真明显增大。实测下来THD会差10dB以上。1.3 整体信号链的规划整个模块的信号链我规划成三级第一级用AD8421做差分放大和共模抑制把微弱交流信号放大到合适的幅度第二级用单端转差分驱动器把信号变成差分对同时完成电平搬移第三级就是AD9226完成模数转换数据通过并行总线送给主控。电源方面AD8421需要正负双电源供电典型值是正负5V到正负15V。AD9226是单5V供电模拟部分和数字部分最好分开供电AVDD和DVDD之间用磁珠隔离。基准电压用ADR421或者ADR441这类低噪声基准VREF1V时输入范围是2V峰峰值VREF2V时是4V峰峰值。对于一般交流信号采集VREF1V够用了噪声底更低。时钟方面AD9226的采样时钟质量直接影响信噪比。时钟抖动每增加1ps在高频输入时的SNR就会明显下降。建议用专用的时钟分配芯片或者FPGA的全局时钟输出不要用MCU的普通IO翻转来产生时钟。如果采样率不高比如10MSPS以下用有源晶振直接驱动也可以但要注意时钟走线要短远离模拟区域。2. 电路设计里那些容易翻车的地方2.1 AD8421的增益设置与输入保护AD8421的增益公式是G149.4k/RGRG接在引脚2和引脚3之间。要得到100倍增益RG大约等于499欧姆。这里有个细节RG的精度和温漂直接影响增益精度。用普通1%精度的厚膜电阻增益误差可能到0.5%以上而且温度一变增益就飘。建议用0.1%精度的薄膜电阻温漂25ppm每摄氏度以内。输入保护这块很多人会忽略。AD8421的输入级是差分对管如果输入信号超过电源轨哪怕0.3V内部保护二极管就会导通大电流灌进去直接烧芯片。交流信号采集场景下信号源可能来自传感器或者探头上电瞬间的冲击、静电、甚至接线时的感应电压都可能超限。我的做法是在AD8421的两个输入端各串一个100欧姆的电阻然后对电源轨各接一个BAT54S肖特基二极管做钳位。100欧姆电阻带来的热噪声是1.3纳伏每根号赫兹相对于AD8421本身的3纳伏每根号赫兹输入噪声来说可以接受。还有一点AD8421的REF引脚决定了输出共模电压。如果REF接地输出就是以0V为中心的交流信号。但AD9226需要2.5V共模所以REF引脚要接一个2.5V的低阻抗参考源。这个参考源不能直接用电阻分压因为AD8421的REF引脚输入阻抗不是无穷大分压出来的电压会随输出电流变化。用一颗运放做缓冲比如OPA2277或者AD8629把2.5V基准缓冲后驱动REF引脚。2.2 单端转差分驱动器的选择从AD8421出来的单端信号要变成差分有两种方案用变压器做单端转差分或者用全差分运放。变压器方案在低频段比如低于100kHz效果不好而且不能传递直流分量对于交流信号采集来说如果信号频率范围宽变压器就不合适了。我选的是ADA4932-1这是一颗低噪声、低失真的全差分ADC驱动器。它的输入电压噪声是3.9纳伏每根号赫兹在10MHz时的SFDR有90dBc以上驱动AD9226绰绰有余。电路结构是AD8421的输出接ADA4932-1的正输入端负输入端接2.5V参考ADA4932-1配置成单位增益输出共模电压通过VOCM引脚设为2.5V。反馈电阻和增益电阻的匹配很关键。ADA4932-1的反馈网络如果不对称差分输出的幅度和相位就会失配导致偶次谐波失真。建议用0.1%精度的电阻而且四个电阻两个反馈、两个增益最好用同一批次的保证温漂一致。PCB布局时这四个电阻要靠近芯片走线尽量对称。2.3 AD9226的模拟输入网络AD9226的模拟输入是开关电容结构等效输入电容大约16pF采样时会有电荷注入。为了吸收这些电荷需要在VIN和VIN-各串一个电阻然后对地接一个电容构成RC低通滤波。电阻典型值取20到50欧姆电容取10到20pF。这个RC网络的时间常数要远小于采样周期否则建立不完全。以25MSPS采样率为例采样周期是40ns半个周期是20ns。RC时间常数取2ns左右5倍时间常数就是10ns能在半个周期内建立到0.1%以内。如果电阻取33欧姆电容取62pF时间常数就是2ns。但电容太大会影响输入带宽62pF和33欧姆构成的低通截止频率是77MHz对于几十兆的输入信号来说够用。还有一点AD9226的VREF引脚需要接一个0.1uF和一个10uF的电容到地而且这两个电容要尽量靠近引脚。VREF的噪声直接调制输入范围如果VREF不干净采样结果就会有杂散。我一般还会在VREF上并一个1uF的陶瓷电容和一个10uF的钽电容把低频噪声也滤掉。2.4 电源与地的处理AD8421的正负电源引脚各需要0.1uF和10uF的去耦电容正负电源各一组。AD9226的AVDD和DVDD也要分别去耦AVDD用0.1uF加10uFDVDD用0.1uF加1uF。数字地和模拟地要分开最后在AD9226下方用0欧姆电阻或者磁珠单点连接。有个坑我踩过一开始把AD8421的负电源直接接到系统地结果输出一直有50Hz工频干扰。后来发现是负电源的退耦电容接地端和AD8421的REF引脚接地端共用了走线地电流在走线阻抗上产生了压降串到了REF上。解决办法是给REF引脚单独走一根地线到电源入口的地不要和功率地混在一起。PCB布局上模拟部分和数字部分要分区。AD9226跨在中间模拟输入在左侧数字输出在右侧。时钟线从右侧进入远离模拟输入。电源走线先经过模拟区再经过数字区不要反过来。如果板子空间允许模拟部分下面铺完整的地平面数字部分下面也铺地但两个地在AD9226下方分开。3. 从原理图到PCB的实操步骤3.1 原理图绘制要点画原理图的时候我习惯把整个信号链从左到右排开BNC输入座、输入保护、AD8421放大、ADA4932-1单端转差分、AD9226采样、并行输出排针。电源部分单独画一页包括正负电源产生、基准电压产生、时钟产生。AD8421的增益电阻RG要画成可插拔的排针形式方便调试时换不同阻值。我一般会预留三个位置499欧姆G100、4.99kG11、49.9kG2。调试时先用低增益看信号有没有进来再换高增益看噪声和失真。AD9226的并行输出有12位数据线加一个溢出指示位总共13根信号线。如果主控是STM32可以用FSMC的16位模式读把数据线接到FSMC的数据总线上。但要注意AD9226的输出是3.3V CMOS电平吗不是AD9226的DVDD可以接3.3V输出电平就是3.3V可以直接和STM32的FSMC接口。如果DVDD接5V输出就是5V需要电平转换。时钟输入要加一个33欧姆的串联电阻做阻抗匹配如果时钟走线超过5厘米最好用差分时钟或者加一个时钟缓冲器。AD9226的时钟输入是高阻抗的但走线长了会有反射导致采样时刻抖动。3.2 PCB布局的优先级PCB布局我按这个优先级来先放AD9226因为它跨模拟数字区位置定了整个板子的分区就定了。然后放ADA4932-1尽量靠近AD9226的模拟输入引脚走线短且对称。再放AD8421靠近ADA4932-1。最后放电源和基准。AD9226的模拟输入走线要等长差分对走线间距保持一致最好包地。如果走线经过数字区域要在两侧加地过孔屏蔽。模拟输入走线不要换层如果必须换层要在过孔附近加地过孔提供回流路径。去耦电容的摆放0.1uF电容要尽量靠近电源引脚走线先经过电容再进引脚。10uF电容可以稍微远一点但也不要超过1厘米。电容的接地端要直接打过孔到地平面不要用长走线。晶振或者时钟源要远离模拟输入和AD8421。如果板子上有DC-DC电源一定要远离模拟区域而且DC-DC的电感要屏蔽。我一般会把DC-DC放在板子边缘模拟部分放在对角。3.3 焊接与调试顺序板子回来之后不要一次性把所有芯片都焊上。先焊电源部分上电测各路电压是否正常。正负5V的纹波用示波器看峰峰值应该在10mV以内。如果纹波大检查去耦电容和电源芯片的反馈网络。电源正常后焊基准电压芯片测VREF是否为1V或者2V。然后焊时钟部分用示波器测时钟频率和幅度确保时钟信号干净上升沿没有振铃。接下来焊AD9226但先不焊AD8421和ADA4932-1。给AD9226一个时钟用FPGA或者STM32读数据看输出是否在中间码附近跳动。如果输出全是0或者全是1检查VREF和输入偏置。AD9226的VIN和VIN-如果悬空输出是不确定的可以临时用两个1k电阻分压出2.5V接到两个输入端看输出是否在2048附近。AD9226正常后焊ADA4932-1输入端暂时接2.5V直流测输出共模是否为2.5V差分输出是否为零。然后焊AD8421输入端短接到地测输出是否接近2.5V。如果偏差大检查REF引脚的电压和增益电阻。最后接信号源输入一个1kHz、100mV峰峰值的正弦波用示波器看AD8421输出、ADA4932-1输出、以及AD9226的采样数据。如果波形失真先检查增益是否合适再检查电源和地。4. 实测中遇到的典型问题与解决思路4.1 输出噪声大、有效位数低第一次测试的时候输入短路采样数据的峰峰值有20个码字算下来有效位数只有9位多。AD9226标称12位理想情况下输入短路时输出应该在1到2个码字内跳动。20个码字说明噪声太大了。排查过程是这样的先用示波器看AD9226的模拟输入引脚发现上面有大约5mV峰峰值的噪声频率是几十兆像是时钟串过来的。检查PCB发现时钟线从AD9226下方穿过虽然在内层但参考平面被分割了回流路径不连续。把时钟线改到板边远离模拟区域噪声降到2mV峰峰值。然后看电源AVDD上的纹波有15mV峰峰值主要是DC-DC的开关频率及其谐波。在AVDD和DVDD之间加了一个磁珠又并了一个22uF的钽电容纹波降到5mV。最后看基准VREF上的噪声有1mV峰峰值换成ADR441之后降到200uV。三步下来输入短路的输出跳动降到3个码字有效位数接近11位。这里有个经验AD9226的噪声来源排序是时钟串扰大于电源纹波大于基准噪声。所以先解决时钟和布局再解决电源最后才考虑换基准。4.2 高频输入时谐波失真明显输入一个1MHz、1V峰峰值的正弦波采样后做FFT发现二次谐波比基波只低40dB三次谐波低45dB。AD9226在1MHz时的SFDR标称是80dBc以上差太远了。先怀疑是ADA4932-1的反馈电阻不匹配。用万用表测四个电阻两个反馈电阻分别是499.5和500.2欧姆两个增益电阻是499.8和500.1欧姆。虽然都在0.1%以内但不对称。换成同一批次的0.05%电阻二次谐波降到55dB。再检查AD9226的输入RC网络。原来用的电阻是50欧姆电容是10pF时间常数0.5ns。但AD9226在1MHz输入时的等效输入阻抗不是无穷大开关电容的等效电阻是1/(f_sample*C_sample)。25MSPS时等效电阻大约是2.5k欧姆。50欧姆的串联电阻和2.5k欧姆分压信号衰减了2%。而且这个等效电阻随频率变化导致增益非线性。把串联电阻改成20欧姆电容改成22pF时间常数0.44ns衰减降到0.8%。同时把ADA4932-1的输出共模电压精确调到2.5V偏差控制在5mV以内。二次谐波降到65dB三次谐波降到70dB。虽然还没到标称值但对于简易采集模块来说够用了。4.3 工频干扰的抑制做交流信号采集50Hz工频干扰是绕不过去的。即使输入端短路输出也有50Hz分量。AD8421的共模抑制比在增益100时是120dB理论上能把共模干扰压得很低。但实际电路中共模干扰会通过电源、地、空间耦合进来。我的做法是第一AD8421的输入端用屏蔽线屏蔽层接机壳地不要接信号地。第二AD8421的REF引脚用地线单独走不要和功率地共用。第三整个模块放在金属盒里金属盒接大地。第四在AD8421的输入端加一个简单的RC高通滤波截止频率设0.1Hz把直流和极低频干扰滤掉。实测下来输入端短路时50Hz分量从原来的200uV降到5uV以下。如果信号本身是50Hz附近的那高通滤波就不能加了只能靠屏蔽和接地。这时候可以考虑用数字滤波在MCU里做50Hz陷波但会牺牲一些带宽。4.4 采样时钟的抖动问题AD9226对时钟抖动很敏感。我用STM32的定时器输出PWM作为采样时钟频率10MHz占空比50%。测出来SNR只有65dB而用信号发生器给的时钟SNR有72dB。差了7dB说明STM32的时钟抖动太大了。STM32的定时器输出抖动主要来自系统时钟的分频和中断延迟。即使用PWM模式输出边沿也有几百皮秒的抖动。对于10MHz采样、1MHz输入的信号几百皮秒的抖动会导致SNR下降。解决办法是用FPGA的PLL输出时钟或者用专用的时钟芯片如Si5351。我用FPGA的全局时钟输出SNR恢复到71dB。如果手头没有FPGA也可以用有源晶振加分频器。比如用50MHz的有源晶振经过74LVC161分频到10MHz抖动在50ps以内。分频器的电源要干净输出加串联电阻匹配。5. 数据采集与上位机处理的配合5.1 并行数据的读取时序AD9226的输出在时钟上升沿更新数据有效窗口是时钟上升沿后的几纳秒到下一个上升沿前几纳秒。用STM32的FSMC读取时要把FSMC的读时序配置成在时钟下降沿采样这样数据已经稳定了。具体配置FSMC的地址建立时间设2个HCLK数据建立时间设4个HCLK总线翻转时间设1个HCLK。如果HCLK是72MHz一个周期13.9ns数据建立时间就是55.6ns。AD9226在25MSPS时数据有效窗口是40ns55.6ns的建立时间太长了会读到下一个周期的数据。所以FSMC的时钟不能太快或者用DMA加定时器触发。我一般用定时器触发DMADMA从GPIO口读数据。但GPIO读数据的速度受限于APB总线72MHz的APB总线读一次GPIO要2个周期约28ns。25MSPS的周期是40ns勉强够用。如果采样率更高就得用FPGA了。用FPGA的话直接用时钟的下降沿锁存AD9226的输出然后写入FIFO。FIFO的半满信号触发DMA传输到内存。这样时序最干净采样率可以跑到65MSPS。5.2 数据打包与传输采集到的12位数据要打包成16位或者32位再传输。我一般打包成16位高4位补零低12位是数据。如果要做连续采集每采样一次就传一次USB或者以太网的带宽要够。25MSPS乘16位是400MbpsUSB2.0的480Mbps理论带宽勉强够但实际有效带宽只有300Mbps左右会丢数据。所以连续采集时要么降低采样率要么用USB3.0或者千兆以太网。千兆以太网的有效带宽是900Mbps左右25MSPS乘16位是400Mbps够用。如果用UDP协议每个包加8字节UDP头加20字节IP头加14字节以太网头总共42字节开销。每包数据如果放1024个采样点就是2048字节数据加42字节头开销2%。可以接受。如果只是做简易采集不需要连续高速可以用MCU采集一批数据存到RAM里然后慢慢传给上位机。比如采集1024个点存到STM32的RAM里然后通过串口或者USB传给电脑。这样对带宽没要求但采样率不能太高因为RAM有限。5.3 上位机的FFT与显示上位机用Python或者LabVIEW都行。Python的话用numpy做FFTmatplotlib做显示。采样率25MSPS采集1024个点频率分辨率是25M/102424.4kHz。如果输入是1MHz在FFT的第41个bin上。加一个Blackman窗减少频谱泄漏。显示的时候除了频谱还要显示时域波形和有效位数。有效位数的计算公式是SNR6.02*ENOB1.76反过来ENOB(SNR-1.76)/6.02。SNR从FFT里算取基波功率和除基波外的总功率之比。如果要做实时显示Python的刷新率可能不够。可以用C加Qt或者用LabVIEW。LabVIEW的FFT速度很快而且有现成的波形显示控件。但LabVIEW的授权费用高如果只是自己做着玩Python够了。5.4 校准与补偿AD9226的增益误差和偏移误差可以通过两点校准来补偿。输入一个已知的直流电压比如0.5V和2.5V读回采样码字算出实际增益和偏移。然后在软件里做线性修正。增益误差主要来自VREF的精度和AD9226内部的参考缓冲。VREF用ADR441的话初始精度0.04%温漂3ppm每摄氏度基本不用校准。偏移误差来自AD9226的内部偏移和ADA4932-1的失调典型值几个毫伏对应几个码字。如果要求不高可以不校准。如果要求高就在软件里减掉偏移。交流信号采集还需要考虑频响补偿。AD8421的带宽在增益100时是10MHzADA4932-1的带宽是1.5GHzAD9226的模拟带宽是65MHz。整个链路的-3dB带宽大约10MHz。如果输入信号接近10MHz幅度会下降3dB。可以在软件里做频响补偿或者在前端加一个均衡滤波器。6. 几个值得注意的工程细节6.1 输入耦合方式的选择交流信号采集输入端是直接耦合还是电容耦合直接耦合的话AD8421的输入偏置电流会在信号源内阻上产生偏移电压。AD8421的输入偏置电流是0.5nA如果信号源内阻是1M欧姆偏移就是0.5mV。对于小信号来说0.5mV的偏移可能就占了满量程的很大一部分。电容耦合可以隔掉直流但电容和输入电阻构成高通滤波截止频率要低于信号最低频率。如果信号最低频率是10Hz输入电阻是1M欧姆电容要大于1/(2pi10*1M)16nF。用1uF的电容截止频率是0.16Hz够用。但电容的漏电流和介质吸收会影响低频响应钽电容或者薄膜电容比陶瓷电容好。我的做法是如果信号源本身没有直流偏置直接耦合如果有直流偏置或者不确定用电容耦合电容用1uF的薄膜电容输入电阻用1M欧姆。这样截止频率0.16Hz对交流信号影响很小。6.2 增益分配的考虑整个链路的增益怎么分配AD8421的增益设多少ADA4932-1的增益设多少我的原则是第一级增益尽量大因为第一级的噪声系数决定了整个链路的噪声系数。AD8421的输入噪声是3nV每根号赫兹如果增益设100等效输入噪声还是3nV。如果增益设10后面ADA4932-1的噪声折算到输入端就要除以10影响就大了。但第一级增益也不能太大否则输出摆幅会超限。AD8421在正负5V供电时输出摆幅是正负3.5V左右。如果输入信号是10mV峰峰值增益100时输出是1V峰峰值没问题。如果输入信号是100mV峰峰值增益100时输出是10V峰峰值超了。所以增益要根据输入信号幅度来定。我一般把AD8421的增益设成使输出在1V峰峰值左右然后ADA4932-1设成单位增益输出2V峰峰值给AD9226。AD9226在VREF1V时输入范围是2V峰峰值刚好匹配。如果输入信号幅度变化大可以在AD8421前面加一个可编程衰减器或者用数字电位器调增益。6.3 时钟与采样的同步如果要做相干采样采样时钟和输入信号要同源。比如输入信号是1kHz采样率是100kHz采样100个点正好是10个信号周期。这样FFT没有频谱泄漏不需要加窗。但实际中信号源和采样时钟很难同源所以一般还是加窗。如果要做等效时间采样采样率可以低于信号频率通过多次触发采集不同相位的点来重建波形。这需要信号是周期性的而且触发电路要精确。AD9226本身没有触发功能需要外部加一个比较器做触发。等效时间采样可以用低速ADC采高频信号但只适合周期性信号。对于简易交流信号采集模块我建议直接用奈奎斯特采样采样率至少是信号最高频率的2.5倍。如果信号最高频率是1MHz采样率用2.5MSPS以上。AD9226最高65MSPS余量很大。采样率高一些FFT的频率分辨率也高但数据量也大。根据实际需要权衡。6.4 电磁兼容的考虑板子如果放在金属盒里要注意盒子的接地。金属盒接大地但信号地不能直接接大地否则会形成地环路。信号地通过一个1nF的电容接金属盒或者用磁珠连接。这样高频干扰被旁路到大地低频地环路被阻断。输入BNC座的外壳要接金属盒不要接信号地。如果BNC外壳接信号地信号地和金属盒就连在一起了地环路就形成了。BNC外壳接金属盒信号地从BNC的中心针进来屏蔽层在BNC处接金属盒这样屏蔽层上的干扰电流直接流入金属盒不经过信号地。电源入口要加共模扼流圈和X电容、Y电容。共模扼流圈抑制共模干扰X电容抑制差模干扰Y电容把共模干扰旁路到地。如果电源是DC-DC产生的DC-DC的输入输出都要加滤波。DC-DC的开关频率一般在几百kHz到几MHz滤波器的截止频率要低于开关频率。7. 从模块到产品的扩展思路7.1 增加程控增益如果要做成产品输入信号幅度范围可能很宽从几毫伏到几伏。固定增益要么小信号看不清要么大信号超限。增加程控增益可以解决这个问题。AD8421的增益电阻RG可以换成数字电位器比如AD5272或者AD8400。数字电位器的分辨率有限AD5272是10位1024个抽头增益从1到1000可调步进大约0.1%。但数字电位器的带宽和噪声不如固定电阻。AD5272的带宽是几百kHz如果信号频率高增益会下降。而且数字电位器的电阻有温漂增益精度不如固定电阻。如果要求高可以用继电器切换固定电阻或者用模拟开关加电阻网络。模拟开关的导通电阻会影响增益精度要选低导通电阻的比如ADG1414导通电阻0.5欧姆。7.2 增加抗混叠滤波器AD9226的采样率如果低于信号最高频率的2倍就会产生混叠。虽然AD9226内部有采样保持但抗混叠滤波器要外部加。抗混叠滤波器是一个低通滤波器截止频率设在采样率的一半以下。如果采样率是25MSPS截止频率设在10MHz左右用5阶巴特沃斯或者切比雪夫滤波器。滤波器可以放在ADA4932-1的反馈网络里做成有源滤波器。ADA4932-1本身是运放可以配置成Sallen-Key或者Multiple Feedback滤波器。但全差分滤波器的设计比单端复杂要保证差分对的对称性。也可以用无源LC滤波器放在ADA4932-1和AD9226之间。LC滤波器的插入损耗要算进去可能需要增加ADA4932-1的增益来补偿。7.3 增加隔离如果信号源和采集模块之间有地电位差或者信号源在强干扰环境里需要加隔离。模拟隔离可以用隔离放大器比如AMC1200或者AMC1301。隔离放大器的带宽有限AMC1301的带宽是1MHz适合低频信号。如果信号频率高可以用变压器隔离但变压器不能传直流。数字隔离可以用ADuM系列或者光耦。AD9226的输出是并行12位如果要在隔离后传输需要12个隔离通道成本高。可以在AD9226前面做模拟隔离这样数字部分不用隔离。或者用FPGA采集AD9226的数据然后通过LVDS或者光纤传输到主控LVDS和光纤本身有隔离效果。7.4 增加数据存储如果要做长时间采集数据量很大需要本地存储。可以用SD卡或者eMMC。SD卡的写入速度有限Class 10的卡写入速度是10MB每秒25MSPS乘2字节是50MB每秒SD卡跟不上。要么降低采样率要么用eMMC。eMMC的写入速度可以到100MB每秒以上够用。或者用DDR内存做缓存采集一批数据存到DDR里然后慢慢写入SD卡。DDR的带宽是几百MB每秒可以缓存几秒钟的数据。如果采集时间更长可以用循环缓存只保留最新的数据。触发条件满足时把缓存里的数据存到SD卡。7.5 增加网络接口如果要做远程采集可以加一个以太网接口。用W5500或者DP83848加STM32的MAC。W5500是硬件TCP/IP协议栈SPI接口编程简单。DP83848需要软件协议栈但速度更快。千兆以太网用DP83867加FPGA的MAC速度可以到1000Mbps。网络接口的好处是可以远程配置增益、采样率、触发条件采集的数据实时传到服务器。用UDP协议传输延迟低。如果要求可靠传输用TCP但TCP的重传机制会增加延迟。对于采集数据UDP加前向纠错或者应用层重传都可以。8. 写在最后的一些个人体会这套AD9226加AD8421的交流信号采集模块我从画原理图到调试通过前前后后花了大概两周时间。中间踩的坑主要集中在电源噪声、时钟抖动和差分走线不对称这三个方面。如果让我重新做一版我会在PCB布局上花更多时间把模拟区和数字区彻底分开时钟线走板边电源先经过模拟区再经过数字区。元器件选型上AD8421和AD9226都是成熟器件价格也不贵适合做简易采集模块。ADA4932-1稍微贵一点但性能确实好。如果成本敏感可以用LMH6552或者THS4521替代性能差一些但够用。基准电压用ADR441噪声低温漂小值得多花几块钱。调试的时候示波器和频谱仪是必备的。示波器看时域波形和电源纹波频谱仪看频域失真和噪声。如果没有频谱仪用ADC采样后做FFT也能看但要注意ADC本身的噪声和失真会影响测量结果。信号源要用低失真的普通函数发生器的失真可能比ADC还大。最后交流信号采集模块的性能不仅取决于芯片更取决于布局、电源和接地。同样的原理图不同的人画PCB性能可能差很多。多花时间在布局上比换更贵的芯片更有效。
