☰
永磁同步电机无传感器控制:滑模观测器原理与Simulink仿真全流程
2026/10/20 7:08:27 网站建设 项目流程

做无速度传感器的永磁同步电机驱动,最大的矛盾就是:控制器必须知道转子位置才能正确换相,但你又不想在轴上多装一个编码器。装编码器不只是贵,还娇贵——振动、油污、高温都会让它失灵,在压缩机、风机、泵类这种严苛工况下面,编码器反而成了系统里最短的那块木板,所以我一直认为无传感器方向不是“省一个件”那么简单,它本质上是把可靠性从机械器件手里夺回到算法手里。

在众多无传感器方案里,滑模观测器是我个人最推荐入门的一条路。它的核心优势就一句话:对被控对象的参数变化不敏感。电机用久了磁钢退磁、绕组发热导致电阻变化,对滑模观测器来说都不是致命问题;而且它实现起来极其亲民,不需要像扩展卡尔曼滤波那样背一堆矩阵公式,更不需要像高频注入那样额外叠加激励和滤波器。这篇文章我就用一套完整的Simulink仿真流程,把滑模位置观测器的原理、建模步骤、参数整定和那些真正会绊你一跤的坑全部讲透,适合刚接触无传感器控制的电气学子、做电机驱动的工程师,以及任何想快速把理论变成可运行代码的人。

1. 为什么是滑模观测器:无传感器控制的前置选择题

1.1 各种无传感器方案的底层逻辑

先理清楚一个共识:永磁同步电机的转子位置信息,隐藏在很多容易被观测的物理量里。定子绕组的反电动势、磁路的饱和特性、甚至是定子电感随转子位置的变化,都能反推出角度。目前主流的方案基本沿着这三条线索展开:

第一条是高频信号注入法。它主动往定子绕组里注入一个高频电压或者电流,然后从响应里提取位置信息。好处是零速和低速都能用,但这套方案只对凸极率明显的电机有效,而且注入信号会带来噪音、额外损耗,实现起来要设计带通滤波器和解调环节,复杂度是几条路里最高的。

第二条是模型参考自适应(MRAS)和扩展卡尔曼滤波(EKF)。它们都是建立电机的数学模型,然后利用实际测量值和模型预测值之间的误差来不断修正内部的状态。理论上精度能做得很好,但EKF的矩阵运算量很大,还要根据噪声特性反复调试Q矩阵和R矩阵,模型参数一变性能就跟着飘,对于工业现场那种“电机参数充满不确定性”的环境,鲁棒性不够友好。

第三条就是本文的主角:滑模观测器。它利用一个非线性切换项,迫使电流观测值强制收敛到实际测量值。一旦收敛,这个切换项的等效值就恰好等于反电动势,而反电动势的方向向量直接指向转子N极,角度就出来了。这条路的鲁棒性来自滑模本身——只要切换增益足够大,系统状态就会被强行“拉”到滑模面上,电机内部参数变化的影响被压缩到几乎可以忽略。实现上只需要电流误差做开关函数,绕开了大量矩阵运算,所以在中高速领域,它几乎是性价比之王。

1.2 滑模观测器适用边界与选型判断

凡事都有代价。滑模观测器吃的反电动势信号,幅值跟转速成正比——低速时反电动势小得可怜,淹没在测量噪声里,观测效果会急剧恶化。所以你在选型的时候心里要有数:如果应用场景需要长期零速或者极低速带满负载运行,比如伺服定位、天车行走机构,老老实实装编码器或选高频注入;如果电机起动后很快进中高速域,比如风机、水泵、压缩机、电驱动离心机,那么滑模观测器就是最优选。

另外还要看清电机类型。表贴式永磁同步电机Ld和Lq接近相等,没有磁阻凸极效应,高频注入基本用不了,滑模观测器反而是最顺手的工具。内置式电机虽然能玩高频注入,但中高速段用滑模也没问题。一句话总结:当你需要在省成本、省空间、抗恶劣环境之间做平衡,且转速范围不太苛刻时,滑模观测器就是那个“闭眼选”的方案。

