学生--PID控制MATLAB仿真实验
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
%根据差分方程计算系统当前输出
y(k)
yout(k)=-den(2)*y_1-den(3)*y_2-den(4)*y_3+num(2)*u_1+num(3)*u_2+num(4)*u_3; error(k)=rin(k)-yout(k); %当前误差
%更新 u(k-1)
、 u(k-2)
、 u(k-3)
Simulink 模块实现,控制器由
PID 方法设计控制器,其中
kp
1. 5, ki
2, k d
0.05 。
误差初始化由时钟功能实现,从而在
m 文件中实现了误差的积分和微分。
4
控制主程序: ex4.mdl
图 2-1 Simulink 仿真程序 控制子程序: ex4f.m
function persistent [u]=ex4f(u1,u2) errori error_1 %u1 为 Clock , u2 为图 2-1 中 Sum 模块输出的误差信号 e 的采样值
2
Bs
,式中
J=0.0067,B=0.1 。输入信号为
0 .5 sin( 2 t ) ,采用 PD 控制,其中 k p Y ( s) U ( s) Js
2
20, kd
0.5 。采用 ODE45 方法求解连续被控对象方程。
d y dt
2 2
因 为
G ( s)
1 Bs
, 所
以
J
B
dy dt
u , 另
y1
S=input(
for
k=1:1:1500 %各采样时刻
time(k)=k*ts;
if
S==1
%阶跃输入时 % 各项 PID 系数 % 阶跃信号输入
kp=0.50;ki=0.001;kd=0.001; rin(k)=1; elseif S==2
kp=0.50;ki=0.001;kd=0.001; rin(k)=sign(sin(2*2*pi*k*ts)); elseif S==3
统的阶跃信号、正弦信号和方波信号的位置响应,设计离散 时是阶跃跟踪, S=2 时为方波跟踪, 求出 G(s) 对应的离散形式 S=3 时为正弦跟踪。
G ( z)
Y ( z) U ( z) 1) 1)
,其中 Y(z) 和 U(z) 是关于 z 的多项式,则可以得到其对应的
差分表达式
yout (k )
den( 2) y ( k num( 2)u ( k
u(t)
y(t) 被控对象
图 1-1 模拟 PID 控制系统原理框图 PID 控制规律为:
u (t )
k p e(t )
1 TI
t
e(t )dt 0
源自文库TD
de( t ) dt kp 1 1 TI s TD s
sin( 2 * 0 .2 t ) ,
或写成传递函数的形式
G ( s)
U ( s) E ( s)
%各项 PID 系数 %方波信号输入
kp=1.5;ki=1.0;kd=0.01; rin(k)=0.5*sin(2*2*pi*k*ts); end u(k)=kp*x(1)+kd*x(2)+ki*x(3);
%各项 PID 系数 % 正弦信号输入
%PID 控制信号输出 u(k)
%控制信号输出限幅 if u(k)>=10 u(k)=10; end if u(k)<=-10 u(k)=-10; end
y, y2
y , 则
y2
function u=para;
y y 1 2 ,因此连续对象微分方程函数 ( B / J (1 ) / yJ ) * u 2
dy = ex3f(t,y,flag,para)
ex3f.m 如下
J=0.0067;B=0.1;
dy=zeros(2,1); dy(1) = y(2); dy(2) = -(B/J)*y(2) + (1/J)*u;
time(k) = k*ts;
rin(k)=0.50*sin(1*2*pi*k*ts);
%计算输入信号的采样值 % D/A
para=u_1; tSpan=[0 ts]; [tt,xx]=ode45( 'ex3f'
,tSpan,xk,[],para);
%ode45 解系统微分方程
%xx 有两列,第一列为
、 y(k-1)
、 y(k-2)
、 y(k-3)
u_3=u_2;u_2=u_1;u_1=u(k);
6
y_3=y_2;y_2=y_1;y_1=yout(k);
x(1)=error(k); x(2)=(error(k)-error_1)/ts; x(3)=x(3)+error(k)*ts; error_1=error(k); end
PID 控制
G ( s)
K s
2
Js
,其中 J
20 10 sin( 6 t ), K
400
300 sin( 2 t ) ,输入信号
为 0.5 sin( 2 t ) 。采用 PD 控制,取
kp
10, k i
0, k d
1。
仿真程序: ex2.mdl ,如图 1-4 和图 1-5 所示。
图 1-4 ex2 的 Simulink 程序
u(k)
k p e( k )
T TI
k
k
e( j )
j 0
TD T kd
(e( k )
e( k e( k 1)
1))
k p e( k )
ki
j 0
e( j )T
e( k )
T
PID 控制器的输入) , u 为控制信号(即控制器的输出) 。
式中,
ki
kp TI
, kd
k pT D , e 为误差信号(即
、 u(k-3) 、 y(k-3)
的初值 的初值
% 比例、微分、积分项的初值 %e(k-1) 的初值
disp(
'S=1--step,S=2--sin,S=3--square' 'Number of input signal S:'
) % S=1 阶跃, S=2 方波, S=3 正弦 ) %接收输入信号代号
在仿真过程中,可根据实际情况,对控制器的输出进行限幅。 二、连续系统的数字 连续系统的数字 PID 控制仿真 DSP PID 控制可实现 D/A 及 A/D 的功能,符合数字实时控制的真实情况,计算机及
的实时 PID 控制都属于这种情况。 Ex3 设被控对象为一个电机模型传递函数
G ( s)
1 Js
图 1-2 连续系统 PID 的 Simulink 仿真程序 连续系统的模拟 PID 控制正弦响应结果如图 1-3 所示。
图 1-3 连续系统的模拟
PID 控制正弦响应 m 文件作图。
仿真方法二 :在仿真一的基础上,将仿真结果输出到工作空间中,并利用
仿真程序: ex1_2.mdl ,程序中同时采用了传递函数的另一种表达方式,即状态方程的形式,其中
% 比例输出 %微分输出 %积分输出 % 更新 e(k-1)
figure(1); plot(time,rin, xlabel( 'time(s)'
%作图 'r' ,time,yout, ),ylabel( 'b' 'rin,yout' ); );
Ex6 针对于 Ex5 被控对象所对应的离散系统,设计针对三角波、锯齿波和随机信号的位置式响应。 仿真程序: ex6.m 。程序中当
1
A
0 0
close
1 25
all
,B
0 133
,C
1 0 ,D
0 ,如图 1-4 所示。
m 文件作图程序: ex1_2plot.m
;
plot(t,rin, xlabel( ylabel(
'k' 'time(s)' 'r,y' );
,t,yout, );
'k'
);
二、线性时变系统的 Ex2 设被控对象为
den( 3) y( k num( 3) u (k
2) 2)
den( 4) y( k num (4 )u ( k
3) 3)
仿真程序: ex5.m
%PID Controller clear all ;
5
close
all
;
ts=0.001;
%采样周期 % 被控对象连续传递函数
sys=tf(5.235e005,[1,87.35,1.047e004,0]); dsys=c2d(sys,ts, [num,den]=tfdata(dsys, 'z'
u=kp*error+kd*errord+ki*errori; error_1=error; % 误差信号更新
% 由 PID 算式得出的当前控制信号
u(k)
三、离散系统的数字
PID 控制仿真
Ex5 设被控对象为 G ( s )
523500 s
3
87. 35s
2
10470 s
,采样时间为 1ms,对其进行离散化。 针对离散系 PID 控制器。其中 S 为信号选择变量, S=1
); %输入输出信号图 );
'time(s)'
); % 误差图
Ex4 被控对象是一个三阶传递函数
523500 s 87 .35s
2
,采用 Simulink 与 m 文件相结合的形式,
10470 s
m 文件实现。输入信号为
利用 ODE45 方法求解连续对象方程,主程序由 一个采样周期 1ms 的正弦信号。采用
和 e(k-1)
figure(1); plot(time,rin, xlabel( figure(2); plot(time,rin-yout, xlabel( 'time(s)' 'r' ),ylabel( ); 'error'
3
'r'
,time,yout, ),ylabel(
'b' 'rin,yout'
); %转换成离散 z 传递函数的形式 'v' ); %提取 z 传递函数中的分子和分母多项式系数
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;
%u(k-1) %y(k-1)
、 u(k-2) 、 y(k-2)
控制主程序 ex3.m
clear close all all ; ;
ts=0.001; xk=zeros(2,1); e_1=0;
%采样周期 % 被控对象经 A/D 转换器的输出信号 初值 y 的初值 %误差 e(k-1)
3
u_1=0;
%控制信号 u(k-1)
初值
for
k=1:1:2000
%k为采样步数 %time 中存放着各采样时刻
%计算当前误差 %计算 u(k) 中微分项输出
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(k)
的输出
%更新 u(k-1) u_1=u(k); e_1=e(k); end
计算机控制技术实验指导书 ( MATLAB 版)
机 电 学 院 杨蜀秦 编
2012-11-19
实验一 连续系统的模拟 一、基本的 PID 控制 在模拟控制系统中, 控制器最常用的控制规律是
比例 r(t) e(t) 微分 积分 + +
PID 仿真 1-1 所示。
PID 控制。模拟 PID 控制系统原理框图如图
if
u1==0 errori=0 error_1=0
% 当 Clock=0
时,即初始时,
e(k)=e(k-1)=0
end
ts=0.001; kp=1.5; ki=2.0; kd=0.05;
error=u2; errord=(error-error_1)/ts; errori=errori+error*ts; %一阶后向差分误差信号表示的误差微分 %累积矩形求和计算的误差的积分
图 1-5 Simulink 子系统
2
实验二 数字 PID 控制 计算机控制是一种采样控制, 一、位置式 PID 控制算法 按模拟 PID 控制算法,以一系列的采样时刻点 以一阶后向差分近似代替微分,可得离散 kT 代表连续时间 t ,以矩形法数值积分近似代替积分, PID 位置式表达式: 它只能根据采样时刻的偏差值计算控制量。 PID 控制中,使用的是数字 因此连续 PID 控制算法不能 PID 控制器。 直接使用,需要采用离散化方法。在计算机
tt 时刻对应的 y ,第二列为 tt 时刻对应的 y 导数
xk = xx(end,:); yout(k)=xk(1);
% A/D ,提取 xx 中最后一行的值,即当前 %xk(1) 即为当前系统输出采样值 y(k)
y 和 y 导数
e(k)=rin(k)-yout(k); de(k)=(e(k)-e_1)/ts;
133
Ex1 以二阶线性传递函数 仿真时取
s
2
为被控对象, 进行模拟 PID 控制。输入信号 r (t ) 10s。
25 s
kp
60, ki
1, k d
3 ,采用 ODE45 迭代方法,仿真时间
仿真方法一 :在 Simulink 下进行仿真, PID 控制由 Simulink Extras 节点中的 PID Controller 提供。 仿真程序: ex1_1.mdl ,如图 1-2 所示。