资讯动态

永磁同步电机负载转矩滑模观测器设计与Simulink仿真

发布时间:2026/10/20 10:05:30 来源:尧图企业网站定制
永磁同步电机做无速度传感器控制时负载转矩观测一直是让人又爱又恨的环节。爱是因为转矩前馈确实能明显改善转速动态响应恨则是负载观测器调起来总伴随噪声、相位滞后和参数敏感三大难题。最近我把滑模观测器SMO的方案完整地在Matlab/Simulink里搭了一遍从理论推导到模型落地都走通了这篇文章就把整个思路、建模步骤和实测心得一次性说清楚。开篇先把场景交代明白这篇文章适合已经在做PMSM矢量控制、对滑模控制有一定概念、但还没实际把负载转矩观测器落到仿真里的朋友。如果你只是想找现成模型直接跑那这篇也能帮你少踩不少坑。内容会覆盖SMO负载转矩观测的数学建模、滑模面设计与观测器增益整定、Matlab模型的分模块搭建思路以及我在仿真过程中遇到的震荡、滤波延迟和启动阶段误观测等具体问题与处理方式。1. 为什么负载转矩观测值值得做进PMSM控制环1.1 转矩前馈到底能改善什么先明确一个基本认知永磁同步电机的机械运动方程是[ J\frac{d\omega_m}{dt} T_e - T_L - B\omega_m ]其中 (J) 是转动惯量(\omega_m) 是机械角速度(T_e) 是电磁转矩(T_L) 是负载转矩(B) 是阻尼系数。常规的转速环PI控制器输出是电磁转矩给定值 (T_e^*)它全靠转速误差来调节。当负载突然从空载跳变到额定负载时转速会先掉下去PI再慢慢把转矩补上来这个过程中转速跌落幅度和恢复时间完全取决于PI增益增益调大了又容易振荡。这是典型的“事后补偿”逻辑。如果能把 (T_L) 实时观测出来并把观测值 (\hat{T}_L) 直接前馈到转矩给定中[ T_e^* PI(\omega_{ref} - \omega_m) \hat{T}_L ]那么负载突变时前馈项会立刻提供大部分所需转矩PI只负责修正剩余偏差。这样做的好处在于转速跌落可以显著减小动态恢复时间大幅缩短而且PI参数不必调得过激进就能获得良好的动态表现。本质上就是用“预测”代替“反馈”让控制系统从被动响应变成主动补偿。1.2 什么场合最需要负载转矩观测实际工程中以下场景对负载转矩观测的需求尤为迫切压缩机、泵类负载负载随转速、压力波动剧烈周期性负载扰动明显转矩前馈可以抵消大部分扰动。机械臂关节驱动启动、停止、变向时负载突变频繁转速跌落直接影响定位精度。电动汽车驱动电机路面阻力、坡度变化导致负载突变转矩前馈能改善驾驶平顺性。需要低速大转矩输出的场合低速时反电动势小转速观测难度大转矩观测可以帮助维持稳定输出。值得一提的是即便你不做无速度传感器控制只要用了编码器反馈负载转矩观测值依然有价值。它可以用于前馈补偿动态响应提升、转动惯量辨识的辅助手段、机械故障诊断通过转矩波动模式判断负载异常。因此这个观测器不是“无传感器方案专属工具”它本身具有独立的工程价值。1.3 为什么选择滑模观测器而不是龙贝格观测器做负载转矩观测龙贝格观测器Luenberger observer是经典选择。它的结构简单把运动方程作为状态方程把电流/转速测量值作为校正项本质上是线性状态观测器。但龙贝格观测器存在几个实际问题一是它依赖准确的机械参数 (J) 和 (B)参数失配会导致观测值出现稳态偏差。二是它有确定的带宽限制在负载突变瞬间跟踪速度有限观测值存在明显滞后。三是当系统含有未建模的非线性扰动如摩擦、齿槽转矩时线性观测器的鲁棒性不足。滑模观测器则是另一套思路利用滑模面的约束将系统状态强制“滑”到滑模面上对外部扰动和参数摄动具有天然的鲁棒性。只要滑模增益足够大未建模动态都会被视为等效扰动而得到抑制。这在工程上意味着即使系数 (J) 存在20%左右的误差滑模观测器的负载转矩观测结果依然能维持在可接受范围内。这正是它在这个应用场景里更有吸引力的原因。2. 负载转矩SMO的数学模型推导2.1 状态方程与可观测性分析要把负载转矩纳入状态方程首先需要建立torque的状态模型。这里用一个常见的做法假设负载转矩是慢时变的即[ \frac{dT_L}{dt} \approx 0 ]这个假设对大多数机械负载是合理的负载突变相对电气过程是缓慢的。于是系统可以写成[ \begin{cases} \dot{\omega}_m \frac{1}{J}T_e - \frac{1}{J}T_L - \frac{B}{J}\omega_m \ \dot{T}_L 0 \end{cases} ]写成矩阵形式[ \begin{bmatrix} \dot{\omega}_m \ \dot{T}_L \end{bmatrix}\begin{bmatrix} -\frac{B}{J} -\frac{1}{J} \ 0 0 \end{bmatrix} \begin{bmatrix} \omega_m \ T_L \end{bmatrix} \begin{bmatrix} \frac{1}{J} \ 0 \end{bmatrix} T_e ]输出方程取实测转速[ y \begin{bmatrix} 1 0 \end{bmatrix} \begin{bmatrix} \omega_m \ T_L \end{bmatrix} ]分析一下可观测性矩阵[ Q_o \begin{bmatrix} C \ CA \end{bmatrix}\begin{bmatrix} 1 0 \ -\frac{B}{J} -\frac{1}{J} \end{bmatrix} ]由于 (J) 是有限的正常数(\frac{1}{J} \neq 0)所以观测矩阵满秩系统完全可观测。这意味着理论上可以通过转速测量值、电流产生的电磁转矩以及已知的机械参数将负载转矩唯一重构出来。对状态方程稍作变换还能把它整理成扰动系统标准型为后面设计滑模面提供便利。引入总扰动 (d(t) -\frac{T_L}{J})则转速方程变为[ \dot{\omega}_m -\frac{B}{J}\omega_m \frac{1}{J}T_e d(t) ]在这个形式下设计目标就是去估计扰动 (d(t))从而反推负载转矩 (\hat{T}_L -J\hat{d})。这样的形式在滑模控制器设计中很常见便于直接套用扩张状态观测器的思想。2.2 滑模面的选取滑模观测器的核心是设计一个滑模面使观测误差在滑模面上渐进收敛并保持。观测器状态方程定义为[ \dot{\hat{\omega}}_m -\frac{B}{J}\hat{\omega}m \frac{1}{J}T_e u{sm} ]其中 (u_{sm}) 是滑模控制项负责把观测转速 (\hat{\omega}_m) 驱动到实测转速 (\omega_m) 上。定义转速观测误差[ e_\omega \hat{\omega}_m - \omega_m ]取滑模面为[ s e_\omega \hat{\omega}_m - \omega_m ]滑动模态存在的条件要求(s\dot{s} 0)。推导误差动态[ \dot{e}\omega -\frac{B}{J}e\omega u_{sm} - d(t) ]为了让误差收敛到零并抑制扰动滑模控制项取不连续项[ u_{sm} k_{sm} \cdot \text{sign}(s) ]其中 (k_{sm}) 是滑模增益。把控制项代入误差动态并分析稳定性条件可以证明当 (k_{sm} |d(t)| \frac{|T_L|}{J}) 时滑模可达条件满足。这也是为什么这个方法的鲁棒性强——只要滑模增益大于最恶劣的负载扰动系统就能收敛到滑模面。到达滑模面后经过等效控制equivalent control分析滑模控制项的平均等效值就等于系统扰动[ u_{sm,eq} d(t) -\frac{T_L}{J} ]因此通过滑模控制项的低通滤波值就可以实现对负载转矩的估计[ \hat{T}L -J \cdot \text{LPF}(u{sm}) ]2.3 sign函数与连续化的必要性理想滑模使用sign函数但它会引发抖振chattering问题——控制器输出在高频切换激励系统未建模动态在仿真中表现为观测转速出现锯齿状振荡在物理系统中则表现为机械振动和噪声。工程实现里几乎都会把sign函数替换为连续化近似。常用选择包括饱和函数sat(\text{sat}(s/\varepsilon))在边界层内线性过渡实现简单是最常用的方案。双曲正切函数(\tanh(s/\varepsilon))过渡平滑比sat更柔和但计算量略高。高斜率线性近似本质上和sat等价只是把切换区改为线性斜坡。边界层厚度 (\varepsilon) 的取值直接影响抖振抑制效果和观测精度。我在仿真中测试发现(\varepsilon) 取得太小比如0.01抖振几乎和sign函数一样明显取到0.1以上波形平顺但等效控制值会带上明显相位滞后。一个比较实用的做法是采用自适应边界层[ \varepsilon(t) \varepsilon_0 k_\varepsilon |s(t)| ]滑模误差大时边界层自动加宽以加速收敛误差小时边界层变窄以保证精度。这个思路我在后面模型里实现了实测效果优于固定边界层。3. Matlab/Simulink模型搭建的完整路径3.1 模型顶层架构设计搭建之前先把顶层架构想清楚。完整的PMSM无速度传感器矢量控制系统由以下主要模块组成PMSM本体模型用Simulink自带的PMSM模型即可设置好定子电阻、电感、永磁磁链、极对数、转动惯量和阻尼系数。逆变器IGBT模型仿真中通常使用三相PWM调制开关频率设为10kHz。坐标变换模块abc/dq变换和反变换注意角度来自位置观测器。电流环PI控制器dq轴电流内环带宽设为远高于转速环。转速环PI控制器外环输出q轴电流给定。SVPWM调制模块生成逆变器开关信号。负载转矩SMO观测器这是我们关注的核心模块输入转速测量与电磁转矩输出负载转矩估计值。整体信号流我已经整理成下表的对应关系模块输入信号输出信号关键参数坐标变换ia, ib, ic, thetaid, iq极对数、变换类型PMSM本体逆变器电压ia, ib, ic, Te定子电阻、电感、磁链电流PIid_ref, iq_ref, id, iqvd_ref, vq_refKP, KISVPWMvd_ref, vq_ref, theta开关信号母线电压、开关频率SMO观测器omega_m_meas, TeTL_hatJ, B, k_sm, epsilon需要特别注意一点电磁转矩 (T_e) 并不是直接测量量它需要根据dq电流计算[ T_e \frac{3}{2} p \psi_f i_q ]这个关系式在有id0控制方案下成立。如果使用了id≠0的弱磁控制则还需加入d轴磁阻转矩项[ T_e \frac{3}{2}p\left[\psi_f i_q (L_d - L_q)i_d i_q\right] ]在仿真模型里推荐直接从PMSM模块的输出端口取Te信号而不是用电流自己算这样既准确又省心。但放到真实硬件实现时就必须用公式计算了。3.2 每个核心模块的搭建要点负载转矩SMO观测器具体到Simulink里实现时我把它拆成三个并行的乘法/加法组完成。第一组是转速误差计算。这一步用Sum模块分别接 (\hat{\omega}m) 和 (\omega_m)输出 (e\omega)。注意两个信号的数据类型必须一致否则仿真中会出现数据转换警告虽然能跑但会在后续调试时干扰视线。第二组是滑模控制率计算。这里用常数模块作为滑模增益 (k_{sm})用Fcn模块或直接用数学模块构造饱和函数 (sat(e_\omega/\varepsilon))。Simulink里没有现成的sat函数模块我习惯于用Saturation模块配合Gain实现先把误差除以(\varepsilon)再通过Saturation限制到[-1,1]等效于归一化饱和函数。这样做的输出范围天然控制在[-1,1]方便后续增益调节。第三组是等效控制提取与负载转矩计算。滑模控制量经过一个一阶低通滤波器后得到等效控制信号再乘以(-J)就得到负载转矩估算值。这里低通滤波器的截止频率选择特别关键太低了负载信息被滤得太干净导致响应慢太高了抖振残留会污染估算值。根据经验截止频率一般设置在1/101/5的转速环带宽之间比较合适。后面专门用一节讲这个。机械参数处理上(J) 和 (B) 用常量模块设置成和PMSM本体的参数一致。这里其实潜藏着一个隐患观测器使用的是标称参数而仿真本体使用的也是同一组参数这会导致一个“太理想”的问题。为了验证鲁棒性我特意在测试时将观测器里的 (J) 设置为本体参数的一半结果负载转矩观测值虽然出现了轻微超调但稳态值依然收敛到真实负载附近——这就是滑模结构的鲁棒性红利。3.3 仿真步长与求解器设置PMSM模型配合10kHz的开关频率仿真步长设置要注意几个事项。定步长求解器是必须的因为SVPWM和PWM调制要求离散时间步长恒定。我习惯用离散定步长步长取10us对应100kHz仿真频率。如果嫌仿真速度慢在纯模型验证SMO算法特性时可以降到50us但要确保SVPWM波形不发生明显畸形。仿真时长方面我建议至少跑0.5秒。因为负载转矩观测需要覆盖从启动、稳定到突加负载的完整过程。如果只跑0.2秒转速还没稳定到额定值负载又突变观测器的动态过程会和启动过程混叠在一起很难判断最终效果。数值积分算法使用ode4四阶龙格-库塔或ode3三阶Bogacki-Shampine我这里用了ode4精度足够且计算效率合理。另外为了结果对比方便建议在PMSM模块的Te输出端口和机械负载端口分别引出测点同时把真实负载转矩合成一个阶跃信号记录下来方便和观测值放一起做对比。很多时候仿真做完了、波形也出了但最后答辩或汇报前才发现没有记录真实负载作为对照重新跑一遍非常浪费时间。4. 空载启动与满载突跳的仿真验证4.1 测试工况设计模型搭建完成之后最关键的一步就是验证。我的测试工况这样设计电机额定转速1500 rpm转动惯量 (J)0.001 kg·m²阻尼系数 (B)0.0001 N·m·s/rad极对数 (p)4永磁磁链 (\psi_f)0.175 Wb负载转矩设定00.2s 空载启动0.2s时突加5 N·m负载一直保持到0.6s结束这样设计能同时考察两个关键场景空载启动时观测器能否快速收敛且不误报负载以及满载突跳时观测值能否快速跟踪且无过大超调。4.2 观测波形深度解读第一轮仿真的结果说明了一些问题。空载阶段负载转矩观测值在启动瞬间出现了一个向下的尖峰幅度最大达到约3 N·m的负偏差然后在一个极短时间内收敛到0附近。这个尖峰是启动过程中转速加速时转动惯量被“误读”为负载扰动导致的可以通过改善观测器启动方式缓解。0.2s突加5 N·m负载时观测值在大约15ms内上升到4.5 N·m之后略微超调到5.3 N·m左右再经过约40ms稳定到5 N·m。这个响应速度基本令人满意——电流环和转速环的波动被观测器及时捕获到了。转速波形方面加了转矩前馈后突加负载时转速最大跌落从约180 rpm纯PI控制降到了约50 rpm恢复时间从约120ms缩短到约50ms。这直观验证了前馈的作用。我还特意把观测转矩和真实转矩的频谱做了对比理论上电磁转矩的2倍频脉动6次谐波会泄漏到负载转矩观测值中但实际观测值中高频分量衰减很快。这是因为滑模观测器本身的带宽有限加上低通滤波的二次滤除高频分量基本被压掉了。这个特性对于负载转矩观测反而是好事——我们关心的是平均负载而不是转矩脉动。5. 哑火与摩擦调参中踩到的坑与解法5.1 滑模增益过小时的极限环振荡第一版模型中滑模增益 (k_{sm}) 我设置得比较小大概是0.5目标是尽量减少抖振。结果负载转矩观测值整体偏小并且在突加负载时出现了明显的上限幅振荡现象观测值在23 N·m之间来回震荡始终爬不到真实的5 N·m。排查后发现根本原因在于增益太小导致滑模可达条件不满足。当满足条件 (k_{sm} |d(t)|) 时等效控制才能正确重构扰动如果增益不足滑模面无法维持系统进入极限环状态观测误差无法收敛。解决方式是把 (k_{sm}) 从0.5逐步调到20。这里有个快速估算法最大负载转矩除以 (J)再加上一定裕量即为增益的保底参考值。5 N·m除以0.001等于5000取 (k_{sm}20) 似乎远小于参考值但在仿真中发现实际到达滑模状态所需增益还受边界层影响边界层越宽所需增益越大。因此当 (\varepsilon) 较大时需要同步拉高 (k_{sm})。两轮实验下来我最终锁定 (k_{sm}10)、(\varepsilon0.2) 的组合波形平顺且跟踪速度理想。5.2 低通滤波器截止频率与相位滞后滑模控制项里夹杂的高频抖振分量会被低通滤波器衰减但截止频率选择直接影响负载转矩观测的动态响应和噪声水平。我用同一个模型跑了三组截止频率对比截止频率响应时间稳态波动振幅相位滞后100 Hz约8ms±0.15 N·m约3ms500 Hz约2ms±0.45 N·m约1ms2000 Hz约0.5ms±1.2 N·m基本无滞后可以看到截止频率高了响应快但噪声高截止频率低了噪声抑制好但响应慢。我的折中方案是500Hz因为我的转速环带宽大约是80Hz500Hz截止频率既保留了足够的负载动态信息又对高频噪声有足够衰减。如果项目对负载突变响应要求极高建议额外考虑变截止频率策略突加负载时放宽截止频率以快速跟踪稳定后降低截止频率以滤除噪声。但这个策略实现复杂度略高需要先判断负载变化时刻我在后面的迭代版本里再用更结构化的方式处理。5.3 观测器初始化与启动冲击前面提到启动瞬间会出现负向尖峰这个问题我最终通过观测器状态初始化解决了。严格来说负载转矩在电机上电前应该是0但转速在0时刻从0加速到目标值转速观测值 (\hat{\omega}_m) 与实测值在首个仿真周期内存在偏差这会激发滑模项输出一个大的负等效控制值。解决办法有三个层次第一层是在观测器积分器初始化时把 (\hat{\omega}_m) 初始化为0(\hat{T}_L) 初始化为0。这样匹配了实际物理状态能减小初始冲击但滑模项仍会把启动力矩误判为负载。第二层是引入启动屏蔽机制启动后的50ms内将观测器输出强制清零或逐渐接入让观测器先单独收敛转速观测值再启用负载观测。我发现在启动完成前不让负载前馈参与控制系统能有效避免启动冲击。第三层是加入状态重置在转速达到90%额定转速时手动把观测积分器清零一次消除累积误差。这个方法配合第二层使用效果最好。5.4 离散化实现时的抖动问题Simulink里如果观测器用连续模块搭建而系统整体是离散仿真时存在一个隔靴搔痒的适配问题连续观测器和离散PMSM数据交互时仿真器会进行输入外推导致高速率下结果奇怪。更好的做法是把观测器完全离散化。一阶离散化用前向欧拉法即可[ \hat{\omega}_m(k1) \hat{\omega}_m(k) T_s\left(-\frac{B}{J}\hat{\omega}m(k) \frac{1}{J}T_e(k) u{sm}(k)\right) ]滑模控制项离散化为[ u_{sm}(k) k_{sm} \cdot \text{sat}\left(\frac{\hat{\omega}_m(k) - \omega_m(k)}{\varepsilon}\right) ]低通滤波器则用双线性变换离散化或者直接用一阶惯性离散形式。在Simulink中更推荐直接用Discrete State Space模块搭观测器模型配合单位延迟模块表示离散时间积分。实测下来离散化的观测器和离散PMSM模型之间的所有交互都在离散时钟域内完成仿真稳定性明确提升启动阶段的非物理振荡基本消失。所以如果你要我把这套模型用于半实物仿真或后续代码生成从一开始就把观测器设计成离散的重要得不得了。6. 参数鲁棒性分析与增益整定的工程经验6.1 转动惯量失配下的表现前面提到我把观测器里的 (J) 设置成真实值的一半来测试鲁棒性。直观的结果是负载突变响应依然能收敛但超调量和收敛时间明显增加。具体来说(J) 偏小50%会导致负载观测值超调从约6%增大到约18%收敛时间从约40ms延长到约80ms。原因是 (J) 的偏差直接改变了滑模增益的有效范围。原本的增益裕量被参数失配消耗掉了。更麻烦的是(J) 偏小会让加速度项被放大解释为负载扰动导致观测值在启动阶段出现明显正向偏移。反过来测试 (J) 偏大50%时趋势相反启动阶段观测值偏低负载突变时响应变慢但稳态精度依然维持这是因为滑模的作用“吸收”了参数偏差导致的误差。工程实践教训就是如果要部署这个方案转动惯量辨识一定要先做好。即使滑模有强鲁棒性参数失配仍然会让你失去一部分动态裕量。6.2 阻尼系数的敏感性分析相比转动惯量阻尼系数 (B) 对观测结果的影响小得几乎可以忽略。跑了 (B) 从0变化到真实值10倍的系列实验负载稳态观测偏差始终小于2%。物理上可以这样理解阻尼项的有效影响远小于负载转矩和电磁转矩滑模等效控制提取的是包含阻尼项在内的总扰动之和因此 (B) 的误差被天然纳入“等价扰动”中不影响最终负载转矩提取精度。这个结论简化了工程调参流程只需要关注 (J) 的辨识精度(B) 设置一个近似值甚至设置为0也可以获得可接受的观测结果。6.3 滑模观测器的应用边界与总结做了这轮完整的建模和仿真后我对SMO负载转矩观测的边界有了更清晰的认识它适用于负载转矩变化频率低于转速环带宽的绝大多数应用场景。对周期性负载脉动比如压缩机二倍频脉动来说观测器只能给出平均负载而非瞬时负载。它不适用于负载在极短时间内剧烈突变并伴有强噪声的应用此时需要更高带宽的观测器配合滤波器。它要求转速估计可测。在极低速5%额定转速区域反电动势很小转速观测精度下降负载转矩观测也会受限。它的离散化实现与连续设计结果存在偏差工程代码生成时需要重新校准参数。它最适合在一个整体的无速度传感器控制系统框架里工作如果单独使用价值会打折扣。最后顺带分享一个调试技巧在Simulink里调试这个观测器时我习惯在每个关键信号后加一个Scope模块并统一设置信号颜色真实负载用青色观测负载用红色转速误差用绿色。这样对比波形时一目了然。另外要养成用“信号日志”而不用Scope的习惯——Scope只在调试时用最终结果导出用Signal Log导出到MATLAB工作空间方便后处理做频谱分析和RMS计算。这一套SMO负载转矩观测模型从我最初拿到题目到最终跑通大约花了一周时间最耗时的不是搭建而是增益和滤波参数的配合调节。记住几个核心准则滑模增益要满足可达条件边界层和增益是配对双变量而非独立调节低通滤波器截止频率要和转速环带宽保持至少5倍以上距离转动惯量失配是观测误差的主要来源。只要这几点做到位这个方案在工程上是站得住脚的。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