ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

PMSM有感到无感FOC实战:从霍尔传感器到滑模观测器完整攻略

PMSM有感到无感FOC实战:从霍尔传感器到滑模观测器完整攻略 先说结论三相永磁同步电机PMSM的FOC控制没有想象中那么玄乎。我自己从第一次点亮MOS管到最终把无感算法跑稳定中间踩了无数坑所以这篇东西我不会只讲理论和公式而是把“从有感霍尔到无感算法”这条技术路线上会遇到的实际问题、参数为什么这么定、波形长什么样全部摊开来讲。无论你是刚接手电机项目的软件工程师还是实验室里自己搭板的硬件爱好者这篇文章都能帮你少走至少两个月的弯路。这篇博客的核心内容不是某一份代码而是一条完整的实现路径先用霍尔传感器把FOC框架跑通解决电流环、速度环、SVPWM和角度获取问题再在这个基础上切换到无感算法。为什么推荐这条路因为无感算法本质上是“用一个软件状态观测器去替代物理位置传感器”如果你连有感都跑不稳直接上无感就等于在没有地基的情况下盖楼。下面我按实际开发顺序把这个项目的硬件选型、有感调试、无感算法切换、以及问题排查全部串起来讲。1. 整体设计思路为什么非要从有感霍尔开始1.1 核心需求解析FOC 的全称是 Field Oriented Control磁场定向控制。它的本质是把三相交流电机的定子电流通过坐标变换解耦成“励磁分量d轴”和“转矩分量q轴”然后用两个独立的PI环分别控制最终达到类似直流电机那样“想给多大扭矩就给多大扭矩”的控制效果。说人话就是FOC 能让电机转得又稳、又静、效率又高还能在低速甚至堵转状态下输出额定扭矩。但FOC有一个铁打的前提——必须知道转子当前的电角度。因为要知道dq坐标系怎么旋转才能把电流投影到这个旋转坐标系里。你只有两种途径获得这个角度有传感器方案霍尔传感器、编码器、旋转变压器无传感器方案通过电机反电动势、磁链、电感变化来估算转子角度从霍尔起步的合理性在于霍尔能给出一个“粗糙但绝对正确”的转子位置。六个霍尔状态对应360度电角度的六个扇区每个扇区60度。虽然精度不高通常5到30电角度误差但对于验证电流环、速度环、SVPWM这些核心逻辑来说足够了。等你把整个FOC链路跑通之后再换无感算法你只需要替换“角度来源”这一个模块其他东西基本不动。1.2 方案选型背后的考量我选的主控是STM32F103RCT6这是很多人眼里“老掉牙”的片子但在电机控制领域它到今天仍然是应用极广的入门和量产选择。原因有三72MHz主频跑FOC的中断服务程序绰绰有余。单电阻或者三电阻采样的FOC整个控制环路电流采样ClarkPIDSVPWM在F103上能做到30到50微秒完成完全满足电流环10kHz到20kHz的控制频率需求。高级定时器TIM1和TIM8自带6路互补PWM输出带死区插入和刹车功能天然适配三相全桥逆变器。12位ADC配双采样保持可以做到三路电流几乎同时采样。再一个关键选择是驱动方案。我这里用的是“栅极驱动芯片分立MOS管”的方案具体型号是IR2101之类的半桥驱动配合N沟道MOS管。为什么不直接用集成的IPM模块因为IR2101这种方案最便宜、最容易买到损坏了替换成本也低。整机电压我设定为24V直流输入属于低压安全范围适合在桌面上调试。1.3 适合谁看这篇文章适合三类人刚入门FOC、想搞清楚电流环、速度环、SVPWM这些概念到底怎么落地的嵌入式工程师做无刷电机驱动项目需要从有传感器切换到无传感器方案的硬件/软件工程师正在为“电机转不起来”“一启动就过流”“带不动负载”这类问题头疼的调试人员我会尽量把参数选择、计算过程、调试顺序写成可以直接照抄的操作步骤同时也会告诉你每一步背后“为什么这么做”这样碰到变化时你才知道怎么调整。2. 硬件平台搭建先把“手和脚”准备好2.1 主控与驱动电路选型整个系统的主控是STM32F103RCT6。配置上是这样的高级定时器TIM1产生6路互补PWM带死区中心对齐模式PWM频率设为20kHzADC1采样三相下桥臂采样电阻上的电压重构成三相电流。我用的三电阻采样方案在24V系统下采样电阻选0.05欧姆放大倍数由运放决定霍尔信号TIM2的通道1到3做输入捕获配合EXTI中断实时读霍尔状态通信接口USART1接调试串口方便观察转速、电流、角度等变量驱动板接线时有一个点特别注意控制板的地和功率板的地必须是单点连接最好是星形接地否则功率 MOSFET 开关瞬间的 di/dt 会在控制地上砸出很大的尖峰轻则采样噪声大重则失控复位。我第一版PCB因为偷懒用了大面积铺铜做回路结果PWM一开ADC采样值简直没法看后来改成单点接地才解决。2.2 三相电流采样FOC必须知道定子三相电流。工程上有三电阻、双电阻、单电阻三种方案。我的项目用的三电阻采样三个下桥臂MOS管的源极各接一个0.05欧姆采样电阻经过INA240这种带PWM抑制的电流放大器放大50倍后送进ADC。在中心对齐PWM模式下采样时刻要选在下桥臂导通的中间位置这时候三个低边电阻都能流过真实相电流。如果占空比太接近0或者100%就没有足够的采样窗口。这是三电阻采样的局限也是为什么很多商业驱动器会做“插入采样时间”或者切单电阻采样的原因。电流采样标定也很关键。即使运放和ADC都是线性器件零漂和增益误差也必然存在。建议上电后先不使能PWM用软件读三路ADC的零点存成一个数组之后每次计算出来的电流都减去这个零点。我实操中这个零点标定可以消除大约3%到5%的电流误差在低速小电流时效果尤其明显。2.3 霍尔传感器的安装与信号处理霍尔传感器在电机里有两种主要安装方式电机尾部同轴安装一个磁盘霍尔感应该磁盘的磁场。这种方式安装简单但精度受磁盘极对数、安装偏心影响大。内置在定子槽内感知转子磁极位置。这种方式更精确但对电机本身有要求。我的项目用的是交流伺服电机拆机件电机内部已经有60度间隔的三路霍尔。霍尔信号是开漏输出要上拉电阻到3.3V或者5V。上拉电阻选4.7k到10k太小霍尔功耗高太大信号上升沿不够陡。霍尔信号进来之后最好经过RC滤波再接MCU引脚。我用的RC是100欧姆1nF时间常数约0.1微秒既能滤除部分毛刺又不至于让信号延迟太多。然后触发EXTI中断在中断里读端口电平组合出霍尔状态。这里有个新手特别容易困惑的点霍尔传感器的状态是“二进制编码”比如100、110、010、011、001、101这六种有效状态对应六个扇区。但哪个编码对应哪个扇区取决于电机绕组的接法和霍尔安装位置没有统一答案。所以工程上的做法是先离线测出“霍尔状态—电角度”对照表简单来说就是手动或者用开环方式把电机拖到一个已知角度看看当时霍尔输出是什么码。后面我会详细讲这个过程。3. 有感霍尔FOC的实现细节3.1 霍尔角度确定从状态码到电角度霍尔传感器提供的是不连续的位置信息每隔60度电角度变化一次。但在FOC里我们要在每次电流环计算时都给一个平滑的电角度值。两种做法最粗糙的做法直接把霍尔状态对应的扇区中心角度当作当前电角度。比如状态100对应0到60度那就用30度。这种方式电流会有一个明显的台阶跳变转矩波动大但代码最简单。中等精度的做法在60度内做线性插值也就是根据扇区内的时间从起始角度匀速增加到结束角度。这是有感霍尔的最常见做法能把速度波动控制在一个可接受范围。高精度的做法用霍尔信号校准后用反电动势或者龙伯格观测器去修正信号。这就是“有感起步、无感化”的过渡思路。我做的是第二种在霍尔状态变化的时刻记录一个时间戳然后根据当前时间和换相周期估算在扇区内的相对位置。这个线性插值本质上是一种“软件角度积分器”霍尔的作用是周期性地校正积分漂移。电角度确定以后就可以做坐标变换了。每次进入电流环中断执行顺序是读取三个霍尔信号-计算当前电角度-AD采样三相电流-Clark变换-Park变换-两个PI调节-反Park变换-SVPWM-更新比较寄存器。3.2 SVPWM空间矢量调制而不是傻乎乎的SPWM很多人刚接触FOC时有疑惑PWM占空比不是正弦波吗实际上FOC用的是SVPWM算法它不等价于把正弦波映射到PWM占空比。SVPWM的核心是把期望电压矢量分解到相邻两个基本矢量方向用时间加权合成让逆变器输出的平均电压在复平面上形成任意方向的矢量而且可以精确旋转。SVPWM相比普通的SPWM直流母线电压利用率提高了约15%。这意味着在同样母线电压下电机能跑到的最高转速更高。对于24V系统来说这15%可能就决定了电机能不能达到额定转速。SVPWM的实现过程大致是由电压角度和幅值计算在alpha-beta坐标系下的分量判断所在扇区计算两个基本矢量的作用时间T1、T2计算零矢量时间并分配给七段式或者五段式转成三路比较值写入TIM1的CCR寄存器比较关键的一个点TIM1一定要工作在中心对齐模式。因为中心对齐模式下计数器先加后减PWM波形是左右对称的这样电流采样点可以固定放在计数器的顶点或谷点采样到的电流纹波最小。如果用边沿对齐模式电流纹波会在每个开关周期末端叠加采样噪声会大很多。3.3 电流环与速度环的PI参数整定PI参数是FOC的难点。我这里的整定方法是工程上最常用的“带宽法”而不是纯靠凑参数。电流环的模型是电机的定子回路是一个电阻-电感串联回路传递函数是 1/(LsR)PI调节器。取电流环带宽为2000 rad/s则比例系数 Kp L * ωc积分系数 Ki R * ωc比如某台电机的相电感 L 是 0.4mH相电阻 R 是 0.5欧姆则Kp 0.0004 * 2000 0.8Ki 0.5 * 2000 1000这个计算只是起点实际上因为数字控制延迟、PWM逆变器的增益、电流采样滤波等因素真实参数往往要在这个基础上做微调。调试时先只给q轴电流指令看阶跃响应有没有超调。如果超调大就降低Kp如果稳态误差消不掉就加大Ki。速度环带宽通常取电流环的十分之一也就是200 rad/s左右这样速度环的动态响应远慢于电流环两个环不会互相打架。速度环的Kp和Ki也是类似方法Kp和电机转动惯量和阻尼相关通常先给一个大概值然后现场微调。我调试时的步骤是电流环空载调好先固定一个很小的电角度比如90度然后只给一个恒定的q轴电流等电流稳定在目标值说明电流环没跑飞让电机转起来用霍尔角度速度环给一个目标转速观察速度阶跃响应微调速度环主要看稳态误差和振荡情况3.4 有感模式的工程问题霍尔偏差角补偿霍尔安装误差、磁钢极弧系数、霍尔本身开关阈值不对称都会带来角度偏差。这个偏差我称之为“霍尔偏置角”。如果偏差大即使在有感模式下电流环解耦也不彻底扭矩波动和噪声都会变大。怎么标定这个偏差角最实用的方法叫“基于反电动势对齐法”用外部设备把电机拖到匀速状态比如用另一台电机带着转然后同时记录霍尔角度和反电动势过零点。反电动势过零时刻对应的电角度是明确的A相反电动势过零点对应0度拿它和同时刻的霍尔估计角度做差就是偏差角。实测中我拆了几台电机这台电机的霍尔偏差角大概在-8度到12度之间。每台都不一样。所以每台电机装机后都要做一次标定。标定得到的偏差角可以存到EEPROM或者Flash里每次上电时自动补偿。4. 无感算法原理与选型4.1 反电动势法中高速段的主场当电机转动时定子绕组会切割转子磁场的磁力线产生反电动势。反电动势的大小与转速成正比方向与馈电电压相反。在电机的αβ轴系下反电动势的αβ分量包含了转子电角度信息。eα -Ψf * ωe * sin(θe)eβ Ψf * ωe * cos(θe)其中Ψf是永磁磁链ωe是电角速度θe是电角度。所以只要能估算出eα和eβ就能算出角度。问题是反电动势信号在低速时幅值太小几乎淹没在噪声和逆变器非线性里所以反电动势法只能在中高速段用。一般从额定转速的5%到10%以上开始好用具体看电机反电动势系数和采样信噪比。4.2 滑模观测器与PLL锁相环最常用来做反电动势观测的是滑模观测器。它的基本思想是用电流观测误差构造滑模面把系统强行“滑”到收敛状态。本质上它是一个对电流误差做开关函数的反馈校正。滑模观测器输出的等效控制信号里就包含反电动势信息。滑模观测器的好处是对参数变化不敏感因为滑模运动只由开关函数决定实现简单计算量小非常适合STM32F103这种算力有限的MCU。坏处是开关函数会带来高频抖振解算出角度和转速的噪声会偏大。所以通常的做法是滑模输出接一个低通滤波器滤掉高频分量再用一个PLL锁相环去锁定角度和转速。用PLL而不是直接做反正切主要原因有两个反正切在角度接近90度或者270度时会因为噪声产生很大的跳变而PLL是闭环跟踪天然平滑PLL输出的转速本身就是时间的导数可以直接用于速度环不需要额外的差分运算PLL的结构是将估算的反电动势角度与实际PLL输出角度做差送入PI调节器PI输出作为角速度角速度积分后得到角度。这个回路实际上就是一个一阶锁相环带宽一般取几百rad/s兼顾响应速度和滤波效果。4.3 无感算法在低速区间怎么办高频注入还是IF反电动势法在低速不工作那启动怎么办两种主流方式高频信号注入在定子电压上叠加一个高频载波比如1kHz通过检测高频电流响应来辨识转子凸极性。这个方法对表贴式电机隐极式几乎无效因为Ld≈Lq没有可辨识的磁凸极。而且计算量、滤波器设计复杂度都比较高在STM32F103上要做需要考虑分配的算力。开环强拖I/F控制在低速时不管位置对不对用一个固定幅值的电流矢量以给定速度旋转。转子一开始会摆动但由于电磁转矩始终存在最终会以“功角自动调整”的方式被拖入同步。等转速升到反电动势可以可靠观测的范围再切换到闭环。我给F103做的无感启动就是I/F强拖。下面细讲这个过程。4.4 预定位、I/F强拖与切换条件无感启动的关键在于不能直接识别初始位置得先把转子“伪定位”。过程如下预定位给定一个固定方向的电压矢量持续500ms左右让转子转到与q轴对齐的位置。相当于把转子“锁”到一个已知角度。注意预定位电压不能太大否则转子会震荡而不是平稳停下我用的幅值是0.2V到0.5V24V母线看负载惯性调节开环强拖从预定位角度开始给定一个旋转的电流矢量比如幅值1.5A电角速度从20rad/s缓慢增加到200rad/s。这个过程不依赖任何位置反馈就像用一根无形的“手指”拨动转子转动切换判断当电角速度超过一定值比如300rad/s并且滑模观测器输出的电角度与开环给定角度的误差持续小于一定范围比如30度时切换开关从“假角度”切到“观测角度”这个切换过程最容易出问题的地方是两个角度之间有突变。所以切换时我做了角度差限制——如果误差太大不允许一次性切换而是用斜坡或者滞环方式逐步过渡到无感角度上。5. 从有感切换到无感的实战链路5.1 切换条件的详细设定如果要让系统能动态切换需要在代码里维护一个状态机基本有三个状态有感运行、正在切换、无感运行。切换条件我是这么判定的转速误差小于5%的额定转速滑模观测器估算转速与霍尔测得的转速差值小于10%额定转速q轴电流波动范围收敛没有饱和满足上面三个条件就会进入切换流程先用一个100ms的时间段把“霍尔角度无感角度”混合——每个中断周期按比例混合两个角度混合占比从100%霍尔平滑过渡到100%无感。这种平滑过渡的好处是避免转矩突变。5.2 电流环在整个切换过程中保持不变这里要强调一点不管是霍尔有感还是无感电流环的PI参数不需要更换。因为电流环响应速度远快于速度环而且电流环控制的物理对象定子电阻电感没有改变。改变的只是给电流环提供角度信息的来源。所以切换过程主要担心的是角度信号品质而不是电流环稳定性。我在实际测试中切换前后q轴电流波形几乎看不出明显变化这是最理想的状态。如果切换瞬间电流出现大台阶说明两个角度之间误差过大需要退回到混合切换策略或者延长混合时间。5.3 波形分析与验收标准无感算法调通后我用DAC输出了观测器的估算角度和霍尔角度在示波器上对比。两种角度在稳态时应该基本重合偏差在5度以内。如果偏差持续偏大检查霍尔标定是否准确滑模观测器增益是否合适反电动势系数是否和实际电机匹配还要做两个极端测试突然给一个大幅度转速指令观察速度环会不会震荡在额定负载下从零速启动观察能不能顺利切换到无感并且不堵转我的这套系统在24V供电下额定转速3000rpm实测能在带2倍的额定负载下完成I/F强拖启动并在800rpm左右切换到无感闭环。转速波动从有感的±5rpm变成了无感的±15rpm左右因为无感角度噪声比霍尔插值稍大但整体可以接受。6. 常见问题与排查技巧实录6.1 问题速查表我把开发过程中遇到的典型问题整理成了一张表按优先级排序现象可能原因解决方案上电后电机完全不转PWM没使能、霍尔接线反相、过流保护误触发先看PWM输出波形确认霍尔状态按预期变化断开母线查保护逻辑电机“嗡嗡”叫但转不动电角度错误、霍尔状态与角度映射不对开环模式手动旋转逐扇区确认霍尔状态与角度对应关系电流正弦波畸形电流采样噪声大、采样时刻不对校准零点确认ADC采样点处在PWM谷点给ADC加硬件低通滤波空载正常带载后突然失步无感在低速切换太早、电流环带宽不足提高切换转速阈
返回列表