目录
Toggle开关量信号(如传感器的通断信号、设备启停信号)在工业场景中极易受电磁干扰、触点抖动影响,出现 “误触发” 或 “毛刺”(短时间内反复通断)。若直接用于控制逻辑,可能导致设备误动作(如矿山机器人制动阀错误启停)。本文以 Simulink 为工具,从抖动原理、滤波方法、模型搭建到工程调试,完整讲解开关量信号的滤波处理,覆盖硬件消抖、软件延时、状态机滤波三大典型场景。
一、前置知识:开关量信号的抖动特性
开关量信号的干扰主要表现为触点抖动(如机械开关、接近开关闭合 / 断开时,因触点弹跳产生 10-20ms 的反复通断)和电磁干扰(如强电设备启停时,电磁辐射导致信号误触发)。滤波的核心目标是:在保留真实通断状态的前提下,消除短时干扰信号。
二、实操案例 1:软件延时滤波(最常用)
场景定义
模拟矿山机器人制动阀的开关量信号(真实状态:1s 内仅触发 1 次通断,但因触点抖动,通断瞬间产生 5ms 的毛刺),需用软件延时滤波消除毛刺。
步骤 1:搭建 Simulink 基础模型
-
新建 Simulink 模型,拖拽核心模块:
- 信号源:
Simulink/Sources/Pulse Generator
(模拟真实通断信号,Period=2s
,Pulse Width=50%
);Simulink/Sources/Random Number
(模拟毛刺干扰,Distribution=Uniform
,Min=0
,Max=1
,Sample Time=0.001s
);Simulink/Signal Routing/Switch
(叠加真实信号与毛刺,模拟带干扰的开关量)。 - 滤波模块:
Simulink/Discrete/Discrete Transfer Fcn
(离散传递函数,实现延时逻辑);或
Simulink/User-Defined Functions/MATLAB Function
(自定义延时函数,更灵活)。 - 观测模块:
Simulink/Sinks/Scope
(对比滤波前后信号)。
- 信号源:
-
模块连接逻辑:
Pulse Generator(真实信号) + Random Number(毛刺) → Switch → 滤波模块 → Scope
(注:Switch 模块需设置 “毛刺触发时,输出随机 0/1;否则输出真实信号”)
步骤 2:配置延时滤波参数
方法 A:离散传递函数实现(简单延时)
离散延时的传递函数为:
G(z) = z^(-N)
(N 为延时步数,采样时间Ts
,总延时T = N×Ts
)。
若需 5ms 延时(消除 5ms 毛刺),设Ts=0.001s
,则N=5
,传递函数分子为[0,0,0,0,0,1]
(第 6 个元素为 1,对应z^(-5)
),分母为[1]
。
双击Discrete Transfer Fcn
模块,设置:
Numerator
:[0 0 0 0 0 1]
;Denominator
:[1]
;Sample time
:0.001
。
方法 B:MATLAB 函数实现(带防抖逻辑)
编写 MATLAB 函数(
Filter_Switch.m
),实现 “连续 N 次采样为 1 才判定为通,连续 N 次采样为 0 才判定为断”:matlab
function y = Filter_Switch(u)
persistent state cnt;
if isempty(state)
state = 0; % 初始状态为断开
cnt = 0; % 计数初始为0
end
% 防抖参数:连续5次采样一致才切换状态
if u == 1
cnt = cnt + 1;
if cnt >= 5
state = 1;
cnt = 5; % 保持计数上限
end
else
cnt = cnt - 1;
if cnt <= 0
state = 0;
cnt = 0; % 保持计数下限
end
end
y = state;
end
在 Simulink 中拖拽
MATLAB Function
模块,关联上述函数,输入为带干扰的开关量u
,输出为滤波后信号y
。步骤 3:仿真与结果分析
运行仿真后,Scope 中可观察到:
- 滤波前信号:真实通断瞬间有 5ms 的毛刺(快速 0/1 跳变);
- 滤波后信号:毛刺完全被消除,通断状态仅在真实触发时切换,延时约 5ms(与参数一致)。
三、实操案例 2:状态机滤波(复杂逻辑)
场景定义
矿山机器人急停开关信号(需满足:按下时立即触发急停,松开时需保持 200ms 急停状态再释放),需用状态机实现 “触发 – 保持 – 释放” 的滤波逻辑。
步骤 1:搭建状态机模型
-
拖拽核心模块:
- 信号源:
Simulink/Sources/Manual Switch
(手动模拟急停开关的按下 / 松开); - 状态机:
Simulink/Stateflow/Chart
(自定义状态转移逻辑); - 定时器:
Simulink/Discrete/Discrete-Time Integrator
(计时保持时间)。
- 信号源:
-
Stateflow Chart 的状态设计:
- 状态:
Idle
(空闲)、Triggered
(触发急停)、Hold
(保持急停); - 转移条件:
Idle → Triggered
:急停开关按下;Triggered → Hold
:立即进入保持状态,启动定时器;Hold → Idle
:定时器达到 200ms 且急停开关松开。
- 状态:
步骤 2:配置状态机逻辑
打开 Stateflow Chart,编写状态转移与动作:
plaintext
chart Logic
states {
Idle: entry { cnt = 0; }
Triggered: entry { output = 1; }
Hold: entry { timer = 0; }
}
transitions {
[default] -> Idle;
Idle -> Triggered when (switch_input == 1);
Triggered -> Hold;
Hold -> Idle when (timer >= 0.2 && switch_input == 0);
}
actions {
// 定时器更新(采样时间0.01s)
if (in(Hold)) timer = timer + 0.01;
// 输出急停信号
output = (state == Triggered) || (state == Hold);
}
(注:
switch_input
为急停开关输入,output
为滤波后急停信号,timer
为保持时间计数器)步骤 3:仿真结果
手动切换
Manual Switch
模拟急停:- 按下时,
output
立即置 1(触发急停); - 松开时,
output
保持 1 约 200ms 后置 0(保持急停后释放),完全符合工艺需求。
四、实操案例 3:硬件滤波电路模拟(虚实结合)
场景定义
若需模拟RC 硬件滤波电路(如开关量输入端口的 RC 滤波,参数:R=1kΩ,C=10μF)对开关量的滤波效果,可通过 Simscape Electrical 模块实现。
步骤 1:搭建硬件电路模型
-
拖拽 Simscape Electrical 模块:
- 信号源:
Simscape/Sources/DC Voltage Source
(模拟开关量:5V 为通,0V 为断); - 开关:
Simscape/Electrical/Specialized Power Systems/Switches/Universal Bridge
(模拟机械开关的通断); - RC 电路:
Simscape/Electrical/Specialized Power Systems/Elements/Resistor
(R=1kΩ)、Capacitor
(C=10μF); - 观测:
Simscape/Sinks/Scope
(观测 RC 电路输出的电压信号,间接反映开关量状态)。
- 信号源:
-
电路连接:
DC Voltage Source(5V) → Universal Bridge → Resistor(1kΩ) → Capacitor(10μF) → Ground
,Scope 并联在 Capacitor 两端。
步骤 2:仿真与结果
运行仿真,手动控制 Universal Bridge 的通断:
- 开关闭合时,电容电压从 0V 缓慢上升至 5V(充电时间常数
τ=RC=0.01s
,约 3τ=0.03s 后稳定); - 开关断开时,电容电压从 5V 缓慢下降至 0V(放电时间常数同样为 0.01s)。
这种 “缓变电压” 可通过后续的比较器(如
Simulink/Discontinuities/Relay
,阈值设为 2.5V)转换为干净的开关量,实现硬件滤波。
五、滤波方法的选型与工程建议
滤波场景 | 推荐方法 | 优势 | 注意事项 |
---|---|---|---|
普通机械开关(如按钮) | 软件延时滤波(5-20ms) | 简单易实现,无需硬件改动 | 延时时间需匹配抖动时长(需实测) |
安全类信号(如急停) | 状态机滤波 | 可自定义 “触发 – 保持 – 释放” 逻辑 | 状态转移需严谨,避免逻辑漏洞 |
需与硬件电路一致 | 硬件滤波电路模拟 | 虚实结合,精准匹配硬件特性 | 需掌握 Simscape Electrical 使用 |
高频干扰(如电磁辐射) | 软件 + 硬件联合滤波 | 双重保障,抗干扰能力强 | 增加成本与复杂度,需权衡 |
六、总结
开关量信号的滤波核心是 **“时间域的筛选”**:通过延时、计数、状态转移等方式,区分 “真实通断” 与 “短时干扰”。基于 Simulink 的优势在于:
- 无需编写复杂代码,通过模块拖拽即可实现滤波;
- 支持 “软件逻辑” 与 “硬件电路” 的虚实结合仿真;
- 可快速修改参数(如延时时间、状态转移条件),适配不同场景。
工程中建议先通过 Simulink 仿真验证滤波逻辑,再部署到实际设备中,能大幅减少现场调试时间。
声明:本站内容资源均来源于网友分享及网络公开合法渠道,但我们不对这些内容的观点、描述的准确性负责,也不保证所有信息的原创性、真实性、完整性及即时性。对于本站所含文章或资料的版权问题,如您发现有侵犯版权的情况,请联系我们进行处理。同时,我们提倡将本站内容用于个人学习交流,严禁未授权的商业用途,否则由此产生的法律后果由使用者自行承担。感谢支持!