3. 位置观测器基础:滑模观测器(SMO)与龙伯格观测器的原理对比

做无感启动,最核心的问题就是:转子在哪儿?

电机堵转时,反电动势为零,你没法直接算位置。等转起来,反电动势出来了,你又得从电压电流里把位置“观测”出来。这就是位置观测器干的事。

我入行那会儿,市面上主流的方案就两个:滑模观测器(SMO)和龙伯格观测器。很多人觉得SMO是“野路子”,龙伯格才是正统。其实各有各的脾气。今天我就把这两个家伙的底裤扒干净,讲讲它们到底怎么工作的,以及我在项目里踩过的坑。

3.1 为什么需要观测器?

说白了,我们手头只有电流采样和母线电压。转子的位置和速度,是藏在背后的状态量。你没法直接拿万用表去量。

观测器的本质就是:建一个电机模型,让模型跟着真实电机跑,模型内部的状态(位置、速度)就是我们要的估计值。

嗯,这里要注意:模型跑得准不准,取决于你用什么方式去“纠正”模型的误差。SMO和龙伯格的区别,就在这个纠正方式上。

核心思想: 观测器 = 电机数学模型 + 误差反馈校正。

3.2 滑模观测器(SMO)—— 简单粗暴,但抖得厉害

SMO的思路很直接:我不管你模型误差有多大,我强行用一个开关信号,把误差“拍”到零。

你想想看,这就像你开车,不管路有多弯,你方向盘直接打到底,硬把车掰回车道。这就是“滑模”的脾气——不连续、高增益、鲁棒性强。

3.2.1 SMO的工作原理

在αβ坐标系下,PMSM的电流方程可以写成:

diα/dt = (-Rs/Ls)*iα + (1/Ls)*vα - (1/Ls)*eα
diβ/dt = (-Rs/Ls)*iβ + (1/Ls)*vβ - (1/Ls)*eβ

其中 eα、eβ 就是反电动势,里面藏着转子位置信息。

SMO的做法是:构造一个电流观测器,然后用符号函数(sign)作为切换控制律:

dîα/dt = (-Rs/Ls)*îα + (1/Ls)*vα - (Ksw/Ls)*sign(îα - iα)
dîβ/dt = (-Rs/Ls)*îβ + (1/Ls)*vβ - (Ksw/Ls)*sign(îβ - iβ)

当观测电流追上实际电流时,切换项的平均值就等于反电动势。然后从反电动势里提取位置:

θ̂ = atan2(-eα, eβ)

我的经验: 符号函数会产生高频抖振。我早期一个项目里,SMO出来的位置信号毛刺特别多,直接导致速度环震荡。后来我换成了饱和函数(sat)或者Sigmoid函数做准滑模,抖振明显改善。

3.2.2 SMO的优缺点

优点 缺点
对参数误差不敏感(鲁棒性强) 输出存在高频抖振,需要低通滤波
算法简单,计算量小 滤波会引入相位延迟,影响低速性能
容易在低成本MCU上实现 低速时反电动势信噪比低,容易失效

避坑指南: 我曾经在20W的小风机项目里用SMO,结果启动时因为反电动势太小,观测器直接“飞”了。后来加了I/F强拖启动,等转速上来再切SMO,才算搞定。

3.3 龙伯格观测器 —— 平滑细腻,但依赖模型

龙伯格观测器走的是另一条路:它用线性反馈增益,把观测误差“柔柔地”拉回来。不像SMO那么暴力,它更像一个PID调节器——误差大就多拉一点,误差小就少拉一点。

3.3.1 龙伯格观测器的工作原理

同样基于电流方程,龙伯格观测器把反电动势也当作状态变量来估计。它的结构是:

dîα/dt = (-Rs/Ls)*îα + (1/Ls)*vα - (1/Ls)*êα + g1*(iα - îα)
dîβ/dt = (-Rs/Ls)*îβ + (1/Ls)*vβ - (1/Ls)*êβ + g1*(iβ - îβ)
dêα/dt = g2*(iα - îα)
dêβ/dt = g2*(iβ - îβ)

这里的 g1、g2 就是反馈增益。通过极点配置,你可以让观测器的收敛速度比电机本身快3~5倍。

位置提取方式和SMO一样:

θ̂ = atan2(-êα, êβ)

关键区别: SMO用开关函数(不连续)做校正,龙伯格用线性增益(连续)做校正。一个刚,一个柔。

3.3.2 龙伯格观测器的优缺点

优点 缺点
输出平滑,无需额外滤波 对电机参数(Rs、Ls)敏感
低速性能优于SMO 算法稍复杂,计算量略大
相位延迟小,动态响应快 参数不准时,观测误差会发散

我的建议: 如果你做的是伺服驱动器,对低速平稳性要求高,龙伯格是更好的选择。但记得要做在线参数辨识,否则Rs随温度一变,观测器就偏了。

3.4 核心对比:SMO vs 龙伯格

我把两个观测器的核心差异整理成一张表,方便你对照选型:

对比维度 滑模观测器(SMO) 龙伯格观测器
校正方式 不连续切换(符号函数) 连续线性反馈
参数敏感性 低(鲁棒性强) 高(依赖Rs、Ls精度)
输出质量 有抖振,需滤波 平滑,无需滤波
低速性能 差(反电动势弱) 较好
计算量 小 中等
适用场景 风机、泵类、低成本方案 伺服、机器人、高性能驱动

3.5 一张图看懂两种观测器

下面这张SVG图,把SMO和龙伯格的结构差异画得清清楚楚:

滑模观测器 vs 龙伯格观测器 结构对比 滑模观测器(SMO) 电流观测器 符号函数切换(sign) 反电动势提取(低通滤波) 位置计算:atan2(-eα, eβ) 龙伯格观测器 电流 + 反电动势状态观测器 线性反馈增益(g1, g2) 直接输出反电动势估计值 位置计算:atan2(-êα, êβ) 核心差异 SMO:不连续切换 → 抖振大 → 需滤波 → 鲁棒性强 龙伯格:连续反馈 → 输出平滑 → 依赖参数精度

3.6 实际项目中的选择建议

说了这么多理论,到底怎么选?我个人的经验是这样的:

  • 如果你做的是几百瓦的小风机、水泵,成本敏感,MCU主频低,那就用SMO。记得加I/F强拖启动,转速起来后再切观测器。
  • 如果你做的是伺服驱动器、机器人关节,对低速平稳性和动态响应有要求,那就上龙伯格。但一定要做参数辨识,或者用自适应龙伯格。
  • 如果你既想要鲁棒性,又想要平滑输出,可以考虑“滑模+龙伯格”的混合方案——低速用龙伯格,高速切SMO。我在一个50W的BLDC项目里试过,效果不错。

曾经踩过的坑: 有一次我把SMO的切换增益Ksw设得太大,结果观测器直接自激振荡,电流波形像锯齿一样。后来我把Ksw设为反电动势幅值的1.2倍,才稳定下来。记住:增益不是越大越好。

3.7 小结

SMO和龙伯格,没有绝对的好坏。SMO像一把砍刀,简单直接,但需要你懂得怎么磨掉毛刺;龙伯格像一把手术刀,精细准确,但需要你懂得怎么保养(参数校准)。

做无感启动,第一步就是选对观测器。选对了,后面的弱磁、MTPA才有意义。选错了,你连转都转不起来。