基于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,而不是+8V和0V,则不能采用9223+9401这种方案。因为将-4V的电压施加在9401模块上,但9401只能检测TTL电平,这会导致9401会钳制负电压,使得9223不能获得真实的负的峰值)
那么频率和占空比如何测量呢?我们采用9401数值I/O模块,最大采样率10MHz,TTL电平(信号的高电平为8V,我们做了分压处理,实际加在9401 I/O上的电压为4V左右)。对于428kHz的方波信号,如果要实时监测其频率,9401的10MHz采样率还是远远不够的,其误差大概在5%(即相差一个采样周期),占空比的误差还要更大一些。在这个应用中,客户不需要实时的频率和占空比。以频率的测量为例:
在FPGA中以40MHz运行,对待测信号的上升沿进行计数,1s中内的上升沿个数即信号的频率。
图1. 上升沿计数
占空比的测量采用的是类似的方法:将9401 I/O端测量的结果通过FIFO传到cRIO控制器上,我们以20k的连续数据做为一个单元,20k数据中的布尔值为True的个数与20k的比值即占空比。从图2中看到,频率和占空比的结果非常稳定:
图2. RT端计算频率和占空比
最后RT端将结果通过UDP(AMC)发送到Host端。Host和RT之间的数据交互如图3所示:

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

图5. 项目结构
这里需要注意的是,由于9401和9223同时对同一路信号进行测量,9401模块的输入阻抗较大,所以不会影响到9223模块对峰-峰值的测量的精度。并且9401是数字输入模块,待测方波信号不能有负电压。例如通过信号发生器将峰-峰值3.3V,直流偏置为0的信号接入9401,当信号为-3.3V时,这个负电压加在9401两端,9401会将负电压钳制在-1V以上。这时候用模拟输入模块采集到的负的峰值就不准确了!
相关链接: 1. Asynchronous Message Communication (AMC) Reference Library:
2. TCP&UDP Communication between Host and RT Target:
附件:
Source Code.rar
报告日期: 08/08/2012
最近更新: 11/22/2012
文档编号: 6073KR7K
Other Support Options
Ask the NI Community
Collaborate with other users in our discussion forums
Request Support from an Engineer
A valid service agreement may be required, and support options vary by country.