ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

步进电机发热严重?FOC闭环斩波恒流改造方案与实测

步进电机发热严重?FOC闭环斩波恒流改造方案与实测 去年我做一台桌面型三轴点胶机42步进电机在锁轴回零的时候表面温度直接干到了70℃以上。手碰上去第一反应是这哪是步进电机这是电暖器。标称额定电流1.5A驱动器按1.5A配置位置精度看着也没问题可“安静运行”和“凉爽工作”这两个词跟它完全不沾边。后来我把驱动器从开环恒压细分方案改成了一套自研的FOC闭环驱动也就是标题里说的P0斩波恒流版同样是堵转出接近额定的保持力矩电机表面温度降了将近20℃噪音从“嗡嗡”变成几乎听不见最低稳定转速也从2r/min直接下探到0.1r/min。这篇文章就把我对步进电机发热的理解、FOC闭环改造的完整思路、P0斩波恒流版的硬件软件细节以及调参过程中踩过的坑一次性讲清楚。文章的内容基于我实际调试这块驱动板的经历也融入了行业里常见的方案对比希望能给正在和步进电机发热、失步、低速爬行较劲的朋友一些参考。1. 先搞清楚电机为什么会“发烧”热量账单从哪来1.1 铜损、铁损、纹波热三步拆解热源步进电机发热这件事很多人第一反应是“加散热片”“加风扇”。散热是治标想治本得先看热量从哪来。对一台两相混合式步进电机来说热量的主要来源有三个。第一是铜损也就是绕组电阻上的I²R损耗。42步进电机的相电阻通常在0.8Ω到2Ω之间我手头常用的那台实测相电阻是1.2Ω。按额定电流1.5A算单相铜损PI²R1.5²×1.2≈2.7WA、B两相加一起就是5.4W。这个功率持续灌在一个巴掌大的铝壳里温升可想而知。第二是铁损包括涡流损耗和磁滞损耗。转子在交变磁场里旋转磁通反复变化会感生出涡流同时磁畴翻转也有损耗。低速运行时铁损占比不大但转速越高、PWM斩波频率越高铁损增长越明显。第三个来源最容易被忽略电流纹波和谐波。传统开环驱动给电机的电流并不是干净的正弦波或方波而是带大量谐波的斩波波形。谐波电流产生力矩的效率很低但它在绕组电阻上的发热跟基波电流一样实实在在。换句话说你有一半电流在“白烧电”。1.2 为什么标称电流不大温度却高得吓人很多人配置驱动器时都按电机铭牌上的额定电流设置结果还是烫手于是怀疑是散热问题。其实问题出在驱动方式上而不是电流值本身。拿我最初用的开环恒压细分驱动举例。它每个电周期被细分成32步或者64步每一步给定一个固定的电压占空比。问题是电机绕组是感性负载电流不是瞬间能跟上电压的。占空比切换的瞬间电感会拖住电流的上升和下降实际电流波形跟理想正弦差得很远。特别是在静止锁轴状态下绕组里一直维持着接近额定值的电流电机不做任何机械功这些电能全部转化成热。还有一个更隐蔽的问题开环驱动器不知道转子在什么位置它永远按自己脑子里认为的“电角度”输出电流矢量。当负载变大或者转速升高转子实际位置和驱动器认为的位置之间出现偏差电流矢量和转子磁场的夹角不再是最佳出力角度一部分电流变成去磁分量力矩没增加多少绕组倒是更烫了。1.3 “发烧”不只是手感问题退磁、精度、寿命电机发热最麻烦的后果不是烫手而是退磁。钕铁硼永磁体的磁性随温度升高会不可逆地下降一般超过80℃就开始明显退磁。步进电机一旦退磁同样的电流只能输出更小的力矩为了维持出力驱动器又得加大电流电流越大越热越热磁性越差最后整台电机基本报废。发热还会带来精度问题。步进电机安装在结构件上机壳温度升高会让安装座、丝杆、联轴器跟着热膨胀。点胶机、3D打印机这类设备对重复定位精度有严格要求机构尺寸一变精度全废。长期高温工作还会加速绝缘老化。绕组漆包线的绝缘等级一般是B级130℃或者F级155℃听起来够高但在封闭机箱里长期高温运行绝缘寿命会大幅缩短。我自己就烧过一台堵转时间过长的电机最后闻到焦味才断电拆开看绕组漆皮已经发黑。2. 从“角度步进”到“电流矢量”FOC闭环的思路转变2.1 开环细分驱动本质上也是“电流矢量步进”要理解FOC闭环驱动步进电机的意义得先看清传统细分驱动在干什么。细分的本质是把一个电周期均匀切成N份每一步给A、B两相分配一组固定的电流指令I_A I_ref × cos(θ_k)I_B I_ref × sin(θ_k)其中θ_k是人为给定的第k步电角度。驱动器内部的斩波电路会让绕组电流平均值跟随这个指令。从宏观上看细分驱动输出的确实是一个“旋转的电流矢量”幅值恒定、方向逐步旋转。但问题在于这个矢量旋转完全建立在“开环假设”上驱动器认为转子会完美跟上电流矢量的方向。低速时电感引起的相位滞后不明显转子还能勉强跟上一旦需求转速提高或者负载变大转子实际位置和指令电角度之间就会出现明显偏差。这时候电流矢量依然在旋转但它和转子磁场的正交关系已经被破坏有效力矩下降、发热上升严重时直接失步。2.2 真正的FOC把交流力矩问题变成直流控制问题FOC的核心思路是引入转子位置反馈把电机内部的电流状态变换到一个和转子同步旋转的坐标系里来看。三相永磁同步电机的FOC需要先做Clarke变换把三相电流变成两相静止坐标系的iα、iβ再做Park变换得到d、q轴电流。步进电机更简单A、B两相本身就是正交的直接可以认为iαiA、iβiB省掉一步变换。Park变换公式如下id iα × cos(θe) iβ × sin(θe)iq -iα × sin(θe) iβ × cos(θe)其中θe是转子的实时电角度从编码器读取机械角度再乘以极对数得到。变换之后id是沿转子磁极方向的分量iq是垂直于磁极方向的分量。对表面式永磁电机来说id几乎不产生力矩纯粹是损耗iq则直接和输出力矩成正比。于是控制目标变得极其简洁让id0让iq跟随力矩指令。这两个都是直流量用两个普通PI环就能拉到目标值。整个复杂的交流力矩问题就这样变成了“两个直流环的稳压问题”。2.3 步进电机的电角度换算机械一圈等于50个电周期两相混合式步进电机在结构上和无刷电机有个很大的不同它的转子是一个带齿的永磁体极对数等于转子齿数。42系列步进电机常见的转子齿数是50意味着机械轴转一圈电流矢量需要旋转50个电周期。换算公式是θe θm × 极对数这个“乘以极对数”的操作看似简单却是整条控制链里最容易出错的地方之一。如果忘了乘或者乘错了Park变换得到的id、iq完全不是期望的直流量而是剧烈振荡的交流量电流环根本稳不住。而且编码器的任何安装误差、偏心误差都会被极对数放大50倍。所以步进电机FOC对编码器的精度和安装同轴度要求比普通伺服更苛刻。这也是为什么我不推荐用无感FOC方案驱动步进电机。步进电机的反电动势系数小低速下BEMF信号微弱加上齿槽力矩的干扰位置估计误差会很大。无感启动更多是PMSM无刷电机在高速轻载场合的玩法步进电机要兼顾堵转和低速大力矩老老实实装编码器才是最靠谱的路线。3. P0斩波恒流版的硬件设计驱动、采样与位置反馈3.1 先说明“P0斩波恒流版”是什么有人可能会问FOC和“斩波恒流”听起来不像一个东西为什么标题里要放在一起这里先交代一下命名由来。我做的这块驱动板上固件把A、B两相全桥的四个PWM通道编号为P0、P1、P2、P3。其中P0/P1控制A相上下桥臂P2/P3控制B相上下桥臂两对PWM互补输出并带死区。所谓“P0斩波恒流版”就是指在这个固件版本里用P0~P3这四路PWM通道做恒流斩波控制的一套实现。具体来说每个PWM周期都执行一次“采样当前电流→和指令电流比较→更新下一周期占空比”的循环让绕组电流被持续拉向目标值。这跟传统开环恒流驱动器的最大区别在于传统驱动器的“恒流”只控制电流幅值电流相位按开环角度给定P0版本的恒流斩波是作为内环存在的再往上叠了dq轴电流闭环和位置环电流相位真正跟踪转子位置。简单说斩波恒流解决“电流要多大有多大”的问题FOC解决“电流该朝哪个方向给”的问题两者各管一头合在一起才是完整的高性能步进驱动方案。3.2 主控、驱动芯片与电机搭配F103够用别被算力焦虑带偏这套系统的主控我用的是STM32F103RCT6。很多人一听FOC就想到要上更高端的芯片实际跑下来发现F103完全够用。电流环跑10kHz加上Park正反变换和SVPWM占空比计算单次中断大概在20到30微秒CPU占用率不到三分之一。机器码里三角函数的计算可以用查表法优化把占用率压得更低。系统整体搭配如下部件选型说明主控STM32F103RCT672MHz主频12位ADC高级定时器TIM1/TIM8输出互补PWM驱动芯片DRV8833双H桥单路峰值2A带死区适合42步进电机1.5A级电流电流采样两个0.05Ω低侧采样电阻 INA240A3运放增益100V/V共模抑制强适合PWM斩波环境编码器AS5600磁编码器或500线增量编码器AS5600每圈4096方便增量编码器精度更高电源24V直流兼顾高速力矩和低速占空比分辨率如果目标是驱动57步进电机或者更大电流的电机DRV8833就不够用了需要换成外置MOSFET全桥或者更大电流的驱动芯片但控制逻辑基本不变。3.3 电流采样是整套系统最容易翻车的环节硬件设计里我最想强调的就是电流采样。低侧采样电阻上的电压波形在MOSFET开关瞬间会有严重的振铃如果ADC恰好在开关沿附近触发采样读到的电流值会是一个尖峰而不是真实平均值。这个尖峰进入电流环反馈轻则电流噪声大重则会导致电流环误判断绕组里出现多余的谐波电流电机反而更烫。解决办法有几个我按优先级排列使用中心对齐PWM把ADC触发点放在定时器计数下溢时刻此时各桥臂已经稳定开关。在下溢中断里延时2到5微秒再启动采样等振铃衰减。采样电阻的布线用开尔文接法采样信号线走差分对远离PWM走线和功率地。电流采样电阻的选型也有讲究。0.05Ω的电阻在1.5A电流下功耗是0.11W看似不大但持续堵转时会发热温漂会让阻值漂移导致电流反馈增益不准。建议用低温度系数的合金采样电阻并按2倍以上功耗裕量选型。另外运放存在零点漂移上电时不要让MOSFET直接开始斩波应该先让所有PWM输出高阻把ADC采几轮作为零点校准值存下来。否则id、iq会有几十毫安的偏置短期看不出问题跑时间长了位置环会累计误差。4. 软件实现初始定位、电流环与三环控制的关键逻辑4.1 上电定位转子初始位置检测不只是“转一下”的问题FOC控制里电角度是Park变换的基准。上电瞬间不知道转子在哪整个变换就是错的所以第一步必须解决转子初始位置检测。最稳妥的方法是对齐法。上电后给一个固定电流矢量比如id0.3A、iq0电角度取0相当于A相通正向电流、B相电流为0。转子在电磁力矩作用下会被拉到A相磁场轴线上。等待300到500毫秒让转子完全稳定然后把编码器当前值清零作为电角度零点。这个方案实现简单、定位可靠缺点是上电瞬间电机会“咔”地转动一个小角度有些机械结构不允许。如果机构不允许上电转动可以改用短脉冲扫描法。在0°、30°、60°……每30°方向施加一个短促的电流脉冲比如0.5A保持50ms比较每个方向下转子的微小位移或者电流响应响应最大的方向就是转子磁极方向。这个方法运动幅度小很多但精度不如对齐法需要电流环在后面做修正。实战建议只要能接受上电动一下优先用对齐法。它省代码、省调试时间可靠性最高。我在点胶机上就是这么干的上电瞬间会有一个不到1°的动作不影响结构。4.2 电流环代码框架与PI整定经验电流环是整个FOC控制的基石固定频率跑10kHz。每个PWM周期的核心流程是读取ADC拿到A、B两相电流ia、ib。读取编码器计数值换算电角度θe (编码器位置 × 每脉冲机械角 × 极对数) mod 2π。静态变换加Park变换得到id、iq。计算电流误差两个PI控制器分别输出Vd、Vq。反Park变换得到Vα、Vβ。转换成PWM占空比输出。代码骨架大致如下void CurrentLoop_IRQ(void) // 10kHz { float ia ADC_GetCurrentA() - offsetA; float ib ADC_GetCurrentB() - offsetB; float theta_e encoder_count * ENCODER_TO_RAD * POLE_PAIRS; theta_e fmodf(theta_e, 2.0f * PI); // Park变换 id ia * cosf(theta_e) ib * sinf(theta_e); iq -ia * sinf(theta_e) ib * cosf(theta_e); // 双PI电流环 Vd PI_id_Update(ID_REF, id); Vq PI_iq_Update(IQ_REF, iq); // 反Park变换 Valpha Vd * cosf(theta_e) - Vq * sinf(theta_e); Vbeta Vd * sinf(theta_e) Vq * cosf(theta_e); // 更新PWM占空比 PWM_SetDutyByVoltage(Valpha, Vbeta); }其中ID_REF通常设为0IQ_REF来自速度环输出或者直接作为力矩指令。PI参数整定我建议按下面的路径走不要一上来就猛加Kp。第一先把id环和iq环的Kp从0.5开始往上加给iq一个阶跃指令观察电流波形。出现振荡就降一点直到阶跃响应又快又稳。第二Ki从较小值开始加消除稳态误差但注意积分别太强否则在采样噪声和反电动势扰动下会出现低频振荡。第三电流环输出必须做限幅Vd、Vq限到最大相电压的80%左右留出线性调制余量过调制会导致电流波形畸变发热反而上升。关于电流环带宽经验公式是不要超过PWM频率的1/10。我用20kHz PWM的时候电流环带宽就压到1.5kHz到2kHz之间。42步进电机的相电感在毫亨级电气时间常数本来就慢硬把电流环带宽推高只会换来振荡和啸叫。4.3 三环结构和力矩控制让力控、堵转保护、ENA释放都落地电流环稳定之后往上叠加速度环和位置环就顺理成章了。我的控制周期分布是电流环10kHz速度环和位置环1kHz。结构上就是教科书里的三环串联位置环输出速度指令速度环输出电流指令IQ_REF电流环执行到PWM占空比。这套结构的价值在于如果你只需要“恒定力矩输出”比如做力控关节或者张力控制可以完全绕开位置环和速度环直接给IQ_REF一个常数值。电机就会输出一个与iq近似成正比的力矩这就是标题里说的“精准力矩控制”。力矩和iq的换算系数可以根据电机Kt值和堵转测试标定实测下来电流稳定时力矩波动很小。力矩控制还必须解决堵转保护问题。堵转状态下速度环输出会一直饱和在限幅上电流环顶在IQ_MAX这时候绕组热积累非常快。我的做法是加了一个I²t热模型每100ms计算一次绕组温升估算值按一阶热惯性衰减超过阈值就自动降低IQ最大限幅。这样既能短时间输出峰值力矩又不会让电机长时间高温运行。ENA信号在闭环FOC里依然有用。ENA有效时PWM正常输出电机保持力矩ENA无效时所有PWM输出高阻电机进入自由状态可以手动盘车也方便系统急停时释放负载。如果想让“释放”变成“软释放”可以把位置环参数调软或者降低iq限幅让电机有保持力但又能被推动这个在实际机构调试里非常实用。5. 实测对比与调参避坑数据说话问题逐个击破5.1 三套驱动方案的实测数据温度、噪声、低速稳定性为了验证P0斩波恒流版FOC方案的实际效果我在同一台42步进电机、同一个24V电源下做了对比测试。电机额定电流1.5A相电阻1.2Ω相电感约9mH室温25℃。三套方案分别运行空载运行10分钟、堵转保持额定力矩15分钟记录表面温度和噪声表现。指标开环恒压细分传统开环恒流斩波P0斩波恒流FOC闭环空载10分钟表面温度约62℃约54℃约45℃堵转15分钟表面温度约91℃约68℃约53℃1米处听觉噪声明显高频嗡声中低频嗡嗡声基本不可闻最低稳定转速无爬行约5r/min约2r/min0.1r/min堵转力矩波动不可控波动明显±3%以内高转速丢步情况偶尔丢步偶尔丢步无丢步这个结果基本符合我对三套方案的预期。FOC温度最低的核心原因是电流波形接近理想正弦谐波成分少而且id被控制在0没有多余的直轴电流在绕组上白白发热。堵转状态下iq被精确限制在“刚好产生设定力矩”的大小不会像开环恒流那样始终顶满额定电流。要强调的是FOC并不是“不发热”。同样堵转输出大扭矩铜损依然存在只是发热效率更高、浪费更少。长时间堵转依然需要I²t保护这点别抱侥幸心理。5.2 三个必须讲清楚的踩坑记录第一个坑是电流采样尖峰。刚开始我把ADC触发点放在PWM周期的中点结果电流环一上电就进入保护。后来用示波器看ADC引脚发现MOSFET开关瞬间有接近2V的尖峰ADC采样值乱跳。把采样点挪到定时器下溢中断并延时2微秒之后波形才干净。这个问题的排查顺序是先看采样波形再动PI参数顺序不能反。第二个坑是编码器方向接反。FOC系统里编码器方向错误是灾难性的Park变换完全错位电流环输出的电压方向是反的电机会越转越快形成正反馈电流瞬间冲顶。我排查的时候给了一个很小的iq指令观察转子是否朝预期方向转动发现方向反了之后把编码器计数方向取反就恢复了。新板子调机时务必在空载、小电流下先验证编码器方向。第三个坑是电流环啸叫。刚开始我把电流环带宽调到3kHzPWM频率还是20kHz结果电机在某些位置出现高频“吱吱吱”的绕组声听感非常刺耳。把带宽降回1.5kHz之后啸叫消失。后来我总结出经验电流环带宽控制在PWM频率的1/20到1/10之间对步进电机这种电感变化大的负载尤其重要。5.3 容易被忽略但决定成败的细节还有一个坑是编码器安装偏心。AS5600磁编码器如果磁铁和芯片不同轴输出角度会带一个周期性误差。这个误差被极对数放大50倍之后反映到电角度就是很大的波动力矩纹波明显。我最初装的时候没注意同心度低速转起来电机一顿一顿的重新调整安装位置后才好转。电流采样电阻的温漂也值得一说。0.05Ω的合金采样电阻在额定电流下本身功耗不大但如果长时间堵转电阻温度升高阻值漂移会让电流反馈增益跟着变。用低温度系数采样电阻并按2倍以上功耗裕量选型能避免这个隐患。PWM死区设置也不能马虎。DRV8833这类驱动芯片内置了死区用起来省心。换成外置MOSFET全桥方案时死区必须在软件或硬件上处理否则上下管直通立刻就炸。死区太小会直通太大电流波形失真一般控制在几百纳秒到1微秒之间具体看你用的MOSFET关断延迟。最后补充一个选型建议。母线电压用24V是比较折中的选择12V也能驱动42步进电机但高速段力矩掉得很快低速小占空比区间的分辨率也不够理想48V可以压榨高速性能但对电机绝缘和驱动器耐压要求更高。做一般精度设备24V省心又够用。如果你现在也在跟步进电机的发热和低速爬行问题较劲我的建议是别急着换更大电流的电机也别先怪散热设计。先把驱动方式从开环改成闭环把电流采样和编码器方向这两件事做扎实FOC其实就成功了一大半。我最初改这套P0斩波恒流版的时候光是采样尖峰和方向问题就花了两天但一旦电流环稳定下来后面的速度环、位置环、力矩限制都是在同一个骨架上加环而已。后面不管是做力控、做低速直驱还是做板球平衡这类对低速平稳性要求极高的系统这套驱动逻辑都能直接复用。
返回列表