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 系统框图分析:信号怎么流

一个完整的位置环控制系统,信号流向是这样的:

  1. 目标位置(上位机或规划器给过来)
  2. 误差计算:目标位置 - 编码器反馈的实际位置
  3. PID控制器:对误差做比例-积分-微分运算,输出速度指令
  4. 速度环/电流环:执行速度指令(通常驱动器内部已经闭环了)
  5. 被控对象:电机+机械传动(丝杠、皮带、减速机等)
  6. 位置反馈:编码器或光栅尺把实际位置送回比较点

下面这张图把整个链路画清楚了:

位置环控制系统框图 目标位置 ⊗ 误差 e PID 控制器 速度环 +电流环 被控对象 P 位置反馈(编码器)

从框图里能看出几个关键点:

  • 前向通路:目标位置 → 误差 → 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参数是灵魂。搞懂了这三者的关系,调参就不再是玄学。