基于 Simulink 的开关量信号滤波处理全流程讲解

开关量信号(如传感器的通断信号、设备启停信号)在工业场景中极易受电磁干扰、触点抖动影响,出现 “误触发” 或 “毛刺”(短时间内反复通断)。若直接用于控制逻辑,可能导致设备误动作(如矿山机器人制动阀错误启停)。本文以 Simulink 为工具,从抖动原理、滤波方法、模型搭建到工程调试,完整讲解开关量信号的滤波处理,覆盖硬件消抖、软件延时、状态机滤波三大典型场景。

一、前置知识:开关量信号的抖动特性

开关量信号的干扰主要表现为触点抖动(如机械开关、接近开关闭合 / 断开时,因触点弹跳产生 10-20ms 的反复通断)和电磁干扰(如强电设备启停时,电磁辐射导致信号误触发)。滤波的核心目标是:在保留真实通断状态的前提下,消除短时干扰信号

二、实操案例 1:软件延时滤波(最常用)

场景定义

模拟矿山机器人制动阀的开关量信号(真实状态:1s 内仅触发 1 次通断,但因触点抖动,通断瞬间产生 5ms 的毛刺),需用软件延时滤波消除毛刺。

步骤 1:搭建 Simulink 基础模型

  1. 新建 Simulink 模型,拖拽核心模块:
    • 信号源Simulink/Sources/Pulse Generator(模拟真实通断信号,Period=2sPulse Width=50%);
       

      Simulink/Sources/Random Number(模拟毛刺干扰,Distribution=UniformMin=0Max=1Sample Time=0.001s);

       

      Simulink/Signal Routing/Switch(叠加真实信号与毛刺,模拟带干扰的开关量)。

    • 滤波模块Simulink/Discrete/Discrete Transfer Fcn(离散传递函数,实现延时逻辑);
       

      Simulink/User-Defined Functions/MATLAB Function(自定义延时函数,更灵活)。

    • 观测模块Simulink/Sinks/Scope(对比滤波前后信号)。
  2. 模块连接逻辑:
     

    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 time0.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:搭建状态机模型

  1. 拖拽核心模块:
    • 信号源:Simulink/Sources/Manual Switch(手动模拟急停开关的按下 / 松开);
    • 状态机:Simulink/Stateflow/Chart(自定义状态转移逻辑);
    • 定时器:Simulink/Discrete/Discrete-Time Integrator(计时保持时间)。
  2. 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:搭建硬件电路模型

  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 电路输出的电压信号,间接反映开关量状态)。
  2. 电路连接: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 仿真验证滤波逻辑,再部署到实际设备中,能大幅减少现场调试时间。

声明:本站内容资源均来源于网友分享及网络公开合法渠道,但我们不对这些内容的观点、描述的准确性负责,也不保证所有信息的原创性、真实性、完整性及即时性。对于本站所含文章或资料的版权问题,如您发现有侵犯版权的情况,请联系我们进行处理。同时,我们提倡将本站内容用于个人学习交流,严禁未授权的商业用途,否则由此产生的法律后果由使用者自行承担。感谢支持!
技术分享电子电气

基于 Simulink 的模拟量信号滤波处理全流程讲解

2025-9-25 14:19:45

三电系统技术分享资料下载

资料下载|新能源汽车电机控制器台架标定资料

2024-8-11 17:41:00

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索