测试系统中,当对多路信号波形进行分析时,我们需要这些波形在时间轴上对其(同时采样),数据分析起来才有意义。这种使多路信号的波形在时间轴上对齐的技术就叫做同步技术。
举个例子,比如测试系统需要采集电压和电流用P=UI算功率。理论上当然需要同一时刻的电压U和电流I算出来的才是真正的功率P。用早上的电压和晚上的电流算出来的功率就没意义。但是,大多数的情况下要求也没么高,用第0.5秒的电压和第0.6秒的电流算出来的功率P也可以用。这个允许数据之间时间差程度,就是同步性要求。
所有的测试系统都需要同步性设计,只是大多数系统对同步性要求没有那么高,即使你不考虑也没什么问题,因此很多测试工程师会对同步概念很陌生。但是对于一些精密的测试设备,采集同步是不得不考虑的问题。
本文介绍的同步技术主要分为三部分
- 一张采集卡上有很多AI通道,这就涉及“采集卡通道间同步”。
- 一个项目采集通道太多,一张卡不够。这就涉及“采集卡间的同步”
- 项目里的信号源一部分来自CAN/LIN通讯,另一部分来自AI采集卡。这就涉及“不同信号来源间同步”。
同步的核心是共享采样时钟和采样启动信号(此外还有一些如GPS、网络通信的同步技术,本文不做讨论)。所以故事要从采样时钟说起……
模拟量采集卡的通过ADC(A模拟,D数字,C转换器)进行模拟量采集,ADC芯片的引脚定义一般是这样的:
别的不看,只看1和7引脚,引脚1 CS就是采样启动信号;引脚7 CLK就是采样时钟。当CS=低电平时,CLK上每来一个上升沿ADC进行一次采样,生成一个采样点。
CLK由采集卡时钟源分频而来。一个采集卡的时钟源不止一个,但是每个时钟源的时钟都是恒定的,比如10MHz,20MHz,100MHz。当你在程序中设定采样率后,采集卡的驱动会算出所需要的时钟源和分频比例,并输出给ADC芯片的CLK引脚。举个例子,程序设定使用10MHz的时钟源为基准,采样率为1KHz:
并不是所有采样率都能分的出来,比如上面的例子,如果使用10M的时钟基准,1.9MHz的采样时钟就分不出来。如果你在编程时设定了一个无法分出的采样率,驱动会自动选择大于且最靠近设定值的可用采样率(可被基准时钟源整除的采样率)。软件中你可以使用波形的方式读取采样数据,波形中的dt数据反映的是实际采样率。
使用共享采样时钟的方法进行采集同步
此方法也叫做外部采样时钟模式,一般会使用一个计数器(Counter)或其他脉冲源生成一个外部时钟频率,比如1KHz的方波,然后直接使用这个方波作为不同采集通道的ADC转换时钟。
单张NI采集卡(其他品牌采集卡可能也有,没研究过)内部有十分丰富的板载信号路由电路,使用者可以直接在程序中进行时钟与触发线的路由,而不需要在外部进行接线。如下面的案例,使用Dev1/ctr0输出1KHz的方波信号,然后使用这个1K方波为采样时钟进行AI和编码器通道的采样,理论上来说ctr0是有物理的输出通道的,需要用一根导线把ctr0的输出引脚接入到AI和编码器的CLK IN物理引脚上。但是由于这些丰富的板载信号路由电路的存在,采集卡可以在内部实现信号路由,无需接线。
上图是使用共享采样时钟同步同一张采集卡不同物理通道的案例,程序稳定运行60多秒后,手动停止。在整个运行过程中,编码器采集通道和AI采集通道的采样数完全一致,两种物理量采集一致处于同步状态。当使用共享采样时钟同步时,开始触发信号可以不同步,但是必须保证最后再启动采样时钟的源通道。
使用共享基准时钟和触发信号的方法进行采集同步
基于上文对采样时钟与基准时钟关系的讨论:采样时钟由基准时钟分频而来。可以推导出:如果两个物理通道使用一个基准时钟且采样率设置相同,则物理通道的采样时钟必然同步。与共享采样时钟不同,这种模式还需要同步不同物理通道之间的“启动采样”信号。
由于Counter编码器采集通道不支持此种同步方式,下面的案例使用DI和AI进行同步:
上图是使用共享基准时钟和触发信号同步同一张采集卡不同物理通道的案例,程序稳定运行60多秒后,手动停止。在整个运行过程中,DI采集通道和AI采集通道的采样数完全一致,两种物理量采集一直处于同步状态。当使用共享基准时钟同步时,“启动采集”信号必须进行同步,且必须保证最后再启动“启动采集”信号的源通道。
实际项目中,很多采集通道并不是两种同步方法都支持,比如编码器采集通道,它就只支持“共享采样时钟”的同步方式(如下图),而“CAN/LIN”仅支持“共享基准时钟”的同步方式。因此,这两种同步方式都会用到。对于有些复杂项目,两种同步网络会同时存在,本文最后的案例会介绍如何将两种同步网络之间同步起来,实现全通道同步。
不同采集卡之间的同步方法
上面提到,同步的核心就是共享时钟与触发信号。不同采集卡之间的同步设计过程本质上就是使用一些物理方法将他们的时钟线与触发线连接起来的过程。
这部分要分NI的产品线来讲:
我们常用NI的产品线有4个,这里顺便给大家比较一下各个产品线的优劣势:
| USB | PCI/PCIe | cDAQ/cRIO | PXI |
价格 | 低 | 低 | 中 | 很高 |
同步能力 | 中 | 高 | 低 | 高 |
产品丰富度 | 低 | 中 | 中 | 高 |
隔离性能 | 低 | 低 | 高 | 低 |
分布式能力 | 中 | 低 | 高 | 低 |
通道密度 | 中 | 中 | 低 | 高 |
通讯带宽 | 中 | 高 | 中 | 高 |
这里不再展开,如果后面有时间我会单独出一篇NI产品线的详细比较。这里只说一点,对于绝大多数的应用,工控机+PCI采集卡+RTSI同步技术≈PXI系统,这能为项目节省很多成本。RTSI同步技术也是本文的讲述重点。
RTSI同步技术
RTSI同步技术说简单点,就是用了一根带状线缆把不同PCI采集卡之间的一些线连起来,用户可以使用8根自由配置的共享信号线来同步多张PCI采集卡的时钟和触发。
因为RTSI总线只是一根线缆,windows无法自动识别它的存在。插上线缆后需要在NI-MAX里添加:
配置完成后,NI的部分驱动会自动的配置RTSI实现部分同步功能。我们也可以手动使用这些同步总线。综合各方面考虑,我们将RTSI0~3设置成手动路由,4~7设置为自动路由。PXI系统同步总线的使用方法与RTSI一样,只是这些同步总线已经提前放在PXI机箱里面了,不需要你自己插。另外就是PXI的同步总线数量和时钟数量比PCI丰富,然而大多数项目RTSI同步就够了。
案例:PCI平台产品的多种类采集通道同步
本案例使用了三张PCI的采集卡,分别是PCIe-6361(多功能卡),PCIe-6320(多功能卡),PCI-8513/2(CAN卡)。三张卡之间已连接RTSI线缆,线缆的0~3设置为手动路由。
案例的目的是使用1K采样率同步以下通道的采样:
采集卡型号 | 待同步的资源 | 备注 |
PCIe-6361 | ai0,ai2,ai3,ai5 | 时钟源提供者 |
PCIe-6320 | ai0,编码器通道1 |
|
PCI-8513/2 | CAN1的两个信号量 |
|
这个案例包括卡内同步,卡间同步,通讯与AI同步,采样时钟同步网络与基准时钟同步网络之间的同步。
这里先插一段CAN信号量同步的解释。有些项目中会有部分信号来源于CAN通讯,软件同样需要将CAN通讯中的信号量与一些物理量数据在时间轴上对其。但是通讯数据源与信号采集的数据源有天壤之别,最大的不同是,通讯数据源的数据更新速率普遍比信号采集数据源的慢。比如本案例情况下,CAN信号的更新速度是20ms更新一次,而其他信号的更新速度是1ms。传统的对齐方法是通过软件将CAN信号进行“重采样”,把20ms一个点的数据填补成1ms一个点,但这没有同步性可言(windows下的延时非常不稳定)。针对这个问题NI的CAN/LIN系列产品推出了XNET驱动(并不是所有NI的CAN/LIN产品均支持XNET驱动),这个驱动把“重采样”功能放在了采集卡硬件上,可以直接使用“共享基准时钟”的方法与其他通道进行同步,用户在软件中读出来的直接是同步后的波形数据。
因为编码器采集不支持“共享基准时钟同步”,CAN通讯不支持“共享采样时钟同步”本案例的同步思路设计如下:
程序运行了60多秒,整个过程中所有通道的采样点数始终相同,同步方案成功。
模拟量采集卡分为同步卡与非同步卡两类。两者在硬件上的区别在于:同步采集卡的每一个AI采集通道均配备了一块独立专用的ADC转换芯片;而非同步采集卡所有的AI采集通道共享一个ADC转换芯片,通过模拟开关电路进行快速切换实现多路复用。
案例里用的采集卡PCIe-6361和PCIe-6320都是非同步卡,但是我们却用他来进行了同步,本质上是不严谨的。PCIe-6361中需要建立4个AI采集通道,每个通道的采样率为1KHz。当用户设置完成后,采集卡驱动会计算并将实际的ADC芯片的AI转换速率设置为4KHz,其真实的采样时序如下:
也就是说,如果使用的是非同步采集卡,你得到的数据通道与通道之间会有采样率/通道数的时间错位,严格来说这并不是同步数据。但是,大多数的测试项目中对于同步性的要求并没有那么高。如果使用的是同步采集卡,则不存在时间错位的问题。同步采集卡通道间的同步误差主要是由于时钟源到各ADC之间的传输线路长短差异导致的,这几乎可以忽略不计