2. 从PMSM方程到滑模观测器:一步一步把位置算出来

2.1 电机模型中最关键的两个方程

先建立观测器的数学基础。在静止两相坐标系(α-β轴)下,表贴式永磁同步电机的定子电压方程写成这样:

$$ u_{\alpha} = R_s i_{\alpha} + L_s \frac{di_{\alpha}}{dt} + e_{\alpha} $$ $$ u_{\beta} = R_s i_{\beta} + L_s \frac{di_{\beta}}{dt} + e_{\beta} $$

其中反电动势分量就是:

$$ e_{\alpha} = -\psi_f \omega_e \sin\theta_e $$ $$ e_{\beta} = \psi_f \omega_e \cos\theta_e $$

这里 $R_s$ 是定子电阻,$L_s$ 是定子电感,$\psi_f$ 是永磁体磁链,$\omega_e$ 是电角速度,$\theta_e$ 是转子电角度。

一个关键观察:反电动势和电机转速是非线性的(幅值和频率都会变),但归根结底,转子电角度完全包含在 $e_{\alpha}$ 和 $e_{\beta}$ 的比值里。也就是说,把反电动势提取出来,剩下的就是数学题:

$$ \theta_e = -\arctan\left(\frac{e_{\alpha}}{e_{\beta}}\right) $$

这个思路决定了整个观测器结构:先用电流方程构建观测器,再从观测器的“等效控制”里挖出反电动势。

2.2 滑模面的设计与等效控制律

现在开始构造滑模观测器。我选择电流作为状态变量,因为电流是直接可测的,不需要额外传感器。定义电流观测误差为:

$$ \tilde{i}{\alpha} = \hat{i}{\alpha} - i_{\alpha}, \quad \tilde{i}{\beta} = \hat{i}{\beta} - i_{\beta} $$

滑模面取在电流误差的原点:

$$ s_{\alpha} = \tilde{i}{\alpha} = 0, \quad s{\beta} = \tilde{i}_{\beta} = 0 $$

观测器的方程设计为电压方程的复制品,再加上一个不连续的切换项 $k \cdot \mathrm{sign}(\tilde{i})$:

$$ L_s \frac{d\hat{i}{\alpha}}{dt} = -R_s \hat{i}{\alpha} + u_{\alpha} - k \cdot \mathrm{sign}(\hat{i}{\alpha} - i{\alpha}) $$ $$ L_s \frac{d\hat{i}{\beta}}{dt} = -R_s \hat{i}{\beta} + u_{\beta} - k \cdot \mathrm{sign}(\hat{i}{\beta} - i{\beta}) $$

为什么要加这个带符号函数的切换项?这是滑模的精髓所在。当观测电流和实际电流出现偏差时,切换项总是朝“把偏差推回零”的方向使劲,而且是最大力气地推——不管偏差多小,切换项的输出恒定等于增益k,能让强扰动下依然能把状态摁在滑模面上。只要增益k选得足够大(大于反电动势峰值),系统就会被强迫进入滑模运动状态。

进入滑模状态后,电流误差恒等于零,此时观测器方程里的切换项必须在平均意义上平衡掉反电动势。把观测方程减去实际电压方程,在误差动态等于零时,可以得到:

$$ k \cdot \mathrm{sign}(\tilde{i}) \approx e_{\alpha} + \text{高频开关分量} $$

换成人话:切换项里不仅包含反电动势,还叠了一层高频开关噪声。凡是对符号函数做等效控制的人都知道,这个开关噪声幅度很大,直接拿去算位置会导致角度锯齿状乱跳,所以必须做低通滤波。

2.3 从反电动势到电角度:反正切与锁相环之争

滤波之后,得到连续的反电动势估计值 $\hat{e}{\alpha}$, $\hat{e}{\beta}$。最简单的角度提取方式就是直接求反正切:

$$ \hat{\theta}e = -\arctan\left(\frac{\hat{e}{\alpha}}{\hat{e}_{\beta}}\right) $$

