4、滑模观测器(SMO)原理:滑模控制基础、滑模面设计、等效控制概念、SMO在反电动势估计中的应用
好,咱们今天聊点硬核的——滑模观测器。说实话,我刚入行那会儿,听到「滑模」两个字就觉得头大。什么变结构、什么抖振,听着就像数学老师出的难题。但后来我发现,这东西在无传感器FOC里,简直是反电动势估计的一把好手。
为什么?因为电机高速运行时,反电动势信号强,好提取。但低速或者零速呢?信号弱得可怜,传统方法基本歇菜。滑模观测器不一样,它不怕模型不准,也不怕参数变化,说白了就是「鲁棒性」极强。我做过一个项目,电机参数因为温度漂了20%,传统观测器已经跑飞了,SMO还稳稳的。
4.1 滑模控制基础
先说说滑模控制是个什么玩意儿。
你想想看,一个系统,你给它设计一个「滑模面」,然后强迫系统的状态往这个面上跑。一旦跑到了,就沿着这个面滑向平衡点。整个过程分成两段:
- 趋近阶段:从初始状态跑到滑模面
- 滑动阶段:在滑模面上滑向目标
核心思想就一句话:用不连续的控制信号,让系统状态乖乖地待在滑模面上。
我记得第一次在仿真里看到这个效果时,还挺震撼的。系统状态就像被一只无形的手推着,不管初始条件怎么变,最终都会落到那条线上。嗯,这里要注意——这种「不连续」的控制,代价就是抖振。
滑模控制的三大要素:
- 滑模面设计:决定系统在滑动阶段的动态特性
- 趋近律设计:决定系统如何到达滑模面
- 控制律设计:产生不连续的控制信号
4.2 滑模面设计
滑模面怎么设计?我个人习惯用线性滑模面,简单、直观、好用。
对于一个二阶系统,滑模面通常写成:
s = c * x1 + x2
其中 x1 是位置误差,x2 是速度误差,c 是一个正常数。这个 c 决定了系统在滑模面上的收敛速度。c 越大,收敛越快,但控制能量也越大。
我踩过一个坑:有次为了追求快速响应,把 c 设得特别大。结果呢?系统抖得跟筛子似的,电流波形全是毛刺。后来我学乖了,c 的选择要兼顾响应速度和抖振抑制,一般取系统带宽的 3~5 倍就差不多了。
对于咱们的电机系统,滑模面通常基于电流误差来设计:
s = i_alpha_hat - i_alpha
说白了,就是让估计电流跟着实际电流跑。一旦两者有偏差,滑模控制就开始工作,强行把偏差拉回来。
4.3 等效控制概念
等效控制这个概念,我当年学的时候绕了好大一个弯。后来发现,其实没那么玄乎。
你想,滑模控制器的输出是高频切换的——一会儿正,一会儿负。但系统实际响应的是这个高频信号的「平均值」。这个平均值,就是等效控制。
数学上怎么理解?假设系统在滑模面上滑动时,s = 0 且 ds/dt = 0。把这两个条件代入系统方程,解出来的控制量,就是等效控制。
我举个例子:
系统方程:dx/dt = f(x) + g(x) * u
滑模面:s = x - x_ref
令 ds/dt = 0 → f(x) + g(x) * u_eq = 0
解得:u_eq = -f(x) / g(x)
这个 u_eq 就是等效控制。它反映了系统在滑模面上的「平均行为」。在SMO里,等效控制信号经过低通滤波后,就得到了我们想要的反电动势估计值。
个人经验:低通滤波器的截止频率很关键。设低了,反电动势相位滞后严重,影响角度估计精度;设高了,抖振滤不干净。我一般取电机电气频率的 2~3 倍,然后根据实际波形微调。
4.4 SMO在反电动势估计中的应用
好了,前面铺垫了这么多,终于到正题了。SMO怎么用在反电动势估计上?
咱们先写出永磁同步电机在 α-β 坐标系下的电流方程:
di_alpha/dt = (-R/L) * i_alpha + (1/L) * (u_alpha - e_alpha)
di_beta/dt = (-R/L) * i_beta + (1/L) * (u_beta - e_beta)
其中 e_alpha 和 e_beta 就是反电动势,包含转子位置信息。我们的目标就是估计出这两个值。
SMO的做法是:构建一个电流观测器,用滑模控制来补偿电流估计误差。观测器方程如下:
di_alpha_hat/dt = (-R/L) * i_alpha_hat + (1/L) * (u_alpha - z_alpha)
di_beta_hat/dt = (-R/L) * i_beta_hat + (1/L) * (u_beta - z_beta)
这里的 z_alpha 和 z_beta 就是滑模控制律,通常取符号函数形式:
z_alpha = k * sign(i_alpha_hat - i_alpha)
z_beta = k * sign(i_beta_hat - i_beta)
当观测器进入滑动模态后,等效控制原理告诉我们:z_alpha 和 z_beta 的低频分量就等于反电动势 e_alpha 和 e_beta。
所以,整个SMO的流程就是:
- 根据电流方程构建观测器
- 用符号函数产生滑模控制律
- 观测器收敛后,对 z 信号进行低通滤波
- 滤波后的信号就是反电动势估计值
- 从反电动势中提取转子位置和速度
避坑指南:我曾经在一个项目里直接用符号函数输出作为反电动势,结果角度估计全是毛刺,电机嗡嗡响。后来才意识到,符号函数的输出是高频切换信号,必须经过低通滤波才能用。另外,符号函数本身会引入抖振,实际工程中常用饱和函数或Sigmoid函数来替代,平滑很多。
最后,从反电动势提取转子位置的方法很简单:
theta_hat = atan2(-e_alpha, e_beta)
注意这里有个负号,是因为反电动势的相位关系。我刚开始做的时候忘了这个负号,结果角度差了90度,电机直接反转。嗯,这种低级错误,犯过一次就记住了。
| 参数 | 典型值 | 说明 |
|---|---|---|
| 滑模增益 k | 50~200 | 越大收敛越快,但抖振也越大 |
| 低通滤波截止频率 | 200~500 Hz | 根据电机转速调整 |
| 饱和函数边界层厚度 | 0.01~0.05 | 越厚抖振越小,但精度下降 |
好了,滑模观测器的原理就讲到这里。下一节咱们聊聊怎么用C语言把SMO跑起来,包括代码实现和参数整定技巧。到时候我会分享一个我调了整整两天的坑——保证让你少走弯路。