1. 项目背景与核心需求拆解
1.1 为什么要在IPMSM上做无传感器FOC
内置式永磁同步电机(IPMSM)在工业伺服、压缩机、家电变频等领域用得越来越多,核心原因就两个:功率密度高、弱磁扩速能力强。但它有个绕不开的问题——转子位置和转速必须实时知道,否则FOC(磁场定向控制)根本没法把定子电流准确分解成d轴和q轴分量,转矩控制就无从谈起。
传统方案是装编码器或旋转变压器。但实际项目里,传感器带来的麻烦一点不比它解决的问题少:成本增加、接线复杂、高温高湿环境下可靠性下降、轴向尺寸受限装不进去。我做过一个压缩机项目,客户明确要求去掉位置传感器,因为压缩机内部是封闭的制冷剂环境,传感器线缆密封一旦出问题,整台机器就得返修。这种场景下,无传感器控制不是“锦上添花”,而是“非做不可”。
无传感器FOC的核心思路是:利用电机本体能测到的电气量(相电流、母线电压),通过算法估算转子位置和转速。中高速段用反电动势观测器基本够用,因为转速越高反电动势越大,信噪比越好。但零速和极低速段,反电动势趋近于零,观测器就“瞎了”。这时候必须借助凸极效应,主动注入高频信号,从电流响应里“抠”出位置信息。
1.2 方波注入相比正弦波注入的取舍
高频注入按信号波形分两大类:正弦波注入和方波注入。早期文献和工程实践里正弦波注入居多,因为它对电流环带宽要求低,解调也直观。但正弦波注入有个硬伤——注入频率受限于电流环带宽,通常只能做到1~2kHz,再高电流环就跟不上了。注入频率低意味着带宽窄,位置估算的动态响应慢,而且注入信号容易产生可听噪声。
方波注入则把注入频率直接拉到PWM开关频率的一半,比如10kHz载波对应5kHz注入。这个频率远高于电流环带宽,但方波注入不依赖电流环跟踪注入信号,它利用的是电流在半个PWM周期内的自然响应。具体来说,在PWM周期的前半段施加一个电压矢量,后半段施加相反方向的矢量,然后检测电流变化量。由于方波频率高,电流响应幅值小,噪声也小,而且动态响应快得多。
但方波注入的代价是:对电流采样精度和时序要求极高。电流变化量可能只有几十毫安,ADC的有效位数、采样时刻的抖动、死区效应都会直接影响估算精度。这也是为什么方波注入虽然理论上有优势,但工程落地时踩坑的人不少。
1.3 极性辨识为什么是“最后一公里”
高频注入能估算出转子的空间角度,但有个致命问题:凸极效应的周期是180度电角度,也就是说,注入法能分辨出转子的轴线方向,但分不清N极和S极。对于IPMSM,d轴电感小于q轴电感,这个差异在正反两个方向上是对称的,所以估算出来的角度可能和真实角度差180度。
如果极性判断错了,FOC的d轴电流方向就反了,永磁体可能被去磁,电机出力大幅下降甚至反转。所以极性辨识是零速启动的最后一道关卡。常见方法有:脉冲电压注入法(利用d轴正反向饱和差异)、高频注入二次谐波法、以及利用电机结构凸极和饱和凸极差异的方法。其中脉冲电压注入法最直观,工程上用得最多,但实现时也有不少细节要注意。
网络热词里提到的“方波持续旋转脉冲注入”,本质上是在方波注入的基础上,通过持续施加旋转电压矢量,同时完成位置跟踪和极性辨识。这种方法的好处是不需要单独停机做极性判断,启动过程更连贯,但对算法鲁棒性要求更高。
2. 方波注入的工程实现细节
2.1 注入信号的参数选择与计算
方波注入的参数主要有三个:注入电压幅值、注入频率、注入轴的选择。
注入电压幅值不能太大也不能太小。太大则电流纹波大、噪声明显、可能触发过流保护;太小则电流响应信噪比低,估算精度差。工程上一般取母线电压的10%~20%作为注入幅值。假设母线电压300V,注入幅值取30~60V。但这不是死规矩,还要看电机电感大小。电感大的电机,同样电压下电流变化小,需要适当提高注入幅值。
注入频率通常取PWM频率的一半。比如载波10kHz,注入频率5kHz。这样每个PWM周期完成一次正反注入,电流响应刚好在半个周期内建立。如果注入频率取其他值,需要保证注入周期和PWM周期同步,否则采样时刻会漂移。
注入轴的选择有两种:d轴注入和任意轴注入。d轴注入是把方波电压加在估算的d轴上,优点是q轴电流不受注入影响,转矩脉动小;缺点是当估算角度有偏差时,注入信号会部分耦合到q轴。任意轴注入则是在估算角度上叠加一个固定偏移,比如45度,这样d轴和q轴都有响应,信息更丰富,但解调复杂一些。实际项目中,d轴注入用得最多,因为实现简单,转矩影响小。
2.2 电流采样时序与死区补偿
方波注入对电流采样的时序要求非常苛刻。以单电阻采样为例,需要在每个PWM周期的特定时刻触发ADC,采到的电流才对应注入矢量的响应。如果采样时刻偏了,电流变化量就测不准。
我踩过的一个坑是:最初用中心对齐PWM,在周期中间采样,结果发现电流变化量几乎为零。后来才明白,中心对齐时,前半段和后半段的电压矢量是对称的,电流在周期中间刚好回到零附近。正确做法是在每个半周期的末尾采样,也就是电压矢量作用了半个周期之后,电流变化量达到最大。
死区效应是另一个大麻烦。逆变器上下桥臂切换时需要死区时间,防止直通。死区会导致实际输出电压和指令电压有偏差,这个偏差在方波注入的高频小信号下尤其明显。如果不补偿,估算角度会出现周期性误差。补偿方法有基于电流极性的电压补偿、基于死区时间的平均电压补偿等。工程上常用的是根据相电流方向,在指令电压上叠加一个死区补偿量,补偿量大小约等于死区时间除以PWM周期再乘以母线电压。
注意:死区补偿不是一劳永逸的。不同功率等级、不同温度下,死区时间可能变化,补偿量需要留一定裕量。我一般会在调试时用示波器观察相电流过零点的畸变,据此微调补偿量。
2.3 解调与位置观测器设计
方波注入的电流响应包含转子位置信息,但需要解调才能提取出来。以d轴注入为例,注入电压为V_inj,频率为f_inj,那么d轴和q轴的电流响应幅值分别为:
- d轴电流响应幅值:I_d = V_inj * T_inj / (2 * L_d)
- q轴电流响应幅值:I_q = V_inj * T_inj / (2 * L_q)
其中T_inj是半个注入周期。由于L_d < L_q,I_d > I_q。通过比较d轴和q轴电流响应的差异,可以构造出角度误差信号。
具体解调时,通常将采样到的电流变化量乘以注入信号的符号函数,然后通过低通滤波器提取直流分量。这个直流分量正比于角度误差的正弦值。再经过PI调节器,让角度误差趋于零,就实现了位置跟踪。
观测器设计时,PI参数的选择很关键。比例增益决定跟踪速度,积分增益消除稳态误差。但增益太高会引入噪声,太低则动态响应慢。我的经验是:先在低速下调比例增益,让角度能跟上但不过冲;再调积分增益,消除稳态角度偏差。调试时可以用阶跃给定转速,观察估算角度和实际角度的偏差收敛情况。
2.4 方波持续旋转脉冲注入的实现要点
“方波持续旋转脉冲注入”这个热词,本质上是在方波注入的基础上,让注入矢量不是固定在d轴,而是以一定速度旋转。这样做的好处是:旋转注入可以同时激励d轴和q轴,信息量更大,而且不需要额外的极性辨识步骤,因为旋转过程中饱和效应会自然显现。
实现时,注入矢量的角度等于估算角度加上一个旋转偏移角,这个偏移角以固定频率增加。比如每秒钟转一圈,那么偏移角就是2π*t。注入电压的幅值仍然用方波调制,但方向在旋转。
这种方法的难点在于解调。因为注入矢量在旋转,电流响应里既有凸极信息,又有饱和信息,需要设计更复杂的解调算法。常见做法是:将电流响应投影到估算的d轴和q轴上,分别提取幅值,然后根据幅值差异判断极性。如果d轴正方向的电流响应大于负方向,说明估算的d轴正方向对应N极;反之则差180度。
我在一个风机项目上试过这种方法,启动成功率比固定d轴注入加单独极性辨识要高,尤其是在负载不确定的情况下。但计算量明显增加,需要性能好一点的MCU。
3. 极性辨识的实操方法与避坑指南
3.1 脉冲电压注入法的原理与参数整定
脉冲电压注入法是最经典的极性辨识方法。原理很简单:在估算的d轴正方向施加一个短时电压脉冲,测量电流响应;然后在反方向施加同样幅值和宽度的脉冲,再测电流响应。由于永磁体的存在,d轴正方向的磁路饱和程度和反方向不同,导致电感不同,电流响应幅值也不同。电流响应大的方向,就是N极方向。
参数整定的关键是脉冲幅值和宽度。幅值太小,饱和效应不明显;幅值太大,可能造成过流或去磁。一般取额定电流的50%~100%作为脉冲电流目标,根据电机电感反推所需电压幅值。脉冲宽度通常取几百微秒到几毫秒,要保证电流能建立到目标值,但也不能太长,否则电机可能转动。
我一般会先用小脉冲试一下,观察电流响应是否对称。如果两个方向的电流响应差异很小,说明脉冲幅值不够,需要加大。如果差异很明显,就可以确定极性了。
注意:脉冲注入法在电机已经有初始位置时效果最好。如果电机完全静止且转子位置未知,需要先做位置预定位,再判断极性。预定位可以用高频注入法先估算出轴线方向,再用脉冲法判断N/S。
3.2 饱和凸极与结构凸极的区分
IPMSM的凸极效应有两个来源:结构凸极和饱和凸极。结构凸极是转子几何形状决定的,d轴和q轴电感不同;饱和凸极是磁路饱和程度不同导致的,d轴正方向饱和程度高,电感小;反方向饱和程度低,电感大。
极性辨识利用的是饱和凸极,但结构凸极也会影响电流响应。如果结构凸极很强,饱和凸极的差异可能被掩盖。这时候需要增大脉冲幅值,让饱和效应更明显。或者采用高频注入法,利用高频下的电感差异来判断。
有个经验:如果电机d轴和q轴电感差异很大(比如Lq/Ld > 2),结构凸极很强,极性辨识相对容易,因为饱和凸极叠加在结构凸极上,差异更明显。如果Lq/Ld接近1,结构凸极很弱,极性辨识就难做,需要更精细的算法。
3.3 极性辨识失败的常见原因
极性辨识失败通常有以下几个原因:
- 脉冲幅值不够,饱和效应不明显。解决方法是加大脉冲幅值,但要注意不要超过电机额定电流。
- 脉冲宽度太短,电流还没建立起来就结束了。解决方法是延长脉冲宽度,但要注意电机不能转动。
- 电流采样时刻不对,采到的不是脉冲结束时的电流。解决方法是调整ADC触发时刻,确保在脉冲末尾采样。
- 死区补偿不准确,导致实际电压和指令电压偏差大。解决方法是重新标定死区补偿量。
- 电机初始位置不在估算的d轴上,导致脉冲方向偏差。解决方法是先做位置预定位,再判断极性。
我遇到过一次极性辨识反复失败的情况,后来发现是电流采样电阻的温漂导致小电流下采样不准。换了低温漂电阻后问题解决。所以硬件设计时,电流采样通道的精度和温漂特性一定要重视。
3.4 极性辨识与位置估算的融合策略
实际工程中,极性辨识不是单独做的,而是和位置估算融合在一起。常见策略是:启动时先做高频注入,估算出转子轴线方向;然后施加脉冲,判断极性;确定极性后,切换到方波注入或反电动势观测器,进入正常运行。
融合策略的关键是切换时机和切换条件。如果切换太早,位置还没稳定,可能失步;切换太晚,启动时间长,用户体验差。我一般会在位置估算误差连续多个周期小于阈值后,才切换到下一个阶段。阈值根据电机和负载情况定,通常取5~10度电角度。
另外,切换过程中要保证电流环和速度环的平滑过渡。我通常会在切换时对PI调节器的积分项做预处理,避免切换瞬间输出突变。
4. 常见问题排查与实操经验汇总
4.1 启动失败与失步的排查思路
启动失败是方波注入无传感器控制最常见的问题。排查时按以下顺序来:
- 先确认电流采样是否准确。用示波器看采样电阻上的电压波形,和实际电流对比。如果偏差大,检查采样电路和ADC配置。
- 再确认注入信号是否正常。用示波器看相电压波形,确认方波注入的幅值和频率符合设计。
- 然后确认解调算法是否正确。可以在代码里把解调出的角度误差信号输出到DAC,观察波形是否合理。
- 最后确认PI参数是否合适。如果角度误差收敛慢或振荡,调整PI参数。
失步通常发生在负载突变或转速快速变化时。解决方法是提高观测器带宽,或者增加前馈补偿。我一般会在速度环输出上叠加一个前馈项,提前补偿负载变化。
4.2 噪声与振动问题的抑制
方波注入不可避免会带来噪声和振动。抑制方法有:
- 降低注入幅值,但会影响估算精度,需要折中。
- 采用随机注入频率,把噪声频谱打散,听感上不那么刺耳。
- 在注入信号上叠加一个高频抖动,让电流响应更平滑。
- 优化PWM调制策略,比如采用不连续PWM,减少开关次数。
我在一个家电项目上用过随机注入频率,效果不错。具体做法是:注入频率在4.5kHz到5.5kHz之间随机变化,每次PWM周期更新一次。这样噪声不再是单一频率的尖啸,而是宽频的白噪声,用户感知明显降低。
4.3 不同电机参数的适配问题
不同电机的电感、电阻、永磁体磁链差异很大,同一套参数不可能通吃。适配时需要注意:
- 注入幅值要根据电感调整。电感大的电机,注入幅值要加大。
- PI参数要根据电阻和电感调整。电阻大、电感小的电机,PI增益可以高一些。
- 极性辨识的脉冲幅值要根据额定电流和电感调整。
我一般会做一个参数自整定流程:先测量电机的电阻和电感,然后根据经验公式计算初始参数,再在调试中微调。这样比从头试凑快得多。
4.4 常见问题速查表
| 问题现象 | 可能原因 | 排查方法 | 解决措施 |
|---|---|---|---|
| 启动时电机抖动不转 | 极性辨识错误 | 检查脉冲响应方向 | 重新标定脉冲幅值,确认采样时刻 |
| 低速时角度估算偏差大 | 注入幅值不够 | 观察电流响应信噪比 | 加大注入幅值,或降低注入频率 |
| 高速时估算失步 | 观测器带宽不足 | 检查反电动势观测器增益 | 提高观测器带宽,增加前馈 |
| 噪声明显 | 注入频率单一 | 听感判断噪声频率 | 采用随机注入频率 |
| 电流采样不准 | 采样时刻偏移 | 示波器对比实际电流 | 调整ADC触发时刻,补偿死区 |
| 切换时冲击大 | PI积分项未处理 | 观察切换瞬间电流波形 | 切换时对积分项做预处理 |
4.5 几个容易被忽略的实操细节
第一个细节是PCB布局。方波注入的电流变化量很小,如果电流采样走线太长或靠近功率走线,容易引入噪声。我一般会把采样电阻尽量靠近逆变器下桥臂,采样信号走差分线,并且远离功率开关节点。
第二个细节是ADC校准。每次上电时,先做一次ADC零漂校准,把采样通道的偏移量存下来,后续采样时减掉。这个步骤看似简单,但能显著提高小电流下的采样精度。
第三个细节是温度补偿。电机电阻随温度变化,会影响观测器精度。如果应用场景温度变化大,最好在软件里做电阻温度补偿。我通常会用电机内置的温度传感器,或者用热模型估算温度,然后实时修正电阻值。
第四个细节是启动前的预定位。如果电机完全静止且转子位置未知,直接做方波注入可能收敛慢。我一般会先施加一个固定角度的电压矢量,把转子拉到已知位置,然后再启动注入。这样启动成功率更高。
第五个细节是故障保护。方波注入期间,如果电流超过阈值,要立即关断注入,切换到故障状态。我见过因为注入幅值设得太大,启动瞬间过流导致炸管的案例。所以过流保护一定要在注入开始前就使能。
5. 从工程落地角度再看方波注入方案
5.1 算力需求与MCU选型建议
方波注入的计算量主要集中在解调和观测器上。以10kHz注入频率为例,每个PWM周期需要完成:电流采样、解调计算、PI调节、角度更新、PWM占空比计算。这些运算如果全用浮点,对MCU的算力要求不低。
我一般建议用带FPU的Cortex-M4或M7内核MCU,主频至少100MHz。如果成本敏感,可以用M3内核加定点运算,但代码优化工作量会大很多。实际项目中,我用过STM32F4系列和TI的C2000系列,都能满足要求。C2000系列有专门的电机控制外设,比如PWM和ADC的联动触发,用起来更顺手。
如果采用方波持续旋转脉冲注入,计算量会再增加20%左右,因为需要实时计算旋转偏移角。这时候建议主频至少150MHz,或者用硬件三角函数单元加速。
5.2 调试工具与观测手段
调试无传感器FOC,光靠看代码和串口打印是不够的。我常用的工具组合是:
- 示波器:看相电流、相电压、PWM波形,判断时序和幅值。
- DAC输出:把估算角度、角度误差、转速等变量输出到DAC,用示波器观察波形。
- 上位机软件:通过串口或CAN把数据传到电脑,用波形软件分析。
- 功率分析仪:测量输入功率和输出功率,评估效率。
其中DAC输出是最实用的。很多MCU没有DAC,可以用PWM加低通滤波器模拟DAC,或者用SPI外接DAC芯片。我一般会在PCB上预留一个DAC通道,专门用于调试。
5.3 从样机到量产的注意事项
样机调试通过不代表量产没问题。量产时要注意:
- 电机参数一致性。不同批次的电机,电感、电阻可能有差异,需要做参数容差分析。
- 器件温漂。电流采样电阻、运放、ADC的温漂会影响精度,需要选低温漂器件。
- 生产校准。每台机器下线前,最好做一次参数自整定,把电机参数存到EEPROM里。
- 故障率控制。方波注入的启动成功率要经过批量验证,一般要求99%以上。
我在一个量产项目上遇到过启动成功率只有95%的情况,后来发现是电机装配时气隙不均匀导致电感差异大。调整装配工艺后,成功率提升到99.5%。所以无传感器控制不只是算法问题,电机本体的一致性也很关键。
5.4 方波注入方案的适用边界
方波注入不是万能的。它适合以下场景:
- 零速和极低速启动,反电动势观测器无法工作的场合。
- 电机凸极效应明显,Lq/Ld > 1.5。
- 对噪声和振动有一定容忍度。
- MCU算力足够,电流采样精度高。
不适合的场景:
- 表贴式永磁电机,Lq约等于Ld,凸极效应极弱。
- 对噪声要求极严的场合,比如医疗设备。
- 成本极度敏感,MCU算力和采样精度受限。
- 电机参数变化大,一致性差的场合。
如果应用场景不适合方波注入,可以考虑其他无传感器方案,比如IFA(电流频率比)启动、V/F启动加观测器切换等。每种方案都有各自的适用边界,选型时要根据具体需求权衡。
5.5 我个人在实际操作中的体会
做了这么多年电机控制,我最大的体会是:无传感器FOC的难点不在算法本身,而在工程细节。算法论文里写得清清楚楚,但实际调试时,一个采样时刻的偏差、一个死区补偿的误差、一个电阻的温漂,都可能让整个系统跑不起来。
方波注入和极性辨识更是如此。理论上的公式很漂亮,但实际电流波形里全是毛刺和噪声。你得学会从噪声里提取有用信号,学会用示波器而不是仿真软件来验证想法。我经常跟团队里的年轻人说:先把电流采样做准,再把时序调对,最后再谈算法优化。基础不牢,算法再好也是空中楼阁。
另外,不要迷信一种方案。方波注入在某些电机上效果好,在另一些电机上可能不如正弦波注入。多试几种方案,找到最适合当前项目的那个。工程上没有“最好”,只有“最合适”。
最后分享一个小技巧:调试极性辨识时,可以先用手转动电机,观察电流响应的变化。如果正转和反转时电流响应差异明显,说明饱和凸极效应强,极性辨识容易做。如果差异很小,就要考虑加大脉冲幅值或者换用其他方法。这个土办法虽然不精确,但能快速判断方案可行性,省去很多盲目调试的时间。