我在第一次搭仿真时就这么干的,跑起来发现一个问题:反正切在角度跨过±π边界时会跳变,直接导致观测角度和实际角度之间出现肉眼可见的毛刺;另外,反正切对反电动势增益失调非常敏感——滤波会带来相位延迟,而相位延迟直接转化为角度误差,这是致命的。

所以工程上我更推荐用锁相环(PLL)来追踪角度和角速度。把反电动势写成矢量的形式,PLL锁的就是这个矢量的相位:

$$ \text{误差信号} = -\hat{e}_{\alpha}\cos\hat{\theta}e - \hat{e}{\beta}\sin\hat{\theta}_e $$

当锁相环收敛后,这个误差信号等于零,生成的 $\hat{\theta}_e$ 就是连续平滑的转子电角度,同时PLL内部还能直接给出电角速度 $\hat{\omega}_e$,一举两得。PLL相当于一个二阶追踪器,它天然对高频噪声有抑制作用,而且角度跳变问题在连续追踪结构里被化解了。在实际的Simulink模型里,PLL占据的空间只有几个乘法器和PI调节器,但换来的回报是整个系统的稳定性大幅提升。

3. Simulink模型怎么搭:模块级架构和每一步实操

3.1 总体模型框架与信息流

搭建仿真不是把所有块拖上去连上线就完事。先把信息流理清楚,模型结构自然就清晰了。整个系统的信息流分两层。

核心功率回路:直流母线电压 → 三相逆变器 → PMSM电机 → 电流测量、位置/转速测量。

观测与闭环控制回路:三相电流经过Clarke变换得到α-β电流 → 滑模观测器输出反电动势估计 → PLL提取角度和速度 → 转速环PI生成q轴电流指令 → 电流环PI产生d-q电压指令 → 反变换到α-β电压 → SVPWM发波。

搭建顺序上,我先建好电机和逆变器主回路,把矢量控制跑通(用真实编码器角度),然后再把编码器“摘掉”,接入滑模观测器。这样能分开定位问题:先确保控制逻辑没问题,再验证观测器的问题,不然两团乱麻缠在一起无从排查。

3.2 电机和逆变器参数设置的初始值

在Simulink的Simscape Electrical或标准PMSM模型里,电机参数是必填的。我给一个常用的表贴式电机参数表,后续所有波形都以这套参数为参考。

参数数值说明
直流母线电压311 V三相380V整流后典型值
额定功率750 W小型驱动系统典型值
额定转速1500 rpm机械转速
极对数4对应24个槽的典型配置
定子电阻 $R_s$0.958 Ω常温实测值
d轴电感 $L_d$5.25 mH表贴式电机取Lq一致
q轴电感 $L_q$5.25 mH和Ld相同
永磁体磁链 $\psi_f$0.1827 Wb基频下估算
转动惯量 $J$0.003 kg·m²含负载折算

这些参数可以在你手中任何一台真实电机铭牌和规格书里找到替代值,关键是理解它们对观测器的影响:$R_s$ 和 $L_s$ 直接影响电压方程的积分漂移,磁链 $\psi_f$ 直接决定反电动势的缩放比例。后面整定滑模增益时,要用到的反电动势幅值就是 $\psi_f \omega_e$,数值级别心里要有个数。

SVPWM的载波设为10 kHz,逆变器开关管选理想开关即可,仿真步长设成1e-6秒,控制周期(电流环和观测器)设成1e-4秒。观测器运行频率太低会导致滑模切换出现严重的数字抖动,10kHz是起步要求。

3.3 滑模观测器子模块的内部实现

我在模型里把滑模观测器封装成独立的子系统,方便复用。子系统内部就做三件事:电流误差计算、切换函数产生、电流观测方程积分。核心模块可以直接用Fcn模块写数学表达式,也可以用基本模块搭。我个人更喜欢用Fcn模块配合Unit Delay,因为调试参数时不用改线。

