永磁同步电机(PMSM)的控制,绕不开一个核心矛盾:要精准控制转矩,就得知道转子磁极的实时位置;可一旦装上机械式位置传感器,成本、体积、接线复杂度、高温高湿环境下的可靠性问题就全来了。我最早接触这个方向是在一台小功率表贴式电机上,当时用带霍尔的位置反馈跑得好好的,结果客户要求把驱动器塞进一个密闭腔体里,线束根本引不出来,这才被迫转向无位置传感器控制。从那以后,我陆续用STM32G431搭过几套完整的无感FOC平台,踩过的坑从电流采样噪声一直到滑模观测器抖振,基本把能犯的错都犯了一遍。这篇内容就是把这些年关于PMSM无位置传感器控制系统设计与实验的经验整理出来,从硬件选型、算法架构、SVPWM实现到参数辨识和实测调试,尽量讲透每一个决策背后的逻辑。适合已经做过有传感器FOC、想进一步啃无感算法的工程师,也适合正在用STM32G431做电机控制项目、需要一套可复现参考方案的读者。
1. 为什么无位置传感器控制值得花时间啃
1.1 位置传感器带来的真实成本不只是器件本身
很多人算无感控制的账,只盯着省掉一个编码器或旋转变压器的钱,这个视角太窄了。真正做过量产的人会告诉你,机械位置传感器的隐性成本远高于它的采购价。编码器需要联轴器、需要额外的安装公差控制、需要屏蔽线缆,线缆在电机高速旋转或振动工况下是故障率最高的环节之一。旋转变压器虽然耐恶劣环境,但解码电路复杂,而且它的模拟输出对激励信号的相位误差很敏感,调试周期长。
更关键的是空间约束。我遇到过一款用于小型泵类的电机,定子绕组端部空间本来就紧张,再塞一个磁编码器进去,轴向长度直接超标。这种情况下无位置传感器控制不是"锦上添花",而是"唯一可行"的方案。所以判断要不要上无感,先问自己三个问题:安装空间是否允许、线束是否可靠、成本是否真的敏感。如果三个里有两个答案是"否",那无感控制就值得投入。
1.2 无感控制的核心难点到底在哪
无位置传感器控制的本质,是从电机的电压方程和电流响应里"反推"出转子位置。低速时反电动势幅值很小,信噪比极低,这是所有无感算法的共同软肋。中高速时反电动势足够大,基于反电动势观测的方法(如滑模观测器、龙伯格观测器)效果很好;但到了零速和极低速,就必须借助凸极效应或者高频注入。
表贴式永磁同步电机(SPMSM)的交直轴电感基本相等,凸极率接近1,这意味着它没有天然的转子位置凸极信号可用。如果你手上是表贴式电机,又要求零速带载启动,那难度会陡增,通常需要注入高频信号并检测电流响应中的位置信息。而内置式永磁同步电机(IPMSM)凸极率明显,高频注入的效果就好得多。所以在选电机的时候,如果项目允许,优先选凸极率大的IPMSM,会给无感算法留出更大的裕量。
1.3 STM32G431在这个场景里的定位
STM32G431属于G4系列,核心是Cortex-M4带FPU,主频170MHz,最关键的是它内置了专门为电机控制优化的外设:高分辨率定时器HRTIM、快速ADC(采样时间可低至几十纳秒)、运算放大器、比较器,还有CORDIC和FMAC硬件加速单元。这些外设组合起来,让单芯片完成三电阻电流采样、SVPWM生成、观测器运算成为可能,不需要外挂太多模拟器件。
我选G431而不是更常见的F103或F407,主要原因是它的ADC和定时器联动做得更顺,HRTIM可以直接生成带死区的互补PWM,而且ADC注入通道的采样时机可以精确对齐PWM中心点。对于无感控制来说,电流采样的时刻精度直接影响观测器输入的质量,这一点G431的优势非常明显。当然它的价格比F103高一些,但对于需要跑复杂观测器算法的场景,这个溢价是值得的。
2. 硬件平台搭建:从电流采样到功率级
2.1 霍尔电流传感器与采样电阻的取舍
电流采样是FOC的地基,地基不稳后面全白搭。常见方案有三种:采样电阻加运放、霍尔电流传感器、电流互感器。采样电阻成本最低、精度高,但需要处理共模电压和隔离问题,而且在大电流下功耗和温漂是麻烦。霍尔电流传感器天生隔离、安装方便,但带宽和精度通常不如采样电阻,而且零点漂移需要关注。
我在G431平台上用的是霍尔电流传感器方案,具体是两颗贴片式霍尔器件分别串在U、V两相的下桥臂。选它的理由很实际:这套系统要跑在母线电压较高的场合,采样电阻方案需要额外的隔离运放,电路面积和成本都上去了;霍尔传感器直接输出与电流成比例的电压,接到G431的ADC引脚上就行,省掉了隔离环节。但要注意,霍尔传感器的输出通常有2.5V左右的偏置,对应零电流,ADC读取后要先减去这个偏置再换算成实际电流。
提示:霍尔传感器的带宽要选足够高的,至少是被测电流基波频率的10倍以上。如果电机最高电频率是1kHz,传感器带宽最好在10kHz以上,否则电流波形会明显滞后,影响观测器相位。
2.2 母线电压与电流的ADC通道分配
G431的ADC有多路通道,合理分配很重要。我的分配是这样的:U相电流用ADC1的注入通道,V相电流用ADC2的注入通道,母线电压用ADC1的规则通道。为什么用注入通道?因为注入通道可以跟定时器触发联动,在PWM特定时刻自动启动转换,不需要CPU干预,采样时刻精确可控。
采样时刻的选择有个讲究。对于下桥臂电流采样,要在下桥臂导通的中点时刻采样,这时候电流最稳定,开关噪声也避开了。具体来说,如果PWM是中心对齐模式,下桥臂导通区间的中点就是计数器到达零点的时刻附近。G431的HRTIM可以配置ADC触发事件在计数器特定值触发,我一般设置在计数器等于周期值减去一个偏移量的位置,确保采样点落在下桥臂稳定导通区内。
母线电压采样相对简单,用电阻分压后接ADC规则通道,但要注意分压电阻的精度和温漂,母线电压的测量误差会直接传导到SVPWM的占空比计算里。
2.3 功率级与驱动电路的几个细节
功率级我用的是三相全桥,MOSFET选的是耐压60V、导通电阻几毫欧的型号,具体型号根据母线电压和电流等级定。驱动芯片用的是带死区插入功能的半桥驱动,死区时间设在几百纳秒量级。死区时间不能太小,否则上下桥臂直通会炸管;也不能太大,否则输出电压畸变严重,尤其在低速时会影响观测器精度。
自举电容的选型容易被忽略。自举电容太小,高占空比时上桥臂驱动电压会跌落;太大则充电时间长,低频时可能来不及充满。我的经验是按驱动芯片手册推荐值的1.5到2倍来选,同时并联一个低ESR的陶瓷电容。另外,每相下桥臂的源极到地之间的走线要尽量短且粗,否则开关瞬间的di/dt会在寄生电感上产生尖峰,干扰电流采样。
3. 无位置传感器算法的架构与实现
3.1 从有传感器FOC到无感FOC的架构差异
有传感器FOC的框图很直观:位置传感器给出电角度,速度由角度差分得到,然后做Park变换、电流环PI、反Park变换、SVPWM。无感FOC把位置传感器换成了一个观测器,观测器输入是电压和电流,输出是估算角度和估算速度。其余环节基本不变。
但这里有个关键点:观测器需要电机的电压信息。而实际施加到电机上的电压,并不等于SVPWM计算的占空比乘以母线电压,因为存在死区、管压降、开关延迟等非理想因素。如果直接把指令电压给观测器,低速时误差会很大。所以要么做电压重构,要么在观测器里加入对非理想因素的补偿。我在实际项目里用的是电压重构加死区补偿的组合,效果比单纯用指令电压好很多。
3.2 滑模观测器的工程化实现
滑模观测器(SMO)是无感控制里最常用的方法之一,原理是基于电流误差构造滑模面,让估算电流跟踪实际电流,从等效控制量里提取反电动势,再反正切得到角度。理论很漂亮,但直接照搬论文里的公式往往会抖得没法用。
工程上要做几件事。第一,滑模增益不能太大,否则抖振严重;也不能太小,否则收敛慢。我一般从反电动势幅值的1.5倍左右开始试,再根据实测波形调整。第二,低通滤波器是必须的,用来滤掉滑模控制的高频切换分量,但滤波器会引入相位滞后,需要在角度上做补偿。补偿量跟滤波器截止频率和电机电频率有关,截止频率越低补偿越大。第三,低速时反电动势太小,SMO基本失效,所以通常要设定一个切换阈值,低于这个速度用别的策略(比如开环强拖或者高频注入),高于阈值再切到SMO。
我在G431上跑SMO时,观测器运算放在ADC中断里,中断频率跟PWM频率一致,比如16kHz。CORDIC单元用来做反正切,比软件查表快很多,而且精度够用。FMAC则可以用来做滤波器运算,减轻CPU负担。
3.3 低速段的高频注入策略
零速和极低速段,反电动势观测法无能为力,这时候高频注入就派上用场了。基本原理是往电机里注入一个高频电压信号,利用凸极效应,电流响应里会包含转子位置信息。对于表贴式电机,凸极率小,注入信号的幅值要更大,检测也更困难。
高频注入有两种常见形式:旋转电压注入和脉振电压注入。旋转注入是在αβ轴注入一个旋转的高频电压矢量,脉振注入是在估算的d轴注入高频信号。脉振注入的优点是位置跟踪更直接,缺点是依赖初始位置估计,如果初始估计偏差太大可能收敛到错误位置。我一般先用一个短时的脉冲注入做初始位置检测,再切到脉振注入做低速跟踪。
注入频率的选择要避开PWM频率和电流环带宽。通常注入频率取PWM频率的1/10到1/5,比如PWM是16kHz,注入频率取1.5到3kHz。注入幅值不能太大,否则会引起转矩脉动和噪声;也不能太小,否则电流响应信噪比不够。这个需要根据电机参数实测调整。
4. SVPWM的实现细节与常见误区
4.1 SVPWM算法原理的通俗理解
SVPWM(空间矢量脉宽调制)的核心思想,是用八个基本电压矢量(六个有效矢量加两个零矢量)去合成任意方向的参考电压矢量。把逆变器的六个开关状态对应到复平面上的六个方向,相邻两个有效矢量和零矢量按时间加权,就能在一个PWM周期内平均出想要的电压方向。
相比正弦PWM,SVPWM的直流电压利用率高约15%,而且谐波特性更好。这也是为什么现在FOC基本都用SVPWM而不是SPWM。理解SVPWM的关键是搞清楚扇区判断和矢量作用时间计算,这两步做对了,后面的PWM比较值生成就是顺理成章的事。
4.2 七段式SVPWM波形的生成逻辑
七段式SVPWM是指在一个PWM周期内,开关序列分成七段,零矢量平均分配在周期两端和中间,这样每个周期内开关次数最少,谐波也最优。具体来说,如果参考矢量落在第一扇区,七段顺序是:零矢量(000)、矢量1、矢量2、零矢量(111)、矢量2、矢量1、零矢量(000)。
用中心对齐PWM实现时,比较值的计算要对应这个顺序。我一般先算出两个有效矢量的作用时间T1和T2,以及零矢量时间T0,然后根据扇区把T1、T2映射到三相的比较值上。这里最容易出错的是扇区判断和比较值映射的对应关系,一旦搞错,输出波形会完全乱掉。建议先用固定参考矢量测试,用示波器看相电压波形,确认扇区和比较值都对,再接入闭环。
4.3 零序注入与过调制处理
零序注入是一种提高电压利用率或者优化谐波的手段。在SVPWM里,零序注入等价于在相电压上叠加一个共模分量,不影响线电压但可以改变相电压的波形。有些实现用零序注入来简化SVPWM的计算,把扇区判断省掉,直接用正弦加零序的方式生成比较值,效果和标准SVPWM等价。
过调制是指参考矢量幅值超过六边形内切圆半径时的情况。这时候线性调制已经不够用,需要进入过调制区,输出电压波形会出现削顶,谐波增大但基波幅值还能继续提升。实际项目中,如果母线电压不够、又需要高转速,过调制是最后的手段。但过调制会恶化观测器的输入质量,所以无感控制里一般尽量避免进入过调制区,宁可提前弱磁。
5. 参数辨识:无感控制的隐形前提
5.1 为什么参数不准会让观测器失效
观测器里用到的电机参数主要是定子电阻、交直轴电感和永磁磁链。这些参数如果偏差大,观测器估算的角度就会有稳态误差,严重时甚至发散。定子电阻随温度变化明显,铜的电阻温度系数大约是每摄氏度0.4%,电机从冷态到热态,电阻可能变化百分之几十。电感随电流变化,因为铁芯有饱和特性。永磁磁链随温度变化,高温下会退磁。
所以无感控制要跑得好,参数辨识不是可选项而是必选项。至少要在上电时做一次电阻和电感的辨识,运行中如果有条件,对磁链做在线辨识或温度补偿。
5.2 电阻与电感的离线辨识方法
定子电阻辨识比较简单:往d轴注入一个直流电压,电机不转,等电流稳定后,用电压除以电流就是电阻。注意要等电流完全稳定,因为电感会让电流缓慢上升。注入的电压不能太大,否则电流过大可能损坏电机或驱动器。
电感辨识稍微复杂。常用方法是往d轴注入一个阶跃电压,测量电流上升的斜率,电感等于电压除以电流斜率。或者注入一个高频小信号,测量电压和电流的幅值比及相位差,反推电感。交直轴电感分别辨识时,要确保转子位置对齐到d轴或q轴,否则测到的是混合值。我一般先用一个短时直流注入把转子拉到已知位置,再做电感辨识。
5.3 永磁磁链的辨识思路
永磁磁链的辨识通常在中高速下做。电机空载旋转时,反电动势幅值等于磁链乘以电角速度,所以测出反电动势和转速就能算出磁链。具体操作是让电机在某个转速下空载运行,测量线电压幅值和频率,反电动势常数就是线电压幅值除以电角速度,再换算成磁链。
在线辨识的话,可以在观测器里把磁链作为一个状态量,用模型参考自适应或者扩展卡尔曼滤波来估计。但这类方法计算量大,参数整定也麻烦,我在G431上一般只做离线辨识加温度补偿,够用且稳定。
6. 实测调试中的典型问题与排查链路
6.1 电机启动时抖动或反转
这是无感控制最常见的问题。排查链路是这样的:先确认初始位置检测是否准确。如果初始位置错了180度,电机会反转;错了90度,启动会抖动。用脉冲注入法检测初始位置时,注入的脉冲幅值和持续时间要足够让电流响应可区分,但也不能太大导致电机移动。
如果初始位置没问题,再看开环强拖到闭环切换的过程。切换速度阈值设得太低,观测器还没收敛就切过去,必然抖动。切换时要做角度和速度的平滑过渡,不能突变。我一般让开环角度和观测器角度在切换点附近做加权融合,过渡几百毫秒再完全切到观测器。
6.2 中高速时角度估算偏差大
中高速时如果角度偏差大,首先看反电动势观测的滤波补偿是否到位。低通滤波器引入的相位滞后如果没补偿,角度会滞后,表现为转矩输出不足、电流偏大。补偿量要跟电频率挂钩,频率越高补偿越大。
其次看电压重构是否准确。如果死区补偿没做好,低速时电压误差大,中高速时相对影响小但依然存在。用示波器对比实际相电压和重构电压,能直观看出偏差。另外,母线电压采样如果有延迟或滤波过度,也会导致电压重构不准。
6.3 电流采样噪声导致观测器抖振
霍尔传感器的输出如果噪声大,观测器输入就脏,估算角度会抖。先查硬件:传感器供电是否干净、输出是否加了RC滤波、走线是否远离功率级。RC滤波的截止频率要高于电流环带宽,否则会引入额外滞后。
软件上可以在ADC采样后做滑动平均或者一阶低通,但同样要注意相位滞后。我一般用截止频率在电流环带宽3到5倍的一阶低通,兼顾噪声抑制和相位。如果噪声还是大,就要考虑换采样方案,比如改用采样电阻加隔离运放。
7. 从实验台到产品化的几个经验
7.1 温漂与老化的长期影响
实验台上跑通不代表产品能用。电机运行一段时间后温度上升,电阻和磁链都变了,观测器参数如果不跟着变,角度误差会逐渐增大。我的做法是在电机绕组里埋一个NTC或者用驱动器上的温度传感器估算绕组温度,然后按温度系数实时修正电阻和磁链。这个补偿不需要很精确,粗略修正就能明显改善高温下的性能。
7.2 不同工况下的参数整定策略
观测器的参数不是一套走天下。轻载和重载、低速和高速,最优参数不一样。工程上要么做参数调度,根据转速和电流查表调整观测器增益;要么把观测器设计得鲁棒一些,牺牲一点动态性能换稳定性。我倾向于后者,因为参数调度增加了标定工作量,而且标定不准反而更糟。
7.3 保护逻辑与故障恢复
无感控制失去了位置传感器的直接反馈,保护逻辑要更谨慎。过流、过压、欠压、过温这些基本保护必须有,另外要加观测器发散检测:如果估算速度和实际指令速度偏差持续超过阈值,或者估算角度变化率异常,就判定观测器失效,切回开环或者停机。故障恢复不能自动重试太多次,否则可能反复冲击功率级。
我个人在实际操作中的体会是,无感控制项目里花在调试上的时间,大概七成在硬件和采样,三成在算法。很多人一上来就调观测器参数,其实先把电流采样和电压重构做干净,观测器自然就好调了。另外,STM32G431的CORDIC和FMAC一定要用起来,能省不少CPU时间,让主循环有更多余量处理保护和通信。最后再分享一个小技巧:调试观测器时,把估算角度和真实角度(如果有条件用编码器对比)同时通过DAC输出到示波器上,比看数字量直观得多,能快速定位是相位偏差还是抖振问题。