一、认识PID
在刚学习PID的时候,会猛然接触到很多概念,如连续PID,离散PID、模拟PID、数字PID、增量式PID和位置式PID等概念,让人感觉到PID很复杂,但其实本质上PID的公式就只有一个,其他只是为了不同场合应用的变式,其本质还是一样的。
原始PID公式:
u
(
t
)
=
K
P
(
e
(
t
)
+
1
T
I
∫
e
(
t
)
d
t
+
T
D
d
e
(
t
)
d
t
)
u(t)=K_P(e(t)+\frac{1}{T_I}\int{e(t)}dt+\frac{T_Dd_{e(t)}}{dt})
u(t)=KP(e(t)+TI1∫e(t)dt+dtTDde(t))
将PID参数对比到时间进程上:
P 代表现在(乘上比例因子)
I 代表过去(对过去的累加)
D 代表未来(通过变化率预测未来的趋势)
二、模拟PID和数字PID
模拟PID公式:
u
(
t
)
=
K
P
e
(
t
)
+
K
I
∫
e
(
t
)
d
t
+
K
D
d
e
(
t
)
d
t
u(t) = K_Pe(t) + K_I\int{e(t)}dt + K_D\frac{d_{e(t)}}{dt}
u(t)=KPe(t)+KI∫e(t)dt+KDdtde(t)
数字PID公式:
u
(
k
)
=
K
P
e
(
k
)
+
K
I
∑
i
=
0
k
e
(
k
)
+
K
D
(
e
(
k
)
−
e
(
k
−
1
)
)
u(k)=K_Pe(k)+K_I\sum_{i=0}^{k}e(k)+K_D(e(k)-e(k-1))
u(k)=KPe(k)+KIi=0∑ke(k)+KD(e(k)−e(k−1))
可以用微积分的知识来理解上面两个公式:模拟PID公式类似于求曲边梯形的面积问题,而数字PID便是将曲边梯形的面积划分为很多段矩形的面积来求和。这样看来数字PID公式便是对模拟PID的离散化。
模拟PID公式只是在理想条件下的公式,在实际应用中我们只能采用数字PID公式进行计算。虽然有些PID的代码实践看似是根据模拟PID公式而来,但其实也是数字PID的应用,只不过dt用来表示时间间隔罢了。
对比上面的公式发现:模拟PID涉及到了时间,而数字PID中不涉及时间?
其实数字PID中也是包含时间的,我们平时在应用PID时都是以固定的时间间隔来计算,因此可以在化简的过程中将时间常数算进积分系数和微分系数中。
三、增量式PID和位置式PID
单纯从公式上来理解:增量式PID就是两次位置PID计算的差值
u
(
k
)
=
K
P
e
(
k
)
+
K
I
∑
i
=
0
k
e
(
k
)
+
K
D
(
e
(
k
)
−
e
(
k
−
1
)
)
u_{(k)}=K_Pe_{(k)}+K_I\sum_{i=0}^{k}e_{(k)}+K_D(e_{(k)}-e_{(k-1)})
u(k)=KPe(k)+KIi=0∑ke(k)+KD(e(k)−e(k−1))
u
(
k
−
1
)
=
K
P
e
(
k
−
1
)
+
K
I
∑
i
=
0
k
−
1
e
(
k
−
1
)
+
K
D
(
e
(
k
−
1
)
−
e
(
k
−
2
)
)
u_{(k-1)}=K_Pe_{(k-1)}+K_I\sum_{i=0}^{k-1}e_{(k-1)}+K_D(e_{(k-1)}-e_{(k-2)})
u(k−1)=KPe(k−1)+KIi=0∑k−1e(k−1)+KD(e(k−1)−e(k−2))
Δ
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(e_{(k)}-e_{(k-1)})+K_Ie_{(k)}+K_D(e_{(k)}-2e_{(k-1)}+e_{k-2})
Δu(k)=KP(e(k)−e(k−1))+KIe(k)+KD(e(k)−2e(k−1)+ek−2)
从公式看:增量式PID计算上只需要知道近三次的偏差,可以减弱过去对现在的影响。每次只计算当前相对于之前的增量,一定程度上可以避免错误数据导致输出产生过大的波动。
在理想条件下,增量式PID和位置式PID最终实现的效果应该是一致的。但在现实条件下,还是各自有适用的场景,基本上位置PID可以满足绝大多数的需求。
位置PID适合于对没有积分效应的执行器件进行控制而增量PID更适合于对有积分效应的执行器件进行控制。
这里一定要清楚这里说的带积分效应的执行期间中的“积分”和PID控制中的“积分”不是一个概念!!!
- 对舵机进行控制:舵机输入多少占空比就转到多少角度,不具备积分特性。(这里在进行PID控制时仍可以有积分项I,实际需不需要根据实际情况决定。)
- 对步进电机进行位置控制:步进电机在无输入时会保持当前的状态,每输入多少脉冲就会运动多少步,因此只需计算下一时刻的增量即可达到目标位置。
- 对直流有刷电机进行速度控制:采用位置式PID和增量式PID基本可以达到一致的效果。
由此可以看来:位置PID和增量PID没有本质的区别,到底选用哪种方式更多的取决于控制对象是否有积分效应。
四、举例—直流电机的调速控制
-
单电机速度闭环:
通过编码器计算轮子速度作为测量值,下发的速度作为设定值通过PI控制进行闭环 -
单电机位置闭环:
通过编码器计算轮子的位置作为测量值,下发的距离作为设定值。 -
速度+位置双闭环:
位置作为内环,速度作为外环进行双闭环控制