ARTICLE DETAIL

资讯详情

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

四足机器人关节FOC调试实战:从磁编码器校准到SVPWM避坑指南

四足机器人关节FOC调试实战:从磁编码器校准到SVPWM避坑指南 四足机器人这个圈子这两年从实验室一路卷到了创客和中小团队。大家聊得最多的不再是能不能走而是走得多稳、多安静、多省电。而决定这三件事的往往不是那条腿的机械结构而是藏在关节里的那颗无刷电机和它背后的FOC控制。我前后调过几套四足平台的关节驱动从最早的方波六步换相一路踩到现在的磁场定向控制最深的体会是FOC这东西理论看着优雅落地全是细节。磁编码器装偏一点、极对数填错一位、SVPWM的死区没配对机器人站起来就是抖、就是叫、就是发热。这篇就把我从磁编码器校准到SVPWM调试这一整条链路上踩过的坑、验证过的参数和排查思路完整摊开讲一遍适合正在做关节电机驱动的朋友对照着复现。1. 先搞清楚四足关节为什么非FOC不可1.1 四足关节的负载特性和普通云台完全不是一回事很多人第一次做四足关节会拿航模云台或者轮毂电机的经验往上套结果一上电就发现不对劲。四足关节的负载有几个非常鲜明的特征低速大扭矩、频繁正反转、负载突变剧烈、还要能站得住。机器人静止站立时关节电机其实在做一个类似堵转保持的动作这时候电流是持续的直流分量转速接近零一旦迈步又要在几十毫秒内完成加速、减速、换向。这种工况对驱动的要求和云台那种平滑匀速转完全是两个世界。方波六步换相在这种场景下会暴露两个致命问题。第一是转矩脉动六步换相每60度电角度才换一次相换相瞬间转矩会掉一个坑反映到腿上就是每走一步都有一声咯噔四足本来就靠力矩控制平衡这种脉动直接干扰姿态环。第二是低速效率低六步换相在低速时电流波形严重偏离正弦铜损大、发热快关节连续工作十几分钟就烫手。FOC的价值就在这儿体现出来了。它把三相电流通过Clarke变换和Park变换投影到随转子旋转的dq坐标系上d轴管励磁、q轴管转矩两个量解耦之后可以分别做PI闭环。这样出来的电流是连续正弦的转矩平滑低速也能精确控制力矩。对四足来说能精确控制力矩这件事本身就是刚需因为足式机器人的平衡本质上就是力控问题。1.2 电流环、速度环、位置环到底谁管谁刚上手的人容易把三个环的关系搞混。我用一个生活化的类比把关节想象成你用手推一扇很重的门。电流环是最内层相当于你手臂肌肉瞬间发出的力响应最快通常1kHz到20kHz它决定了这一刻用多大力。速度环是中间层相当于你控制推门的速度它给电流环下该用多大力的指令通常几百Hz到1kHz。位置环是最外层相当于你决定门停在哪个角度它给速度环下指令通常100Hz到500Hz。四足关节里位置环往往不放在电机驱动器里而是放在机器人的主控或者关节控制器上因为要跟全身的步态规划、平衡算法耦合。驱动器通常只做到电流环速度环甚至只做电流环把力矩直接暴露给上层。这也是为什么四足关节驱动特别强调力矩控制带宽——上层要的是给我50毫牛米你得又快又准地给出来。提示如果你打算做力控步态驱动器最好支持力矩模式本质是电流环直接给定而不是只给速度模式。速度模式再套一层力控带宽会被拖垮。1.3 无感FOC在四足上到底能不能用热词里pmsm无感foc控制很火但我要泼一盆冷水四足关节不建议用无感。原因很直接无感FOC靠反电动势估算转子位置而反电动势和转速成正比。四足关节大量时间工作在零速和极低速站立保持、缓慢重心转移这时候反电动势几乎为零估算器直接失效。你会在机器人静止时看到电机抽搐或者干脆失控。所以四足关节基本都用磁编码器做有感FOC。常见的是AS5047、AS5600、MT6701这类磁性角度传感器装在电机轴尾端配合径向充磁的磁铁。这就引出了下一个大坑——编码器校准。2. 磁编码器校准90%的抖动都出在这一步2.1 磁编码器到底测的是什么为什么必须校准先纠正一个常见误解磁编码器输出的角度是机械角度而FOC需要的是电角度。两者关系是电角度 机械角度 × 极对数比如一个14极对的电机机械转一圈电角度转了14圈。FOC的Park变换必须知道当前电角度才能把电流准确地投到q轴上。如果电角度错了你给的q轴电流有一部分跑到d轴上去了结果就是出力变小、发热变大、还可能反向。那为什么不能直接算因为编码器芯片装上去的时候它的零点和电机转子的磁极零点不可能天然对齐。芯片焊在板子上、磁铁粘在轴上中间有装配误差这个偏差就是电角度偏移量必须通过校准测出来写进固件里做补偿。2.2 两种校准方法强制对齐法和旋转扫描法我实测下来工程上常用两种校准思路各有适用场景。第一种强制对齐法也叫d轴对齐原理很简单给电机d轴通一个固定电流q轴给零这时候电机转子会被强行吸到d轴对齐的位置此时电角度理论上就是0。然后读编码器值反推出偏移量。操作步骤大致是开环给Ud 某个小电压比如额定电压的5%~10%Uq 0电角度固定给0。等待转子稳定几百毫秒此时转子磁极和定子d轴对齐。读取编码器机械角度乘以极对数得到电角度这个值就是偏移量。把偏移量写入固件后续所有电角度计算都减去它。这个方法快但精度受摩擦力和齿槽转矩影响。如果关节有减速器摩擦力大转子可能停不到真正的对齐点偏差几度很常见。第二种旋转扫描法更推荐让电机缓慢匀速旋转一整圈开环拖动同时高频采样编码器角度和施加的电角度做线性拟合求出偏移量。因为采样点多能平均掉摩擦和齿槽的影响精度明显更高。我一般用下面这个流程// 伪代码旋转扫描校准 float elec_angle 0; float sum_offset 0; int samples 0; for (int i 0; i 2000; i) { elec_angle 0.01f; // 缓慢增加电角度 set_openloop_voltage(Ud, 0, elec_angle); // 开环拖动 delay_us(500); float mech read_encoder(); // 读机械角度 float elec_from_enc mech * POLE_PAIRS; float offset normalize(elec_angle - elec_from_enc); sum_offset offset; samples; } float final_offset sum_offset / samples;注意扫描速度一定要慢快到反电动势明显的时候开环拖动会失步。我一般控制在每秒转1/4圈以内。2.3 校准做完了怎么验证一个反直觉的判据校准完别急着上闭环先做验证。我的判据是给q轴电流电机应该平滑旋转且电流波形接近正弦。具体做法开环给Uq 小电压Ud 0电角度用校准后的值递增。如果校准正确电机应该平稳转动用示波器看相电流是漂亮的正弦波。如果校准错了你会看到电流波形畸变、电机一顿一顿、甚至某个位置卡住。还有一个更狠的验证正反转让电流对称。正转和反转时同样的q轴电压下相电流幅值应该基本一致。如果正转电流大、反转电流小说明偏移量有系统性误差通常是差了一个固定角度回去重新校准。我踩过最坑的一次是磁铁偏心。磁铁没粘正转一圈的过程中气隙变化编码器读数非线性校准出来的偏移量是个平均值但实际每个角度都有误差。表现就是电机在某个特定角度区间特别抖。后来换了带安装卡位的磁铁座才解决。所以磁铁的同心度比校准算法本身更重要这是硬件层面的基本功。3. SVPWM调试从能转到转得好之间的那道坎3.1 SVPWM到底比SPWM强在哪空间矢量脉宽调制SVPWM是FOC的标准输出级。很多人知道它电压利用率高15%但不太清楚为什么。简单说SPWM是三相各自独立和三角波比较最大输出线电压只有母线电压的0.866倍SVPWM是把三相当成一个整体矢量来合成最大能到母线电压的1.0倍准确说是1/√3的相电压幅值对应母线电压。对四足关节来说这15%的电压利用率意味着同样的母线电压下能输出更大扭矩或者同样扭矩下母线电压可以更低对电池供电的机器人很实在。SVPWM的核心是判断目标电压矢量落在哪个扇区然后用相邻两个基本矢量和零矢量去合成。六个基本矢量把平面分成六个60度扇区。实现上有查表法和实时计算法我一般用实时计算代码量小、精度够。3.2 死区时间设小了炸管设大了波形烂死区时间是SVPWM调试里最容易被忽视、又最要命的参数。因为上下桥臂不能同时导通会直通短路所以每次切换时要在上下管之间插入一段都关断的时间这就是死区。死区设多大取决于MOSFET或IGBT的关断时间加上驱动电路的延迟。经验公式死区时间 开关管关断延迟 驱动芯片传输延迟 余量我用的MOSFET关断延迟大概100ns驱动芯片延迟200ns所以死区设500ns比较稳妥。设太小上下管直通瞬间大电流管子直接冒烟设太大输出电压畸变严重低速时电流波形出现明显的平顶转矩脉动变大。死区带来的另一个问题是死区补偿。因为死区期间输出电压不受控实际输出电压和指令值有偏差尤其在电流过零点附近会造成波形畸变。工程上常用基于电流极性的补偿检测相电流方向在死区期间给对应相补一个电压。这个补偿做得好低速波形会干净很多。提示死区补偿的符号一定要跟电流方向对应搞反了会加剧畸变而不是改善。调试时先关掉补偿看基线波形再打开对比。3.3 开关频率怎么选不是越高越好开关频率PWM频率的选择是个权衡。频率高电流纹波小、噪声小、动态响应快但开关损耗大、驱动芯片发热、对MCU算力要求高。四足关节我一般选16kHz到20kHz。为什么是这个区间两个原因一是超过20kHz进入人耳听觉上限电机啸叫听不见机器人动作更安静二是这个频率下电流纹波可以接受同时大多数MCU比如STM32F4、G4系列还能跑得动完整的FOC算法。如果你用的是算力有限的MCU可以降到10kHz但要注意电流采样窗口。FOC需要在PWM周期的特定时刻采样相电流通常是下桥臂导通、电流流过采样电阻的时候。频率越高采样窗口越窄对ADC和运放的速度要求越高。我遇到过采样窗口太窄导致电流采样不准、闭环震荡的情况最后是把开关频率降到16kHz才稳定。3.4 电流采样单电阻、双电阻还是三电阻电流采样方案直接决定成本和精度三种主流方案对比如下方案原理优点缺点适用场景单电阻母线一个采样电阻靠PWM时序重构三相电流成本最低算法复杂低速盲区大低成本风扇、水泵双电阻下桥臂两个采样电阻成本适中算法简单有采样盲区大多数关节驱动三电阻下桥臂三个采样电阻全周期可采样精度高成本高占板面积大高性能伺服四足关节我推荐双电阻或三电阻。单电阻虽然便宜但低速时采样窗口不够而四足恰恰大量工作在低速得不偿失。三电阻最省心如果板子空间和成本允许直接上三电阻调试能省一半时间。采样电阻的阻值也要算。假设最大相电流20A采样电阻0.5毫欧那最大压降10mV配合运放放大20倍到200mV正好落在ADC量程内。阻值太大发热严重太小信噪比差一般选0.5到2毫欧之间。4. 从能转到转得稳闭环调试的实战顺序4.1 电流环PI整定先慢后快先P后I电流环是FOC最内层必须最先调好。我的顺序是先只开PI给0。慢慢加大P直到电流能跟上阶跃指令但开始出现小幅震荡。回调P到震荡消失留一点裕度。再加I从小往大加消除稳态误差。I太大会超调、震荡太小稳态误差消不掉。观察阶跃响应理想状态是快速上升、小幅超调、快速稳定。电流环带宽一般做到1kHz以上。有个实用技巧给q轴一个方波电流指令用示波器看实际电流跟随情况比看波形猜参数直观得多。4.2 速度环和电流环的带宽要拉开速度环套在电流环外面带宽必须比电流环低一般低5到10倍。如果速度环带宽接近电流环两个环会互相干扰系统震荡。我一般把电流环做到1.5kHz速度环做到200Hz左右。速度环整定逻辑和电流环类似但要注意机械惯量的影响。四足关节带减速器折算到电机侧的惯量可能比电机本身大很多速度环的P不能给太大否则会震荡。如果发现速度环怎么调都震荡先检查惯量比必要时加前馈或者陷波滤波器抑制机械谐振。4.3 位置环和力控四足真正关心的东西前面说过四足的位置环和力控往往在上层。但驱动器要提供干净的力矩接口。这里有个关键点力矩指令的线性度。理想情况下q轴电流和输出力矩成正比乘以转矩常数Kt。但实际中因为磁路饱和、齿槽转矩、摩擦线性度会打折。我一般会做一次力矩标定给一系列q轴电流用扭矩传感器测实际输出力矩拟合出实际的Kt曲线必要时做分段补偿。对四足来说站立时关节输出的是静态保持力矩这时候电流是直流要特别注意温升。持续大电流会让电机和驱动器发热电阻随温度上升同样的电压下电流会变化形成正反馈。所以力矩模式最好带温度补偿或者限制持续电流。5. 那些让我熬夜的坑完整排查链路复盘5.1 电机一上电就抖从编码器到极对数的排查顺序现象电机上电闭环后剧烈抖动像抽筋一样。我的排查链路是这样的先确认极对数。这是最常见的错误。极对数填错电角度直接错必抖。查电机手册或者用示波器反拖电机看反电动势周期数。再确认编码器方向。编码器计数方向和电机正转方向必须一致。如果反了电角度递增变递减也会抖。解决办法是在固件里取反。然后确认校准偏移量。重新做一次旋转扫描校准。最后看电流采样极性。采样电阻接反电流符号错闭环会正反馈发散。这个顺序是从最可能到最不可能排的实际中极对数错误占了大概一半。5.2 低速爬行时的电流啸叫死区和采样窗口的锅现象电机低速转动时发出刺耳啸叫电流波形有毛刺。排查下来通常是两个原因。一是死区太大低速时死区占比高波形畸变。把死区从1us降到500ns啸叫明显减轻。二是电流采样时刻不对采到了开关噪声。解决办法是调整采样时刻让采样点落在PWM周期中间、电流稳定的位置同时在ADC前加RC滤波。5.3 高速失步反电动势和母线电压的博弈现象电机转速上到某个值就失步、失控。这是母线电压不够了。电机高速旋转时反电动势升高当反电动势接近母线电压就没有余量去驱动电流FOC失控。解决办法要么提高母线电压要么做弱磁控制给负的d轴电流削弱磁场降低反电动势。四足关节一般转速不高这个问题不常见但如果你的关节要快速摆动就要留意。5.4 关节发热严重不一定是电流大现象关节工作一会儿就烫。很多人第一反应是电流太大其实未必。我遇到过几次最后发现是开关损耗。开关频率设太高MOSFET开关损耗大驱动器发热热量传导到电机。把开关频率从20kHz降到16kHz温度降了十几度。另一个原因是死区补偿没做导致无效电流大铜损高。6. 一套可复用的调试检查清单调了这么多套我总结了一份上电前的检查清单每次新板子都过一遍能省下大量返工时间。检查项判据常见错误极对数与电机手册一致填成极数而非极对数编码器方向正转时计数递增方向反了没取反校准偏移量正反转电流对称磁铁偏心导致非线性死区时间500ns~1us太小炸管太大畸变开关频率16k~20kHz太高发热太低啸叫电流采样阶跃响应干净采样时刻落在噪声区电流环带宽1kHzP太大震荡速度环带宽电流环的1/5~1/10两环带宽太近互相干扰这份清单不是死的但每一项背后都是真金白银换来的教训。尤其是极对数和编码器方向这两项看起来最基础出错率却最高。7. 关于工具和器件的几点个人选择调试FOC工具比想象中重要。我强烈建议手边常备电流探头和示波器看相电流波形是排查问题的第一手段比盯着串口打印的数字有用得多。没有电流探头至少要有能看波形的方式。MCU方面STM32的G4和F4系列都带硬件FOC加速CORDIC、FMAC跑起来很轻松。如果预算有限国产的一些电机专用MCU也能用但生态和文档要差一些新手建议从STM32起步。编码器我偏爱AS5047PSPI接口14位分辨率自带诊断功能能读出磁场强度和错误标志调试时能直接判断磁铁装得好不好。MT6701也不错便宜但诊断信息少一些。驱动芯片小功率用DRV8313、DRV8323这类集成方案省事大功率就得上分立MOSFET加栅极驱动这时候死区和布局就格外重要PCB走线要短、要对称否则三相不平衡。最后说一句实在话FOC调试没有捷径理论要懂但真正让你调通的是一次次看波形、改参数、再验证的过程。我见过太多人卡在编码器校准这一步就放弃了其实只要把校准做扎实后面SVPWM和闭环都是水到渠成的事。四足机器人关节这个方向硬件和算法的门槛都在下降真正拉开差距的是这些藏在细节里的工程功力。
返回列表