ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

高频方波注入零低速IPMSM无感控制:Simulink仿真与实践

高频方波注入零低速IPMSM无感控制:Simulink仿真与实践

做了大半年IPMSM零低速无感控制,最深的感受是:反电动势法在转速起来之后非常“省心”,但一到零速附近就像踩空了楼梯。项目标题里提到的“高频方波电压注入零低速IPMSM无感控制算法Simulink仿真模型”——我按这个技术路线完整搭了一套模型,从原理推导到模块实现都跑通了。这篇内容不打算写成说明书,而是把我在建模型过程中真正卡过、纠结过、最后想明白的东西梳理一遍,希望对正在啃这块硬骨头的人有点用。

1. 零低速段攻不动的原因分析:为什么反电动势法在这个区间直接失效

1.1 无感控制的“地基”在零低速下塌了

永磁同步电机无感控制最主流的方案是反电动势法,或者扩展反电动势法(EEMF)。它的核心逻辑非常直接:转子旋转时会在定子绕组里感应出反电动势,反电动势的方向和大小携带转子位置信息,只要把它估计出来,位置就出来了。

问题在于,反电动势的大小和转速成正比。转速为零时反电动势是零,转速很低时反电动势只有零点几伏甚至更小。现实世界里,电流采样有噪声、逆变器有死区效应、PWM调制有谐波,任何一个干扰都远大于那个微弱的反电动势信号。我在仿真里做过把给定转速降到30 r/min左右,反电动势观测器输出的角度已经像心电图一样抖动,到0~5 r/min基本就是白噪声,完全不能用。

零低速下还有一个麻烦:因为反电动势几乎为零,观测器失去了“激励源”,状态方程里电机的可观性变得很差。通俗地说,你拿着一个不响的喇叭去定位声源,怎么猜都是错。

1.2 凸极效应是零低速定位的另一条路

IPMSM和表贴式SPMSM的区别在于,IPMSM的d轴和q轴电感不相等,而且通常Ld小于Lq。这个电感差异造成了一个物理现象:转子在不同角度时,定子绕组对高频激励呈现出来的阻抗不一样,这就是凸极效应。

利用凸极效应的思路是:我自己注入一个高频信号,电机对这个信号的电流响应会带着转子位置信息。这个方案不需要反电动势,所以零速和低速都能用。标题里写的“在估计的d轴注入”,就是往估计出来的转子坐标系d轴方向叠加上一个高频电压,通过q轴出现的高频电流响应来修正位置估计误差。

这里有一个很关键的理解门槛:我们无法知道真实转子位置,所以注入是基于“估计位置”的坐标系来做的。估计位置和真实位置之间有偏差,这个偏差会反映在解调出来的信号里,观测器的任务就是把这个偏差收敛到零。换句话说,整个系统是一个自闭环——用估计位置注入信号,从信号里提取误差,再修正估计位置。

2. 高频方波注入的选型逻辑:注入频率、幅值与信号采样的协同设计

2.1 为什么不直接用正弦波注入

工程上高频注入分两类,一类是正弦波注入,一类是方波注入。正弦波注入出现得比较早,经典做法是注入几百赫兹到一两千赫兹的正弦电压,然后用带通滤波加同步解调提取位置信息。

方波注入是更现代的做法。和正弦波相比,方波的数学处理更简洁——注入信号只有正负两个状态,解调时不需要乘正弦参考,只需要做符号相关的累加或者差分解调。而且方波注入频率可以选得比正弦波更高,能避开电流环带宽和滤波器的干扰区。

我在仿真里做了两者的对比:同样是2 kHz注入频率,正弦波注入后电流环的交叉耦合明显更大,解调后的信噪比也差一些。方波注入的波形是阶跃形式,在数字控制里直接用占空比偏移叠加就能实现,非常自然。

2.2 注入参数的工程取值

选注入频率的核心约束有三个:一是必须远高于电流环带宽,否则注入信号会被电流环当成指令去跟踪;二是必须低于开关频率,保证采样和调制能跟上;三是最好避开机械谐振点和电流采样滤波器的截止区。

以10 kHz开关频率为例,我的实践取值是注入频率1 kHz,注入幅值约为母线电压的8%~12%。幅值太小,高频电流响应会被噪声淹没;幅值太大,会产生明显的转矩脉动和噪声。我在仿真里用310 V母线电压,注入幅值取30 V左右,高频电流响应峰值大约在1~2 A,这个水平既好解调又不会明显干扰转矩输出。