观测方程按前面推导的公式逐项搭。具体到子系统内部,需要从外部输入三相电压的α-β分量(经过Clarke变换)和三相电流的α-β分量。内部计算流程是:

  1. 用上一周期的观测电流 $\hat{i}_{\alpha,\beta}$ 计算电流误差 $\tilde{i}$;
  2. 计算切换项 $k \cdot \mathrm{sign}(\tilde{i})$;
  3. 代入方程 $L_s \frac{d\hat{i}}{dt} = -R_s \hat{i} + u - k \cdot \mathrm{sign}(\tilde{i})$,用一个积分器把 $\hat{i}$ 积出来;
  4. 把切换项输出经过低通滤波得到 $\hat{e}_{\alpha,\beta}$。

切换函数这里我强调一下:我一开始用sign函数,跑出来波形在过零点附近全是毛刺,电流误差收敛后依然会有持续的微小振荡,这就是抖振。后面我把sign改成了饱和函数(saturation),在边界层内用线性比例代替符号切换,抖振立刻被压下去。

$$

z_{\alpha} = \begin{cases} k, & \tilde{i}{\alpha} > \delta \ \frac{k}{\delta}\tilde{i}{\alpha}, & |\tilde{i}{\alpha}| \le \delta \ -k, & \tilde{i}{\alpha} < -\delta \end{cases}

$$

这里 $\delta$ 是边界层厚度,我一般取0.1到0.5之间的数,太小了失去抑抖振效果,太大了会让观测器从“滑模”退化成“简单比例控制”,鲁棒性下降。先给0.2初值,后面看波形微调。

3.4 低通滤波器截止频率为什么不能乱选

滤波环节是滑模观测器里最容易被低估的一环。符号函数的高频分量频率远高于基波,低通滤波器的截至频率必须能滤掉前者,但同时又不能对有用的反电动势基波造成太大的相位延迟。相位延迟意味着观测角度误差,这个误差是随转速变化的:转速越高,基频越高,在固定截止频率下相位滞后越大。

我采用的做法是把低通滤波器截止频率设定为最高基波频率的5到10倍。比如系统最高电频率是100 Hz(1500 rpm 4极电机),截止频率放在500到1000 Hz之间,既能把20kHz-100kHz的开关噪声压下去,又让基波相位滞后控制在可接受的几度以内。另一个工程技巧是:低通滤波器的相位滞后和幅值衰减是已知的,可以在PLL输出位置上做补偿。具体来说,给PLL看的角度误差做一个超前校正,或者干脆在标幺化后对幅值做归一化,这样角度误差就主要剩相位项,方便补偿。

4. 抖振、相位滞后和零速盲区:滑模观测器绕不开的三个坑

4.1 抖振是如何从仿真波形里暴露出来的

说个真实场景。某次我给某个跨平台模拟项目的电机驱动系统调滑模观测器,一开始电流误差收敛正常,But反电动势波形打开一看——上下边缘像电锯锯齿一样密密麻麻全是高频毛刺,PLL输出的转速信号也有明显的周期性抖动。把转速闭环从1500rpm直接掉到1420rpm又弹回来,反复徘徊。

这就是典型抖振。滑模切换的本质是高频开关动作,符号函数在零边界处理想切换,但数字系统里这种切换必然带来高频激励。抖振不只是“波形难看”,它会让观测角度产生高频误差,进而转化成电流环的纹波和额外损耗,严重的甚至会引起机械共振噪音。仿真阶段看不出来,硬件上就是电机发烫、嗡嗡响。

处理抖振的标准方法已经提过——边界层连续化。除此之外,在实际模型里我还会在反电动势进入PLL之前多一级一阶低通滤波。前级过滤高频切换,后级把残余的高频分量进一步衰减。代价是两级滤波器叠加了相位滞后,所以要合理分配带宽:前级截止频率放高一些只管砍开关噪声,后级截止频率按基频倍频设计。

4.2 相位滞后如何影响角度精度:一个补偿实例

低通滤波器带来的相位滞后不是均匀的。它在低频段滞后小,靠近截止频率时滞后陡增。电机从500rpm加速到1500rpm,反电动势基频从33Hz升到100Hz,同样一个500Hz截止频率的滤波器,在100Hz处的相位滞后可能接近10度,对应转子机械角度误差2.5度。这个误差会让电流矢量跟转子磁场轴不对齐,直观表现是同样的负载下电流变大,转矩效率变低。

