『7x24小时有问必答』

五、ST代码实现

1. 基于AM600的ST代码

1)滤波器实现原理

1.png
变量定义:
使用LREAL类型定义变量:
<semantics><mrow><mi>a</mi><mo>=</mo><mn>33.9742</mn></mrow><annotation encoding="application/x-tex"></annotation></semantics>,b<mo>=</mo><mo></mo><mn>79.6061</mn><annotation encoding="application/x-tex">,c<mo>=</mo><mn>46.6318</mn></annotation><annotation encoding="application/x-tex">

</annotation>
中间变量:xin(输入),yout(输出),yk(
<semantics><mrow><msub><mi>y</mi><mrow><mi>k</mi><mo></mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex"></annotation></semantics>),ykk(y<msub><mrow><mi>k</mi><mo></mo><mn>2</mn></mrow></msub><annotation encoding="application/x-tex">),xk(x<msub><mrow><mi>k</mi><mo></mo><mn>1</mn></mrow></msub></annotation><annotation encoding="application/x-tex"></annotation><annotation encoding="application/x-tex">),xkk(x<msub><mrow><mi>k</mi><mo></mo><mn>2</mn></mrow></msub></annotation><annotation encoding="application/x-tex"></annotation>
核心算法:
差分方程实现:
<semantics><mrow><mi>y</mi><mi>o</mi><mi>u</mi><mi>t</mi><mo>=</mo><mo stretchy="false">(</mo><mi>x</mi><mi>k</mi><mi>k</mi><mo></mo><mi>a</mi><mo></mo><mi>y</mi><mi>k</mi><mi>k</mi><mo></mo><mi>b</mi><mo></mo><mi>y</mi><mi>k</mi><mo stretchy="false">)</mo><mi mathvariant="normal">/</mi><mi>c</mi></mrow><annotation encoding="application/x-tex"></annotation></semantics>

移位寄存器更新:
<semantics><mrow><mi>x</mi><mi>k</mi><mi>k</mi><mo></mo><mi>x</mi><mi>k</mi></mrow><annotation encoding="application/x-tex"></annotation></semantics>,x<mi>k</mi><mo></mo><mi>x</mi><mi>i</mi><mi>n</mi><annotation encoding="application/x-tex">,ykk←yk,y<mrow><mi>k</mi><mo></mo><mi>y</mi><mi>o</mi><mi>u</mi><mi>t</mi></mrow><annotation encoding="application/x-tex">

</annotation></annotation>
仿真信号生成:
混合信号:
<semantics><mrow><mi>x</mi><mi>i</mi><mi>n</mi><mo>=</mo><mi>cos</mi><mo></mo><mo stretchy="false">(</mo><mn>2</mn><mi>π</mi><mo></mo><mn>10</mn><mo></mo><mi>t</mi><mo stretchy="false">)</mo><mo>+</mo><mi>cos</mi><mo></mo><mo stretchy="false">(</mo><mn>2</mn><mi>π</mi><mo></mo><mn>100</mn><mo></mo><mi>t</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex"></annotation></semantics>

时间步进:t=t+0.001(对应1ms任务周期)

2)参数配置与效果验证

2.png
参数调整:
1Hz截止频率参数:
<semantics><mrow><mi>a</mi><mo>=</mo><mn>10283.3</mn></mrow><annotation encoding="application/x-tex"></annotation></semantics>
<semantics><mrow><mi>b</mi><mo>=</mo><mo></mo><mn>20779.4</mn></mrow><annotation encoding="application/x-tex"></annotation></semantics>
<semantics><mrow><mi>c</mi><mo>=</mo><mn>10492.2</mn></mrow><annotation encoding="application/x-tex"></annotation></semantics>

可有效滤除100Hz信号,保留10Hz信号
阶跃响应测试:
5秒前输入=5,5秒后输入=10
通过条件语句实现:IF t>5 THEN xin:=10 END_IF
验证滤波器对指令信号的平滑处理能力

3)仿真调试方法

3.png

仿真设置:
必须将MainTask周期设置为1ms
在线菜单中选择仿真模式
波形跟踪:
添加需要观察的变量
设置跟踪分辨率与任务周期匹配
启动跟踪后下载运行程序
添加trace功能监视变量(如xin和yout)
配置步骤:
调试观察:
通过波形验证滤波器效果
可实时调整参数观察响应变化

六、知识小结

知识点
核心内容
重点/易混淆点
软件滤波方法
限幅滤波、中位值滤波、算术平均滤波、递推平均滤波、中位值平均滤波、限幅平均滤波、一阶滞后滤波、加权递推平均滤波、消抖滤波、限幅消抖滤波
限幅滤波(克服脉冲干扰,不适用周期性干扰) vs  中位值滤波(适用于缓慢变化信号,不适用快速变化信号)
无过冲低通滤波器设计
基于二阶惯性环节串联,传递函数推导及截止频率计算
截止频率公式fc = 1/(2πT√2),需注意采样周期与时间常数的关系
S域到Z域变换方法
定义法、简单替换法(采样时间远小于系统时间常数时适用)、双线性变换法
简单替换法s ≈ (1 - z⁻¹)/T,需验证采样时间条件
差分方程实现
通过Z变换传递函数整理为差分方程形式:yk = (b·yk-1 + c·xk - a·yk-2)/a
参数计算:ABC系数需根据截止频率和采样周期精确计算
PLC代码实现与仿真
ST语言实现滤波器逻辑,信号生成(混合频率输入)、波形跟踪调试
关键代码:移位寄存器更新、差分方程计算、仿真参数配置(如任务周期1ms)
滤波器效果验证
输入信号(10Hz+100Hz混合)经不同截止频率(15Hz/1Hz)滤波后输出对比
截止频率选择:1Hz时100Hz成分几乎完全滤除,但响应速度降低

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码