ad采集卡的“幽灵”

最近有个朋友跟我吐槽,说他们在AD采集卡上发现了一个奇怪的现象:系统里本来只给CH1接了真实信号,剩下的几个通道,包括CH2在内,全部都没有接任何东西。结果程序却莫名其妙地把这些悬空引脚当成了有效的触发信号,导致逻辑判断全都乱套了。最让人搞不懂的是,那些没有接信号的悬空通道的波形曲线,竟然跟有信号的通道几乎一模一样,根本不是那种随机乱蹦的噪声,而是像被什么东西拖着一样,完完全全地跟着有信号的那个跑。这种现象实在太诡异了。 一开始大家都觉得这可能是电路内部有噪声或者是电源纹波的问题。可是经过仔细对比发现,这根本不是随机噪声。这些奇怪的“鬼影”信号有三个很明显的特点:第一是幅度非常稳定,每次采集的时候幅度都差不多,跟噪声那种随时间起伏的情况完全不一样;第二是相位完全锁定,不管前面的信号怎么变,它都像被拽着走一样死死跟着;第三是温度变化也不影响它,室温哪怕变半个小时,波形漂移都不到1mV。这就说明它肯定不是普通的放大器漂移或者电源问题那么简单。 那到底是哪里出了问题呢?我们得先回顾一下AD采集卡的核心原理——采样保持电路(S/H)。它的工作原理其实挺简单的:当Vc是采样电平时,开关S就会导通,模拟信号Vi就会通过S往CH电容充电,输出电压Vo就会实时跟着Vi变;当Vc变成保持电平时,S断开了,电荷就被锁在电容CH上不动了,Vo也就保持住了断开瞬间的那个电压值。这个过程里有个高输入阻抗的缓冲放大器,专门负责把CH跟后面的负载隔离开来,防止电荷泄露出去污染数据。 回到多路扫描的场景来看就明白了:卡先给CH1送一个采样脉冲→CH1的开关打开了,Vi1往CH1充电→Vo1跟着变;紧接着卡又切换到CH2去采样→按照常理Vo2应该得等下一次脉冲再来才会更新数据。但是这个时候有个关键问题出现了:CH2这个通道因为没人接信号也没有脉冲驱动它的开关闭合放电。这就导致了一个很尴尬的局面——CH2上面的电容其实还残留着上一个通道或者地噪声的电压值。 当卡再次回到CH1去采样的时候,情况更糟糕了:CH2依旧没有被强制放电。于是它就像是捡到了一份“遗产”一样继续复制CH1的旧数据。这就解释了为什么那些悬空的通道波形总是跟有信号的通道同步跑偏。 那怎么才能把这个“幽灵”给甩掉呢?我总结了三种思路: 第一种是物理隔离。给那些悬空的引脚并联一个1MΩ的电阻直接接地。这样给电容CH提供了一个快速放电的回路,破坏掉那个“复制”的条件; 第二种是软件判据。在触发阈值的判断上加上“幅度+斜率”的双条件限制。只有当幅度超过阈值并且斜率也符合真实信号特征的时候才计数; 第三种是硬件同步。直接换用那种真正多路独立的ADC芯片卡。每一路都有自己独立的ADC和S/H电路,从根本上杜绝了因为时间差带来的数据泄露问题。 通过上面的分析大家应该都明白了:悬空引脚出现的那些同步伪信号并不是因为真的没信号或者不存在。本质上就是采样保持电容偷偷捡了上一个通道的数据才导致的。搞清楚了这个机制后我们就有针对性了:要么给电容找个放电的路子跑一跑,要么升级硬件实现真正的同步采集。这样程序就再也不会被那个莫名其妙的“幽灵”牵着鼻子走了。