基于cRIO平台实现428kHz方波信号测量



主要软件: LabVIEW Development Systems>>LabVIEW Professional Development System
主要软件版本: 2011
主要软件修正版本: N/A
次要软件: LabVIEW Modules>>LabVIEW Real-Time Module
硬件: CompactRIO>>Controllers>>cRIO-9025

问题:
在这个项目中,我们需要监测428kHz方波信号的频率、占空比、峰-峰值。如果要测量峰-峰值,则必须将待测信号做为模拟信号,通过模拟输入模块实现。但是NI cRIO平台下最高采样率只有1M (9223),该如何实现频率、占空比和峰-峰值的测量。


解答:
我们需要监测的信号大概在428kHz,低电平为0V,高电平为8V。由于不需要测量整个信号的完整波形,因此1MHz的采样率是可以完成方波信号的峰值测量(注意,要使9223达到1MHz的采样率,9223必须使用User-Controller IO Sampling模式,这个请参考LabVIEW范例NI 9222 User-Controlled IO Sampling.lvproj,输入9223关键词)。当然如果信号本身偶尔会出现一些毛刺或尖峰,根据现场情况有可能不容易捕捉到。(如果信号的峰-峰值为+4V-4V,而不是+8V0V,则不能采用9223+9401这种方案。因为将-4V的电压施加在9401模块上,但9401只能检测TTL电平,这会导致9401会钳制负电压,使得9223不能获得真实的负的峰值)
那么频率和占空比如何测量呢?我们采用9401数值I/O模块,最大采样率10MHzTTL电平(信号的高电平为8V,我们做了分压处理,实际加在9401 I/O上的电压为4V左右)。对于428kHz的方波信号,如果要实时监测其频率,940110MHz采样率还是远远不够的,其误差大概在5%(即相差一个采样周期),占空比的误差还要更大一些。在这个应用中,客户不需要实时的频率和占空比。以频率的测量为例:
FPGA中以40MHz运行,对待测信号的上升沿进行计数,1s中内的上升沿个数即信号的频率。
1. 上升沿计数
 
占空比的测量采用的是类似的方法:将9401 I/O端测量的结果通过FIFO传到cRIO控制器上,我们以20k的连续数据做为一个单元,20k数据中的布尔值为True的个数与20k的比值即占空比。从图2中看到,频率和占空比的结果非常稳定:
2. RT端计算频率和占空比
 
最后RT端将结果通过UDPAMC)发送到Host端。HostRT之间的数据交互如图3所示:

3. HostRT端数据交互的原理图
 
4. Host端显示测量结果
 
项目结构:

5. 项目结构
 
这里需要注意的是,由于94019223同时对同一路信号进行测量,9401模块的输入阻抗较大,所以不会影响到9223模块对峰-峰值的测量的精度。并且9401是数字输入模块,待测方波信号不能有负电压。例如通过信号发生器将峰-峰值3.3V,直流偏置为0的信号接入9401,当信号为-3.3V时,这个负电压加在9401两端,9401会将负电压钳制在-1V以上。这时候用模拟输入模块采集到的负的峰值就不准确了!


相关链接:
1.       Asynchronous Message Communication (AMC) Reference Library:
http://zone.ni.com/devzone/cda/epd/p/id/6091
2.       TCP&UDP Communication between Host and RT Target:
http://digital.ni.com/public.nsf/allkb/ADE4F17364F0E65586257A55001D0C57?OpenDocument


附件:

Source Code.rar






报告日期: 08/08/2012
最近更新: 11/22/2012
文档编号: 6073KR7K