注入频率也不是越高越好。方波注入频率若直接取开关频率的一半,即5 kHz,理论上可行,但采样同步的要求会非常苛刻,电流采样时刻稍有偏差就会引入很大的谐波分量。我做下来1 kHz是一个比较均衡的选择,既高于电流环带宽一个数量级,又留出了滤波器的过渡带空间。

3. 从高频电流到转子位置误差的完整解调链路

3.1 高频电流响应里藏了什么信息

在估计d轴注入高频方波电压后,高频电流响应主要会出现在估计q轴上。为什么?因为真实d轴和估计d轴之间有角度差Δθ,注入电压在真实转子坐标系下会同时分解到真实d轴和q轴。真实d轴方向是电感小的方向,高频电流变化快;真实q轴方向是电感大的方向,高频电流变化慢。这两个方向上的电流响应不一样,综合反映到估计坐标系里,就是q轴高频电流分量和一个与2Δθ相关的量成正比。

这里用了“2Δθ”而不是“Δθ”,本质原因是凸极效应的镜像对称性——转子转过180度电角度,d轴和q轴互换,电感分布不变。所以位置误差信号天然对180度位置歧义不敏感。实际工程中会用初始定位或极性判别来解决这个问题,后面会单独说。

3.2 带通滤波加同步解调的操作细节

从采样电流里把位置误差提取出来,需要三步:

第一步,电流采样后先做带通滤波,中心频率设为注入频率1 kHz。这一步的目的是滤掉基波电流、PWM谐波和死区引入的低频分量,只留下高频响应。

带通滤波器的Q值不要设太高。Q值高,选择性好,但瞬态响应慢,会拖慢位置观测器的动态。我最后取Q=1左右,中心频率1 kHz,带宽约1 kHz。仿真里对比过,Q值从0.5到3变化,Q越高稳态解调越干净,但负载突变时位置恢复变慢,甚至会产生振荡。

第二步,把带通滤波后的电流信号和注入方波的符号相乘。这一步叫同步解调。因为注入方波的频率和相位我们都明确知道,乘法器输出包含两部分:一部分是缓慢变化的包络,频率很低;另一部分是2倍注入频率的高频分量。这个包络就是我们想要的,它正比于位置误差。

第三步,低通滤波。把乘法器输出通过截止频率约50 Hz的低通滤波器,高频分量被滤掉,剩下的是平滑的位置误差信号ε。

整个解调链路的关键是符号同步。注入方波从PWM占空比叠加到输出,再到电流采样,这中间有硬件和数字处理的延迟。我的做法是在乘法器参考里加一个小的延迟补偿块,补偿值通过在仿真里观察解调包络的相位手动调整。这一步不做的话,解调出来的误差信号会有明显的直流偏置,位置估计就会带固定角度误差。

4. 位置跟踪环的设计:误差信号如何收敛到真实电气角

4.1 用锁相环结构代替开环反正切

解调出的误差信号ε和位置误差Δθ之间是sin(2Δθ)的关系。在小角度近似下,sin(2Δθ)约等于2Δθ,所以这个误差信号可以直接当作位置误差的线性测量值来用。既然有了误差信号,剩下的事就是设计一个控制器让它收敛到零。

常见的做法有两种。一种是直接求反正切,把位置误差一次算出来,再迭代修正;另一种是做成锁相环(PLL)结构,PI控制器把误差信号收敛到零,PI输出是角速度,积分得到位置角。

我在仿真里用的是PLL结构。原因很实际:反正切方式对噪声敏感,而且当误差较大时,atan的计算结果在π/2附近跳变,容易让观测器跑飞。PLL结构天然平滑,本质上是一个二阶系统,能很好地把高频噪声滤除。

4.2 观测器带宽的层级设计

PLL观测器的带宽选择非常讲究。我的原则是:观测器带宽至少要比电流环带宽低一个数量级,同时要比解调链路的低通滤波截止频率低3~5倍以上。

举个例子,我的电流环带宽整定在200 Hz左右,解调低通截止50 Hz,那观测器带宽取10~20 Hz是比较稳的。原因很好理解:观测器带宽如果太高,它会跟踪解调信号里的噪声纹波,位置估计会抖;带宽太低,电机动态响应变慢,负载突变时位置会短暂丢失。

仿真里我固定电机参数后,把观测器带宽从10 Hz调到50 Hz观察过:20 Hz以下位置波形很干净,但加载时角度峰值误差有近10度电角度;带宽超过30 Hz后,动态误差降到5度以内,但稳态波形上出现了明显的高频毛刺。最后折中取了25 Hz,动态和稳态都能接受。

4.3 初始收敛问题与反180度处理

零速启动时,观测器初始角度是任意给的。由于误差信号是2Δθ的函数,观测器会把位置拉到“机械上等价”的位置——偏差180度电角度的位置。对IPMSM来说,d轴正方向和反方向在不同极性下磁链方向不同,如果位置反了,电机一给转矩就反转。

