增量式PID算法的MATLAB实现

pdf和代码的下载地址: 增量式PID算法的MATLAB实现(访问密码:3834)

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)+Ti10te(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=0ne[i]+TTd{e[n]e[n1]}}(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[n1]=Kp{e[n1]+TiTi=0n1e[i]+TTd{e[n1]e[n2]}}(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[n1]=Kp{e[n]e[n1]}+TiKpTe[n]+TKpTd{e[n]2e[n1]+e[n2]}(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[n1]}+Kie[n]+Kd{e[n]2e[n1]+e[n2]}(2.4)
增量式PID控制主要是通过求出增量,将原先的积分环节的累积作用进行了替换,避免积分环节占用大量计算性能和存储空间.

位置式PID与增量式PID的比较

增量式PID控制的优点:

  1. 计算机每次只输出控制增量,即对应执行机构位置的变化量,故机器发生故障时影响范围小、不会严重影响生产过程
  2. 手动-自动切换时冲击小.当控制从手动向自动切换时,可以作到无扰动切换
  3. 不进行累加运算,增量仅与近三次 e ( n ) e(n) e(n)有关

增量式PID控制的缺点:

  1. 由于增量式需要对控制量进行记忆,所以对于不带记忆装置的系统,只能使用位置式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)

  • 20
    点赞
  • 121
    收藏
    觉得还不错? 一键收藏
  • 24
    评论
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值