工程上两个思路解决。一个是把观测器输出经过一个角度补偿环节,公式是:

$$ \theta_{\text{comp}} = \theta_{\text{pll}} + k_{\text{phase}} \cdot \hat{\omega}_e $$

其中 $k_{\text{phase}}$ 代表相位补偿系数,它本质上是低通滤波器相频特性的一阶近似斜率。另一个思路是干脆把PLL的带宽设计的低一点,让PLL内部的误差积分器去主动追踪带相位滞后的信号。PLL带宽越低,它对相位滞后的响应越平滑,但是动态响应也会变慢。我这边的经验是补偿系数做法更直观,至少你知道自己在补偿什么。

4.3 零速和低速下的失稳现象

最后说说低速盲区。滑模观测器依赖反电动势信号,而反电动势幅值跟转速成正比。当转速降到100rpm以下(对于4极电机是6.7Hz电频率),反电动势峰值可能只有几伏,和噪声、死区效应导致的电压误差处于同一量级。这时候切换增益k如果还按中速段的经验值设定,实际处于“切不动”的状态,观测电流开始漂移,观测角度乱转,电流环跟着发散。

仿真里复现这个现象很容易:把目标转速设成50rpm,启动观测器,你会看到估算角度和实际角度之间的误差迅速拉大,最终电流波形变成不可控的乱跳。这不是参数没调好,而是物理规律限制。处理方式有两个:一是采用I/f起动,先把电机拖到一定转速(比如200rpm以上),再无缝切换到滑模观测器闭环;二是在低速段保留编码器作为辅助,到中高速再切无速度传感器模式。工业压缩机领域经常用“起停用编码器,运行用无传感器”的混合模式,本质就是这个原因。

5. 仿真结果怎么评估:波形判据和参数整定经验

5.1 看波形的正确顺序:反电动势、角度误差、转速响应

仿真跑完别急着看转速曲线,按照“底层信号 → 中间信号 → 最终性能”的顺序逐层排查,定位问题会快得多。

第一层看反电动势估计值。$e_{\alpha}$ 和 $e_{\beta}$ 应该是对称的两路正弦波,幅值随转速升高而增加,相位相差90度。如果正弦波上有锯齿状毛刺,说明切换函数边界层设置太小或滤波不足;如果波形不是正弦而是畸变的钟形,说明滑模增益k不足,系统还没进入真正的滑模状态。

第二层看观测角度误差。把观测器的电角度和实际电角度画在同一张图里,或者直接画两者之差。正常运行时稳态角度误差应该控制在5度电角度以内,过零处没有大的跳变毛刺。如果角度误差呈周期性振荡,多半是PLL带宽太高在追开关噪声;如果误差随转速升高单调增大,那是相位滞后补偿没做好。

第三层看转速响应。给定转速阶跃,观测转速应该平滑跟随实际转速,超调量不大,稳态无静差。这里有个细节:转速信号来自PLL输出的 $\hat{\omega}_e$,它天然比实际微分得到的转速平滑,所以转速波形太光滑不一定代表实际电机运行平稳,还需要结合电流波形判断。

5.2 滑模增益k和边界层δ的调参递进流程

调参这件事,很多人上来就把k给到非常大,以为越大越稳。实际上k过大只会让抖振更剧烈,边界层饱和,控制精度反而下降。我每次调参都遵循固定的递进流程:

  1. 初选k。按额定转速下的反电动势峰值再乘以1.5到2的安全系数。例如额定转速1500rpm、4极、磁链0.1827Wb,反电动势峰值为 $\psi_f \omega_e = 0.1827 \times (1500 \times 4 \times 2\pi/60) \approx 114.8$V,k取180V左右。
  2. 带额定负载跑仿真,同时记录电流误差和反电动势波形。如果电流误差等带宽且收敛快速,说明k够了;如果电流误差持续有低频振荡,适当减小k。
  3. 调边界层δ。先取k的2%做初值,然后把δ逐步调大,直到反电动势毛刺明显变少。每次调整后看角度误差是否还在5度以内,如果角度误差变大,说明δ太大了,回退到上一次可行值。
  4. 最后微调PLL带宽。速度环带宽决定动态响应,PLL带宽至少要比速度环高一个数量级,我通常取100到200Hz,这样能够跟踪转速变化而不把噪声引进来。

