使用CompactRIO实现LabVIEW FPGAC系列数字更多功能

概述

NI提供20多个C系列数字模块,用于在NI CompactRIO系统中输入和输出数字信号。C系列数字模块具有多种信号电平、速度和通道,因此您可以构建符合规范的系统。数字模块是完成基本任务的绝佳方式,例如监控状态或打开/关闭机器。CompactRIO与DAQmx配合使用时,甚至可以使用DAQmx API实现计数器任务,其优点是编程更简单。但是,使用LabVIEW FPGA可进一步扩展数字模块的功能。

本文档主要介绍7种增强数字模块功能的方法。下列范例演示了如何使用LabVIEW FPGA和FPGA接口进行编程。要使这些范例正常运行,必须针对特定NI CompactRIO机箱进行正确配置。

注:每个C系列数字模块提供不同的定时特性。请确保选择具有满足应用程序需求的定时特性的模块。同时,下列范例文件路径用于LabVIEW 2012。从LabVIEW 2013开始,FPGA范例被更新并放置在新的文件路径中。LabVIEW 2013及更高版本范例的文件路径是与本文范例紧密映射的新范例。

内容

事件计数

事件计数是您可以使用数字模块完成的最简单任务之一。 事件计数是对数字信号的每个上升沿和/或下降沿进行计数的过程,适用于从测量电机到计算流经管道的液体体积的各种应用。使用NI-DAQmx驱动程序进行编程需要使用专用板载计数器或单独的计数器模块执行计数操作,这对于许多应用来说已足够。 或者,您可以使用FPGA创建自己的计数器应用程序,从而增加可实现的计数器数量,而无需额外的计数器模块。 计数器的数量仅取决于系统中的数字线数量和FPGA的大小。

下列范例演示了如何使用LabVIEW FPGA实现事件计数器。该范例使用布尔逻辑判定上升沿或下降沿。该范例位于LabVIEW范例查找器,可找到: 

LabVIEW 2013及更高版本:硬件输入和输出»CompactRIO»信号生成和处理»数字»计数器»边沿计数器»Edge Counter.lvproj。

LabVIEW 2012及更早版本:硬件输入和输出»CompactRIO»FPGA基础»计数器»事件计数器»事件控制,任意边沿 – cRIO.lvproj

配置事件计数VI

  1. 将待计数的线连接至任意数字输入线。
  2. 打开并修改Quad Ctr VI的程序框图,使物理信号的数字输入通道替换A和B布尔控件。
  3. 运行VI编译并在交互式模式下使用。

图1.修改计数外部信号的代码

 

PWM

使用脉宽调制(PWM)输出一系列数字脉冲以控制模拟电路。这些脉冲的长度和频率决定了传输到电路的总功率。PWM信号最常用于控制直流电机,但也广泛用于许多其他应用,例如控制阀门或泵以及调节LED亮度。

组成PWM信号的数字脉冲序列具有固定的频率,并且能够改变脉冲宽度以改变信号的平均功率。脉冲宽度与脉冲周期的比率被称为信号的占空比。例如,如果PWM信号的脉冲周期为10 ms,脉冲宽度为2 ms,则信号的占空比为20%。 通过控制PMW的占空比,可控制模拟电路使用的功率。可使用NI数字模块输出控制PWM或测量现有PWM的占空比。

如CompactRIO控制器支持NI-DAQmx编程,也可在NI-DAQmx中实现PWM任务。但是,由于PWM需要计数器,PWM任务的数量受CompactRIO中板载计数器数量的限制。在FPGA中编程该任务将增加可实现的PWM任务数量。

图2.脉宽调制

下列范例使用循环定时器控制脉冲的高电平和低电平长度。该范例可在范例查找器中查找并导航到:

LabVIEW 2012及更早版本:硬件输入和输出»CompactRIO»FPGA基础»计数器»事件计数器»PWM输出,简单 - cRIO.lvproj 

LabVIEW 2013及更高版本:硬件输入和输出»CompactRIO»信号生成和处理»数字»脉宽调制»PWM生成»PWM Generation.lvproj。

 

配置PWM VI

  1. 将要计数的线连接到任意数字输入线。
  2. 使用要生成PWM的数字输出通道修改PWM输出,简单VI的程序框图。
  3. 运行VI编译并在交互式模式下使用。

图3.修改代码以生成PWM信号

 

编码器

编码器是一种机电设备,用于在医疗设备或工业机器测试等应用中测量运动或位置。大多数编码器使用光学传感器以脉冲序列的形式提供电信号。多个脉冲序列可提供信号的更多信息。数字模块(如NI 9401)可捕捉这些脉冲序列并使用FPGA将信号转换为运动、方向或位置信息。也可使用C系列数字模块仿真编码器的输出,以用于硬件在环(HIL)测试等其他应用。由于编码器适用于多种类型的应用,因此编码器可具有多种不同的形状、大小和输出电平。  NI提供多种数字模块,可与应用程序所需的特定编码器集成。在工业环境中,使用NI 9421读取0-24V信号。在干净的实验室环境中,使用NI 9401读取晶体管间逻辑(TTL)或0 – 5V信号。

