1 参考链接
对于实际应用,需要将连续系统转化为离散系统,需要对连续系统采样、离散系统的z变换。
本帖子注重PID控制器的原理和实现,将传递函数,直接化成微分方程,进而进行差分离散化,未考虑z变换。
2 主要程序
function C_PID_01()
%{
程序功能:
1、使用m语言描述PID控制系统
2、
%}
clear,clc,close all
global h
%% PID控制器参数设置
kp=9;
ki=0.2;
kd=1;
%% 仿真参数设置
t1=0;
t2=10;
h=0.01; %时间步长
num=abs(t1-t2)/h;
t=t1:h:t2; %仿真时间节点
y0=0; %系统初值
ref=1*ones(num+1, 1); %参考输入
y=zeros(num+1, 1); %系统输出预设空间
y(1)=y0;
u=zeros(num,1); %控制量存储空间预设
%% 控制系统迭代过程
% forward_error=ref(1)-y(1); %上一步的误差
e=zeros(num+1, 1);
e(1)=ref(1)-y(1);
sum_error=0;
for j=1:num
e(j+1)=ref(j)-y(j);
u(j)=PIDController(e(j+1), e(j), sum_error, kp, ki, kd);
y(j+1)=System( u(j), y(j) ) ;%被控输出
sum_error=sum_error+ e(j+1);%误差的积分
end
%% 绘制图像
plot(t, ref, 'b--', 'linewidth', 2)
hold on
plot(t, y, 'k-', 'linewidth', 2)
title('C and PID Controller')
legend('ref', 'y')
axis([t1,t2, 0, 1.2])
end
%%PID控制器子函数
function u=PIDController(e ,fe, sum_error , kp, ki, kd)
global h
% e=ref-y; %跟踪误差
% de= (e-fe)/h ;
de= (e-fe);
u=kp*e+ki*sum_error+kd*de;
end
%% 被控系统的离散差分形式
function yk1=System(u, yk)
%{
传递函数:
G=Y/U=1/(s+1)
%}
global h
yk1=h*(u-yk)+yk;
end
评论(0)
您还未登录,请登录后发表或查看评论