增量式PID算法
PID原理
位置式PID算法
PID的连续方程如下,TI是积分时间常数,它表示积分速度的大小,TI越大,积分速度越慢,积分作用越弱。TD是微分时间常数,TD越大微分作用越强。
U
(
t
)
=
k
p
(
e
r
r
(
t
)
+
1
T
I
∫
0
t
e
r
r
(
t
)
d
t
+
T
D
d
e
r
r
(
t
)
d
t
)
U(t)=k_p(err(t)+\frac{1}{T_I}\int_{0}^{t}{err(t)}dt+\frac{T_Dderr(t)}{dt})
U(t)=kp(err(t)+TI1∫0terr(t)dt+dtTDderr(t))
如果想在计算机中实现该算法,就需要将其离散化。其中T是系统时间周期。
U
(
k
)
=
k
p
(
e
r
r
(
k
)
+
T
T
I
∑
e
r
r
(
k
)
+
T
D
T
(
e
r
r
(
k
)
−
e
r
r
(
k
−
1
)
)
)
U(k)=k_p(err(k)+\frac{T}{T_I}\sum{err(k)}+\frac{T_D}{T}(err(k)-err(k-1)))
U(k)=kp(err(k)+TIT∑err(k)+TTD(err(k)−err(k−1)))
由于T和TI和TD都是不随时间变化的常数,所以也可以简化记作
U
(
k
)
=
k
p
e
r
r
(
k
)
+
k
i
∑
e
r
r
(
k
)
+
k
d
(
e
r
r
(
k
)
−
e
r
r
(
k
−
1
)
)
)
U(k)=k_perr(k)+k_i\sum{err(k)}+k_d(err(k)-err(k-1)))
U(k)=kperr(k)+ki∑err(k)+kd(err(k)−err(k−1)))
上式就是位置式PID算法的离散描述公式。从数学公式我们可以看出,位置式PID算法计算的结果与每一时刻的err值都有关,这样就很容易产生累计误差。所以我们需要这个公式的变形,来解决增量误差过大的问题。
增量式PID算法
k-1时刻的位置式PID公式如下
U
(
k
−
1
)
=
k
p
e
r
r
(
k
−
1
)
+
k
i
∑
e
r
r
(
k
−
1
)
+
k
d
(
e
r
r
(
k
−
1
)
−
e
r
r
(
k
−
2
)
)
)
U(k-1)=k_perr(k-1)+k_i\sum{err(k-1)}+k_d(err(k-1)-err(k-2)))
U(k−1)=kperr(k−1)+ki∑err(k−1)+kd(err(k−1)−err(k−2)))
用k时刻的PID输出减去k-1时刻的PID输出,我们可以得到增量式PID公式
Δ
U
=
k
p
(
e
r
r
(
k
)
−
e
r
r
(
k
−
1
)
)
+
k
i
e
r
r
(
k
)
+
k
d
(
e
r
r
(
k
)
−
2
e
r
r
(
k
−
1
)
−
e
r
r
(
k
−
2
)
)
\Delta U=k_p(err(k)-err(k-1))+k_ierr(k)+k_d(err(k)-2err(k-1)-err(k-2))
ΔU=kp(err(k)−err(k−1))+kierr(k)+kd(err(k)−2err(k−1)−err(k−2))
PID类设计
增量式PID
θ e = θ − arctan ( y s − y x s − x ) \theta_e=\theta-\arctan(\frac{y_s-y}{x_s-x}) θe=θ−arctan(xs−xys−y)
l e 2 = ( x s − x ) 2 + ( y s − y ) 2 l_e^2=(x_s-x)^2+(y_s-y)^2 le2=(xs−x)2+(ys−y)2