数字线上的去抖动滤波器(Debouncing Filter)

|什么是去抖动?

在数字信号中,尤其是由机械开关或其他不稳定信号源产生的信号,会出现快速的抖动(bounce),即信号在高低电平之间迅速来回波动。这样的信号如果直接作为计数器或触发输入,会引起误触发或错误计数。NI在大多数字IO功能中,提供了去抖动滤波器,它是一个数字滤波机制,可以根据设定的时间窗口来忽略掉那些“太短暂”的脉冲。

这种机制可解决的典型的问题,如:信号中的瞬态脉冲干扰导致了计数测量和位置测量的不准确。

|基本原理

对于NI具备数字IO的采集设备,如PXIe-6368,我们可以在每个数字线上比如PFI、RTSI、PXI_STAR 或 PXIe_DSTAR<A,B> 信号 上启用一个可编程去抖动滤波器(Debouncing Filter)。当滤波器被启用后,设备会在滤波时钟的每个上升沿对输入信号进行采样。该时钟一般是由板载晶振生成。

以下是一个输入信号从低电平到高电平的跳变示例(高到低的跳变工作原理类似):

假设某数字输入端在长时间保持低电平后变为高电平,但在低变高电平的过程中产生了多次毛刺(抖动)。

数字线上的去抖动滤波器(Debouncing Filter)


只有当滤波器时钟连续 N 次采样都检测到高电平时,此跳变/触发才会被“确认”,并传输到采集模块的后续电路进行处理。
这个 N 的值 取决于当前所设置的滤波器级别,如下表所示:

表 1:滤波器设置说明(不同系列请以使用手册为准)

滤波器设置滤波时钟频率N(通过信号所需的滤波器时钟数)可通过滤波的最短脉宽确保不能通过滤波器的最长脉宽
None(无)
90 ns(短)100 MHz990 ns80 ns
5.12 µs(中)100 MHz5125.12 µs5.11 µs
2.56 ms(长)100 kHz2562.56 ms2.55 ms
自定义用户设定NN / 时基(N – 1) / 时基

每个输入端口的滤波器设置可以独立配置。设备上电时,所有滤波器默认禁用

下图展示了一个输入信号从低跳变到高,且使用自定义滤波器(N = 5)时的滤波行为示意图。

数字线上的去抖动滤波器(Debouncing Filter)

启用滤波器可能会在输入信号上引入抖动(jitter),其最大值为滤波时钟周期的一个周期

|编程实现

当数字IO被设置为通过去抖动滤波后,只有在滤波器时钟的两个连续上升沿中间时段,信号的改变保持在一个稳定的状态,这个改变才会被传输。 例如,如果滤波器参数设置为500ns, 所有超过500ns宽的脉冲信号可以通过滤波器,而脉冲宽度小于250ns的信号将被阻隔。

在 LabVIEW 中访问这些属性的方法如下:
1. 在程序框图中放置一个 DAQmx 通道属性节点(DAQmx Channel Property Node)
位置:Functions >> All Functions >> NI Measurements >> DAQmx – Data Acquisition

2. 展开该属性节点,使其包含 4 个属性

设置第一个属性:
选择:Digital Input >> Digital Filter >> Enable
→ 给该属性连接一个 False,表示默认关闭所有线路的滤波器(这样你可以仅对特定线路启用滤波)

3. 设置第二个属性:
选择:Digital Input >> Digital Filter >> Minimum Pulse Width
→ 在这里设置滤波器的最小脉宽(单位为秒)

4. 设置第三个属性:
选择:Active Channels
→ 指定你希望启用滤波器的 具体通道名称(例如 Dev1/port0/line0)

5. 设置第四个属性:
选择:Digital Input >> Digital Filter >> Enable
此时将对你在“Active Channels”中选中的线路启用滤波器。

数字线上的去抖动滤波器(Debouncing Filter)

C语言:

DAQmxSetDIDigFltrEnable(TaskHandle taskHandle, const char channel[], bool32 *data);
DAQmxSetDIDigFltrMinPulseWidth(TaskHandle taskHandle, const char channel[], float64 data);

Python:

Task = nidaqmx.Task() # Create a Task reference
config = Task.di_channels.add_di_chan('Dev1/port0/line0:7') # Add a DI channel
config.di_dig_fltr_enable = True # Enable the digital filter
config.di_dig_fltr_min_pulse_width = minimum_pw_value # Set the min pulse width value

 Refernence:

  1. NI, Debounce Digital Filtering With NI 62xx M Series and cDAQ
  2. NI, Enable Digital Filtering on an NI Multifunction DAQ Device

联系我们

(+86) 028-60707266

sales@zhenzetech.com.cn

微信