ARTICLE DETAIL

资讯详情

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

FOC位置闭环原地抖动排查:8个关键点从根因到调试

FOC位置闭环原地抖动排查:8个关键点从根因到调试 一直不信FOC位置闭环这种系统能把我难住直到那天电机在桌面上原地抖了起来——转速反馈清零目标位置固定可电流波形在示波器上像锯齿一样来回撞声音还带着一种沉闷的高频嗡嗡声。那会儿我手边就是一块STM32F103RCT6的板子、一个带编码器的无刷电机、一台DS138示波器外加一堆调了一半的FOC代码。说实话FOC位置闭环的原地抖动几乎人人都能遇到但真正能从现象一路追到根因、一次调明白的人并不多。这篇文章就把我当时排查的完整思路整理出来围绕8个关键点展开附带我实测时的波形特征和参数调整逻辑。如果你也在调无刷电机FOC位置闭环、手头有示波器和串口调参工具这篇应该能帮你少走不少弯路。1. 先把问题定性是电抖还是机械抖再动手改参数很多第一次调位置闭环的人遇到抖动第一反应就是PID参数没调好然后开始一顿乱拧。这个方向不能说错但十有八九会越调越乱。因为原地抖动的原因不只在控制环里机械结构、编码器反馈、供电能力都可能成为抖动源。你先花十分钟把问题定性后面调整才不会抓瞎。1.1 现场现象上电回零不到一秒钟电机开始原地抖起来我那次调试的硬件组成其实很普通STM32F103RCT6做主控Timer1产生PWM驱动板是常见的三相全桥电机是带1000线光电编码器的无刷直流电机也可以按PMSM处理电流采样用的是双电阻方案FOC算法跑在定时器中断里PWM频率10kHz电流环中断频率10kHz速度环和位置环降到1kHz跑。上电流程是先做转子初始位置检测然后使能电流环、速度环、位置环。现象是电机归零后大概0.5秒轴开始在一个很小的角度范围内来回晃晃动的幅度大约3到5度频率大概4Hz左右同时明显能听到一种咯咯咯的声音。示波器接在Iq指令和Iq反馈两个测试点上可以看到Iq指令在正负1A之间来回跳波形有点像三角波而Iq反馈波形比指令滞后了明显一截并且在每次换向时有一串毛刺。这个现象很容易被误判成位置环超调。实际上等我断开位置环、只给速度环一个零速指令电机照样抖只是抖动幅度小了一点。所以第一个结论是这不是单纯的位置环超调而是从速度环往下的某层已经在振荡了。1.2 快速定性方法断电、手捏、看电流三步走在拆解8个关键点之前我先分享三招常用的定性方法这些方法不需要改代码一条条试过去就能把范围缩小很多第一招断电自由滑动。把驱动器功率部分禁用用手去转电机轴感受阻力是否均匀。如果某个位置有明显卡滞说明机械装配有问题比如电机轴和负载不同心、减速箱齿轮咬合过紧。卡滞带来的扰动力矩会让位置环不停地修正最终表现为抖动。第二招手捏轴看声音变化。电机通电抖动时用手轻轻捏住电机轴或者给轴加点阻尼。如果抖动明显减弱、声音变闷说明振荡是控制环与机械负载之间相互作用的结果多半和机械谐振或者负载惯量比过大有关。如果手捏后抖得更厉害那说明控制环增益已经过高处于临界稳定状态。第三招强制开环看电流波形。在代码里屏蔽位置环和速度环直接给定一个固定的q轴电压比如0.5V然后观察三相电流波形。如果开环情况下电流波形都不干净、有毛刺或明显波动那问题在电流采样或功率级而不是位置环参数。我当时这三步做完判断是电气侧和控制环发出来的抖动但也保留了对机械谐振的怀疑。带着这个结论我才开始进入8个关键点的逐一排查。2. 八个关键点中的信号链部分位置检测与电流环FOC位置闭环是一个级联结构位置环输出速度指令速度环输出电流指令电流环输出PWM占空比。信号从位置反馈、电流反馈到PWM输出经过的每一个环节都可能把噪声或误差放大成抖动。这4个关键点全部集中在信号链上是排查抖动时优先级最高的区域。2.1 关键点一转子初始位置检测偏差先说明一点位置闭环里说的位置是机械角度而FOC控制的电流矢量需要的是电角度。如果初始位置检测给出的电角度和真实电角度之间存在偏差那么所谓的iq、id就不是真正的交轴、直轴电流一部分电流会被映射到错误的轴上转矩输出和指令完全对不上。常见的初始位置检测有两种做法一种是对齐法直接给一个固定的电压矢量把转子拉到已知位置另一种是高频注入法利用电机的凸极效应或饱和特性解算位置。我调试时用的是带编码器的系统相对简单但踩了一个坑每次上电都对齐到一个位置可这个位置并不是真实的编码器零位导致电角度零位和编码器零位始终有个固定偏差。这个偏差会造成什么现象当位置环把机械位置稳定在目标点附近时电角度误差始终存在。比如误差20度那么q轴电流产生的力矩会有一部分变成d轴分量实际输出力矩变小位置环发现问题后又加大电流指令结果电机就在目标点附近反复过冲、回调形成低频抖动。在示波器上看Iq反馈波形会有一个明显的偏置而且你给再大的位置环P电机依然在一个小范围内晃。处理办法有两个第一在正式跑位置闭环之前做一次完整的电角度-编码器零位校准把校准偏移量存进Flash而不是每次上电都依赖对齐法。第二如果必须用对齐法至少做三次不同方向的强制对齐取平均值或交叉验证避免转子摩擦力和负载导致的停位不一致。提示如果项目里用的是无感FOC零速初始位置检测会更麻烦反电动势观测器在零速时没有有效信号通常需要高频注入或I/F强拖启动。那种情况下的原地抖动根因会更深建议单独做一轮排查别和带编码器的调试混在一起。2.2 关键点二电流环带宽与采样时序电流环是FOC整个系统的最内环它的性能直接影响速度和位置环能调多高。电流环带宽不够速度环和位置环的增益一上去就会振荡电流环自身参数过高也会直接让电机高频颤抖。先说容易踩的采样时序问题。很多新手在单电阻或双电阻采样时没有注意ADC采样时刻和PWM中心的关系。FOC电流采样有个原则要在PWM周期的中点、也就是上下桥臂都导通的时间窗口内采样才能采到真实的相电流平均值。如果采样点落在开关边沿附近采到的电流包含大量开关噪声电流反馈波形又脏又毛电流环PI为了追这个脏信号输出自然也是抖动的。我当时用示波器看相电流波形发现每个PWM周期都有高频毛刺幅度甚至超过正弦基波幅度的10%。后来把ADC采样时刻配置到TIM1的TRGO事件、也就是PWM周期中点毛刺立刻小了很多。再一个就是电流环带宽的取值。工程上有个粗略的经验电流环带宽大致取PWM频率的1/10到1/20。10kHz的PWM电流环带宽做到500Hz到1kHz是合理的。对应的PI参数可以用如下方式估算对于表贴式PMSMd轴和q轴电感近似相等设相电阻为R相电感为L期望电流环带宽为ωbrad/s那么比例增益Kp ≈ L × ωb积分增益Ki ≈ R × ωb。这个公式基于一阶惯性系统零极点对消算出来之后还要用示波器看阶跃响应。如果电流反馈出现几次振荡再稳定说明带宽估高了适当减小Kp如果上升太慢再加大。不要指望一次计算就完美电机参数本身就随温度变化留30%的裕量比较稳妥。还有一个细节电流反馈上的RC滤波电容不能太大。有些电路为了把PWM噪声滤干净在采样运放输出端加了一个100nF甚至1μF的电容结果电流环带宽被电容限制相位裕度下降位置环一加增益就振荡。2.3 关键点三位置环PID里的积分项是抖动重灾区我见过太多人在位置环里照搬PID三段式把积分项也加进去然后开始纠结为什么电机总在目标位置附近来回走。这个问题几乎可以算作FOC位置闭环调试里最常见的一个认知盲区。位置环的输出是什么对伺服系统来说位置环的输出是速度指令。速度是由速度环去跟踪的速度环的积分项已经能消除稳态误差。如果你在位置环再加一个积分项相当于在一个本身带宽相对较低的环路上引入滞后位置误差一旦积累积分输出就会继续推着速度指令往前走等到了目标位置又因为积分还顶着直接冲出目标冲出去之后误差反号积分又开始反向积累。最后的结果就是极限环振荡电机在目标点附近来回穿越误差波形看着像三角波频率在几Hz到十几Hz之间。我当时把位置环的I项清零抖动立刻减弱了大半。正确的级联做法是位置环只用P最多加一点微分D作为阻尼位置环输出的速度指令进入速度环由速度环的PI来保证稳定跟随。位置环P的工程起步值可以这样算如果位置环输出是角速度指令单位rad/s输入是位置误差单位rad那么Kp的单位就是1/s。位置环带宽通常取速度环带宽的1/5到1/10比如速度环带宽做到20Hz位置环P可以先取 2π×4 ≈ 25左右再根据响应调整。D项要非常克制。很多编码器分辨率有限1000线的编码器一个计数的角度就是0.09度位置误差微分出来的速度噪声非常大。D项稍微加多你会发现电机不抖了但换成一个极高频的微颤那就只是把低频抖动转化成了高频噪声。2.4 关键点四速度前馈别急着加前馈这个问题严格来说不是抖动源但它是很多人越调越乱的元凶之一。网上很多调试教程都喜欢讲加前馈可以减小跟随误差于是有人一看到位置波形有跟随误差就开始加前馈结果发现原地抖动更明显了。原因很简单前馈是基于位置指令的差分来计算速度前馈量的而差分操作对编码器噪声和位置指令噪声极其敏感。如果位置指令本身是固定值原地抖动时根本不存在跟随误差加前馈完全没有意义如果是小幅正弦运动差分出来的速度信号带噪声乘以前馈系数灌进速度环反而引入激励。正确的顺序是先把纯反馈系统调稳定电机在目标位置稳稳停住再考虑前馈。前馈系数也要从0慢慢往上加同时观察曲线误差。如果加到0.3附近发现速度环开始有高频噪声先停下来要么降低前馈系数要么在速度反馈上加一个合适带宽的低通滤波。前馈是用来提升连续运动跟随性能的不是用来治抖动的。3. 八个关键点中的机械与系统部分编码器、负载与电源很多嵌入式工程师习惯把所有问题归结到代码和参数上忽略了一个事实电机轴连着的物理世界从来不按照理想模型运行。编码器装偏了、负载晃了、电源软了这些看起来不相关的因素最终都会在示波器上变成抖动的波形。下面4个关键点就是专门排查这些电路板之外的问题。3.1 关键点五编码器零位和安装偏心的组合影响先说零位。编码器零位和电机电角度零位如果没有严格对齐那么整个电角度周期内你给的电流矢量都不会在真正的q轴上。位置闭环控制的是机械角度这个偏差不像初始位置检测只影响启动它会影响全行程的力矩输出导致在某些机械角度下力矩偏大某些角度下力矩偏小电机转动时就会有一阵一阵的转矩脉动。如果位置环增益又比较高这种转矩脉动会被环路直接放大成抖动。校准方法不复杂在电机开环状态下给一个固定电流矢量让转子转到一个电角度对齐位置记录此时编码器的值这个值就是电角度零位对应的机械角偏移。把偏移量补偿到每次的角度读取里或者补偿到Park变换的角度输入里。再说安装偏心。我调试时曾经遇到一个问题电机空载电流波形总会叠加一个正弦波包络抖动频率和转速完全同步转速300rpm时抖动频率就是5Hz。后来把编码器拆下来重新装才发现码盘中心孔和转轴之间有大约0.2mm的偏心。对半径15mm的码盘来说这个偏心带来的角度误差大约是0.2/15 ≈ 0.013弧度也就是0.76度。这个误差看起来不大但乘以位置环增益映射成速度指令后足够让电机出现肉眼可见的转速波动。如果是磁编码器偏心对角度误差的影响类似而且磁铁位置不正还会引入二次谐波误差。检查方法用示波器同时抓A相和B相编码器信号低速匀速转电机观察两路占空比是否都在50%附近正交相位是否接近90度。如果占空比明显不对称或者相位偏移随转速改变优先怀疑安装问题。3.2 关键点六机械谐振和减速箱回差机械谐振是我这次调试里绕得最久的一个坑。位置环和速度环参数都已经收敛得很好了但电机带到某个速度区间时还是会尖叫而且电流波形上叠加了一个频率很高的振荡分量。用示波器FFT功能测Iq电流波形能看到在600Hz左右有一个很尖的峰。这个频率既不等于PWM频率也不等于电流环振荡频率最后确认是电机转子通过联轴器驱动负载时的扭转谐振点。原理可以想象成一根弹簧连着两个质量块电机转子和负载之间存在弹性控制带宽一旦覆盖到弹簧-质量系统的谐振频率闭环就形成正反馈表现为持续的高频振动。机械谐振的典型特征是电流波形上的振荡频率相对稳定和转速关系不大用手捏住负载振荡频率会变化甚至消失。最简单的验证方法是用示波器FFT直接找峰值频率然后在速度环输出后面加一个陷波器Notch Filter陷波频率设置到峰值频率Q值先取1左右再做微调。如果代码里不方便加陷波器另一个办法是降低速度环带宽让控制环路不去激发这个谐振点代价是动态性能变差。减速箱回差是另一种情况。带齿轮减速箱的电机齿轮间隙会导致负载端和电机转子之间有空行程。位置闭环中电机先停在一个啮合面误差不为零它就越过间隙去推负载推到另一边又过冲然后再次往回推形成固定幅度的极限环振荡。这种抖动的特点是幅度很小频率不高而且改变位置环P往往没什么用。处理思路是增加反向间隙补偿在检测到速度方向变化时额外补偿一个固定角度或者适当降低位置环增益牺牲一点刚度来避免反复敲击。3.3 关键点七母线电压跌落与供电余量这个关键点最容易被忽略因为它不属于控制代码的范畴但一旦出问题所有环路参数都会变得不可理喻。我当时有一次把位置环、速度环、电流环都调得挺顺给电机加了一点负载后突然开始低频抖动而且声音发闷像喘不上气一样。示波器接到母线电压测试点发现加速瞬间母线电压从12V掉到了9V多波形上有明显的一落一起。原因不外乎两点电源能力不够或者母线电容不足。实验室可调电源如果设置了限流加速超过限流值后电压就会往下掉电池供电的话电池内阻和连接线电阻都会造成压降。母线电容的作用是给逆变桥提供一个低阻抗的瞬时能量源如果电容容量不够PWM开关产生的脉动电流全部压到电源线上反馈电压出现周期性波动电流环的电压指令就会跟着抖。排查方法示波器用10倍探头测母线电压先用DC档看平均值是否稳定再切到AC档看纹波。正常情况下纹波应当在0.1V量级甚至更低如果纹波幅度超过0.5V先检查母线电容和电源线。我当时的整改措施是在驱动板的母线输入端并联了一个470μF电解电容和一个0.1μF陶瓷电容尽量靠近逆变桥引脚电压跌落的问题立刻缓解。还有一个关联检查点电流环输出电压指令。在MCU里把ud和uq的值通过调试接口发出来如果uq指令长时间接近母线电压的一半以上说明电机运行点已经很接近电压极限了。位置闭环里这意味着电流环没有足够的调节余量转速或者电流一波动就会触碰电压饱和环路自然容易失稳。3.4 关键点八示波器与调试工具的观测盲区最后一个关键点其实不是故障而是方法论。我见过很多人调FOC位置闭环观察对象只有两个电机动不抖、串口打印的位置波形。这两个信号远远不够。位置闭环是多层嵌套系统你改一个参数不知道是哪一层先出问题所以必须把中间变量暴露出来。最实用的做法用单片机的DAC、PWMRC低通滤波或者串口通信的方式把位置误差、速度指令、Iq指令、Iq反馈这些变量实时输出到示波器上。比如用两个通道一路显示目标位置和实际位置一路显示Iq电流也可以把速度指令用另一个通道输出专门看位置环的行为。这里要提醒一个隐藏问题如果在Keil里开了高等级优化比如-O2你在调试助手或Watch窗口读取结构体变量时看到的值可能是被优化后的、甚至完全不对的。调试阶段建议把优化等级调到-O0或者用volatile修饰关键变量。结构体变量在Keil的Watch窗口里可以添加motor.iq_fb这样的表达式来强制读取地址内容但更省心的方式是把关键变量通过串口打印或DA输出。示波器选型方面像我用的DS138这种便携示波器FFT功能比较基础带宽也有限但看几十赫兹到几百赫兹的控制环振荡完全够用。如果想看PWM开关频率附近的电流细节至少需要100MHz带宽的示波器探头接地线尽量短否则测到的全是开关噪声不是真实信号。4. 完整排查链路按这个顺序走一遍多数抖动都能查出来把8个关键点铺开讲完之后我再把实际的调试顺序串一遍。调FOC位置闭环最忌讳跳步你从第4层跳到第1层改参数问题根本没法收敛。这个顺序我实践过很多次每次基本都能定位到根因。4.1 第1步开环对齐确认编码器和电角度零位正确先关掉所有环路只给一个固定的A相导通矢量让转子强制对齐。连续做5次记录每次对齐后的编码器读数。如果5次读数偏差小于2个脉冲说明机械停止位稳定然后把这个读数作为电角度零位偏移。如果5次读数差异很大先查机械卡滞和对齐算法再做下一步。这个步骤是后面所有调试的地基。地基歪了后面调出来的稳定都是假象换一个负载角就全崩。4.2 第2步电流环闭环用示波器看Iq阶跃响应把速度环和位置环都禁用只让电流环闭环工作。先给一个恒定的Iq指令比如0.2A观察Iq反馈波形是否平稳。然后给一个0.2A到0.5A的阶跃看上升时间有无超调。理想情况是无超调或最多半个超调周期就稳定下来。如果Iq反馈发振先降低Kp再看如果出现低频波动检查电流采样时序和滤波电容。这一步用的时间不要超过半小时。电流环调不好后面全是白搭。调试时记得把Iq反馈波形和Iq指令波形叠在一起看相位差太大也说明电流环带宽不足。4.3 第3步速度环闭环用零速指令检查静音电流环稳定后使能速度环先给零速指令。这时电机应该基本静音轴用手转起来会有明显的阻力但松开后不会自己抖动。如果零速指令下就抖动说明速度环PI参数过强或速度反馈噪声太大。处理办法先降速度环Kp再看编码器速度计算是否用了滤波必要时在速度反馈上加低通滤波但滤波器截止频率不要低于速度环带宽的5倍。然后给一个低速阶跃比如60rpm观察速度响应是否平滑。4.4 第4步位置环闭环从小到大加P严禁加I速度环稳定后启用位置环。这时位置环P从极小值开始比如从11/s开始给定一个固定位置目标观察位置误差波形。如果电机在目标位置附近低频振荡先把P降一半如果位置误差收敛很慢再逐步加倍。位置环P每加一档都要重新看一遍速度指令波形如果速度指令已经开始高频颤抖说明已经到了速度环能承受的上限。记住一个原则位置环不加I位置环只输出速度指令。4.5 第5步加前馈与抗谐振最后再优化动态性能基础静态定位已经稳定后再做连续运动测试。这时再考虑速度前馈、加速度前馈。每个前馈系数从0开始每次加0.1观察跟随误差变化。如果加某个系数时跟随误差没变小反而出现高频噪声退回去在这个环节前面加滤波或者陷波器。机械谐振的确认和陷波器也放在这一步做用示波器FFT测Iq波形找出频谱中的尖峰加陷波器然后用阶跃响应确认系统仍然稳定。下面是这8个关键点的速查表我在调试时是打印出来贴在工位上的关键点典型现象根因方向优先排查项转子初始位置检测上电启动就往一边偏伴随抖动对齐法停位不稳、电角度零位偏差多次对齐一致性、零位偏移保存电流环带宽/采样高频毛刺几百Hz电流发振采样时序不对、带宽过高ADC触发时刻、PI带宽估算位置环积分项目标点附近几Hz极限环振荡位置环带I项引发超调去掉位置环I位置环只用PPD速度前馈跟随误差调不好越加越抖差分噪声被前馈放大前馈系数从0慢加检查噪声编码器零位/偏心转速同步的转矩脉动零位未校准、码盘偏心零位补偿、A/B相占空比检查机械谐振/回差高分贝尖叫、间隙敲击传动链弹性、齿轮间隙FFT找峰、陷波器、间隙补偿母线电压跌落带载后低频喘振电源限流、母线电容不足示波器AC档测纹波、并电容观测手段不足参数越调越懵看不到中间变量DA/串口输出pos_err、speed_ref、Iq说实话这套流程跑完绝大多数原地抖动问题都能有一个明确的答案。我自己调过很多次这种位置闭环最后发现超过一半的抖动不是单纯PID参数的问题而是初始位置检测、编码器零位、电流采样时序这些地基性质的东西没做好。很多人在第4步反复纠结位置环参数其实应该多花点时间回到第1步和第2步把示波器夹好一层一层看波形而不是凭手感猜。最后分享一个小技巧我每次调完一套参数都会把示波器截图的波形和当时的参数、现象一起记在调试笔记里包括环境温度、母线电压、负载状态。这样下次再遇到类似的抖动翻笔记就能很快定位不用从头再踩一遍。做电机控制调试记录和生产代码一样重要。
返回列表