From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.



由多路复用器引发的多通道模拟量采集结果偏差大的解决方法 - Part I



硬件: Multifunction DAQ (MIO)>>M Series>>USB-6259

问题:
我在使用NI的数据采集卡进行多通道数据采集,如果每次只对一个通道的信号进行采集,既每个任务只有一个被测物理通道,测量结果很理想;一旦一个采集任务中包含有多个通道,往往出现某些通道的测量值与真实值偏差很大,相邻通道间出现干扰,某个通道采集结果出现了另外一个通道的波形特征等现象,导致测量出错;并且采样速率越高,偏差越大。这个问题如何解决?


解答:
 1、问题根源:
    NI的大部数据采集卡的模拟采集部分,都是由一个或多个多路复用器、模拟前端、可编程放大器和一个ADC组成。当进行多通道数据采集时,多路复用器分时切换至不同通道,将电信号经过前端调理后送往ADC进行模数转换,最终得到多个通道的采样值。因此,多路信号并不是同步采集的。
    一个待测信号源,可以等效成一个电压源串联一个电阻RX,不同信号源内阻可能不一样;而数据采集卡,由于内部多路复用器(MUX、)ADC采样保持电容和寄生电容的存在,从通道输入的电压经过信号调理电路,最终稳定传输到ADC,需要一定的时间,这段时间通常叫建立时间,这一过程可以假想成板卡通道对地间存在微小的电容C,延迟是由于RX给C充放电需要时间造成的,这个电容很小,通常在pF级,多通道采集电路等效图如下:
1. 多通道测量等效模型
 
    当进行多通道数据采集时,多路复用器在不同的通道间进行切换,不同通道上的信号源对内部电容充电/放电,电压建立时间随RX的不同而不同,与此同时,ADC按照设定的采样速率进行采集,有可能电容C上的电压还未达到稳定值便被ADC进行了数模转换。假设一个测量任务同时测量AI0和AI1,R0很小,而R1很大,当MUX接到AI0时,C两端的电压很快与Source0相同;当MUX从AI0切换至AI1,此时电容C两端还保持Source0的电压,通过R1充电/放电逼近Source1,而R1很大,电容C两端电压还未建立完成,ADC进行了模数转换。这就造成了Source1的测量值与真实值之间的误差,并且AI1的测量值上叠加有AI0上的信号,这一现象被称为重像电压或者影子电压(Ghosting)。
    在多通道测量时,涉及到一个概念,扫描序列,即遍历待测通道的顺序,同样是对AI0、AI1、AI2进行测量,每次采样过程先测AI0,然后AI1,最后AI2和AI0->AI2->AI1是不一样的扫描顺序,可以通过多次使用DAQmx Create Channel.vi对同一个Task加入待测通道,插入的顺序既是扫描顺序。
2. 构建扫描序列
  
  为了直观说明本文论述的现象和方法,本文作者搭建了如下实验平台。
3. 实验平台
   
    文中使用USB-6259进行数据采集,使用ElVIS II+输出正弦和直流信号,并通过串入电阻模拟信号源的内阻,接线表如下:
1. 实验信号源及模拟通道对应关系 
AI0
Source0, 2.5Sin(2π*100t), r=50
AI4
Source4,DC 4V,r = 0.1
AI1
Source1, 2.5Sin(2π*100t), r=470k
AI5
Source5,DC 4V,r = 100k
AI2
Source2, 1.25Sin(2π*100t),r=23.5k
AI6
Source6,DC 2V,r = 50k
AI3
Source3,  DC  -42.5mV ,   r=10k
AI7
Source7,AIGND
   
    如果只用对AI5(信号源特性见表1)连接的进行测量,结果如图4所示,测量值与实际值相符。
4. 只对Source5的测量结果,采样率100KDIFF
 
    若对AI0、AI5(信号源特性见表1)同时测量,扫描序列为AI5->AI0->AI5->AI0循环扫描,测量结果如下:
 5a. Source5()Source0()同时测量,采样率10KDIFF
图5b. Source5(左)、Source0(右)同时测量,采样率100K,DIFF
图5c. Source5(左)、Source0(右)同时测量,采样率500K,DIFF
   
    图5复现了鬼影现象,随着采样率的提高,鬼影现象变得严重,源阻抗低的Source0并未受影响,而源阻抗大的Source5收到了严重的干扰。
    当扫描序列中有一个通道没有接入任何信号,可以认为此通道接入了一个输入阻抗无穷大的信号源,因此电容C无法进行充电和放电,此时电容C两端的电压基本与上一通道一致,测量值并不是0V,而是接近上一扫描通道的测量值,这是鬼影现象的一个极端表现,因此应该避免在扫描序列中插入未连接信号的物理通道。
    由上文不难得出,鬼影现象轻则造成测量值偏差,重则导致测量完全失真,其本质原因是等效电容和信号源内阻的存在,这一现象无法避免,但通过合理的技术手段可以减弱。减小鬼影现象的核心问题在于为电容C的暂态过程谋取更多的时间(增长建立时间);或者合理控制暂态过程的初始状态,在同样的时间内使C两端电压更接近真实值(减少电压建立所需时间)。
  