解决这个问题的标准做法是脉冲注入判别:在估计位置方向施加短时电压脉冲,观察电流变化率。由于磁路饱和效应,与磁链同方向的脉冲电流变化率更大,据此判断当前估计位置是否反了,如果反了就在估计角上加一个π。

仿真里做这个逻辑很简单:启动时先用一个小步长的方波注入PLL让角度收敛到某个值,然后加一个d轴正方向的电压脉冲,比较电流增量符号,修正最终初始角。这个步骤我在模型里做成了开关控制,只有启动时启用一次,之后就不再触发。

5. 交叉饱和效应:零低速段最隐蔽的转子位置偏置来源

5.1 为什么空载正常、一带载位置就偏

这是高频注入方案在工程落地时最让人头疼的问题之一。仿真模型如果用的是理想电感参数,那凸极方向永远和真实转子位置一致,观测器收敛后精度很好。但实际电机不一样:磁路饱和程度随负载电流变化,d轴和q轴之间存在交叉饱和,即q轴电流会改变d轴方向的有效电感,反之亦然。

交叉饱和的后果是:真实转子坐标系下的“电感凸极方向”不再和转子位置重合,而是偏移了一个角度,这个角度随负载电流变化。而高频注入法看到的是电感凸极方向,不是转子磁极方向,于是位置估计就偏了。而且这个偏差不是固定值,转矩越大偏差越大,补偿难度也更高。

我曾在仿真模型里加入了一个简化的交叉饱和项:把Lq值修改为iq电流的函数,Ld同时受iq影响。结果非常明显,加载到额定转矩时,位置估计偏差接近15度电角度。如果没有补偿,电机的电流矢量控制力矩输出会衰减,效率也会下降。

5.2 建模阶段就要预留的补偿机制

既然交叉饱和无法避免,建模时就要提前把补偿机制考虑进去。

我的做法是做一个基于查表的补偿角模块。离线阶段(或者在仿真里用参数扫描),记录不同id、iq组合下位置估计偏差δ,存成二维查找表。在线运行时,根据当前电流指令查表得到补偿角,直接加在观测器输出的估计位置上。

查表的粒度对精度影响很大。我用的是转矩电流从0到额定值分15个点、励磁电流分5个点,一共75个点的表,插值后补偿残差在2~3度以内。更精细的表能进一步压低偏差,但标定成本会显著上升,实际项目里按5度以内的精度要求来设计查表规模是比较合理的。

6. Simulink仿真模型的模块级拆解与参数设定

6.1 整体架构俯瞰

这套仿真模型从顶层划分为三块:电机主电路、矢量控制主回路、位置估计回路。电机主电路用的是Simulink里自带的内嵌式永磁同步电机模型,我关闭了机械负载输入,直接用恒定负载转矩来模拟不同工况;逆变器用三相两电平桥臂,SVPWM调制频率10 kHz;控制回路由电流采样、坐标变换、两个电流环PI、SVPWM生成和高频注入叠加模块组成;位置估计回路由带通滤波器、同步解调器、低通滤波器、PLL观测器和初始定位逻辑组成。

模型里最需要注意的一点是:坐标变换的输入角度必须用观测器输出角度θ̂,而不是电机模型给的真实角度θ。这既是无感控制的本质,也是仿真建模最容易出错的地方。如果为了省事把真实角度接进坐标变换,解调链路会完全失真,模型跑出来的“效果”毫无参考意义。

6.2 高频注入模块的具体实现

高频方波注入模块的实现思路非常直接:一个符号发生器和电压幅值相乘,得到一个±30 V的方波序列,然后把这个方波加到估计d轴电压指令v_d_ref上。v_d_ref本身是电流环PI的输出,方波叠加后作为最终调制电压送入SVPWM模块。

问题在于,这个“叠加”发生在旋转坐标系里,而SVPWM是在静止坐标系里工作的。所以实际操作顺序是:v_d_ref和v_q_ref经过坐标变换到静止αβ坐标系后,再送SVPWM。换句话说,高频方波注入是坐标变换之前叠加的,而不是变换之后。有些刚接触的人会把方波直接加在αβ轴上,那把位置信息的方向关系就全乱了。

电流采样模块的建模同样要注意时序。仿真步长要远小于开关周期,我取的是1微秒,即一个开关周期内采样10个点。这样做的好处是高频1 kHz的波形有足够的采样点,带通滤波器的输出波形也平滑。

6.3 滤波器模块的参数整定

