PID实验报告
PID实验报告
杨晓丹 | 微机原理 | 2015年4月9日
一、实验内容及目的
对一阶系统加入PID控制,D/A及A/D转换,系统的初始量,用MATLAB进行仿真。并更改A/D与D/A的精度,PID的输出值,观察响应曲线的变化。
通过自行编写代码,理解D/A以及A/D的转换方法。通过观察D/A和A/D转换范围、精度变化后曲线的变化,理解实际系统与理想仿真的区别。
二、实验方案内容
1. 系统建模
一阶系统的传递函数为G(s)反拉普拉斯变换后为Ty(t)'则y(t)'Y(s)k X(s)Ts1y(t)kx(t)
kx(t)y(t)
T化为差分方程y(tt)y(t)t*kx(t)y(t)
T设k=1,T=200,kp=3.33,ki=0.0333。 2. 实现12位精度的A/D和D/A转换
设y为系统的输出,y0为系统的初始状态,kp、ki、kd为PID的参数,r为给定值,e为PID的输入量,u为PID的输出量,u1为D/A接收到的数字量,u2为D/A输出的模拟量,du为偏移量,H为模拟量转换的上限,L为模拟量转换的下限。
页 1
1) 无溢出时A/D和D/A的转换方法
由于A/D输出为0x000到0xFFF的数字量,接受的是0到1.0的模拟量(4-20mA),所以先要将模拟量归一化。还要将归一化后的模拟量转换为数字量,由于数字量为定点数,将0x000至0xFFF视为0x0.000和0x0.FFF。 例如ya=(y-L)/(H-L),就将系统输出y转换为0到1.0的模拟量。yd=int32(ya*2^12),就将ya转换为数字量。
对于D/A,则是一相反的过程,先将数字量转换为模拟量,再将模拟量还原。 例如ua=double(ud)/2^12,将数字量转换为模拟量,u=ua*(H-L)+L,将模拟量还原。
2) 有溢出时A/D和D/A转换的处理方法
溢出有两种情况。其一,PID的输出值以及系统的输出值不在转换的范围内。其二PID的输出有正有负,而D/A接受到的数字量只有正值。
对于第一种情况,当接收到的模拟量大于1.0时,使其等于1.0,小于0时,使其等于0。当接受到的数字量大于0xFFF时,使其等于0xFFF,小于0x000时,使其等于0x000。
对于第二种情况,我们可以在PID的计算值u中加入偏移量du(数字量),然后在D/A转换输出的模拟量上减去偏移量du(模拟量),把PID的输出由0到1.0改为0-du到1.0-du。若取du=0.5,则可将PID输出变为-0.5到0.5。
3) PID计算值的处理方法
PID中的参数kp、ki、kd用16位二进制数来表示(ki和kd中已含仿真时间dt),而误差值e为12位数,相乘的结果可用32位二进制数来表示,以定点数的形式可表示为0xXX.YYYZZZ。而YYY是12位D/A需要采集的数字量,若0xXXYYYZZZ大于2^24,则令其等于0x00FFFFFF,若小于0,则令其等于0x00000000。然后右移12位,就能得到YYY的值。
页 2
4) 编写代码
clc;
close all; clear all;
jd=4096; %采样精度 H=500; %采样上限 L=50; %采样下限 r=200; %给定值
du=int32(0.5*jd); %偏移量
u0=int32(0.5*jd); %PID输出初始值 y0=300; %系统初始状态 k=1; %一阶系统参数 T=200; %一阶系统参数
dt=0.1; %仿真间隔 st=2000; %仿真时间 ts=0.1; %采样周期 lp=st/dt; %仿真步数 lp1=st/ts; %PID计算次数
lp2=ts/dt; %PID计算一次系统的仿真次数 %PID的参数设定 kp=3.333333; ki=0.033333;
kd=0;%将PID的参数转换为16位 Kp=int32(kp*4096); Ki=int32(ki*4096*dt); Kd=int32(kd*4096/dt); %给定初始值 e0=int32(0); xi=int32(0); n=0; y=0;
y1=int32((y+y0-L)/(H-L)*jd);
r0=int32((r-L)/(H-L)*jd);
for i=1:lp1 e=r0-y1; xp=e*Kp; xi=xi+e*Ki;
if xi<-4096*jd-1 %防止积分饱和 xi=int32(-4096*jd-1); end
if xi>4096*jd-1 %防止积分饱和 xi=int32(4096*jd-1); end
xd=Kd*(e-e0);
if n==0 %设置PID的初始输出 u=0.5*4096*jd; else
u=xp+xi+xd+du*jd; %PID的计算值加上偏移量 3
页 end
if u<0 %PID输出处理 u=int32(0);
end if u>(4096*jd-1) %PID输出处理 u=int32(4096*jd-1); end
u1=bitshift(u,-12); %将输出右移
u2=double(u1)/jd-double(du)/jd; %减去偏移量du u3=u2*(H-L)+L; %将模拟量还原 e0=e;
for j=1:lp2
y=y+dt*(-y+k*u3)/T; %系统仿真 y1=int32((y+y0-L)/(H-L)*jd); n=n+1; %n用于计数 Y(n)=y+y0; t(n)=n*dt;
if y1>jd-1 y1=jd;
end if y1<0 y1=0;
end
Yad(n)= double((y-L)/(H-L)); end end %绘图
figure(1) plot (t,Y); figure(2) plot(t,Yad);
3. 更改D/A和A/D的转换范围,观察曲线的变化 1) 若给定值大于初值
a) 设置上限H大于给定值,下限L小于初值,观察曲线的变化 b) 设置上限H大于给定值,下限L大于初值,观察曲线的变化 c) 设置上限H大于给定值,下限L等于初值,观察曲线的变化 d) 设置上限H小于给定值,下限L小于初值,观察曲线的变化 e) 设置上限H等于给定值,下限L小于初值,观察曲线的变化
4
页f) 设置上限H等于给定值,下限L等于初值,观察曲线的变化 g) 设置上限H小于给定值,下限L大于初值,观察曲线的变化 2) 若给定值小于初值
a) 设置上限H大于初值,下限L小于给定值,观察曲线的变化 b) 设置上限H大于初值,下限L等于给定值,观察曲线的变化 c) 设置上限H大于初值,下限L大于给定值,观察曲线的变化 d) 设置上限H等于初值,下限L小于给定值,观察曲线的变化 e) 设置上限H小于初值,下限L小于给定值,观察曲线的变化 f) 设置上限H等于初值,下限L等于给定值,观察曲线的变化 g) 设置上限H小于初值,下限L大于给定值,观察曲线的变化 4. 更改D/A和A/D的转换精度,观察曲线的变化
精度改变时,D/A与A/D的转换方法与上文中提到的类似,输出归一化与模拟量的还原依然才用之前的方法。而数字量和模拟量的相互转换将该精度的所有数值映射到0至1.0的浮点数上,溢出则取对应的最大最小值。
由于PID的参数仍为16位定点数,PID的输出为8位的整数部分和N位的取值部分和12位的小数尾部,所以限幅后将结果右移12位,即可得到需要采集的N位数。做实验时仅需更改精度变量jd就能改变转换精度。 1) 将精度改为10位,观察曲线的变化 2) 将精度改为8位,观察曲线的变化 3) 将精度改为6位,观察曲线的变化 4) 将精度改为4位,观察曲线的变化
页 5
5. 更改偏移量DU,观察曲线的变化
将du从0.0以0.2的间隔增大到1.0,观察曲线的变化。 6. 输出改为二位式,观察曲线的变化
系统的输入只有0和1,观察曲线的变化。
三、实验结果及分析
1. 12位D/A仿真和理想仿真的比较 1) D/A仿真和理想仿真的比较
图中蓝色实线为有D/A的系统输出,红色虚线为理想仿真的系统输出。
可以看到,在相同的ki和kp下,理想仿真与有D/A的仿真相比,稳定时间ts相近,超调量mp较小,上升时间tr较长。
页 6
在12位精度下,理想仿真准确性高,而有D/A的仿真上升速度快,二者的
稳定性相近。
将PID的输出都转换为原值。图中实际PID的输出被限幅,并且当理想PID的输出下降时,实际PID的输出依然为最高值。
由于D/A的取值范围有限,实际PID的最高输出是有限的,理想PID的输出则是无限制的。若加入微分作用,理想PID的输出会远远大于实际PID的输出。
页 7
给定值大于初值和小于初值时实际系统的输出yad
8
2)
页 9
页当给定值大于初值时,系统输出yad为正值,当给定值小于初值时,系统输出yad为负值。未受到限幅时,yad的曲线与y的曲线重合。 2. 更改D/A和A/D的转换范围,观察曲线的变化 1) 给定值为200,初始值为100时
蓝色实线参数为H=500,L=50。红色虚线参数为:
10
页a) H=500,L=100
11
页 12
页 H=500,L=150
13
b)页 14
页c) H=200,L=50
15
页 16
页H=130,L=50
17
d) 页 18
页H=200,L=100
19
e) 页
页 20
21
页f) H=140,L=120
22
页
页 23
从图中可以看出,若系统的输入大于100,则系统输出增大,若系统的输入小于100,则系统输出减小。Yad被限幅则系统输出无法达到给定值。当给定值大于初始值时,在一定的范围内,随着下限L的增大,U的初始值增大,上升时间tr增大,超调量Mp增大,稳定时间ts增大。若L开始较小,则相反。猜想在一定范围内,随着上限H的增大,初始值U增大,上升时间tr增大,超调量Mp减小,稳定时间ts减小。当H和L的差值太大时,由于精度不足,系统调节效果反而不好。当上限H减小到给定值时,Yad被限幅,系统输出Y无法达到给定值。 2) 给定值为100,初始值为300时
页 24
H=500,L=200
25
a)页 26
页H=500,L=250
27
b) 页 28
页H=300,L=50
29
c) 页 30
页H=280,L=50
31
d) 页 32
页e) H=300,L=200
33
页 34
页f) H=280,L=220
35
页 36
页从图中可以看出,系统入为-100时系统输出最终稳定在200,高于此值则输出无法达到给定值。系统输入为正,则系统输出增大,系统输入为负,则系统输出减小。在一定范围内,随着下限L的增大,系统输入全为正,系统无法调节。猜想下限L调小后,由于U减小,上升时间tr减小。在一定范围内随着上限的减小,系统输入的终值增大,系统输出的终值增大。猜想在一定范围内,随着上限的增大,上升时间tr减小,稳定时间ts减小。当H和L的差值太大时,由于精度不足,系统调节效果反而不好。若Yad的初始值被限幅,只要Yad等于给定值时不被限幅,就可以调节到给定值。 3) 理论分析
由一阶系统的差分方程y(tt)y(t)t*kx(t)y(t)可知,系统的输出最
T终将稳定在kx上。D/A和A/D转换范围的改变对系统输出的影响是A/D的输出Yad受到限幅对输入U造成影响,以及输入U受到限幅造成的。系统的输入范围为[1.5L-0.5H,0.5L+0.5H],只要r-y0和r在(1.5L-0.5H,0.5L+0.5H)内,系统的终值就能稳定在给定值。
系统输出的增加量与kx(t)-y(t)有关。若给定值大于初始值,系统输入x越大,上升时间tr越短。若给定值小于初始值,系统输出x越小,上升时间tr越短。而系统输入x值与上限H和下限L有直接关系。
给定值大于初始值时,H和L越大,则x的初值越大,tr越小,H越大(精度足够)则x的下限越大,Mp和ts越小。给定值小于初始值时,H越大,L越小,则x越小,上升时间tr越小,H越大则x的上限越大,超调量Mp和稳定时间ts越小。而系统的H和L增加得太大时,相当于降低了精度,系统的输入容易出现震荡,控制效果下降。
D/A和A/D的转换范围有如下规律:
1. (r-y0)/k和r落在[1.5L-0.5H,0.5L+0.5H]的范围内,系统才能达到给定值
页 37
2. 增大H,则超调量Mp减小,调节时间ts减小。
3. 若给定值大于初值,L越大则tr越小。若给定值小于初值,L越小则tr越小。 4. 当H和L增加得太大时,由于精度过低,控制效果较差。 3. 更改D/A和A/D的转换精度,观察曲线的变化 1) 给定值大于初始值时 1.10位精度
38
页 39
页2.8位精度
40
页
41
页位精度
42
3.6页
页 43
44
页位精度
45
4.4页 46
页随着精度的减小,Yad的误差增大,u出现震荡,精度下降到4位时系统终值无法达到给定值。 2) 给定值大于初始值时 1.10位精度
47
页
页 48
位精度
49
2.8页
页 50
51
页位精度
52
3.6页
页 53
页 54
位精度
55
4.4页 56
页随着精度的减小,Yad的误差增大,u出现震荡,精度下降到6位时系统终值无法达到给定值。
总结:精度降低后系统采样的误差增大,并且PID的输出出现震荡,8位精度以下终值无法达到给定值,但是4位精度时系统仍有一定的控制效果。控制精度在8位以上控制效果较好。 4. 更改偏移量DU,观察曲线的变化 1) 给定值大于初始值时
页 57
图中0和0.2的图像基本重合,图中的曲线按照纵坐标值高低顺序与标识对应。当给定值大于初始值时,随着du的增大,D/A的有偏输出u的初值减小,曲线的上升时间tr增大,超调量Mp增大,稳定时间ts增大(若系统能到达给定值),增大到1的时候由于D/A的输出受到限制,系统的输出无法达到给定值。
页 58
给定值小于初始值时
59
2)
页曲线0.8和1.0基本重合,图中的曲线按照纵坐标值高低顺序与标识对应。随着du的增大,D/A的有偏输出u减小,上升时间tr减小,超调量Mp减小,稳定时间ts减小(若系统输出能达到给定值)。du为0和0.2时由于u过大,系统未能达到给定值。 3) 理论分析
D/A只输出0到1.0的模拟量,加入du后D/A的输出范围变为[-du,1.0-du],系统的输入范围为[(1+du)L-H*du,(1-du)H+L*du]。随着du的增大,输入的下限减小,上限减小。由更改D/A和A/D的实验结果分析可知: 1. 一阶系统若要达到给定值,给定值(r-y0)/k应落在((1+du)L-H*du,(1-du)H+L*du)内。
2. 若能达到给定值,当给定值大于初值时,增大du,由于系统的输入u的初值减小,上升时间tr增大,由于系统输入u的下限减小,超调量Mp增大,稳定时间ts增大。
3. 若能达到给定值,当给定值小于初值时,增大du,由于系统的输入u的初值减小,上升时间tr增大,由于系统输入u的下限减小,超调量Mp减小,稳定时间ts减小。
4. du的增减对于给定值大于初始值和给定值小于初始值这两种情况的调节作用是不同的,应适当取值。
页 60
输出改为二位式,观察曲线的变化
61
5.页
页 62
63
页二位式的输出也能使系统输出达到给定值,但输出U震荡剧烈。
四、实验中遇到的问题
1. 改变上限H和下限L的同时,也改变了执行机构的执行能力。在实际系统中,H增大一定程度时,响应曲线基本不变,再增大则由于精度不足,控制效果不好。
2. 由于编程的方式,偏移量du改变造成的影响还与H和L有关。系统的输入有两种形式,一种输入的是-du到1.0-du的模拟量,一种则是将模拟量u*(H-L)+L后输入。实验用后一种方式。前一种方式在du=0,给定值大于初始值时,由于输入最大为0,系统输出无变化。
页 64
因篇幅问题不能全部显示,请点此查看更多更全内容