4. 位置环设计:控制架构、PID参数整定与前馈补偿
位置环,说白了就是让电机精准地停在你想让它停的位置。速度环管的是“跑多快”,位置环管的是“跑到哪”。
我刚开始做位置控制时,总觉得把PID参数调大点就能又准又快。结果呢?要么超调严重,要么震荡个不停。后来才明白,位置环有它自己的脾气。
4.1 位置环控制架构
先看看整体框架。位置环在最外层,它的输出是速度环的给定值。
位置环的输入是位置误差 e = θ_ref − θ_fb,输出是速度给定 ω_ref。这个 ω_ref 会喂给速度环,速度环再输出电流给定给电流环。三层嵌套,一层管一层。
4.2 位置环PID参数整定
位置环的PID和速度环不太一样。我通常只用P,最多加一点点I。D项?位置环里我基本不用。
4.2.1 P参数整定
比例增益 Kp_pos 决定了位置响应的刚度。Kp越大,电机对位置偏差的纠正力越强。
整定步骤其实很简单:
- 先把I和D设为0,只留P。
- 给一个阶跃位置指令,比如转90度。
- 慢慢增大Kp,直到出现轻微超调。
- 退回20%~30%,这就是比较安全的Kp值。
我在项目里遇到过一个问题:Kp调得太大,电机一启动就“嘎嘎”响。后来发现是位置环输出给速度环的给定值跳变太大,速度环根本追不上。解决办法是在位置环输出加一个限幅。
4.2.2 I参数的作用与风险
积分项能消除稳态误差。比如负载把电机推开了一点,I项会慢慢累积,把电机拉回来。
但位置环的I项要非常小心。我见过有人把I调大了,结果位置在目标点附近来回震荡,就是稳不住。为什么?积分饱和了。
我的建议:
- 如果系统对静态精度要求不高,I=0就行。P控制本身就有一定的刚度。
- 如果一定要加I,Ki取Kp的1/100~1/50,并且一定要加积分限幅。
- 别忘了积分分离:误差大时关掉积分,误差小时再打开。
4.2.3 D参数——我基本不用
位置环加D,理论上能抑制超调。但实际效果嘛……
编码器反馈的微分就是速度,而速度环已经在处理速度了。位置环再加D,相当于对速度再做一次微分,噪声会被放大得很厉害。我曾经试过,结果电机抖得跟筛子似的。
4.3 前馈补偿技术
纯PID控制有个问题:它总是“看到误差才行动”。对于匀速跟踪或者加减速过程,位置误差会一直存在。
前馈补偿就是提前告诉位置环:“接下来要这么走,你先准备好。”
4.3.1 速度前馈
速度前馈是最常用的一种。原理很简单:
位置环输出 = Kp × e + 速度前馈项
速度前馈项 = Kff × dθ_ref/dt
其中 dθ_ref/dt 就是位置给定的速度。如果给定轨迹是规划好的,这个值可以直接算出来。
我做过一个贴片机项目,位置跟踪误差要求小于0.1度。纯P控制时,匀速段误差有0.3度。加了速度前馈后,误差直接降到0.05度以内。效果立竿见影。
4.3.2 加速度前馈
如果对动态性能要求更高,可以再加加速度前馈。加速度前馈补偿的是惯性力。
位置环输出 = Kp × e + Kff_v × v_ref + Kff_a × a_ref
加速度前馈在重负载或者高速启停时特别有用。但要注意,加速度信号噪声大,通常需要滤波。
4.3.3 前馈系数整定
前馈系数怎么调?我一般这样做:
| 步骤 | 操作 | 现象 |
|---|---|---|
| 1 | Kff_v从0开始,慢慢增加 | 匀速段误差逐渐减小 |
| 2 | 继续增加Kff_v | 误差变为负值(过补偿) |
| 3 | 退回使误差接近0的值 | 匀速段误差最小 |
| 4 | 如果启停段误差大,加Kff_a | 加减速段误差减小 |
4.4 位置环参数整定流程总结
把上面说的串起来,一个完整的位置环整定流程是这样的:
- 先整定好速度环。位置环依赖速度环,速度环不稳,位置环怎么调都没用。
- 设置位置环周期,我一般用1ms。
- P参数粗调:从0开始加,直到出现轻微超调,然后退回30%。
- 加前馈:先调速度前馈,再调加速度前馈(如果需要)。
- 微调P:加了前馈后,原来的P可能偏大,适当减小。
- 如果需要加I:从Kp/100开始,加积分限幅和积分分离。
- 验证:跑一个完整的运动轨迹,检查最大误差和稳态误差。
我曾经在一个六轴机器人项目上,光位置环就调了两天。最后发现是速度环带宽不够,位置环怎么调都追不上。所以记住:位置环的性能上限,由速度环决定。
• 位置环输出 = 速度给定,带宽比速度环低5~10倍
• 90%场景只用P,前馈比I更实用
• 速度前馈消除匀速跟踪误差,加速度前馈消除加减速误差
• 位置环调不好,先检查速度环