2、不同应用场景的性能改善方法。
 
1)当测量序列中有一个高阻抗的直流信号源时,若采样速率较低,可将直流信号源接入的通道放在扫描序列的第一个。
    例如同时对Source0、Source5、Source6(信号源特性见表1)进行测量,不同的扫描序列,得到的结果将完全不同。
图6a.Source5(左)、Source0(中)、Source6(右)同时测量,采样率1000,DIFF
图6b. Source0(左)、Source5(中)、Source6(右)同时测量,采样率1000,DIFF
   
    图6a中,扫描序列是AI5->AI0->AI6,结果还算理想,每个通道上的信号基本正常;而图6b中的序列是AI0->AI5->AI6AI5Source5的测量结果完全失真。由此可见,合理安排通道的采集顺序,能很大程度上改善测量结果。
     
2)在采样速率较低时,可以修改Convert Rate,降低复用器切换速度,延长放大器稳定可用时间。
    上一个例子中,为何将高阻抗源放在扫描序列的第一个,能有如此作用?这就不得不提到一个关键的参数,AI Convert Rate。AE KB 2XPE1QCW 对Convert Rate(通道转换速率)做了详细说明,从中不难得出,当进行多通道采集时,多路复用器开关在各个通道的停留时间,也就是允许信号源对内部电容C充电/放电的时间默认情况下是由驱动配置的。在每通道采样数Sample Rate低的时候,Convert Rate的计算方法是由ADC的最高转换速度(单通道采集时的最高Sample Rate),再加10µs的延时。当每通道采样(Sample Rate)不断提高,在到达某个频率的时候就无法满足10µs的额外延时了,在这种情况下,驱动程序使用循环(round robin)的通道采样方式,均匀的将采样点之间的延时分配在各个通道之间。这时,Convert Rate的计算方法就是将采样率乘以使用的通道数。
    正因如此,当采样速率较低的时候,每进行一次采样,轮询扫描完一次采样序列,在启动下一次通道采样前,还有空余时间。例如USB-6259,最高采样速度1MS/s,ADC模数转换时间1us,在上面的例子中,每通道采样率1K,一共三个通道,每1000us内对所有通道采样一次即可,而每通道上消耗的时间为10us(额外延时)+1us(ADC转换时间),Convert Rate = 1/11us = 90909.1Hz(通过属性节点可以得到其真实值),三个通道一共需要33us,剩下的967us中,板卡如何工作呢?
    当完成一次扫描后,在下一次扫描开始前,多路复用器会停在序列的第一个通道上,而不是最后一个,意味着这967us的时间可以用于内部电容C的暂态过程,放大器拥有更多的“建立时间”。因此在AI5->AI0->AI6的序列中,967us均将Source5接入板卡,而在AI0->AI5->AI6这个序列,Source5的接入时间只有11us,因此造成了图6所示的结果。
    使用属性节点,可查看真实的Convert Rate,上面的例子中,实际Convert Rate如下如所示。
 
图7. Convert Rate
   
    至此,不难发现,可以通过手动设置Convert Rate,多余的时间均分至每个通道,让各通道都有更多的时间用与放大器的电平建立时间,也就是更多的时间用于内部等效电容C的充放电过程,电容C上的电压就会更接近真实电压。
仍以上面的测量任务为例,同样是对Source0、Source5、Source6(信号源特性见表1)进行测量,扫描序列为AI0->AI5->AI6,使用默认Convert Rate和手动Convert Rate的测量结果如下:
图8a. Source0(左)、Source5(中)、Source6(右)同时测量,采样率1000,DIFF,Convert Rate=默认
图8b. Source0(左)、Source5(中)、Source6(右)同时测量,采样率1000,DIFF,Convert Rate=3000
     
    图8可见,手动设置Convert Rate后,Source5的测量结果得到了很大的改善。然而,此方法只适用于低每通道采样速率时,此时驱动程序默认为每通道扫描时加入10us,也就是Convert Rate = 最高采样速率/11us时;随着每通道采样率变高,Convert Rate将会等于每通道采样数*通道数,此方法不再适用。同时,此方法对测量结果的改善程度受限于采样速率,采样速率越低,每次采样过程扫描序列完成后剩余的时间也就越多,可以均分到各通道的用于电压建立的时间也就越多,测量值也就越准确。
    需要注意的是,手动设置Convert Rate是要遵循如下公式:
AI convert Rate >= AI Sampling Rate * Number of Channels