永磁同步电机全速域无位置传感器控制:高频方波注入与滑模观测器加权切换策略
1. 从零速到高速为什么单一控制策略搞不定全速域搞电机控制的人都有一个共识永磁同步电机PMSM的矢量控制在低速和高速下面对的问题完全不是一回事。高速段反电动势足够大用滑模观测器SMO估算转子位置和转速精度和动态响应都能让人满意可一旦转速掉到额定值的百分之几甚至零速附近反电动势小到几乎淹没在噪声里SMO的估算精度就会急剧恶化严重时直接发散。反过来高频方波注入法在零速和极低速下能靠凸极效应把转子位置“问”出来但到了高速段注入的高频信号会引起额外的转矩脉动和铁耗继续用就是给自己找麻烦。所以全速域控制的核心矛盾就一句话低速需要注入高速不需要注入中间怎么平滑过渡。这篇内容就是围绕这个矛盾展开的我会把高频方波注入法、滑模观测器法、以及两者之间的加权切换策略从原理到Simulink仿真的落地细节全部拆开讲一遍。适合正在做PMSM无位置传感器控制仿真的同学也适合已经跑通了单一算法、想进一步做全速域整合的工程师。先说清楚一个前提这套方案针对的是凸极式永磁同步电机内置式IPMSM因为高频注入法依赖凸极效应表贴式电机SPMSM凸极率接近1注入法基本失效。如果你手头的电机是表贴式的后面的注入部分可以直接跳过重点看SMO和切换逻辑。2. 高频方波注入法零速下怎么把转子位置“问”出来2.1 凸极效应是注入法的物理基础永磁同步电机的定子电感在d轴和q轴方向上不相等d轴电感Ld通常小于q轴电感Lq内置式电机这个差异就是凸极效应。当你在定子绕组上注入一个高频电压信号时高频电流的响应幅值会随着转子位置的变化而变化——转子d轴对准注入方向时等效电感最小电流响应最大对准q轴时反之。通过检测高频电流响应的包络就能反推出转子位置。这个原理说起来简单但实际操作中有几个关键点容易翻车。第一注入频率的选择。频率太低会和基波电流混在一起滤波器根本分不开频率太高开关频率跟不上PWM分辨率不够。一般注入频率取开关频率的1/4到1/2比如开关频率10kHz注入频率取2.5kHz到5kHz比较合适。第二注入幅值的选择。幅值太小电流响应信噪比不够幅值太大会引起明显的转矩脉动和噪声。通常注入电压幅值取额定电压的10%到20%具体要看电机的凸极率和额定电流。2.2 方波注入和正弦波注入的区别在哪高频注入按波形分常见的有旋转正弦电压注入、脉振正弦电压注入和方波注入。早期文献里正弦注入居多但这几年方波注入越来越受欢迎原因很直接方波注入不需要低通滤波器。正弦注入的解调过程需要用到低通滤波器来提取高频电流的包络而低通滤波器会引入相位延迟在闭环控制里这个延迟会压缩带宽影响动态性能。方波注入则不同它在一个PWM周期内正负交替注入高频电流的响应直接体现在相邻周期的电流差值上通过简单的加减运算就能解调出位置信息省掉了滤波器动态响应快了一个档次。具体实现上方波注入通常是在d轴估算的d轴上注入正负交替的电压脉冲。假设注入周期为两个PWM周期第一个周期注入Vinj第二个周期注入-Vinj那么两个周期的高频电流响应之差就正比于转子位置误差的正弦值。当估算位置和实际位置一致时这个差值为零有偏差时差值符号和大小就反映了偏差的方向和程度。2.3 Simulink里搭方波注入的实操细节在Simulink里实现方波注入核心模块包括注入信号发生器、电流采样与解调、位置误差提取、锁相环PLL或反正切计算。注入信号发生器可以用一个Pulse Generator配合增益模块实现周期设为2个PWM周期幅值设为Vinj。注意这个注入信号要叠加在d轴电压指令上而不是直接加在PWM输出上否则会干扰电流环的正常工作。电流解调部分需要在每个PWM周期采样三相电流做Clarke和Park变换。这里有个坑Park变换用的角度是估算角度不是实际角度实际角度在仿真里你知道但在实际系统中不知道。变换后的高频电流分量通过相邻周期的差值运算提取出来。具体来说如果第k个周期注入Vinj第k1个周期注入-Vinj那么Δiq iq(k1) - iq(k)就包含了位置误差信息。位置误差提取的公式推导这里不展开直接给结论位置误差ε正比于Δiq经过一个PI调节器后得到转速估算值再积分得到位置估算值。这个PI调节器的带宽要设得比电流环低一般取电流环带宽的1/5到1/10否则会引入振荡。注意方波注入的电流采样时刻非常关键。必须在PWM周期的中点采样避开开关瞬间的电流尖峰否则解调出来的信号全是噪声。仿真里可以用Zero-Order Hold模块模拟采样保持采样时间设为PWM周期的一半。3. 滑模观测器法SMO中高速段的估算主力3.1 SMO的核心思想用不连续控制逼出反电动势滑模观测器的本质是一个状态观测器它通过一个不连续的控制项通常是符号函数sign强迫估算电流跟踪实际电流。当系统进入滑模面后估算电流和实际电流的误差趋近于零此时不连续控制项中包含了反电动势的信息。反电动势里就藏着转子位置和转速提取出来就完成了估算。SMO的数学表达很简洁。在αβ坐标系下电流状态方程里包含反电动势项eα和eβ。构造滑模面s îs - is估算电流减实际电流设计控制律u k * sign(s)当k足够大时s会在有限时间内收敛到零。此时等效控制量ueq eα或eβ也就是反电动势。但这里有个问题sign函数是不连续的直接用它做控制会引起抖振。实际实现中通常用饱和函数sat(s/φ)或者Sigmoid函数代替signφ是边界层厚度。边界层越厚抖振越小但估算精度会下降边界层越薄精度高但抖振大。这个权衡需要根据实际系统的噪声水平来调。3.2 反电动势提取与位置解算的工程化处理从滑模控制项中提取反电动势最直接的方法是用低通滤波器。但低通滤波器会引入相位延迟导致估算角度滞后于实际角度。补偿的方法有两种一种是基于转速的相位补偿根据滤波器截止频率和当前转速计算出滞后角度直接加到估算角度上另一种是用锁相环PLL替代反正切计算PLL本身对相位误差有积分作用能自动跟踪。我在仿真里更倾向于用PLL因为PLL的输出转速和位置是解耦的调参更直观。PLL的结构就是一个PI调节器加一个积分器输入是位置误差由反电动势的叉乘得到输出是转速积分后得到位置。PI参数的设计可以参考二阶系统的阻尼比和自然频率一般取阻尼比0.707自然频率取基波频率的1/10到1/5。实操心得SMO在低速段失效的根本原因是反电动势幅值太小信噪比不够。如果你非要在低速段用SMO可以尝试提高滑模增益k但k太大会导致抖振加剧甚至引起系统不稳定。所以低速段还是老老实实用注入法。3.3 SMO在Simulink中的模块搭建与参数调试Simulink里搭SMO核心模块包括电流观测器、滑模控制项、反电动势滤波、PLL。电流观测器就是一个积分器加反馈输入是电压指令和反电动势估算值输出是估算电流。滑模控制项用Saturation模块实现饱和函数边界层厚度设为额定电流的5%到10%。反电动势滤波用一阶低通滤波器截止频率设为基波频率的2到3倍。比如电机额定频率50Hz截止频率取100到150Hz。截止频率太低动态响应慢太高滤波效果差抖振会串到PLL里。PLL的PI参数我一般先按理论算一个初值然后在仿真里微调。具体做法是给一个阶跃转速指令观察估算转速的响应如果超调太大就减小Kp如果响应太慢就增大Kp。Ki的作用是消除稳态误差一般取Kp的1/10到1/5。4. 加权切换策略让两种方法在过渡区和平共处4.1 切换点的选择不是拍脑袋决定的全速域控制的关键在于切换点的选择。切换点选得太低SMO还没进入可靠工作区就被切进来了估算精度差选得太高注入法在高速段继续工作转矩脉动和损耗都上去了。一般来说切换点取额定转速的10%到20%比较合适。具体到你的电机可以做一个简单的测试固定转速分别用SMO和注入法估算位置对比估算误差找到SMO误差开始小于注入法误差的那个转速点就是理论上的最佳切换点。但实际系统中转速是变化的不可能在切换点硬切。硬切会导致估算角度突变电流环会经历一个冲击严重时直接过流保护。所以需要加权切换也就是在过渡区让两种方法的估算结果按权重混合。4.2 加权函数的形状线性、余弦还是Sigmoid加权函数的选择直接影响过渡区的平滑程度。最简单的线性加权w (ω - ω1) / (ω2 - ω1)ω1是注入法完全生效的上限ω2是SMO完全生效的下限。线性加权实现简单但在切换点附近导数不连续可能会引起轻微的转矩波动。余弦加权w 0.5 * (1 - cos(π * (ω - ω1) / (ω2 - ω1)))在切换点处导数为零过渡更平滑但计算量稍大。Sigmoid加权w 1 / (1 exp(-a * (ω - ω0)))a控制过渡陡度ω0是中心点。Sigmoid的好处是过渡区形状可调但参数a需要根据实际系统调。我在仿真里一般先用线性加权跑通确认逻辑没问题后再换成余弦加权优化平滑度。线性加权的代码实现最简单在Simulink里用一个Gain加一个Saturation就能搞定。4.3 加权切换的Simulink实现与常见坑加权切换的Simulink实现核心是一个Switch模块加一个加权计算模块。Switch模块根据转速判断当前处于哪个区间低速区用注入法输出高速区用SMO输出过渡区用加权混合输出。这里有个坑两种方法的估算角度可能不在同一个坐标系下。注入法通常输出的是转子d轴角度SMO输出的也是d轴角度理论上应该一致。但如果注入法的PLL和SMO的PLL参数不同两者的动态响应会有差异混合时可能出现角度跳变。解决办法是让两个PLL的带宽尽量接近或者在混合前先做一个角度归一化处理。另一个坑是加权切换的初始化。仿真开始时转速为零注入法先工作SMO的PLL可能还没收敛。如果此时加权函数已经给了SMO一个非零权重混合出来的角度就是错的。所以需要在SMO的PLL后面加一个使能逻辑只有当SMO的估算误差小于某个阈值时才允许其输出参与混合。提示加权切换的过渡区宽度不宜太窄一般取切换点上下各5%到10%的额定转速。过渡区太窄加权函数变化太剧烈容易引起振荡太宽两种方法的缺点都会在过渡区暴露出来。5. 仿真跑通之后那些只有踩过才知道的坑5.1 电流环带宽与注入频率的相互制约高频方波注入的频率不能随意选它和电流环带宽之间有硬约束。注入频率必须远高于电流环带宽否则电流环会把注入信号当成扰动去抑制导致注入信号衰减。一般来说注入频率至少是电流环带宽的5倍以上。比如电流环带宽1kHz注入频率至少5kHz。但注入频率又受限于开关频率不能超过开关频率的1/2。所以如果开关频率是10kHz注入频率最高5kHz电流环带宽就不能超过1kHz。这个约束在仿真里不明显但实际系统中如果忽略注入法直接失效。5.2 参数失配仿真里看不见的杀手仿真里电机参数是固定的但实际系统中定子电阻随温度变化电感随电流饱和变化永磁体磁链随温度变化。这些参数失配会导致SMO的估算精度下降也会影响注入法的解调精度。仿真阶段可以做一个简单的敏感性测试把电机参数故意偏置10%到20%观察估算误差的变化。如果误差在可接受范围内说明鲁棒性够如果误差急剧增大就需要在算法里加参数自适应或者在线辨识。5.3 负载突变时的动态响应全速域控制不仅要稳态精度还要动态响应。负载突变时转速会波动切换逻辑要能快速响应。如果过渡区太宽负载突变导致转速在过渡区内来回穿越加权函数频繁切换估算角度会抖动。解决办法是在加权函数后面加一个低通滤波器平滑权重变化但滤波器的截止频率要设得足够高不能影响正常的转速跟踪。5.4 仿真步长的选择Simulink仿真步长直接影响仿真精度和速度。注入频率5kHzPWM频率10kHz仿真步长至少要是PWM周期的1/10也就是1e-5秒。如果步长太大注入信号的细节会被淹没解调出来的位置误差全是噪声。但步长太小仿真速度会非常慢。我的经验是先用1e-5秒跑通逻辑确认没问题后再用1e-6秒跑精细波形做频谱分析。6. 从仿真到实物的距离几点个人体会仿真跑通了不代表实物就能跑。仿真里电流采样是理想的没有噪声没有延迟实物里ADC采样有量化误差有采样延迟还有PWM死区的影响。这些非理想因素在低速段对注入法的影响尤其大因为注入信号的幅值本来就小噪声一淹就什么都剩不下。我的建议是仿真阶段就把非理想因素考虑进去。电流采样加一个量化模块PWM加死区补偿ADC加一个采样延迟。这样跑出来的结果更接近实物后面移植的时候心里有底。另外加权切换的代码在实物上跑的时候要注意中断优先级。注入法的解调需要在PWM中断里完成SMO的PLL可以放在慢速任务里。如果两者在同一个中断里计算量太大中断执行时间可能超过PWM周期导致控制失效。合理的做法是把注入法解调放在高优先级中断SMO和加权切换放在低优先级中断两者通过全局变量交换数据。最后说一个调试技巧实物调试时先单独跑注入法确认零速和低速下能稳定估算再单独跑SMO确认中高速下能稳定估算最后再合起来跑加权切换。不要一上来就全速域一起跑出了问题根本分不清是哪个环节的毛病。分步调试虽然慢但稳。