实测下来这套流程在所有项目里都稳定收敛,没有遇到一次需要推翻重来的情况。

5.3 从仿真到硬件移植的注意事项

仿真跑通只是第一步,硬件上坑还多。第一个坑是控制周期。仿真里把观测器放在1e-4秒的采样周期跑得很顺,但实际单片机里电流环周期可能只有100微秒,滑模观测器作为电流环的一部分也在这个周期里执行。符号函数在离散平台上会产生额外的相位延迟,所以边界层和滤波参数都要按离散设计重新审视。

第二个坑是电压重构。仿真里用的电压指令 $u_{\alpha}$、$u_{\beta}$ 和逆变器实际输出的电压并不完全一致。硬件上通常用直流母线电压和开关占空比重构实际电压,否则电压方程里的u项误差会直接变成反电动势估计误差,尤其在低速高负载工况下非常致命。我的习惯是仿真阶段就把电压重构模型一起搭进去,用开关逻辑重新算电压,而不是直接取指令电压。

第三个坑是启动策略。无传感器系统从静止启动,我前面的章节已经强调过,滑模观测器在零速没有反电动势可用。硬件上我会搭一个开环I/f起动序列,让电流矢量以固定幅值转动,把电机“拖”到观测器能可靠收敛的转速后,再检测观测角度的误差是否小于阈值,条件满足就切入闭环矢量控制。

6. 一个完整的调试案例:1500rpm时位置误差跳变的根因

这里分享一个我曾经处理过的实际问题。某项目给一台额定1500rpm的风机做无传感器控制器,中低速段跑得好好的,一旦转速拉到目标值,编码器对照显示观测角度误差突然从2度跳到8度,电流也开始波动,整个系统像是“感冒”了一样。

排查链路是这样的:先看反电动势估计波形,正弦度正常,幅值对得上;再看PLL输入误差信号,发现它的幅值并没有明显异常。顺着信号流向继续查,最后在低通滤波器前后对比时发现,实际电机在1500rpm下由于反电动势太高,电流环为了抑制电流会输出更高的电压补偿,而逆变器此时已经接近过调制区,SVPWM线性区到了尽头。电压指令在过调制区会发生畸变,也就是指令电压和实际输出电压不再成线性关系,滑模观测器内部电压方程的u项失真,反电动势估计随之被污染。

找到根因就好办。我在观测器前端对指令电压做了过调制补偿,即在检测到调制深度接近极限时,用直流母线电压实测值重构实际电压,同时把切换增益k在高速区做了适当增幅以维持滑模条件。改完以后1500rpm满负载工况下,位置误差重新回落到3度以内,电流纹波也降了一半。

这个案例提醒我两件事:一是仿真不能只看理想波形,过调制这种非线性状态一定要提前建模;二是排查问题要沿着信号流一层层往下查,不要一上来就怀疑某个模块的参数,先确认它输入端给的信号本身是不是已经错了。

最后分享一点个人体会

滑模观测器这套东西,做仿真模型和做硬件是两种难度,但仿真阶段多流汗,硬件阶段就能少流血。我在实践里吃过亏的地方,无非参数初值乱给、滤波器相位不补偿、高速区过调制不建模型这几个环节,这次全盘写出来,就是想让你绕开这些弯路。如果你是在校学生做课题,建议按照我给的参数流程先把仿真跑通,然后试着改几个关键参数(比如把k减小50%、把PLL带宽调大一倍),观察波形的敏感性,这种“折腾”式的学习比只看别人总结的文章管用得多。最后给你一个小技巧:在做仿真纪录时,把每一次参数改动的波形截图和结论存到表格里,形成你自己的调试手册,后续做任何硬件移植或者新电机适配时,翻旧笔记就能快速定位问题,这比任何“万能参数”都可靠。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询