基于AD9226与AD8421的交流信号采集模块设计
2026/9/24 14:40:28 网站建设 项目流程

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(当VREF=1V时),所以前端输出的差分信号需要围绕2.5V摆动。AD8421本身输出的是单端信号,要配合后面的单端转差分电路才能满足AD9226的输入要求。

这里有个常见的误区:有人觉得AD8421输出直接接AD9226的VIN+,VIN-接一个固定的2.5V参考就行了。理论上差分输入允许一端固定,但实际效果很差。因为AD9226的VIN+和VIN-内部开关电容是交替采样的,如果一端是直流,另一端是交流,采样保持电路的建立过程会不对称,导致偶次谐波失真明显增大。实测下来,THD会差10dB以上。

1.3 整体信号链的规划

整个模块的信号链我规划成三级:第一级用AD8421做差分放大和共模抑制,把微弱交流信号放大到合适的幅度;第二级用单端转差分驱动器把信号变成差分对,同时完成电平搬移;第三级就是AD9226完成模数转换,数据通过并行总线送给主控。

电源方面,AD8421需要正负双电源供电,典型值是正负5V到正负15V。AD9226是单5V供电,模拟部分和数字部分最好分开供电,AVDD和DVDD之间用磁珠隔离。基准电压用ADR421或者ADR441这类低噪声基准,VREF=1V时输入范围是2V峰峰值,VREF=2V时是4V峰峰值。对于一般交流信号采集,VREF=1V够用了,噪声底更低。

时钟方面,AD9226的采样时钟质量直接影响信噪比。时钟抖动每增加1ps,在高频输入时的SNR就会明显下降。建议用专用的时钟分配芯片或者FPGA的全局时钟输出,不要用MCU的普通IO翻转来产生时钟。如果采样率不高,比如10MSPS以下,用有源晶振直接驱动也可以,但要注意时钟走线要短,远离模拟区域。

2. 电路设计里那些容易翻车的地方

2.1 AD8421的增益设置与输入保护

AD8421的增益公式是G=1+49.4k/RG,RG接在引脚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加10uF,DVDD用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欧姆(G=100)、4.99k(G=11)、49.9k(G=2)。调试时先用低增益看信号有没有进来,再换高增益看噪声和失真。

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时,数据有效窗口是40ns,55.6ns的建立时间太长了,会读到下一个周期的数据。

所以FSMC的时钟不能太快,或者用DMA加定时器触发。我一般用定时器触发DMA,DMA从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位是400Mbps,USB2.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做FFT,matplotlib做显示。采样率25MSPS,采集1024个点,频率分辨率是25M/1024=24.4kHz。如果输入是1MHz,在FFT的第41个bin上。加一个Blackman窗,减少频谱泄漏。

显示的时候,除了频谱,还要显示时域波形和有效位数。有效位数的计算公式是SNR=6.02*ENOB+1.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时是10MHz,ADA4932-1的带宽是1.5GHz,AD9226的模拟带宽是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在VREF=1V时输入范围是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,性能可能差很多。多花时间在布局上,比换更贵的芯片更有效。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询