运动控制 PID算法
文章目录
- 一、自动控制简介
- 1.1 开环控制系统
- 1.2 闭环控制系统
- 1.3 电机速度闭环控制系统
- 二、PID算法
- 2.1 比例
- 2.1.1 静态误差
- 2.2 积分
- 2.3 微分环节
- 2.4 位置式PID
- 2.5 增量式PID
一、自动控制简介
自动控制系统是使用自动控制装置对关键控制参数进行自动控制,使它在收到外界干扰偏离正常状态时,能够自动的调节到目标范围内。
1.1 开环控制系统
输出只受到输入控制,没有反馈回路,控制精度和抗干扰能力差,例如家用风扇。
1.2 闭环控制系统
在开环控制系统的基础上引入反馈回路,利用输出和输入值的偏差进行控制,避免偏离预定目标,例如温室大棚。
1.3 电机速度闭环控制系统
二、PID算法
PID是Propotional、Integral、Differential 的首字母缩写,它是结合比例,积分,微分的一种自动控制算法。
本质是根据比例,积分,微分的函数关系进行计算,运算结果用于输出控制。
2.1 比例
u k = K p ⋅ e k u_k = K_p \cdot e_k uk=Kp⋅ek
- uk 输出
- Kp 比例系数
- ek 偏差
- Kp 越大,系统响应越快,越快到达目标值。
- Kp 过大会使系统产生过大的超调和震荡,导致系统的稳定性变差。
- 仅有比例环节无法消除静态误差
成比例的反应控制系统的偏差信号,uk与输入偏差ek成正比,用来减小系统的偏差。
2.1.1 静态误差
系统趋于稳定时,实际和目标之间的偏差。产生原因是输出被外界干扰抵消。
假设温室大棚的目标温度设定为30°C,但由于某些外部因素(如天气变化、设备老化等)导致大棚内的实际温度偏离了目标温度。此时,温度控制系统启动比例控制来尝试将温度调整回目标值。
- 初始状态:
- 目标温度(setpoint):30°C
- 实际温度(initial state):25°C
- 静态误差(error):30°C - 25°C = 5°C
- 比例控制作用:
- 假设比例系数(Kp)为0.5(这只是一个示例值,实际应用中会根据系统特性进行调整)。
- 控制输出(u)为比例系数乘以静态误差,即u = 0.5 * 5°C = 2.5°C。
- 系统响应:
- 控制输出作用于系统,尝试将温度提升2.5°C。然而,由于系统本身的惯性和外部干扰的存在,实际温度可能不会立即上升到27.5°C(25°C + 2.5°C),而是会上升到一个略低于这个值的温度,比如27°C。
- 静态误差仍然存在:
- 在这个新的稳态下,静态误差变为30°C - 27°C = 3°C,虽然比初始的5°C有所减小,但仍然存在。
这个例子清楚地展示了比例控制无法消除静态误差的原因:
- 比例控制只根据当前的静态误差来调整控制输出,而没有考虑误差的历史积累或未来的变化趋势。
- 因此,当系统受到持续的外部干扰或存在内部惯性时,比例控制可能无法将系统精确地调整到目标状态,而是会在一个接近目标值但略有偏差的状态下稳定下来。
2.2 积分
u k = K p ⋅ e k + K i ∑ j = 0 k e j u_k = K_p \cdot e_k + K_i \sum_{j=0}^{k} e_j uk=Kp⋅ek+Kij=0∑kej
- uk 输出
- Ki 积分系数
- Kp 比例系数
- ek k时刻的误差
- Σe 误差的积分
积分环节实际上是对误差进行累加的过程。当系统存在持续误差时,积分项会累积这些误差,并通过调整输出逐渐减小误差,直到偏差为零。这种机制使得系统能够更精确地达到并维持设定值。
以温度控制系统为例,假设目标温度设定为50℃。在只有比例控制的情况下,如果系统因为外部干扰(如热量散失)导致温度偏离目标值,比例控制只能根据当前的误差来调整加热功率,但无法完全消除由于外部干扰造成的误差累积。而引入积分环节后,控制系统会对历次误差进行累加,并根据累加的误差值来逐步调整加热功率,从而消除由于外部干扰造成的误差累积,使系统更精确地稳定在目标温度。
对于惯性较大的系统,系统的响应速度相对较慢,无法立即跟上积分环节的快速调整,从而导致系统输出超出预期,产生超调震荡。
积分系数Ki的影响:
- Ki过大:当Ki设置得过大时,积分作用会相对较弱。这意味着系统对误差的累积速度较慢,虽然可以更快地消除静差,但也可能导致系统对误差的敏感度降低,响应速度变慢。在某些情况下,过大的Ki还可能导致系统出现振荡现象。
- Ki过小:当Ki设置得过小时,积分作用会相对较强。这会导致系统对误差的累积速度较快,虽然可以更有效地消除静差,但也可能使系统响应过度,产生不必要的振荡。此外,过小的Ki还可能导致系统无法稳定地维持在设定值附近。
2.3 微分环节
u k = K p ⋅ e k + K i ∑ j = 0 k e j + K d ( e k − e k − 1 ) u_k = K_p \cdot e_k + K_i \sum_{j=0}^{k} e_j + K_d(e_k - e_{k-1}) uk=Kp⋅ek+Kij=0∑kej+Kd(ek−ek−1)
微分环节的作用是根据偏差的变化率来进行控制,它能够预测偏差的未来趋势。微分作用有助于提高系统的动态性能,具体表现为:
- 加快系统的响应速度:微分项能够预测误差的变化趋势,提前作出调整,从而加快系统的响应速度。
- 减小超调和振荡:通过预测误差的变化,微分项可以在误差达到峰值之前进行调整,从而有效减小超调和振荡。
- 增加系统稳定性:微分项还有助于减小高频噪声对系统的影响,提高系统的稳定性。然而,需要注意的是,过大的微分作用可能导致系统对噪声过于敏感,产生不必要的调整。
以温度控制系统为例,假设我们希望将房间的温度保持在设定值。当房间的实际温度低于设定值时,控制系统会启动加热器来升温。如果仅使用比例(P)和积分(I)环节进行控制,系统可能会出现超调和振荡现象,即温度超过设定值后再回落,如此反复。
此时,如果我们引入微分(D)环节,系统就能够预测温度的变化趋势。当系统检测到温度正在迅速上升时,微分项会立即产生一个控制作用,减小加热器的输出功率,从而避免温度超过设定值。这样,系统就能够更平稳地过渡到稳态,提高控制精度和稳定性。
2.4 位置式PID
u k = K p ⋅ e k + K i ∑ j = 0 k e j + K d ( e k − e k − 1 ) u_k = K_p \cdot e_k + K_i \sum_{j=0}^{k} e_j + K_d(e_k - e_{k-1}) uk=Kp⋅ek+Kij=0∑kej+Kd(ek−ek−1)
位置式PID 特点:
- uk 直接对应输出(例如位置),如果计算出现异常,对结果影响非常大。
- 全量计算,需要对偏差进行累加,计算量较大。
- 在不带积分部件中效果很好,例如电机伺服阀,温控系统等。
2.5 增量式PID
- 先写出位置式PID公式
u k = K p ⋅ e k + K i ∑ j = 0 k e j + K d ⋅ ( e k − e k − 1 ) u_k = K_p \cdot e_k + K_i \sum_{j=0}^{k} e_j + K_d \cdot(e_k - e_{k-1}) uk=Kp⋅ek+Kij=0∑kej+Kd⋅(ek−ek−1) - 把K-1带入上述公式中,得到如下公式
u k − 1 = K p ⋅ e k − 1 + K i ∑ j = 0 k − 1 e j + K d ⋅ ( e k − 1 − e k − 2 ) u_{k-1} = K_p \cdot e_{k-1} + K_i \sum_{j=0}^{k-1} e_j + K_d \cdot(e_{k-1} - e_{k-2}) uk−1=Kp⋅ek−1+Kij=0∑k−1ej+Kd⋅(ek−1−ek−2) - 使用第一个公式减去第二个公式得到∆u
∆ u k = K p ⋅ ( e k − e k − 1 ) + K i ⋅ e k + K d ⋅ ( e k − 2 ⋅ e k − 1 + e k − 2 ) ∆u_k = K_p \cdot (e_k - e_{k-1}) + K_i \cdot e_k + K_d \cdot (e_k - 2 \cdot e_{k-1} + e_{k-2}) ∆uk=Kp⋅(ek−ek−1)+Ki⋅ek+Kd⋅(ek−2⋅ek−1+ek−2)
增量式PID特点:
- 增量式PID计算的是相对于上一次输出等增量,即: u k = u k − 1 + ∆ u k u_k = u_{k-1} + ∆u_k uk=uk−1+∆uk
- 只与最近三次的偏差有关,计算出错对系统影响较小。
- 计算量小,实时性好。