3. 位置环数学模型:PID控制器的位置环模型,传递函数与误差分析
各位工程师朋友,咱们今天聊聊位置环的数学模型。说实话,很多做电机控制的同行,调参全靠“试”,试出来能跑就算完事。但你要想做到精准定位,尤其是无感启动那种场景,不懂模型是不行的。
我刚开始带项目那会儿,也吃过这个亏。一个伺服项目,位置环怎么调都有静差,后来回头一算,发现是积分项的参数跟系统带宽压根不匹配。从那以后,我养成了一个习惯——动手调参之前,先把数学模型在脑子里过一遍。
3.1 位置环的典型结构
位置环说白了,就是一个外环。它把目标位置和实际位置的差值算出来,然后输出一个速度指令给速度环。结构其实很简单:
- 输入:目标位置 θref
- 反馈:实际位置 θact(通常来自编码器或观测器)
- 控制器:PID(最常用的是P或PI)
- 输出:速度指令 ωref
- 被控对象:速度环 + 电机 + 负载(可简化为一个积分环节)
你想想看,位置环的输出是速度,而速度积分就是位置。所以被控对象天然就带一个积分器。这个特性很重要,后面讲误差分析时会用到。
核心要点:位置环的传递函数中,被控对象包含一个纯积分环节(1/s),这是位置系统区别于速度系统的根本所在。
3.2 PID控制器的位置环模型
咱们先写出最通用的PID形式。位置误差 e(t) = θref(t) - θact(t),控制器的输出为:
u(t) = Kp * e(t) + Ki * ∫e(t)dt + Kd * de(t)/dt
写成传递函数就是:
C(s) = Kp + Ki/s + Kd * s
被控对象呢?速度环的闭环特性可以近似为一阶惯性环节,再加上位置本身的积分:
G(s) = (1 / (Tv * s + 1)) * (1 / s)
其中 Tv 是速度环的等效时间常数。这个值怎么来?我一般直接从速度环阶跃响应里读,63%上升时间就是 Tv。
那么整个位置环的开环传递函数就是:
G_open(s) = C(s) * G(s) = (Kp + Ki/s + Kd * s) * (1 / (Tv * s + 1)) * (1 / s)
嗯,这里要注意,实际工程中Kd项很少用。为什么?因为位置误差的微分对噪声太敏感了,尤其是无感启动阶段,观测器出来的位置本身就有波动,再微分一下,整个系统会抖得厉害。我个人的习惯是,位置环只用P或者PI。
3.3 传递函数化简与带宽分析
如果只用P控制(Ki=0, Kd=0),开环传递函数简化为:
G_open(s) = Kp / (s * (Tv * s + 1))
这是一个典型的I型系统。它的穿越频率(也就是带宽)大约在:
ωc ≈ Kp (当 Tv * ωc << 1 时)
这个近似成立的条件是位置环带宽远低于速度环带宽。我一般把位置环带宽设为速度环的1/5到1/10,这样系统稳定性好,调试也省心。
如果加上积分项,变成PI控制:
G_open(s) = (Kp * s + Ki) / (s^2 * (Tv * s + 1))
系统变成了II型。这时候可以消除稳态误差,但相位裕度会下降。你需要把积分转折频率 ωi = Ki/Kp 放得比穿越频率低很多,一般低3-5倍。
实战技巧:调试时先只加Kp,让系统能稳定跟踪斜坡信号。然后慢慢加Ki,观察阶跃响应的静差是否消失。如果出现超调或震荡,说明Ki太大了,往回退。
3.4 误差分析:到底差在哪?
误差分析是调参的“眼睛”。你得知道误差从哪来,才能对症下药。
| 输入信号类型 | P控制稳态误差 | PI控制稳态误差 | 说明 |
|---|---|---|---|
| 阶跃信号(定点定位) | 0 | 0 | I型系统对阶跃无静差 |
| 斜坡信号(匀速跟踪) | v / Kp | 0 | P控制有常值静差,PI可消除 |
| 加速度信号(匀加速) | ∞(发散) | a / Ki | PI控制有常值静差 |
从这张表你能看出来:
- 如果只是做定点定位(比如机械臂抓取),P控制就够了,稳态误差为零。
- 如果要跟踪匀速运动(比如传送带同步),必须加积分项,否则会有跟速度成正比的静差。
- 如果要跟踪匀加速运动(比如电梯启停),PI控制也会有静差,这时候可能需要前馈补偿。
我曾经在一个贴片机项目里遇到过一个问题:位置环用P控制,跟踪匀速运动时总是差一段距离。后来一算,就是 v/Kp 这个静差。加上Ki之后,问题立刻解决。
避坑指南:积分项不是万能的。积分饱和(Integral Windup)是常见问题——当位置误差长时间存在时,积分项会积累到很大的值,导致系统超调甚至震荡。我一般会加积分限幅,或者用条件积分(只在误差小于某个阈值时才积分)。
3.5 位置环模型结构图
下面这张图把整个位置环的数学模型串起来了,从参考输入到实际位置,每个环节的传递函数都标在上面。你可以对照着看,调参时心里就有谱了。
3.6 从模型到调参:我的实战流程
模型看完了,怎么落地?我一般按这个步骤来:
- 先测速度环带宽:给速度环一个阶跃指令,记录上升时间Tv。这个值决定了位置环能跑多快。
- 设定位置环带宽:取速度环带宽的1/5~1/10。比如速度环带宽100Hz,位置环就设10~20Hz。
- 计算初始Kp:Kp ≈ 2π * 位置环带宽。这是从穿越频率近似公式反推的。
- 试跑斜坡信号:给一个匀速指令,看跟踪误差。如果误差是常值,说明需要加Ki。
- 加入积分项:Ki = Kp / (3~5) * 位置环带宽。这个比例能保证相位裕度。
- 检查阶跃响应:看超调量,一般控制在5%以内。超调大了就降Kp或Ki。
一句话总结:位置环的数学模型告诉我们,P控制决定响应速度,I控制消除稳态误差,而D控制——嗯,我建议你在无感启动场景下慎用。