基于MATLAB的数字PID仿真
- 格式:doc
- 大小:40.00 KB
- 文档页数:3
基于MATLAB的数字PID仿真
一、实验目的
1、 了解MATLAB集成开发环境
2、 了解MATLAB编程基本方法
3、 了解MATLAB中数字控制器设计的基本方法
4、 加深对数字PID的理解
二、实验内容
1、位置PID的MATLAB仿真。
2、增量PID的MATLAB仿真
三、实验程序框图
四、实验步骤
1、 熟悉MATLAB开发环境
2、 输入参考程序
3、 设置断点,运行程序,观察运行结果
4、 参考程序
(1) 位置PID
被控对象21()0.00670.1Gsss,控制参数20,0.50pdkk
clear all
ts=0.001;
xk=zeros(2,1);
e_1=0;
u_1=0;
开始
参数初始化
采样输入和输出
计算偏差
计算控制器输出
参数更新
返回
PID控制程序流程图 for k=1:1:2000
time(k)=k*ts;
rin(k)=0.50*sin(1*2*pi*k*ts);
para=u_1;
tspan=[0 ts];
[tt,xx]=ode45('chap1_6f',tspan,xk,[],para);
xk=xx(length(xx),:);
yout(k)=xk(1);
e(k)=rin(k)-yout(k);
de(k)=(e(k)-e_1)/ts;
u(k)=20.0*e(k)+0.50*de(k);
if u(k)>10.0
u(k)=10.0;
end
if u(k)<-10.0
u(k)=-10.0
end
u_1=u(k);
e_1=e(k);
end
figure(1);
num=[0,0,1];
den=[0.0067,0.1,0];
sys=tf(num,den);
[yy,time]=lsim(sys,rin,time);
plot(time,rin,'r',time,yout,'b',time,yy,'g');
(2)增量PID
被控对象2400()50Gsss,控制参数8,0.10,10pidkkk
clear all;
ts=0.001;
sys=tf(400,[1,50,0]);
dsys=c2d(sys,ts,'z');
[num,den]=tfdata(dsys,'V');
u_1=0.0;
u_2=0.0;
u_3=0.0;
y_1=0; y_2=0;
y_3=0;
x=[0,0,0]';
error_1=0;
error_2=0;
for k=1:1:1000
time(k)=k*ts;
rin(k)=1.0;
kp=8;
ki=0.10;
kd=10;
du(k)=kp*x(1)+kd*x(2)+ki*x(3); 控制器输出
u(k)=u_1+du(k);
if u(k)>=10
u(k)=10;
end
if u(k)<=-10
u(k)=-10;
end
yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2; 系统输出
error=rin(k)-yout(k);
u_3=u_2;
u_2=u_1;
u_1=u(k);
y_3=y_2;
y_2=y_1;
y_1=yout(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
[yy,time]=lsim(sys,rin,time);
plot(time,rin,'b',time,yout,'r',time,yy,’g’);
xlabel('time(s)');
ylabel('rin,yout');
五、思考题
1、把增量PID参考程序中阶跃输入改成正弦输入,求出PID控制器输出。