2、位置环数学模型:PID控制原理、位置环传递函数、系统框图分析
好,咱们进入正题。位置环的数学模型,说白了就是搞清楚“怎么算误差”和“怎么调输出”。很多新手一上来就调PID参数,调了半天系统还是抖,为什么?因为连最基本的传递函数都没搞明白。我刚开始带项目那会儿也犯过这毛病,后来被一台高速贴片机狠狠教育了一回——从那以后,我养成了先建模、后调参的习惯。
2.1 PID控制原理:三兄弟各司其职
PID控制器,三个字母分别代表比例、积分、微分。你可以把它们想象成三个性格迥异的兄弟:
- P(比例):急性子,误差有多大,输出就怼多大。反应快,但容易过头,留下静差。
- I(积分):慢性子,专门收拾P留下的烂摊子。它把过去的误差一点点攒起来,慢慢推,直到静差消失。但攒多了容易“积分饱和”,系统就 overshoot 了。
- D(微分):预言家,看误差的变化趋势。误差涨得快,它就提前刹车;误差跌得快,它就提前加油。能抑制超调,但对噪声敏感。
数学表达式长这样:
u(t) = Kp * e(t) + Ki * ∫e(t)dt + Kd * de(t)/dt
其中 e(t) 是位置误差(目标位置 - 实际位置),u(t) 是控制输出(通常是速度指令或力矩指令)。
核心要点:位置环里,P是主力,I用来消除静差,D用来抑制超调。但D用不好就是噪声放大器,我建议非必要不加D,或者加个低通滤波器再接入。
2.2 位置环传递函数:从时域到频域
咱们把上面的时域方程拉普拉斯变换一下,就得到了传递函数形式:
Gc(s) = Kp + Ki/s + Kd*s
写成更常用的零极点形式:
Gc(s) = Kp * (1 + 1/(Ti*s) + Td*s)
其中 Ti = Kp/Ki 是积分时间常数,Td = Kd/Kp 是微分时间常数。
为什么要搞成传递函数?因为我们可以用波特图看系统的稳定裕度,用根轨迹看闭环极点位置。我在调试一个龙门双驱平台时,就是靠传递函数算出了相位裕度不够,加了点积分才把振荡压下去。
实战技巧:实际工程中,位置环的采样周期通常在 0.5ms~4ms 之间。离散化时别忘了用双线性变换(Tustin)把 s 域映射到 z 域,直接差分替代容易丢相位。
2.3 系统框图分析:信号怎么流
一个完整的位置环控制系统,信号流向是这样的:
- 目标位置(上位机或规划器给过来)
- 误差计算:目标位置 - 编码器反馈的实际位置
- PID控制器:对误差做比例-积分-微分运算,输出速度指令
- 速度环/电流环:执行速度指令(通常驱动器内部已经闭环了)
- 被控对象:电机+机械传动(丝杠、皮带、减速机等)
- 位置反馈:编码器或光栅尺把实际位置送回比较点
下面这张图把整个链路画清楚了:
从框图里能看出几个关键点:
- 前向通路:目标位置 → 误差 → PID → 速度环 → 被控对象 → 实际位置
- 反馈通路:实际位置通过编码器送回比较点,形成闭环
- 干扰点:被控对象处会有摩擦力、负载变化等扰动,位置环的积分项就是用来对抗这些的
避坑提醒:我曾经在一个项目中把编码器反馈接到了速度环的反馈口,位置环直接开环跑了。结果电机一启动就飞车,急停都差点没刹住。记住:位置环的反馈必须是位置信号,不是速度信号。
2.4 位置环的闭环传递函数
把上面的框图简化成标准闭环形式:
G_open(s) = Gc(s) * G_plant(s)
G_close(s) = G_open(s) / (1 + G_open(s))
其中 G_plant(s) 是被控对象的传递函数。对于常见的伺服系统,被控对象可以简化为一个积分环节加一个惯性环节:
G_plant(s) = K / (s * (T*s + 1))
K 是增益(取决于电机扭矩常数、负载惯量等),T 是机电时间常数。
把 PID 和对象传函代入,得到位置环闭环传函:
G_close(s) = (Kp*s + Ki + Kd*s²) * K / [s²*(T*s+1) + (Kp*s + Ki + Kd*s²)*K]
看着复杂,但实际调试时我们更关心的是:
| 参数 | 对系统的影响 | 我常用的调试顺序 |
|---|---|---|
| Kp(比例增益) | 增大→响应变快,但过大→振荡甚至发散 | 先调Kp,直到系统出现轻微振荡,然后退回70% |
| Ki(积分增益) | 增大→消除静差变快,但过大→超调+积分饱和 | Kp调好后,慢慢加Ki,直到稳态误差消失 |
| Kd(微分增益) | 增大→抑制超调,但过大→高频噪声放大 | 最后加,能不加就不加,加的话配合低通滤波 |
我的经验:位置环的带宽通常设定为速度环带宽的 1/5 到 1/10。比如速度环带宽 100Hz,位置环带宽设在 10~20Hz 比较安全。带宽太高,机械共振就出来了,你想想看,那声音听着都心疼。
2.5 离散化:从连续到数字
实际控制器里跑的是离散算法,不是连续积分。常用的离散化方法:
- 前向欧拉:简单,但采样频率低时误差大
- 后向欧拉:比前向稳定一点
- 双线性变换(Tustin):精度高,我推荐用这个
离散PID的位置式算法:
u[k] = Kp*e[k] + Ki*Ts*sum(e[i]) + Kd*(e[k] - e[k-1])/Ts
其中 Ts 是采样周期。注意积分项是累加和,容易饱和,需要做抗积分饱和处理。
关键提醒:离散化后,微分项对噪声极其敏感。我见过一个案例,编码器分辨率不够,微分项把量化噪声放大了十倍,电机在高频抖动。解决办法:要么加一阶低通滤波,要么用“不完全微分PID”——把微分项单独做个惯性环节。
好了,位置环的数学模型就聊到这儿。记住:框图是骨架,传递函数是血肉,PID参数是灵魂。搞懂了这三者的关系,调参就不再是玄学。