news 2026/4/20 14:42:30

线性自抗扰控制:包含线性跟踪微分器、扩张状态观测器及控制律的STM32F1 C代码与实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
线性自抗扰控制:包含线性跟踪微分器、扩张状态观测器及控制律的STM32F1 C代码与实践

线性自抗扰控制 包含:线性跟踪微分器、线性扩张状态观测器、线性状态误差反馈控制律。 C代码、STM32F1代码、keil工程。 直流电机的速度控制、位置控制。 含在线文档,含经典调参方法以及心得。 含简单的。 部署过四旋翼的姿态角速度环, 以及直流电机的速度、位置环。

线性自抗扰控制这玩意儿搞电机控制是真带劲,尤其是面对那些建模困难还总被外界干扰蹂躏的场景。当年在实验室调四轴姿态环被噪声折腾得死去活来时,这货让我看到了光——今天咱就掰开揉碎了聊聊怎么用STM32F103把它玩溜了。

核心三板斧必须得说清楚:跟踪微分器负责把目标信号磨皮柔化,扩张观测器当透视眼看穿系统内部,状态误差反馈做精准打击。举个直流电机速度控制的例子,先上段微分器的C语言实现:

// 线性跟踪微分器参数 float v1 = 0, v2 = 0; float h = 0.001; // 采样周期1ms float r = 100; // 速度因子 void LTD(float target) { float fh = h * r; float d = fh * fh; float c = fh + 2 * sqrt(d); v1 += h * v2; v2 += h * (-r*(v1 - target) - c*v2); }

这段代码在定时器中断里跑起来,实测能把阶跃信号处理得跟德芙似的顺滑。调参时注意r别贪大,超过300容易引发电机抖动,像吃了跳跳糖似的。

扩张观测器才是真正的黑科技,它能看透系统五脏六腑。看这段电机转速观测的代码:

// 电机状态观测结构体 typedef struct { float z1, z2, z3; // 状态+扰动观测 float b0; // 控制增益倒数 float beta1, beta2, beta3; // 观测器带宽 } LESO; void leso_update(LESO *eso, float u, float y) { float e = y - eso->z1; eso->z1 += h * (eso->z2 + eso->beta1*e); eso->z2 += h * (eso->z3 + eso->beta2*e + eso->b0*u); eso->z3 += h * eso->beta3 * e; }

这里beta参数组要遵循带宽法,比如beta1=3w, beta2=3w², beta3=w³,w取20~50效果不错。调试时用JScope看z3的波形,那曲线起伏就是系统受到的实时扰动,比心电图还直观。

状态反馈控制律就简单粗暴了,但参数整定有讲究:

float lsef(float target, LESO *eso) { float u0 = 0.8*(target - eso->z1) + 1.2*(0 - eso->z2); return (u0 - eso->z3) / eso->b0; // 扰动补偿 }

这里的0.8和1.2可不是随便填的数,对应PD参数。有个骚操作是先用Ziegler-Nichols法整定基础参数,再根据抗扰需求加20%裕量。

在四旋翼姿态环实战时,发现角速度环的b0参数必须实测——拿电机空载和带桨情况分别阶跃响应,取两者的中间值。有个坑是当控制周期超过2ms时,观测器带宽得砍半,否则数值会飘得亲妈都不认识。

最后分享个调试神器:用STM32的DAC输出观测变量,接示波器同时看目标值和实际值。比在线调试效率高十倍,亲眼见过有个老哥用这方法半小时调好了双闭环位置控制。

完整工程里有个td_hanlder.c文件藏着宝藏——里面用状态机实现了参数在线整定,运行时通过串口发送"P=1.2"这种指令直接热更新,调参不用重新烧录,实测能省下60%的调试时间。这招在调八旋翼项目时直接让隔壁组研究生眼睛都绿了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 0:02:08

企业利润翻倍的秘密:为什么你的对手都在搭建AI agent

一、AI agent搭建是企业的“节流利器” 在当前市场竞争日益激烈的环境下,降本增效已成为企业生存发展的核心命题,而搭建AI agent正是实现这一目标的关键路径。传统的业务流程中,大量重复性工作占用了员工的大量时间,效率低下且易出…

作者头像 李华
网站建设 2026/4/17 16:36:11

一种评估源网荷储协同接纳新能源能力方法代码 该代码为一两阶段优化代码,第一阶段以综合成本最大求...

一种评估源网荷储协同接纳新能源能力方法代码 该代码为一两阶段优化代码,第一阶段以综合成本最大求解出新能源消纳功率带入到第二阶段模型,二阶段模型还包括无功补偿设备。随着新能源占比逐年提升,电网调度面临新挑战。咱们今天聊个硬核实操—…

作者头像 李华
网站建设 2026/4/19 15:26:43

PCB设计文件终极指南:使用pcb-tools轻松预览和优化制造文件

作为PCB设计初学者,你是否曾被复杂的Gerber文件和Excellon钻孔文件搞得头晕眼花?pcb-tools正是你需要的解决方案——这个强大的Python工具库能够将抽象的制造文件转换为直观的可视化图像,让PCB设计审查变得简单高效。 【免费下载链接】pcb-to…

作者头像 李华
网站建设 2026/4/19 18:16:57

golang格式化打印json

一、背景与作用 在 Go 项目中,经常需要把结构体、map 等数据序列化为 JSON,用于: 打日志(debug) 写文件(配置 / 结果快照) 排查复杂嵌套数据(如告警、监控、Agent 返回) …

作者头像 李华
网站建设 2026/4/15 14:14:30

【(ADC)采样量化和编码】

ADC介绍ADC,其全称是Analog-to-Digital Converter,即模/数转换器,是一种将模拟信号转换为数字信号的电子原件。那么ADC究竟有什么作用呢?ADC转换的主要流程ADC将模拟信号转换为数字量,一般都需要经过三个步骤&#xff…

作者头像 李华