欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

增量式PID的实现-MATLAB实现

程序员文章站 2022-05-22 19:54:15
...

增量式PID的实现-MATLAB实现

比例积分微分控制,简称PID控制,是最早发展起来的控制策略之一,由于其算法简单、鲁棒性好和可靠性高,被广泛应用于工业过程控制,至今仍有90%左右的控制回路具有PID结构。简单的说,根据给定值和实际输出值构成控制偏差,将偏差按比例、积分和微分通过线性组合构成控制量,对被控对象进行控制。

增量式PID的优势

PID的实现一般有两种方式,位置式和增量式。
(1)数字PID位置型控制bai算法:
由于计算机输出的u(k)可直接控制执行机构(如阀门),u(k)的值和执行机构的位置(如阀门开度)是一一对应的,因此通常称该公式为位置式PID控制算法。 缺点:每次输出均与过去的状态有关,计算时要对e(k)进行累加,计算机运算工作量大,易出现累计误差,溢出错误等。
(2)数字PID增量型控制算法:
执行机构需要的是控制量的增量(例如驱动步进电机)时,数字控制器的输出只是控制量的增量,该公式称为增量式PID控制算法。
优点:
①误动作时影响小,必要时可用逻辑判断的方法去掉出错数据。
②手动/自动切换时冲击小,便于实现无扰动切换。当计算机故障时,仍能保持原值。
③算式中不需要累加。
缺点:积分截断效应大,有稳态误差;溢出的影响大。

控制对象

对下面对象进行控制G(s)=400/(ss+50s)

增量式PID控制实现代码如下

%%
%% 增量式PID increment PID control
clc %清屏
clear all; %删除workspace变量
close all; %关掉显示图形的窗口

ts=0.001; %采样时间
sys=tf(400,[1,50,0]); %传递函数
dsys = c2d(sys,ts,‘z’); %离散化
[num,den] = tfdata(dsys,‘v’); %获得分子分母

%PID控制量
u_1=0.0;u_2=0.0;u_3=0.0;
y_1=0.0;y_2=0.0;y_3=0.0;

x=[0,0,0]’;

%误差
error_1=0.0;
error_2=0.0;

for k=1:1:1000
time(k)=ts*k;

yd(k)=1.0;                       % 参数

%PID参数
kp = 8; % PID参数
ki = 0.10;
kd = 10;

du(k) = kp*x(1)+kd*x(2)+ki*x(3);
u(k) =du(k)+ u_1;

if u(k)>=10
    u(k) = 10;
end
if u(k)<=-10;
    u(k) = -10;
end

y(k)=-den(2)*y_1-den(3)*y_2 +num(2)*u_1+num(3)*u_2;

error=yd(k)-y(k);
u_3=u_2;u_2=u_1;u_1=u(k);
y_3=y_2;y_2=y_1;y_1=y(k);

x(1)=error-error_1;
x(2)=error-2*error_1+error_2;
x(3)=error;

error_2=error_1;
error_1=error;

end

figure(1)
plot(time,yd,‘r’,time,y,‘b’,‘linewidth’,2);
xlabel(‘time(s)’);ylabel(‘yd,y’);
grid on
title(‘增量式PID跟踪响应曲线’);
legend(‘Ideal position signal’,‘Position tracking’);
figure(2);
plot(time,yd-y,‘r’,‘linewidth’,2);
xlabel(‘times(s)’);ylabel(‘error’);
grid on
title(‘增量式PID跟踪误差’);

实现输出结果

增量式PID的实现-MATLAB实现
增量式PID的实现-MATLAB实现

写在最后

由于控制算法中不需要累加,控制增量deta u(k)仅和最近k次采样有关,所以误动作比较小,比较容易获得较好的效果。