ARTICLE DETAIL

资讯详情

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

直流电机精细旋转控制实战:从选型到PID调参完整指南

直流电机精细旋转控制实战:从选型到PID调参完整指南 做精细旋转运动时很多人第一反应是步进电机或者干脆上伺服觉得直流电机天生就是干粗活的。但我在转台项目和光学调整架里用过好几版直流电机方案实际效果并不差有些场景下甚至比步进电机更顺滑。这篇文章就把我从电机选型、减速箱搭配、编码器反馈到PID调参的完整经验整理出来聊清楚直流电机做精细旋转运动时真正卡脖子的地方在哪以及怎么一步步把精度抠出来。1. 精细旋转运动对电机提出的真实挑战1.1 普通直流电机精细不起来的根本原因先说个扎心的事实直流电机本身确实不适合精细旋转。它内部有换向器、电刷、轴承还有转子槽和永磁体之间的齿槽转矩这些因素叠加在一起让电机在没有反馈的情况下连空载转动都不平稳。空载转起来你拿编码器看速度波形能看到明显的换向脉动和转速波动。但这些物理特性只是表层原因。深层次的问题是直流电机的建模模型虽然简单——电压方程加力矩方程看似一个一阶系统实际运行中的非线性因素特别多。摩擦力矩在低速时根本不服从线性模型静摩擦比动摩擦大而且还有Stribeck效应就是摩擦力随着速度先下降再上升。这种非线性在低速精细定位时会被放大表现为走走停停的爬行现象。另外齿槽转矩也是个麻烦。电机转子在旋转时永磁体和铁芯齿槽之间的磁阻变化会产生周期性脉动力矩这个力矩和电流方向无关只和转子位置相关。低速时齿槽转矩足以让轴发生微小的周期性抖动如果没有任何补偿定位精度就是上不去。1.2 哪些场景真正需要直流电机做精细旋转精细旋转运动的应用场景比想象中多但每个场景的需求侧重点完全不一样。光学转台和激光扫描振镜这类应用需要极低的转速波动因为角速度不均匀会直接导致扫描轨迹变形。转速可能需要低到每分钟几转甚至零点几转但稳定性要求极高。天线指向和跟踪系统需要快速响应加精确保持电机要能在高速大范围移动后准确停在目标位置并且在外界扰动下保持稳定。机械臂关节末端微调末端执行器在到达目标点附近后需要微小角度的修正。这里看重的是绝对定位精度和重复定位精度速度反而不是重点。3D打印机的热床调平或喷嘴高度调节虽然运动方向是直线的但本质也是通过旋转电机配合丝杠实现的精细位移对细分精度要求不低。云台稳定器需要在动态环境下持续进行微小角度补偿对电机低速性能和扭矩密度的要求很高。有意思的是这些场景本来有不少人选择步进电机。但步进电机在低速时有共振区间而且开环控制抗扰动能力差一旦负载变化就容易失步。直流电机配合编码器构成闭环后在这些场景里的表现反而更稳定。1.3 直流电机、步进电机和伺服电机的边界选型的时候经常有人问为什么不用步进为什么不上伺服。我把三者的特点整理了一下方便大家对照维度直流电机带编码器步进电机交流伺服电机低速平稳性较好取决于反馈和控制算法较差低速共振区明显优秀控制精度取决于编码器分辨率取决于步距角和细分取决于编码器分辨率低速扭矩扭矩较小通常需要减速扭矩较大扭矩大响应速度较快慢最快成本中等较低高振动噪声低中高低控制难度中低中高直流电机夹在中间正好覆盖了那些需要一定精度、又不需要太高成本的场景。而且对于精细旋转这个需求直流电机加编码器加减速箱的方案在低速平整度和动态响应之间能达到一个很好的平衡。2. 方案选型从电机本体到传动结构的整体思路2.1 有刷电机与无刷电机的取舍如果目标是精细旋转电机本体选择首先要在有刷和无刷之间做决定。有刷直流电机胜在控制简单只需要一个H桥就能驱动力矩特性线性度好价格也便宜。但换向器和电刷之间存在滑动摩擦低速运行时会产生周期性的力矩扰动同时电刷磨损会产生粉尘在一些精密设备里这个是不能接受的。无刷直流电机BLDC消除了电刷和换向器转子是永磁体定子是线圈通过电子换向驱动。没有换向器的滑动摩擦低速运行更加平稳力矩脉动主要来自齿槽效应和驱动波形的不理想。但控制电路复杂需要三相逆变器和转子位置检测简单场景下成本高了不少。对于精细旋转我更倾向于无刷电机尤其是那些使用正弦波驱动的无刷电机。方波驱动在换向点附近会产生明显力矩脉动正弦波驱动则能让三相电流平滑变化力矩脉动要小得多。如果项目预算和研发周期允许无刷加正弦波驱动是精细旋转的优先方案。不过有一点要提醒无刷电机的齿槽矩仍然存在。即便用正弦波驱动齿槽矩依然会作用在转子上只是被电流产生的力矩部分抵消。对于极低速无刷系统齿槽矩补偿是一项不可回避的工作通常需要在电流环里注入与转子位置相关的补偿谐波。2.2 减速箱的作用与减速比选择方法减速箱在精细旋转系统里的作用不只是增大扭矩更重要的是提升等效分辨率。电机输出轴旋转一圈经过减速比N的减速箱后输出轴只转1/N圈。如果电机轴端编码器是每圈1000线那输出轴相当于每圈有1000N个计数。这就是减速箱带来的机械细分效果。选减速比不能贪大要根据负载惯量匹配原则来算。减速比过小负载的惯量折算到电机轴上的等效惯量低于转子惯量系统动态响应会变差容易振荡减速比过大输出速度变慢系统效率下降而且减速箱本身的回程间隙会被放大到输出端。一个简单有效的经验公式是让负载惯量折算到电机轴上的值等于电机转子惯量的1到3倍这时候系统的响应速度和稳定性比较平衡。具体公式是等效惯量 负载惯量 / (减速比^2)让等效惯量接近电机转子惯量就能求得一个参考减速比。减速箱本身也有精度问题主要是回程间隙。行星减速箱回程间隙通常在0.5度到1度之间滚柱减速器可以在1弧分以内谐波减速器可以做到0.1弧分以下。对于精细旋转定位回程间隙会直接影响双向重复精度选型时一定不能只看减速比必须同时关注回程间隙指标。2.3 编码器选型分辨率与精度都要看编码器是闭环系统的眼睛直接决定了系统能达到的最高分辨率。增量式编码器的分辨率用每转脉冲数PPR表示四倍频后计数精度提升4倍。比如500线编码器四倍频后每圈2000个计数对应0.18度的分辨率。如果做精细旋转建议起步选1000线以上的编码器。四倍频后每圈4000计数对应0.09度分辨率。配合10:1减速箱输出端分辨率就是0.009度这个精度对大多数轻载精细旋转应用已经够用了。绝对式编码器在断电后能保留位置信息但成本高而且多圈绝对编码器在高减速比下选型比较麻烦。如果系统每次上电都需要重新找零位增量式编码器配合零点开关或限位开关就够了。这里有个容易忽略的点编码器分辨率高不代表定位精度高。编码器本身也有安装偏心、光栅刻划误差等问题这些误差在高分辨率下反而更容易暴露。所以选编码器不要一味追求高线数要把分辨率、精度和成本放在一起权衡。我见过一些人用了很高的编码器分辨率结果定位精度反而因为机械振动被放大而变差了。3. 控制电路与驱动细节让电机听话的关键3.1 驱动方式对精细运动的影响直流电机的驱动核心是H桥或者三相逆变器PWM占空比决定平均电压。PWM的频率选择很讲究太低会让电机产生可听的噪声和振动太高会增加开关损耗。对于精细旋转频率一般选在20kHz以上这样基本听不到噪声而且PWM纹波电流通过电机电感的滤波效果更好。但频率选了高MOS管的开关损耗和驱动芯片的功耗会上升需要平衡。另一个关键参数是PWM死区。H桥上下管的导通之间存在死区时间防止直通短路。死区时间会产生输出波形的畸变尤其在低速小占空比时死区造成的非线性会被放大表现为电机低速时的力矩脉动和振动。解决方法是使用带死区补偿的驱动器或者在控制算法里做死区的前馈补偿我实测过死区补偿对低速平稳性的提升非常明显。还有一个很多人会忽略的是电流检测。如果想要精确控制力矩电流环是必须的。采样电阻加电流传感器的方法最常用关键是要保证采样时刻避开PWM开关切换瞬间否则采到的电流噪声会很大。3.2 四象限运行与电流环的必要性精细旋转系统经常需要在正反两个方向运行而且需要能主动产生反向力矩来实现刹车和位置保持这就涉及四象限运行。四象限运行意味着电机的电压和电流可以独立改变符号电动和制动状态都能控制。对于有刷直流电机H桥天然支持四象限。对于无刷电机三相逆变器也支持。但在控制上要特别注意电流方向不能简单地把PWM占空比当成速度控制量。电流环的意义在于它把电机的力矩控制从电压控制变成了电流控制。直流电机的力矩和电流成正比所以电流环的带宽直接决定了系统力矩响应的速度。加上电流环后摩擦力、负载变化带来的外部扰动会先被电流环抑制速度环和位置环的压力就小多了。我建议无论如何都要加电流环哪怕是最简单的PI调节器。原因很简单没有电流环的电压驱动方式电机的电阻会随温度变化导致同样的占空比在不同温度下产生不同电流系统的一致性会很差。3.3 PID参数整定与三环控制结构直流电机精细旋转通常采用串级PID结构由内到外分别是电流环、速度环、位置环。这个结构不是拍脑袋定的而是因为越内层的环响应速度越快控制带宽越高外层环通过内层环间接控制对象稳定性更好。电流环是响应最快的整定时先把PID参数设小降低增益然后逐渐增加P增益直到电流响应出现轻微振荡再回退一点留出稳定裕量。I分量用来消除稳态误差但太大会导致电流过冲。速度环在电流环的基础上整定。速度环的P增益决定速度响应速度I增益用来消除稳态速度误差。整定时先用纯P让速度尽量快但不过冲再加I。速度环的响应带宽通常比电流环低5到10倍这样的带宽间隔能保证环间不干扰。位置环是外环也是最难调的。位置环P增益大时系统定位刚度高但容易引起振荡和超调。可以适当加D项来阻尼振荡但D项对噪声敏感尤其是在编码器分辨率不够高时微分会把量化噪声放大成高频振动。所以D项一般要么不加要么加低通滤波和微分先行。三环整定的顺序必须是先内后外绝对不可能从外环开始调。我见过不少新手一上来就调位置环结果怎么调都振荡因为根本原因在速度环或电流环没调好。4. 实操过程搭建一套精细旋转平台4.1 硬件选型与接线要点以一个光学转台项目为例需求是旋转角度范围360度定位精度0.02度转速范围0.1到10转每分钟。根据这个需求我选择了如下方案无刷直流电机14极额定扭矩0.1Nm额定转速3000转/分钟行星减速箱减速比30:1回程间隙0.5度输出端增量式编码器电机轴端安装1024线四倍频后4096计数/圈驱动器支持正弦波驱动的三相无刷驱动器带电流环和速度环主控板STM32F405利用其正交编码器接口和高级定时器输出PWM编码器分辨率计算一下1024线乘以4倍频等于4096计数/圈再乘以30倍减速比输出端就是122880计数/圈对应每计数0.0029度远高于0.02度的目标定位精度。接线时需要注意编码器信号线的屏蔽编码器信号是高频率的差分信号必须用双绞屏蔽线并且屏蔽层单端接地。我在这上面吃过亏刚开始没接屏蔽位置反馈信号被PWM的电磁干扰污染导致定位精度时好时坏。驱动器的电流环带宽默认是1kHz速度环默认500Hz这些参数在驱动器里可以通过软件配置。位置环在主控里通过PID实现控制周期设为1kHz也就是1ms循环一次。4.2 位置闭环的代码实现主控里的位置环控制代码不需要太复杂核心是读取编码器位置和目标位置做差经过PID计算后输出速度给定值给驱动器。下面是一个简化版的位置环控制代码// 位置环控制周期1ms // 目标位置单位编码器计数 // 当前速度单位编码器计数/秒 float pos_target; float pos_current; float vel_setpoint; float pid_pos_p, pid_pos_i, pid_pos_d; struct { float error_prev; float integral; } pos_pid_state; void positional_loop(void) { pos_current read_encoder_position(); // 读取当前位置 float error pos_target - pos_current; // 积分限幅防止积分饱和 pos_pid_state.integral error * 0.001f; if (pos_pid_state.integral 1000.0f) pos_pid_state.integral 1000.0f; if (pos_pid_state.integral -1000.0f) pos_pid_state.integral -1000.0f; // 微分项注意编码器噪声对微分的影响 float derivative (error - pos_pid_state.error_prev) / 0.001f; vel_setpoint pos_pid_p * error pos_pid_i * pos_pid_state.integral pos_pid_d * derivative; // 速度限幅 if (vel_setpoint 600.0f) vel_setpoint 600.0f; if (vel_setpoint -600.0f) vel_setpoint -600.0f; send_velocity_setpoint_to_drive(vel_setpoint); pos_pid_state.error_prev error; }代码很简单但有几个关键点必须注意。积分限幅特别重要如果电机卡住或者目标位置被限制积分项会不断累积变成一个巨大的修正量。等障碍解除后电机会猛冲出去这就是积分饱和。限幅值根据系统的最大允许修正速度来确定一般设为速度限幅的10%到20%即可。微分项对噪声非常敏感。如果编码器分辨率不够高相邻周期读到的位置值可能不断跳变微分值会剧烈抖动。解决办法是加一阶低通滤波器或者在编码器计数变化量小于阈值时忽略微分项。4.3 调参步骤与标定方法拿到一套新系统不能直接往目标PID参数上怼要按部就班来。第一步是电流环调参。如果驱动器支持电流示波器输出直接观测电流的阶跃响应调整电流环直到响应快速且无明显振荡。一般先调P让电流响应没有稳态误差再加I。第二步是速度环调参。给驱动器一个阶跃速度指令观察速度响应的波形。一个好的速度环响应应该是快速上升、微小的过冲、然后快速稳定。如果振荡明显降低P或速度环带宽。此时位置环还没有启用只做速度控制。第三步是位置环调参。从很小的P值开始给一个10度的小角度阶跃观察响应的超调和稳定时间。逐渐增加P直到响应接近临界阻尼。如果出现持续振荡加入D项但D项一定要加低通滤波。最后是标定回程间隙。在位置环控制状态下分别从正向和反向逼近同一个目标位置记录两个方向的稳态位置差这个差值就是回程间隙。把这个差值做成补偿表在每次方向切换时预补偿可以大幅提升双向定位精度。我在转台项目里做完回程间隙补偿后双向重复精度从0.05度提升到了0.015度提升效果非常显著。5. 常见问题与排查技巧实录5.1 定位抖动和极限环问题位置环系统在稳定状态下经常出现高频抖动幅度很小但看得见这在示波器上表现为编码器位置在目标点附近来回跳动也就是极限环。极限环的根本原因是系统里存在死区、滞回或量化误差。比如摩擦力比较大时位置误差小于某个阈值时电机输出力矩无法克服静摩擦电机不动误差增大一点后力矩终于超过静摩擦电机开始运动但因为惯性又冲过了目标点于是又反向往回跑形成了周期性的振荡。解决极限环的思路有几条。第一是增大位置环增益让系统对微小误差的反应更灵敏但增益过大会导致传统意义上的振荡。第二是加入积分项让积分力实实在在压过静摩擦但是要配好积分限幅。第三是采用摩擦前馈补偿在控制输出里额外叠加一个固定力矩用于克服静摩擦力矩。我实践下来的最优解是增益切换加摩擦前馈的组合。在误差比较大的时候用正常PID当误差进入很小范围后切换到一个高积分增益控制器同时加上一个方向相关的小力矩偏置抵消静摩擦。这样既保证了响应速度又消除了极限环。5.2 精度上不去排查方向从哪入手定位精度怎么也达不到设计目标时很多人第一反应是调PID但实际上很多时候问题不在控制算法。一个好的排查思路是从外到内、从机械到电气的顺序一步步查先检查编码器安装编码器联轴器是否有松动、光栅盘是否偏心。用一个千分表测量编码器轴跳动如果跳动超过0.02mm编码器读数就会在旋转一圈中出现周期性误差。再检查减速箱回程间隙是否超标、轴承是否磨损。手动正反旋转输出轴用千分表读间隙就能知道回程间隙的实际值。接着检查驱动器电流环带宽设置是否合理PWM频率是否足够高有没有死区补偿。最后才调控制算法PID参数是否合适控制周期是否够快滤波是否过重。我见过一个案例定位精度始终在0.1度左右无法突破代码怎么调都没用最后发现是减速箱输出轴和负载之间的联轴器松动转角误差全部来自联轴器的扭转弹性变形。换了一个高刚性联轴器后精度立刻提升了一个数量级。所以排查精度问题时永远先确认机械传动链的刚性和间隙再谈算法。5.3 温升对定位精度的影响系统运行一段时间后精度明显变差这个是温度的影响。电机本身和减速箱在运行中会发热发热导致零部件热膨胀进而改变配合间隙和摩擦力。更严重的是编码器的码盘如果装在电机轴端轴的热膨胀会导致码盘位置发生变化编码器读数产生漂移。解决温升问题可以从源头和补偿两个方向入手。源头控制包括改善散热、降低PWM开关损耗、加散热风扇以及选用低热膨胀系数的材料做传动件。补偿方向是让系统建立温度模型通过温度传感器测到的数据对定位误差做修正。对于高精度应用恒温控制是终极方案很多光学转台就是在恒温环境中运行的。另外要提醒一下减速箱的润滑油在不同温度下黏度变化很大温度低时黏度大摩擦力矩大低温启动可能会比正常温度下的启动响应慢很多。如果环境温度范围很宽要选宽温域润滑脂或者在控制策略里加低温补偿。5.4 常见问题速查表现象可能原因排查与解决方向低速运行时转速忽快忽慢电流环带宽不足、死区影响、齿槽力矩提高电流环带宽增加死区补偿加入齿槽力矩前馈定位时出现高频抖动微分项放大噪声、PWM干扰编码器加微分低通滤波改善编码器屏蔽正反向定位误差不一致减速箱回程间隙、联轴器松动测量并补偿回程间隙换高刚性联轴器启动时响应慢或先倒退静摩擦太大、积分限幅过小增加摩擦前馈增大积分限幅值高速运行后停不准减速箱惯性大、制动电流不足增加速度环制动能力使用位置规划减速段温度升高后精度下降热膨胀、润滑油黏度变化改善散热使用温度补偿算法电机啸叫PWM频率过低、机械共振提高PWM频率检查机械安装刚度这些问题的排查顺序永远遵循先机械后电气先开环后闭环先内环后外环的原则能省下大量时间。我在这套方法上踩过的最大一个坑是花了整整一周去调位置环试图消除一个低频振荡最后发现是电源电压不稳定造成的。在负载变化时总线电压跌落导致驱动器输出力矩波动控制环再怎么调也补不上这个外部扰动。所以做精准控制之前先确认供电电源的动态响应和带载能力这一点比任何控制算法都重要。
返回列表