同样,如果CompactRIO控制器支持NI-DAQmx编程,也可以在NI-DAQmx中实现编码器任务,但编码器任务的数量将更加有限。在FPGA中编程该任务将增加可用的编码器任务数量。

下列范例演示了如何使用LabVIEW FPGA和CompactRIO系统实现编码器测量。该范例使用布尔逻辑判定AB正交编码器是否旋转以及旋转的方向。范例可在范例查找器中找到,并导航至: 

LabVIEW 2013及更高版本:工具包和模块»FPGA»CompactRIO»信号生成和处理»数字»正交编码»正交解码器»Quadrature Decoder.lvproj。

LabVIEW 2012及更早版本:硬件输入和输出»CompactRIO»FPGA基础»计数器»正交输入»Quad Ctr – cRIO.lvproj

配置编码应用程序

    1. 将A和B信号连接至两条数字线。
    2. 使用物理信号的数字输入通道修改Quadro Ctr的程序框图,替换A和B布尔控件。
    3. 运行VI编译并在交互式模式下使用。

图4.在FPGA中使用布尔逻辑跟踪位置

 

频率

数字信号的频率是周期出现的速率,其中周期是上升沿或下降沿之间的时间,或周期的倒数,单位为赫兹(Hz)。在从确定速度或角速度到光源强度解码的各类应用中,数字信号的频率都极为有用。使用LabVIEW和CompactRIO对C系列数字模块进行编程,将数字信号传输至FPGA,FPGA使用周期解码算法。然后将周期传输至主机应用程序,由主机应用程序推断频率。获取频率后,可将其映射至已知的物理现象。  

与NI-DAQmx相比,在LabVIEW FPGA中对频率输入任务进行编程可增加FPGA输入任务的数量。由于某些频率输入任务需要两个计数器,该功能可能非常有用。

图片.jpg

图5.数字信号的周期和频率

下列范例介绍了如何使用LabVIEW FPGA和CompactRIO系统实现频率测量。该范例使用布尔逻辑确定边沿发生的时间,然后使用FPGA时钟确定脉冲间隔时间。进入LabVIEW,在范例查找器中找到该范例:

LabVIEW 2013及更高版本:硬件输入和输出»CompactRIO»信号生成和处理»数字»周期和相位测量»周期和相位测量.lvproj。

LabVIEW 2012及更早版本:硬件输入和输出»CompactRIO»FPGA基础»计数器»频率测量»计数和周期 – cRIO.lvproj。

配置频率测量

  1. 将感兴趣的信号物理连接至数字线。
  2. 使用物理信号的数字输入通道修改计数和周期(FPGA) VI的程序框图,替换A和B布尔控件。
  3. 运行VI编译并在交互式模式下使用。
     

图6.确定数字信号的周期和频率

关于使用NI硬件进行频率测量的更多信息,请访问https://www.ni.com/en/shop/data-acquisition/measurement-fundamentals/frequency-measurements-how-to-guide.html

数字滤波

环境噪声或工业开关或传感器的机械“抖动”等环境因素可能会使数据采集系统难以接收清晰信号。使用FPGA的CompactRIO系统可实现数字滤波或数字反跳。数字滤波是指在允许信号变化传播到系统的处理方面之前,验证信号在指定时间内是否保持在新的电平。该方法可过滤线路上的毛刺或噪声,减少系统中的非预期行为。

下列范例演示了如何使用布尔逻辑、LabVIEW FPGA和CompactRIO系统滤波数字线。  在滤波后的输入反映变化之前,信号必须保持其新的电平达指定时间。进入LabVIEW,在范例查找器中找到该范例:

LabVIEW 2012及更早版本:硬件输入和输出»CompactRIO»FPGA基础»数字滤波器»数字滤波器-连续-cRIO.lvproj。 

LabVIEW 2013及更高版本:相应的范例已不存在。可将下面的代码片段拖曳至空白VI。

 

滤波数字线

  1. 将信号物理连接至数字线。
  2. 使用物理信号的数字输入通道修改数字滤波器-连续VI的程序框图,替换输入控件。
  3. 运行VI编译并在交互式模式下使用。

图7.使用FPGA滤波数字信号

通信

CompactRIO系统和C系列模块包含多种标准通信协议,从串口和以太网到工业协议(如PROFIBUS和MODBUS),不一而足。但是,这些标准协议与使用不同协议或连接器的设备进行通信的能力可能会受到限制。  CompactRIO系统允许用户使用数字模块和LabVIEW FPGA与这些设备进行通信。

图8.使用LabVIEW和LabVIEW FPGA实现SPI通信协议

关于该协议的深入解释,请参见使用NI LabVIEW理解SPI总线;关于使用LabVIEW FPGA实现SPI总线协议的详细范例,请参见在LabVIEW FPGA中实现SPI通信协议

定义触发

在任何数据采集或控制系统中,触发都是必不可少的功能。触发可用于同步、警报或启动/关闭任务。但是,NI-DAQmx中的标准触发函数不提供自定义功能,例如,使用多个输入触发或触发一个边沿或触发两个边沿。  使用FPGA和CompactRIO系统创建自定义触发应用程序。

关于如何仅在数字模式发生时生成触发的范例,请参见创建触发和计数器(FPGA模块)。 

图9.仅当发生数字模式时生成触发

步骤