原本的PID系统经常写作:
u
(
t
)
=
k
p
e
(
t
)
+
k
i
∑
e
(
t
)
+
k
d
d
e
(
t
)
d
t
u(t)=k_{p}e(t)+k_i\sum e(t)+k_d\frac{d e(t)}{d t}
u(t)=kpe(t)+ki∑e(t)+kddtde(t)
我们只需要暴力调节这三个参数就可以了,但是这三个参数的计算其实还应该再更细化。
因为工业仿真及应用,包括平时我们使用的单片机都是使用的PID离散系统,有一个固定的采样时间 T s T_s Ts。
当采样周期足够小(1ms)时,可以做如下近似:
u
(
t
)
≈
u
(
k
)
e
(
t
)
≈
e
(
k
)
∫
0
t
e
(
t
)
d
t
=
∑
i
=
0
k
e
(
i
)
Δ
t
=
∑
i
=
0
k
T
s
e
(
i
)
d
e
(
t
)
d
t
≈
e
(
k
)
−
e
(
k
−
1
)
Δ
t
=
e
(
k
)
−
e
(
k
−
1
)
T
s
\begin{gathered} u(t) \approx u(k) \\ e(t) \approx e(k) \\ \int_{0}^{t} e(t) \mathrm{d} t=\sum_{i=0}^{k} e(i) \Delta t=\sum_{i=0}^{k} T_s e(i) \\ \frac{\mathrm{d} e(t)}{\mathrm{d} t} \approx \frac{e(k)-e(k-1)}{\Delta t}=\frac{e(k)-e(k-1)}{T_s} \end{gathered}
u(t)≈u(k)e(t)≈e(k)∫0te(t)dt=i=0∑ke(i)Δt=i=0∑kTse(i)dtde(t)≈Δte(k)−e(k−1)=Tse(k)−e(k−1)
于是才有了:
u
(
t
)
=
k
p
(
e
(
t
)
+
T
s
T
i
∑
e
(
t
)
+
T
d
T
s
d
e
(
t
)
d
t
)
u(t)=k_{p}\left(e(t)+\frac{T_{s}}{T_{i}} \sum e(t)+ \frac{T_{d}}{T_s} \frac{d e(t)}{d t}\right)
u(t)=kp(e(t)+TiTs∑e(t)+TsTddtde(t))
其中,Ti主要用于消除静差,提高系统的无差度,积分作用的强弱取决于积分时间常数Ti,Ti越大积分作用越弱,反之则越强。
Td反应偏差信号的变化趋势(变化速率),并能在偏差信号变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,减少调节周期。
在simulink中,PI控制器可以这么做:
这种方法真的很巧妙,画的很简洁。还可以将前面三式加减的部分继续mask,还能更好看(装逼)一点。
x
∗
(
t
)
=
k
p
(
e
∗
(
t
)
−
e
∗
(
t
−
1
)
+
T
s
T
i
e
∗
(
t
)
)
u
∗
(
t
)
=
x
∗
(
t
)
+
x
∗
(
t
−
1
)
=
k
p
(
e
(
t
)
+
T
s
T
i
∑
e
(
t
)
)
\begin{array}{l} x^{*}(t)=k_{p}\left(e^{*}(t)-e^{*}(t-1)+\frac{T_{s}}{T_{i}} e^{*}(t)\right)\\ u^{*}(t)=x^{*}(t)+x^{*}(t-1)\\ =k_{p}\left(e(t)+\frac{T_{s}}{T_{i}} \sum e(t)\right) \end{array}
x∗(t)=kp(e∗(t)−e∗(t−1)+TiTse∗(t))u∗(t)=x∗(t)+x∗(t−1)=kp(e(t)+TiTs∑e(t))
高山仰止,景行行止。记录一下。