
电动机控制这个圈子里无感FOC方案里最常被提到的名字滑模观测器绝对排前三。它不依赖霍尔、编码器这类物理位置传感器光靠相电流和母线电压就能把转子位置和转速估出来压缩机、电动自行车、风机、无人机电调里都在跑。这篇文章把滑模观测器的原理推导从头到尾过一遍把每一步都知道为什么顺带聊聊工程实现和调试坑。1. 无感FOC里为什么需要滑模观测器1.1 没有位置传感器怎么知道转子在哪磁场定向控制FOC的前提就是实时知道转子磁极的电气角度。有了这个角度Id轴电流和Iq轴电流才能正确解耦SVPWM输出才能把电压矢量送到该送的位置。传统做法是装霍尔、增量编码器或旋变成本高、体积大防水防油防震的要求也高。家用空调压缩机、两轮车电机、高速风机这类场景装上编码器不但贵高温高湿环境里故障率还高于是无感方案成了刚需。但“没有传感器”等于不给眼睛怎么知道转子在哪物理上唯一可靠的信息来源就是电机本身在运行中产生的反电动势Back EMF。转子转得越快反电动势越大而且它的相位和转子位置有严格对应关系。问题在于正常运行时反电动势是藏在端电压和电流背后的没办法拿万用表直接量。滑模观测器做的事就是通过电流误差构造一个非线性闭环把藏在电机方程里的反电动势“逼”出来。反电动势出来了转子角度自然也就出来了。1.2 反电动势法为什么是主流反电动势法在无感FOC里之所以是主流逻辑很简单数学模型成熟硬件开销小中高速段性能足够好。以表贴式永磁同步电机为例定子电压方程在静止两相坐标系下写出来反电动势分量包含转子位置和速度的全部信息$$ u_{\alpha} R_s i_{\alpha} L_s \frac{d i_{\alpha}}{dt} e_{\alpha} $$$$ u_{\beta} R_s i_{\beta} L_s \frac{d i_{\beta}}{dt} e_{\beta} $$其中反电动势表达式为$$ e_{\alpha} -\psi_f \omega_e \sin\theta_e $$$$ e_{\beta} \psi_f \omega_e \cos\theta_e $$也就是说只要能估计出 eα 和 eβ转子位置角度直接就是$$ \theta_e \operatorname{atan2}(-e_{\alpha}, e_{\beta}) $$这个方法在中高速段非常好用因为它简洁、直观、几乎不需要额外硬件。但反电动势法有个天生的短板零速和极低速时反电动势幅值太小信噪比差难以提取位置。所以工业上普遍的做法是低速段用高频注入或者I/F强拖中高速段切到反电动势类观测器。滑模观测器就是反电动势类方案里应用最广、性价比最高的一种。1.3 滑模观测器相比其他方案的优势无感位置估计的候选方案有好几个龙贝格观测器、扩展卡尔曼滤波EKF、模型参考自适应MRAS、滑模观测器各有利弊。方案计算量鲁棒性调参难度适用场景龙贝格观测器低中对模型参数敏感低参数准确、工况稳定的场合扩展卡尔曼滤波高较好但有噪声假设前提高Q/R矩阵难调对动态性能要求高、算力富余MRAS中中上中自适应需求明确的场合滑模观测器低高对参数扰动不敏感中低压缩机、电动两轮车、风机等大批量低成本场合滑模观测器最大的优势是鲁棒性。电机在运行中电阻会随温度漂移电感会随电流饱和变化龙贝格这类线性观测器对参数误差比较敏感参数一偏估计角度就偏角度偏了电流环就乱严重时直接过流保护。滑模观测器通过高频切换项把系统“压”在滑模面上只要切换增益选得够外部扰动和参数偏差的影响会被强行抑制这个特性在批量产品上特别有用因为每台电机的参数不可能完全一样。2. 滑模控制的核心概念“滑”在哪2.1 滑模面的选择滑模控制这个“滑”字很多人理解不透。说个小类比你把一个球放在斜面底部用力往上滚球滚到顶会掉回面内整个过程被“约束”在斜面上滑动。滑模控制本质上就是用一种不连续的强反馈把系统状态强制拖到一个事先设计好的“面”上然后让状态沿着这个面滑到平衡点。这个“面”就是滑模面。对滑模观测器来说我们的目标是把电流估计误差收敛到零所以滑模面直接选成电流估计误差$$ s_{\alpha} \hat{i}{\alpha} - i{\alpha} $$$$ s_{\beta} \hat{i}{\beta} - i{\beta} $$当 sα、sβ 被强制收敛到0时意味着观测器的电流已经完全跟上了真实电流。在这个状态下观测器为了维持这种“跟随”所付出的控制量恰好就是被隐藏起来的反电动势。这个思路是整篇推导的灵魂后面会反复用到。2.2 等效控制高频开关量的“平均”就是真实反电动势滑模观测器和普通PI观测器最大的区别就是反馈项不是线性的误差乘以系数而是一个带符号函数 sign(s) 的切换项。切换项的输出在高频下不断翻转一会儿正一会儿负形成一个看似剧烈抖动的控制量。关键来了在滑模面上系统一直保持 s0、ṡ0。此时如果把这个切换量通过低通滤波“平均”掉得到的直流分量恰恰就是使系统维持在这个平衡点的等效控制量equivalent control。用形式化的话说令 ṡ0反解出来的连续控制量就是反电动势的估计值。这就是为什么很多资料里直接说滑模观测器的切换输出经过低通滤波器以后等于反电动势。如果你只记住一句话请记住这句符号函数输出的高频平均值得到了反电动势低通滤波器在这里不是可选项而是必备项。3. 滑模观测器数学推导全流程3.1 表贴式PMSM在αβ坐标系下的数学模型先建立完整的数学模型。表贴式永磁同步电机的电感在dq轴上相等记 LdLqLs定子电阻为 Rs永磁体磁链为 ψf。在静止两相αβ坐标系下的电压方程写成$$ u_{\alpha} R_s i_{\alpha} L_s \frac{d i_{\alpha}}{dt} e_{\alpha} $$$$ u_{\beta} R_s i_{\beta} L_s \frac{d i_{\beta}}{dt} e_{\beta} $$把电流导数单独拎出来得到状态方程形式$$ \frac{d i_{\alpha}}{dt} -\frac{R_s}{L_s} i_{\alpha} \frac{1}{L_s}(u_{\alpha} - e_{\alpha}) $$$$ \frac{d i_{\beta}}{dt} -\frac{R_s}{L_s} i_{\beta} \frac{1}{L_s}(u_{\beta} - e_{\beta}) $$注意到 eα、eβ 在这里是未知量。硬件上我们能拿到的是 uα、uβ 和 iα、iβ需要靠它们把 eα、eβ 估出来。单独看方程这是两个一阶微分方程未知的 e 夹在输入项里必须用观测器把它作为“外部扰动”来观测。3.2 构造电流观测器与误差方程按滑模控制的标准套路构造如下电流观测器$$ \frac{d \hat{i}{\alpha}}{dt} -\frac{R_s}{L_s} \hat{i}{\alpha} \frac{1}{L_s}\left(u_{\alpha} - k\operatorname{sgn}(\hat{i}{\alpha} - i{\alpha})\right) $$$$ \frac{d \hat{i}{\beta}}{dt} -\frac{R_s}{L_s} \hat{i}{\beta} \frac{1}{L_s}\left(u_{\beta} - k\operatorname{sgn}(\hat{i}{\beta} - i{\beta})\right) $$这里的 k 是切换增益sgn 是符号函数。对比观测器方程和真实电机方程两边相减引入电流误差$$ s_{\alpha} \hat{i}{\alpha} - i{\alpha}, \quad s_{\beta} \hat{i}{\beta} - i{\beta} $$得到误差动力学方程$$ \frac{d s_{\alpha}}{dt} -\frac{R_s}{L_s} s_{\alpha} \frac{1}{L_s}\left(e_{\alpha} - k\operatorname{sgn}(s_{\alpha})\right) $$$$ \frac{d s_{\beta}}{dt} -\frac{R_s}{L_s} s_{\beta} \frac{1}{L_s}\left(e_{\beta} - k\operatorname{sgn}(s_{\beta})\right) $$这个方程是整个滑模观测器的核心。它清楚地告诉你误差 sα 的变化率由三部分决定——自身衰减项 (-Rs/Ls)sα、真实反电动势 eα、以及切换控制项 -k·sgn(sα)。只要切换项能压过反电动势项就能把误差推向零。3.3 滑模存在性与切换增益k的设计现在我们面对一个问题k 要取多大滑模才能建立用李雅普诺夫稳定性判据来分析。对 sα 单独取候选函数$$ V_{\alpha} \frac{1}{2} s_{\alpha}^2 $$对其求导$$ \dot{V}{\alpha} s{\alpha}\dot{s}{\alpha} -\frac{R_s}{L_s} s{\alpha}^2 \frac{s_{\alpha}}{L_s}\left(e_{\alpha} - k\operatorname{sgn}(s_{\alpha})\right) $$第一项 -Rs/Ls·sα² 是恒小于零的自动收敛。关键是第二项$$ s_{\alpha}\left(e_{\alpha} - k\operatorname{sgn}(s_{\alpha})\right) s_{\alpha} e_{\alpha} - k|s_{\alpha}| $$要保证 V 导数小于零只需要满足$$ k |e_{\alpha}| $$也就是说切换增益 k 必须大于反电动势的幅值。同理对 β 轴也要满足 k |eβ|。实际工程里反电动势幅值主要取决于磁链和转速$$ |e| \psi_f \omega_e $$举个例子估算一下某永磁电机的磁链 ψf 0.05Wb最高电频率 500Hz对应 ωe 2π×500 ≈ 3141 rad/s反电动势幅值约为 157V。那么 k 至少要大于 157V才能保证滑模面可达。工程上一般留 1.2 到 1.5 倍裕量还要考虑温度、负载波动带来的参数变化。但 k 也不能取得太大后面讲抖振的时候会专门说到这个问题。3.4 从等效控制到反电动势再到转子角度当滑模存在时系统被强制运行在 sα0、ṡα0 的流形上。此时令误差动力学方程中的微分项为零可以得到$$ 0 -\frac{R_s}{L_s} \cdot 0 \frac{1}{L_s}\left(e_{\alpha} - \left(k\operatorname{sgn}(s_{\alpha})\right)_{\text{eq}}\right) $$其中的 (k·sgn(sα))eq 就是等效控制即切换信号经过低通滤波后的平均分量。整理后得到$$ \left(k\operatorname{sgn}(s_{\alpha})\right){\text{eq}} e{\alpha} $$也就是说把切换信号 zα k·sgn(sα) 通过低通滤波器输出的就是反电动势估计值 êα。β轴同理。我习惯把切换量写成 zα、zβ调试时直接看 zα 和 êα 的波形非常直观。反电动势拿到了转子角度按下面方式计算。结合 eα、eβ 的定义$$ e_{\alpha} -\psi_f \omega_e \sin\theta_e $$$$ e_{\beta} \psi_f \omega_e \cos\theta_e $$可以得到$$ \tan\theta_e \frac{-e_{\alpha}}{e_{\beta}} $$于是$$ \theta_e \operatorname{atan2}(-e_{\alpha}, e_{\beta}) $$这里要提醒一句不同资料对 eα、eβ 的符号定义可能不同角度表达式也跟着变。你在自己的工程里最好先用编码器或者测功机标定一次确认角度方向和负载方向一致。方向反了FOC直接“飞车”这个我后面会专门讲。4. 工程实现从连续域到单片机4.1 离散化一阶欧拉怎么落地前面推导都是在连续时间域里做的单片机里只能定时器中断周期做离散迭代。最常用的离散化方法就是一阶欧拉法简单、计算量小。设控制周期为 Ts电流观测器的离散递推公式写成$$ \hat{i}{\alpha}[k1] \hat{i}{\alpha}[k] T_s\left[-\frac{R_s}{L_s}\hat{i}{\alpha}[k] \frac{1}{L_s}\left(u{\alpha}[k] - z_{\alpha}[k]\right)\right] $$$$ \hat{i}{\beta}[k1] \hat{i}{\beta}[k] T_s\left[-\frac{R_s}{L_s}\hat{i}{\beta}[k] \frac{1}{L_s}\left(u{\beta}[k] - z_{\beta}[k]\right)\right] $$其中切换量的离散形式为$$ z_{\alpha}[k] k\operatorname{sgn}\left(\hat{i}{\alpha}[k] - i{\alpha}[k]\right) $$$$z_{\beta}[k] k\operatorname{sgn}\left(\hat{i}{\beta}[k] - i{\beta}[k]\right) $$后续的低通滤波同样用一阶惯性环节离散$$ \hat{e}{\alpha}[k1] \hat{e}{\alpha}[k] T_s \omega_c\left(z_{\alpha}[k] - \hat{e}_{\alpha}[k]\right) $$$$\hat{e}{\beta}[k1] \hat{e}{\beta}[k] T_s \omega_c\left(z_{\beta}[k] - \hat{e}_{\beta}[k]\right) $$其中 ωc 是低通滤波器的截止角频率。整体执行流程大致是这样的ADC采样相电流 ia、ib还原 ic做Clark变换得到 iα、iβ。根据SVPWM占空比和母线电压重构 uα、uβ。用上一周期的 zα、zβ 和当前采样电流更新观测电流 îα、îβ。计算电流误差生成切换量 zα、zβ。对 zα、zβ 做低通滤波得到反电动势估计值 êα、êβ。通过反正切计算转子角度再做相位补偿。角度差分或锁相环得到转速送入速度环和电流环。这套流程每一步都有讲究。第2步的电压重构尤其容易被忽略很多新手直接用SVPWM指令电压替代实际电压结果死区效应带来的误差全算进了反电动势里低速段角度就会偏。我调过的项目里凡是低速性能差的一半以上是死区补偿没做或者没做干净。4.2 抖振抑制符号函数换成饱和函数符号函数 sgn 是理想化的不连续开关实际数字控制里直接用会带来高频抖振。抖振的根源是系统到达滑模面后切换项在正负两个方向之间高速翻转电流波形上表现为毛刺电机轴上表现为高频噪声和损耗。工程上最直接的办法是把符号函数换成饱和函数$$ \operatorname{sat}\left(\frac{s}{\Delta}\right) \begin{cases} 1, s \Delta \ s/\Delta, |s| \le \Delta \ -1, s -\Delta \end{cases} $$Δ 称为边界层厚度。当电流误差落在 [-Δ, Δ] 范围内时切换量不再直接跳变而是按比例连续变化抖振会大幅减小。代价是等效控制的精度会有所损失因为进入了线性区以后输出不再是严格的开关平均而是带有一点“软”特性。角度的静态精度会受到影响但实际测试下来只要 Δ 选得合适性能下降完全可以接受。Δ 的选择经验值一般取额定电流的1%到5%。具体调法我习惯这样先把 Δ 设得很小比如0.5%额定电流观察电流波形如果抖振明显、噪声大就逐步加大 Δ直到电流波形光滑。然后再看角度估算是否受影响如果角度静差变大说明 Δ 太大往回收一点。这一步是调参里最需要耐心的环节每次只调一个参数记录波形和角度误差不要同时动好几个参数否则出了问题都不知道是哪一步引入的。4.3 低通滤波带来的相位滞后和补偿低通滤波器“平均”出了反电动势但也带来了相位滞后。一阶低通滤波器在频率 ωe 处的相位延迟为$$ \Delta\theta \arctan\left(\frac{\omega_e}{\omega_c}\right) $$这个相位延迟会直接叠加在估算角度上。如果转速低延迟很小问题不严重转速高了以后ωe 变大延迟角可能达到十几度甚至几十度这时候不补偿力矩会明显偏弱还容易发热。补偿方法主要有两种。第一种是固定角度补偿在额定工况附近取一个典型值直接把 Δθ 加在估算角度后面。实现简单但工况偏离后效果变差。第二种是动态补偿用当前估计的电角速度 ωe_est 实时计算补偿角$$ \hat{\theta}e \operatorname{atan2}(-\hat{e}{\alpha}, \hat{e}{\beta}) \arctan\left(\frac{\omega{e_est}}{\omega_c}\right) $$动态补偿的效果明显更好代价只是多算一次反正切或查表。实际项目中滤波截止频率我一般取 500Hz 到 1kHz 之间具体要看载波频率通常10-20kHz和最高电频率。固定补偿不是不能做但只适用于工况很窄的电机像压缩机这种转速范围宽、负载波动大的场合还是老老实实用动态补偿。4.4 速度估计和坐标系方向校准角度出来后还需要速度。最简单的是角度差分$$ \omega_e \frac{\theta_e[k] - \theta_e[k-1]}{T_s} $$这个方法计算量小但角度本身有噪声差分后噪声放大速度波形会比较毛糙。更平滑的做法是锁相环PLL法把估计的角度误差经PI调节器收敛到零PI输出就是电角速度。PLL相当于一个低通跟踪器噪声小动态也够工业产品里用得更多。坐标方向校正是无感FOC上线前必须做的一步。具体操作是用编码器或者人工转动转子到已知位置对比滑模估算角度和真实角度。如果发现 β 轴或者 α 轴的符号不对通常的表现是启动瞬间电流方向就反了电机猛烈抖动甚至反转。这时检查 Clark变换矩阵、反正切表达式和角度补偿项的符号至少花10分钟把方向校好不要指望程序自动收敛。方向错了后面的所有闭环全是白搭。5. 常见问题与排查技巧实录5.1 角度抖动力矩波动大这是无感FOC调试里最常见的现象表现为电流波形上叠加高频毛刺电机运行噪声大高速时还能听到“嘶嘶”声。大概率原因有四个切换增益 k 过大虽然鲁棒性好但抖振分量太强低通滤波器没能充分压制。边界层厚度 Δ 太小饱和函数接近符号函数抖振没有被有效平滑。低通滤波器截止频率偏高高频分量透过多反电动势估计毛糙。电流采样噪声大经过观测器后被放大反馈到角度上变成抖动。排查顺序我建议这样先把 Δ 加大一档看电流毛刺是否减小。如果变化不明显再把低通截止频率往下调低 30% 左右。两者都不行再考虑降低 k。记住一条原则能通过滤波解决的问题就不要堆高 k过渡追求鲁棒性到头来还是要用滤波器来擦屁股收益很低。5.2 低速启动失败电机抖动不转或反转低速时反电动势幅值按比例下降。表贴式电机 500rpm 电频率大概就 30Hz 左右反电动势可能只有八九伏这时候开关噪声、采样误差、死区误差叠加起来信号很容易被淹没。解决方案有三条路。第一条是 I/F 强拖不管位置直接给一个旋转电流矢量慢慢加速转速上来以后切换到闭环。第二条是高频注入法通过高频激励信号的响应来识别转子凸极位置低速性能优秀但算法复杂调参难度大。第三条是混合法低速用I/F中高速切滑模。对大多数压缩机、风机、两轮车应用混合法足够用只做好“I/F强拖到什么转速切换”这一个点成功率就很高。切换转速一般取额定转速的3%到8%要留足反电动势比噪声高的余量。5.3 高速角度滞后力矩弱转速爬不上去高速时主要矛盾变成了低通滤波器的相位滞后。前面说了要用动态补偿但还是有人会在高速段发现角度超前或滞后。检查两个点一是补偿角度的计算用的是电角速度还是机械转速单位错了角度会差很大二是低通截止频率和最高电频率的比值如果截止频率太低比如只有最高电频率的1.5倍相位滞后太大仅靠动态补偿也可能不够。此时把截止频率适当调高比如放到最高电频率的3-5倍。另外还有一个经常被忽视的点电阻随温度漂移。铜绕组的电阻温度系数约每摄氏度0.4%冷态到热态差别能到20%。Rs 失配在低速时会直接体现在反电动势估计上导致低速角度偏。这个修正也比较简单用一个NTC测绕组温度查表修正 Rs效果立竿见影。5.4 问题速查表现象可能原因排查方向电流毛刺大、噪声大k偏大、Δ偏小、滤波不足先加大Δ再降滤波器截止频率低速角误差明显死区未补偿、Rs失配、反电动势信噪比低做死区补偿查Rs温漂高速角滞后严重低通相位补偿不足开启动态补偿调整截止频率启动反转或抖动剧烈坐标方向反了用编码器或人工定位核对符号估算角度跳变反电动势过零判断错误、低通输出谐振查符号定义拉长滤波时间切闭环瞬间电流冲击I/F强拖转速不够就切闭环提高切换转速、增加切换平滑逻辑6. 实操心得与个人调试习惯滑模观测器这个主题原理讲起来不难但真正调顺的时候问题永远比推导多。我习惯的调试流程是先仿真后硬件。在仿真里把理想电机模型搭好滑模观测器跑通确认反电动势波形形态正确、角度误差在几度以内再上车。上车的第一个目标不是闭环而是只开观测器用编码器或测功机把真实角度读出来和估算角度叠在一张示波器图里看。先静态对角度再小转速对波形确认相位补偿准确然后才允许速度环和电流环闭环。调参上我始终坚持“一次只动一个”的原则。滑模观测器涉及的参数本来就多k、Δ、滤波器截止频率、相位补偿系数、速度PLL带宽每个都互相影响。你要是一口气把Δ和k全改了看到结果好你也不知道是谁的功劳看到结果差更不知道是谁的问题。我每次改参数前会把当前波形截图改完再截图对比形成自己的调试日志。这个习惯救过我很多次电机参数一换翻日志就能快速定位该调什么。最后分享一个让我印象挺深的项目给一个制冷压缩机组做无感FOC初期低速性能怎么调都不过关电流噪声大角度偏。折腾了三天最后发现是PCB布局里电流采样线太长采样信号被SVPWM开关噪声污染ADC读进来的电流本身就有系统性偏差。观测器算法再好喂给它的数据是脏的神仙也救不回来。从那以后我每次调试无感项目第一件事永远是拿示波器量采样点的信号质量确认采样干净才碰算法。很多看似高深的控制问题最后都栽在传感器和采样这种最基础的环节上。这条经验值得你记下来。