模型里两个滤波器是决定解调质量的关键。带通滤波器我用了二阶带通,中心频率1 kHz,带宽1 kHz;低通滤波器用二阶低通,截止频率50 Hz。

这里有个建模经验:Simulink的滤波器模块初始化如果直接给中心频率,仿真启动会有一段很长的瞬态响应,位置观测器在启动初期会把这段瞬态当成误差信号去跟踪,导致初始收敛变慢。我的处理是启用滤波器的初始条件选项,把带通滤波器的初始输出设为0,同时在启动的前10 ms封锁PLL的PI输出。这个小技巧让初始收敛时间从大概0.5 s缩短到0.15 s,效果非常明显。

6.4 采样延迟与占空比更新延迟的建模

数字控制里的PWM占空比更新延迟在仿真模型里容易被忽略,但它在高频注入法里影响很大。实际硬件系统中,电流采样在PWM定时器中断里完成,PI计算后占空比要等下一个开关周期才更新,这个一拍延迟会让实际注入到电机端的高频电压相位滞后一个开关周期。

对1 kHz注入信号来说,10 kHz开关周期对应3.6度的相位滞后。看起来不大,但解调链路的同步解调对相位很敏感,滞后会直接变成位置估计的固定偏差。我在模型里专门加了一个延迟模块来表示这一拍数字延迟,然后和同步解调的参考符号做对齐补偿,把位置偏差纠正了回来。

这个细节对于从仿真往硬件移植的人尤其重要。仿真里不建模这个延迟,硬件上第一版测试就很容易遇到“明明和仿真一样,为什么实测位置偏了好几度”的困惑。

7. 仿真调参顺序与收敛性验证经验

7.1 从上电到稳态的调试顺序

这套模型我调试时遵循了一个固定顺序,每一层都确认无误后再进入下一层,避免多变量问题混在一起无从下手。

第一步,先做开环测试。固定一个位置观测器的输入角度,不让它闭环,手动给定θ̂值,然后注入方波,检查带通滤波器输出和同步解调包络的波形。这一步确认的是信号链是否正常——如果包络波形不是清晰的正弦或接近线性的小信号,先查滤波器和坐标变换的角度方向,不要急着调PLL。

第二步,闭合PLL但保持注入常开。给定一个固定转速指令(比如10 r/min),观察估计位置能否跟踪真实位置。这里要看的指标是稳态误差和收敛时间。如果估计角度收敛后有恒定偏差,大概率是同步解调符号没对齐或者滤波器相位没补偿。

第三步,做零速定位测试。给定初始估计角为0,真实角度给到某个任意值,观察PLL是否收敛到真实位置。这个测试是验证观测器收敛性的核心:如果从任意初始角都能0.2 s内收敛到3度以内,说明误差信号链路基本正确。

第四步,加载测试。将负载转矩从0阶跃到额定值,观察位置误差跳变。这个测试反映的是交叉饱和补偿是否有效,以及在动态过程中PLL是否失稳。

7.2 波形判读的几个关键点

带通滤波器输出的高频电流波形,正常情况下应该是幅度稳定的正弦波,频率等于注入频率。如果波形出现明显的调幅现象,说明还有基波分量没滤干净,需要把带通下限频率调高一点。

同步解调后的包络信号,在位置误差为零时应该接近零。实际操作中会有一个小的直流偏移,这个偏移来源于滤波器的直流增益不是严格的零,或者谐波混叠。PLL的PI调节器会把这个偏移当成固定干扰来抑制,但代价是位置估计带上一个小的静差。把偏移压到10 mV以下再进PLL,静差可以忽略。

零速定位时,我观察到估计位置不是单调收敛的,而是会先快速逼近,然后有一个小幅过冲,最后稳定。这说明PLL的二阶特性在起作用,属于正常现象。如果过冲太大甚至发散,先检查是不是PLL积分增益太高,或者解调低通滤波器的相位延迟导致阻尼变差。

7.3 最后补一句关于模型复用

仿真模型本身是参数化搭建的,电机参数用一组变量重写后可以直接换电机。我建议把电机的Ld、Lq、磁链、电阻、极对数、额定电流都做成变量,放在模型的预加载回调里,不要散落在各个模块里。这样后续验证不同参数下的算法鲁棒性,或者移植到别的电机上,只用改一处变量表就行。

高频方波注入这套方案的主战场就是零速和低速,当转速大于额定转速5%以后,反电动势法已经足够好,高频注入的额外损耗和噪声就变得得不偿失。所以最终量产级的算法通常是低速段用高频注入、中高速段切反电动势法、中间留一个滞回切换带。仿真模型要把这个切换逻辑的接口预留出来,后续扩展会方便很多。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进