pdf和代码的下载地址: 增量式PID算法的MATLAB实现(访问密码:3834)
增量式PID算法的MATLAB实现
PID控制的分类
连续PID控制
对模拟信号进行的模拟PID控制,也可以称作连续PID控制,其表达式为
u
(
t
)
=
K
p
[
e
(
t
)
+
1
T
i
∫
0
t
e
(
t
)
d
t
+
T
d
d
e
(
t
)
d
t
]
(1.1)
u(t) = K_p \left[ e(t) + \frac{1}{T_i} \int_0^t e(t) \, dt + T_d \frac{de(t)}{dt} \right] \tag{1.1}
u(t)=Kp[e(t)+Ti1∫0te(t)dt+Tddtde(t)](1.1)
上式中,
K
p
K_p
Kp为比例系数,
T
i
T_i
Ti为积分时间常数,
T
d
T_d
Td为微分时间常数.对上式进行拉氏变换得到
U
(
s
)
=
K
p
[
E
(
s
)
+
E
(
s
)
T
i
s
+
T
d
s
E
(
s
)
]
(1.2)
U(s) = K_p \left[ E(s) + \frac{E(s)}{T_i s} + T_d s E(s)\right] \tag{1.2}
U(s)=Kp[E(s)+TisE(s)+TdsE(s)](1.2)
PID控制器的传递函数为
D
(
s
)
=
U
(
s
)
E
(
s
)
=
K
p
(
1
+
1
T
i
s
+
T
d
s
)
(1.3)
D(s) = \frac{U(s)}{E(s)} = K_p \left( 1 + \frac{1}{T_i s} + T_d s \right) \tag{1.3}
D(s)=E(s)U(s)=Kp(1+Tis1+Tds)(1.3)
离散PID控制
要对数字信号进行控制,我们要将其离散化,并进行离散PID控制,本质上就是对数字信号进行采样. 离散式PID根据采样方式不同,分为位置式PID控制
和增量式PID控制
.
位置式PID控制
对连续PID控制以一定离散化方法离散后就可以得到数字PID控制,离散的本质是采样,假设采样为周期采样,采样周期为T,离散自变量为n,则离散PID控制可以表示为:
u
[
n
]
=
K
p
{
e
[
n
]
+
T
T
i
∑
i
=
0
n
e
[
i
]
+
T
d
T
{
e
[
n
]
−
e
[
n
−
1
]
}
}
(2.1)
u[n] = K_p \left\{ e[n] + \frac{T}{T_i} \sum_{i=0}^n e[i] + \frac{T_d}{T} \left\{ e[n] - e[n-1]\right\} \right\} \tag{2.1}
u[n]=Kp{e[n]+TiTi=0∑ne[i]+TTd{e[n]−e[n−1]}}(2.1)
上式即为位置式PID控制
的表达式
增量式PID控制
对位置式PID控制
表达式做差分,写出n-1时刻的控制量:
u
[
n
−
1
]
=
K
p
{
e
[
n
−
1
]
+
T
T
i
∑
i
=
0
n
−
1
e
[
i
]
+
T
d
T
{
e
[
n
−
1
]
−
e
[
n
−
2
]
}
}
(2.2)
u[n-1] = K_p \left\{ e[n-1] + \frac{T}{T_i} \sum_{i=0}^{n-1} e[i] + \frac{T_d}{T} \left\{ e[n-1] - e[n-2]\right\} \right\} \tag{2.2}
u[n−1]=Kp{e[n−1]+TiTi=0∑n−1e[i]+TTd{e[n−1]−e[n−2]}}(2.2)
将式
(
2.1
)
(2.1)
(2.1)与式
(
2.2
)
(2.2)
(2.2)相减,得到
Δ u [ n ] = u [ n ] − u [ n − 1 ] = K p { e [ n ] − e [ n − 1 ] } + K p T T i e [ n ] + K p T d T { e [ n ] − 2 e [ n − 1 ] + e [ n − 2 ] } (2.3) \begin{aligned} \Delta u[n] & = u[n] - u[n-1] \\ & = K_p \left\{ e[n] - e[n-1] \right\}+ \frac{K_p T}{T_i} e[n] + \frac{K_p T_d}{T} \left\{ e[n] -2 e[n-1] + e[n-2]\right\} \end{aligned} \tag{2.3} Δu[n]=u[n]−u[n−1]=Kp{e[n]−e[n−1]}+TiKpTe[n]+TKpTd{e[n]−2e[n−1]+e[n−2]}(2.3)
设
K
i
=
K
p
T
T
i
K_i= K_p \frac{T}{T_i}
Ki=KpTiT为积分系数,
K
d
=
K
p
T
d
T
K_d = K_p \frac{T_d}{T}
Kd=KpTTd为微分系数,可将上式简化为
Δ
u
[
n
]
=
K
p
{
e
[
n
]
−
e
[
n
−
1
]
}
+
K
i
e
[
n
]
+
K
d
{
e
[
n
]
−
2
e
[
n
−
1
]
+
e
[
n
−
2
]
}
(2.4)
\Delta u[n] = K_p \left\{ e[n] - e[n-1] \right\}+ K_i e[n] + K_d \left\{ e[n] -2 e[n-1] + e[n-2]\right\} \tag{2.4}
Δu[n]=Kp{e[n]−e[n−1]}+Kie[n]+Kd{e[n]−2e[n−1]+e[n−2]}(2.4)
增量式PID控制主要是通过求出增量,将原先的积分环节的累积作用进行了替换,避免积分环节占用大量计算性能和存储空间.
位置式PID与增量式PID的比较
增量式PID控制
的优点:
- 计算机每次只输出控制增量,即对应执行机构位置的变化量,故机器发生故障时影响范围小、不会严重影响生产过程
- 手动-自动切换时冲击小.当控制从手动向自动切换时,可以作到无扰动切换
- 不进行累加运算,增量仅与近三次 e ( n ) e(n) e(n)有关
增量式PID控制
的缺点:
- 由于增量式需要对控制量进行记忆,所以对于不带记忆装置的系统,只能使用位置式PID控制方式进行控制.
离散PID控制的MATLAB实现
实现增量式PID算法
我们本次实现增量式PID控制
curTime = 0; ts = 0.1; % curTime记录当前时间,ts记录采样周期
r = 1000; % 初始化给定值,设定给定值为1500
u_n1 = 0; u_n = 0; % 输出,u_n表示u[n],u_n1表示u[n-1],初始时输出均为0
e_n = 0; e_n1 = 0; e_n2 = 0; % 输入(偏差),e_n表示e[n],e_n1表示e[n-1],e_n2表示e[n-2]
while stop ~= true
curTime = curTime + ts; % 刷新当前时间
% 计算阀门开度增量
delta1 = np * (e_n - e_n1)
delta2 = ni * e_n
delta3 = nd *(e_n - 2*e_n1 + e_n2)
delta_u = delta1 + delta2 + delta3;
% 绘图
plot([curTime-ts, curTime], [u_n1, u_n], 'r'); hold on; % 绘制给定值变化曲线
plot([curTime-ts, curTime], [r, r]); hold on; % 绘制阀门开度变化曲线
% 更新各个量
r = r; % 更新给定值
u_n1 = u_n;
e_n2 = e_n1; e_n1 = e_n; e_n = r - u_n;
pause(0.1);
end;
运行上述程序,得到图像结果如下:
绘制GUI界面,实时更改给定值
绘制GUI界面如下
将上一步中编写的核心算法作为各按钮的回调函数,完成软件的编写,软件运行效果如下
源代码下载地址: 下载地址: https://download.csdn.net/download/ncepu_chen/11253423
pdf和代码的下载地址: 增量式PID算法的MATLAB实现(访问密码:3834)