记一次无感 FOC (龙伯格) 调参填坑
文章目录
- 1. 半闭环测试
- 2. 踩坑与破局
- 3. 灵魂拷问:为什么有感随便跑,无感一闭环就发飙?
前言
最近在用 Simulink 搭小电机的无感 FOC(龙伯格观测器)。一开始极度崩溃:明明开环跑得好好的,一接上速度环闭环,电机直接跟不上目标。
1. 半闭环测试
一闭环就炸,很容易怀疑是龙伯格观测器算错了。为了锁定嫌疑人,我先做了个“半闭环测试”:
操作: 断开速度环,直接给电流环输入一个恒定的 Iq 目标值(比如 0.5A)。
结果: 电流稳稳跟上,Park 变换的 Id 死死贴在 0 轴上,龙伯格估算的角度和真实角度完美重合。
结论: 底层模型、SVPWM、龙伯格核心逻辑 100% 没问题!罪魁祸首全在闭环 PI 参数上。
2. 踩坑与破局
在发现龙伯格观测器(半闭环)没有问题后,我开始重新闭环,准备大干一场调节速度环的 PI。
第一阶段:死磕速度环,系统狂抖
我的第一反应极其自然:速度跟不上,那就加大速度环的参数呗!
结果一加大速度环的 P,电机直接开始高频狂抖,波形像宽面条一样炸裂。折腾了半天我发现,在这个状态下,速度环的参数怎么调都是死胡同。
第二阶段:顿悟锁相环 (PLL),用“迟钝”换“纯净”
我回过头去看观测器,发现算出来的角度在疯狂发散。这时候我才意识到,我之前给的 PLL 参数太大了(P 给到了两百多)!
- 致命误区:很多人以为 PLL 参数大反应快是好事,其实不然!P=200+ 导致带宽极大,它对反电动势里的 PWM 开关噪声和采样毛刺极度敏感。它毫无延迟地把所有噪声全吃进去了,吐出来的是一把全是毛刺的速度信号。
- 对策:我果断把 PLL 的 P 砍到了
15,I 砍到了250。虽然这在物理上引入了一丁点相位延迟,但这层延迟就像一堵防波堤,完美挡住了高频噪声。调整完后,波形终于勉强维持住了,不再全屏乱飞。
第三阶段:幕后黑手竟是电流环
但是,死胡同又来了:角度稳住了,但我接着去微调速度环的 PI,发现还是没用!不管怎么调,速度总是像挤牙膏一样,死活贴不上目标线,一直再震荡。
这时候我才恍然大悟:外环(速度)发神经且无力,真正的病根在最底层的内环(电流)!回头一查,发现我电流环的 P 居然给到了 3 甚至 10(这是之前有感开环测出来的理想参数)。
- 原因拆解:小电机的电感极小,P 给到 3 就会引发“大炮轰蚊子”效应。只要有一丁点误差,控制器就瞬间拉满极限电压。底层电流环一直在暗中疯狂震荡,导致系统永远处于“带病狂奔”的虚脱状态,外面速度环想发力也发不出来。
终极对策:降维打击
放弃死磕外环!我果断把电流环 P 直接砍到1甚至0.1,I 设为20。奇迹出现了:底层电流瞬间平滑,变成了极其听话的“透明执行器”。之前一闭环就炸、怎么调都跟不上的问题,直接被连根拔起!
3. 灵魂拷问:为什么有感随便跑,无感一闭环就发飙?
在把电流环压下来、波形终于稳住的那一刻,我脑子里一直有个巨大的疑问:之前带编码器(有感)或者直接用理想角度跑的时候,我电流环 P 给到 10 甚至 30,电机都像打了鸡血一样跑得飞起。凭什么一换成龙伯格无感观测器,P 才给到 3 就炸得六亲不认了?
1. 有感状态(上帝视角,绝对纯净)
真实的硬件编码器(或理想角度)就像一面“完美的镜子”。它反馈的是纯机械物理量,没有任何电气延迟,也绝不掺杂 PWM 开关噪声。
在这种状态下,哪怕你电流环 P 给得特别大,把底层的电流搞出了一点毛刺和震荡,编码器也根本不在乎,它依然会稳稳地告诉你最真实的转子角度。反馈是绝对干净的,所以系统容错率极高,“你强任你强”。
2. 无感状态(左脚踩右脚的死亡螺旋)
无感观测器其实是个“瞎子”,它没有任何外部传感器,全靠采集电机线圈里的相电流和电压来反推角度。这就带来了一个致命的问题:你的控制信号和测量信号,被死死绑在了同一根线上!
一旦你在无感状态下把电流环 P 给大了,就会发生极其恐怖的连锁反应:
- P 太大→ \rightarrow→产生电流微小震荡(电噪声)。
- 观测器吃进带噪声的电流→ \rightarrow→算出一个发抖的错误角度。
- 发抖的角度被送给 Park 变换→ \rightarrow→拆分出严重错误的 Id 和 Iq。
- 巨大的 P 看到错误的 Iq→ \rightarrow→瞬间输出更暴力的极限电压去纠正。
- 结果→ \rightarrow→制造了更大的电流震荡。
