LabVIEW FPGA番外篇:实验66-FPGA数字去抖滤波器基本原理与编程实现

1、概述
本节实验给出的FPGA示例VI展示了如何在FPGA中使用LabVIEW编程实现数字去抖动滤波器。当继电器或机械开关闭合时或者编码器受到电磁干扰时,这个FPGA去抖数字滤波器程序可以非常方便的清除可能包含的额外脉冲(反弹)等机械或者电磁噪声,消除抖动,提高输入信号的准确性,便于后续算法处理。
2、操作理论
在工业或其他电磁噪声环境中采集数字信号时,每当信号改变状态时,通常会看到采集的数字信号出现一些跳变翻转(反弹)。这些反弹显示为接近数字信号实际转换的额外脉冲。在处理脉冲计数的数字信号(例如正交编码值)时,最好在处理信号之前避免这些反弹或消除它们。这种类型的过滤或处理通常称为去抖动,因为它可以消除数字信号中的反弹。
下面的图1显示了一个典型的数字信号,带有一些反弹和相应的采样数据。Unfiltered Sampled 行显示的数据由数字输入通道采集,该通道以定义的采样时钟对信号进行采样。注意:在采样时钟的下一个时钟周期之前,未过滤的采样数据不会看到信号的变化。这意味着根本不会观察到两个时钟周期之间任何非常短的脉冲。在采样数据中可以观察到在一个时钟周期内发生的信号中的短反弹。

数字信号去抖动的常用算法是处理原始(未过滤)采样数据,并且仅在采样数据在定义的时间段内保持不变时才通过状态变化。任何比滤波器时间常数短的脉冲都将被移除并且不会通过。图2显示了相同的信号,即使用两个采样时钟周期的时间常数的原始(未滤波)采样数据和去抖动(滤波)数据。为了避免在我们的信号中计算额外的脉冲,在状态变化传递到输出之前,通过寻找在至少两个时钟周期内保持相同状态的脉冲来过滤采样数据。使用去抖动过滤器去除未过滤采样数据中存在的额外短脉冲(反弹)。

3、LabVIEW FPGA 实现
使用LabVIEW FPGA可以很容易地实现这种去抖动算法。图3中显示的算法将新输入信号与当前输出信号进行比较,并寻找状态变化。一旦输入信号改变状态,算法就会开始从0开始递增计数器,并且只要输入与输出保持不同,就会继续计数。当计数器超过限制(过滤时间常数-'Cycles to Filter')时,它会将新的输入值传递给输出并将计数器重置为0。如果在计数器超过时间常数之前输入更改回原始状态,计数器重置为 0,算法等待输入信号再次改变状态。

FPGA去抖动过滤器 VI设置为可重入,以便它可以并行用于多个数字输入信号。LabVIEW FPGA程序框图里面的每个VI副本都会在FPGA上生成一个单独的算法副本。本节实验提供的LabVIEW FPGA项目浏览器,如图4所示,包括FPGA去抖动过滤器子VI和一个展示如何使用此过滤器的范例程序,双击打开,对应的程序框图,如图5所示。

