计算机控制课程设计带死区PID控制Word文档下载推荐.docx
《计算机控制课程设计带死区PID控制Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《计算机控制课程设计带死区PID控制Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。
输出简历时间小于:
50uS。
输出插座:
DB25(孔)连接器。
2)模拟量输入(A/D)
120KHZ,12位A/D,ADS7816,A/D内置采样保持器。
软件查询。
16路单端输入,输入阻抗:
1MΩ
最大输入耐压电压:
<
+12V/-5.5V,瞬时输入耐压:
-25V-+30V
DB25孔式输入连接器。
A/D最大通过率:
70KHZ,输入通道建立时间<
8uS。
双极性输入范围:
-5V—+5V,单极性输入范围:
5V、10V。
3)开关量输入/输出
16路开关量输入(2个8位),16路开关量输出(2个8位)
TTL电平(兼容3V逻辑)
开关量输出复位后喂输出为低电平“0”。
输出高电压>
2.5V,低电压>
0.5V,最大输出电流:
8mA
输入电流<
0.1mA输入高电压门限>
2V,低电压<
0.8V
输入耐压:
高电平最大耐压:
8V,低电平:
-0.4V
40脚扁平电缆插座。
4)其它
符合PCIV2.1标准,供电:
+5V、+12V、-12V。
AC6611占用64个I/O选通空间
工作温度:
0—70℃,尺寸:
12(W)X9(H)(厘米)
2.2应用方法和步骤
1)关闭计算机的电源;
2)将AC6611板卡插入PCI槽中(实物图如下:
);
3)打开计算机电源,启动Windows2000/XP;
4)Windows2000/XP将会显示找到新硬件,可按找到新硬件向导进行下一步;
5)选择搜索设备的最新驱动程序;
6)选择驱动所在目录,进行安装(\ac6611\driver\);
7)按找到新硬件向导的提示进行下一步(端子连接图如下:
8)Windows2000/XP将显示完成添加/删除硬件向导,单击完成即可完成安装过程。
在完成上述操作后,打开AC6611的静态测试程序,在通道选择处选择你所需要的输入量程及起始通道和停止通道,输入选择处选择0到10伏的电压,输出选择处也选择0到10伏电压。
起操作界面如下:
在静态测试完成后,就可以编程对AC6611进行测试,其步骤如下:
1)加载DLL;
2)调用AC6611_CreateDevice();
3)调用AC6611_AD();
4)调用AC6611_DA();
5)调用AC6611_DI();
6)调用AC6611_DO();
7)AC6611_CloseDeivce()。
3.方案设计
根据加热器的过程特性和控制装置的情况,采用带死区单回路温度控制系统,系统框图如下:
3.1加热器的过程特性
加热器的工作原理是把一个匝数较多的初级线圈和一个匝数较少的次级线圈装在同一个铁芯上。
输入与输出的电压比等于线圈匝数之比,同时能量保持不变。
因此,次级线圈在低电压的条件下产生大电流。
我们这次做的死区PID温度控制系统中,使用的加热器其加热上限是100℃。
在加热器加热的过程中,通过死区PID算法的控制,使其温度稳步地逼近设定值,并在允许的偏差范围内有较小的波动。
其在工作的时候是通过外在的控制器给予它一个模拟的信号,来驱动加热器工作,在此同时它也会向控制器反馈它此时的温度状态。
3.2加热器温度控制系统的实现方案
对于加热器温度控制系统,在硬件上我们采用的是AC6611板卡、AC157和一个用于实训的加热器。
在软件上我们采用的标准的PID控制算法对其进行的控制输出。
从而有机的把软硬件整合成为一个整体,构成一个比较简易的加热器温度控制系统。
3.3AC6611和加热器接线图设计
AC6611是通过AC157和加热器相连接的,在加热器的输出和地之间还需要接一个500Ω的电阻,实际中,我们是将两个1K的电阻串接起来,将4到20毫安的电流转换成2到10伏的电压。
其具体的实物接线图和模块图如下:
模块图
实物图
3.4控制程序的方案设计和模块划分
控制程序组成框图如下图所示,数据采集模块将AC6611采集到的数值经过处理后送到PID控制算法模块。
由于PID控制算大是递归算法,所以AC6611采集到得数据和PID算法模块本身的计算结果都将送入到PID算法模块中,通过计算产生的结果通过数据输出模块本身的计算结果都将送入到PID控制算法模块中,经过计算产生得结果通过数据输出模块转换后送到AC6611的模拟量输出端:
控制程序的方案设计主要分为界面设计、数据采集处理程序的设计、实时控制程序设计。
界面设计包括趋势曲线,设定值,过程量,控制量的显示以及死区设定的显示等。
数据采集和处理和处理程序设计包括AC6611数据采集程序、D/A输出程序、标度换算、数字滤波等相应的程序设计。
实时控制程序包括PID算法、输出等程序的设计。
1)在趋势曲线的显示时,我们分别用红、蓝、绿三种颜色的线条显示SP、PV和MV的相应实时值,其值来自PID的算法程序的输出。
2)在编辑栏中我们可以修改死区PID控制算法的相应的参数P、I、D及死区的至等。
当修改完成后,我们可以点击确认按钮,将修改后的参数送入到算法程序中去。
数据采集齐全后可点击退出,结束运算。
4.数据采集与输出程序设计
4.1AC6611数据采集与温度换算程序
加热器的温度的变化范围是0到100℃,AC6611只用到了其一半的量程,也就是说其代码只用了0到2047。
其具体的数据采集和温度的换算程序如下:
unsignedlongad_data;
unsignedlongda;
AC6611_AD(hDevice,5,&
ad_data);
adv=ad_data*10/4095.0;
PV=(adv-2)*100/(10.0-2.0);
Edit4->
Text=FloatToStrF(PV,0,4,4);
En=SP-PV;
if(fabs(En)<
=PID_DB)En=0;
DeltaUn=q0*En+q1*En1+q2*En2;
Un=Un1+DeltaUn;
if(Un>
100.0)Un=100.0;
if(Un<
0)Un=0;
Un1=Un;
En2=En1;
En1=En;
da=(unsignedshortint)(Un*4095.0/100.0);
AC6611_DA(hDevice,da);
4.2数字滤波算法及程序设计
由于本程序没有数字滤波算法,固此部分空缺。
4.3控制量与D/A代码换算及输出程序
此带死区的PID温度控制系统程序中无此输出程序。
5.PID控制算法程序设计
一般PID控制算法根据偏差的比例(P),积分(I),微分(D)进行控制(简称PID控制),是控制系统中应用最广泛的一种控制规律。
实际运行的是经验和理论的分析都表明,这种控制规律对许多工业控制时,都能得到满意的结果,不过用计算机实现PID控制,不是简单的把模拟PID控制规律数字话,而是进一步与计算机的逻辑判断功能结合,使得PID控制规律数字话,而是进一步与计算机的逻辑判断功能结合,使得PID控制更加灵活,更能满足生产过程提出的要求。
带死区的PID控制算法:
在计算机控制系统中,某些系统为了避免控制过于频繁,以消除由于频繁动作引起的震荡,又是采用所谓带有死区的PID控制系统,相应的算法有
死区
是一个可调参数,其具体数值可根据实际控制对象有实验确定。
它的值太小使得调节过于频繁,达不到稳定被调节的对象的目的:
如果它的值取得太大这系统产生很大之后;
当他的值去成0的时候就相当于常规PID控制算法。
该系统实际是一个非线性控制系统。
即当偏差绝对值小于
的时候,p(K)=0;
当偏差绝对值大于
,p(K)=e(K),输出以PID运算结果输出。
5.1温度设定曲线的程序实现
在进行温度设定曲线的绘制时,我们需要将温度的设定曲线和程序中的采样程序结合起来才能够体现出程序的实时性,具体的程序如下:
Image1->
Picture->
LoadFromFile("
qushi.bmp"
);
Canvas->
Pen->
Width=1;
Color=clRed;
Canvas->
MoveTo(0,300);
for(inti=0;
i<
480;
i++)Image1->
LineTo(i,300-sptrend[i]);
Color=clBlue;
LineTo(i,300-pvtrend[i]);
Color=clGreen;
LineTo(i,300-mvtrend[i]);
//Edit1->
Text=FloatToStrF(SP,0,4,4);
Edit2->
Edit3->
Text=FloatToStrF(Un,0,4,4);
5.2死区PID算法
5.3PID控制算法的程序设计
在此加热器温度控制系统我们所采算法是带死区的PID控制算法,程序设计如下(附流程图):
6.控制程序的调试
6.1主要调试的内容
本次程序编写完毕后,为了验证系统的稳定性和可靠性,此时运行该程序,必须要经过反复的操作和验证后的系统才是一个稳定可靠的系统。
在系统的调试中,我们调试的主要内容包括:
硬件调试、各个部分子程序的调试、PID参数的整定调试等。
6.2调试方法
硬件:
在进行硬件调试的时候,为考虑到硬件的多方面情况,我们可以让硬件在极限条件进行工作,即在极限条件下检验其性能是否稳定,其个方面的指标是否有较大的波动,以验证其性能的优劣。
子程序:
在操作界面上对开发的系统进行各种各样的试探性操作,观察程序是否存在没有考虑到的漏洞,以对其进行修改和调试。
PID参数的整定:
在这次实训中PID参数的整定以及死区范围的设定非常重要,也是整个系统调试的核心内容。
其参数整定的方法是根据被控过程的特性来确定PID控制器的比例系数、积分时间和微分时间的大小以及死区的范围。
PID参数的整定的方法主要有两大类:
一是理论计算整定法,主要是通过系统的数学模型进行理论计算得到控制器参数,但还必须通过工程实际进行相应的调整和修改。
二是工程整定发,这种方法主要依靠的是操作者的经验直接在控制系统的试验中进行。
PID控制器参数的工程整定方法,主要有临界比例法、反应曲线法和衰减法。
这些工程参数整定的方法对操作的经验依赖性大,一般只适用于有较长工作年限的操作者。
但是不管事哪种参数整定的方法,都必须在实际的系统中进行相应的调试、修改和完善,才能够找到控制的最佳参数。
6.3调试步骤和方法
在进行PID参数的整定过程中,我们将以P=10、I=10、D=5,死区设置为2为一个参照的基本参数,来说明在整定的过程中P、I、D三个参数对控制器性能的影响,在此过程中,每次的整定都只将改变其中的一个参数,其他的参数不变,这样我们便能够清晰的从整定实时趋势曲线的输出直观的判断出各个参数在控制器中的实时位置,从而更加深刻的理解PID控制器。
7.PID参数的整定
7.1整定的方法
通过查各种资料,发现有的学者整理出了如下这种整定的方法,而我们在PID参数调试过程中可以依据下面这个口诀,形象生动的描述了PID这三个参数在系统控制中所起的作用:
参数整定找最佳,先是比例后积分,
自后再把微分加,曲线震荡很频繁,
比例参数应增加,曲线偏离回复慢,
积分时间往下拉,曲线波动周期长,
积分时间再加长,曲线震荡频率快,
先把积分降下来,动差大来波动慢,
积分时间应加长,理想曲线两个波,
前四后一不能多,一看二调多思考,
从小到大顺序查,调节效果才会好。
根据上面的口诀所诉的步骤依次对PID控制器的参数进行整定,并结合实际,从而得到较好的控制效果。
在计算机控制系统中,某些系统为了避免控制动作过于频繁,以消除由于频繁动作所引起的震荡,这时引入死区这个参数,死区是一个可调参数,其具体数值可以根据实际控制的对象,也就是我们所引入的温度控制系统。
7.2整定的结果及分析
通过以上我们对单一参数的调节,不难发现,在PID控制器中:
比例控制能迅速反应误差,从而减小误差,但比例控制不能消除稳态误差,比例系数的增大会导致系统的不稳定;
积分控制的作用是,只要系统存在误差,积分控制作用就不断的积累,输出控制量以消除误差,因而只要有足够长的时间,积分控制将能完全消除误差,积分作用太强会使系统超调加大,甚至使系统出现震荡;
微分控制可以减小超调量,克服震荡,使系统的稳定性提高,同时加快系统的动态响应速度,减小调整时间,从而改善系统的动态性能。
而死区范围的设置,也避免了系统中频繁的操作,引起更大的震荡,使得整个系统趋于更加稳定的运行状态。
8.小结
本次实训,我们运用C++Builder软件并基于AC6611板卡的单回路加热器设计温度控制系统。
本温度控制要求运用PID算法,在进行了PID参数的整定后各项指标基本上能够满足实训的要求。
在数字PID控制器中采样周期越小,其控制效果就越接近于连续PID的控制效果。
同时在此次实训当中认识到只有在自己的实践中才能发现问题并解决问题,从而不再犯眼高手低的错误。
对我自己的能力有很大的提高,我会继续努力学习,坚持理论于实际相结合,更好的把知识用于实际中,我认为这次实习对我个人来说是很成功的课程设计。
在这次课程设计中,要感谢的人很多.没有他们的鼎立支持,我是不可能在短暂的两周的时间里就能实际出一个功能如此复杂的带死区PID控制。
首先,要感谢的是胡文金等指导老师的的帮助.还要感谢的是,班里的其他同学的帮助,比如在C++Bulider中使用PID算法的一些技巧方面的知识。
在系统的动态过程中,当比例系数过大时会引起系统的不稳定;
当比例系数太小时,又会使系统动作过于迟缓。
积分控制可以消除稳态误差,提高系统控制的精度,但是当积分时间太大时,积分的作用过于微弱,以至于不能够完全的消除系统的稳态误差。
然而微分作用可以改善系统的动态性能,但是当微分时间偏大或是偏小,都会导致系统的超调增大,从而使得系统的调节时间比较长。
所以在PID参数整定的过程中一定要,严格的遵循参数整定的方法,以便达到高效率、高精度的控制,才能完成本次控制系统的设计。
参考文献
1.于海生,计算机控制技术-北京:
机械工业出版社,2007.5
2.张宇河,董宇;
计算机控制系统。
北京理工大学出版社,2002.9
3.王锦标.计算机控制系统[M].北京:
清华大学出版社,2004.
4.张晋格.计算机控制原理与应用[M].北京:
电子工业出版社,1995.
5.
附录:
控制程序清单
#include<
math.h>
vcl.h>
#pragmahdrstop
#include"
PID.h"
//---------------------------------------------------------------------------
#pragmapackage(smart_init)
#pragmaresource"
*.dfm"
floatSP=35.0,PV=0.0;
intpvtrend[480];
intsptrend[480];
intmvtrend[480];
intt1;
floatHS=100.0,LS=0.0;
floatPID_DB=2,P=20,I=10,D=5;
floatUn=0.0,DeltaUn=0.0,Un1=0.0,En=0.0,En1=0.0,En2=0.0;
floatq0,q1,q2;
floatTS=1.0;
floatadv;
TForm1*Form1;
__fastcallTForm1:
:
TForm1(TComponent*Owner)
:
TForm(Owner)
void__fastcallTForm1:
Timer1Timer(TObject*Sender)
{
//PV=120+50*sin(t1*5*3.1415/360);
t1++;
479;
i++)
pvtrend[i]=pvtrend[i+1];
pvtrend[479]=300*PV/(HS-LS);
sptrend[i]=sptrend[i+1];
sptrend[479]=300*SP/(HS-LS);
mvtrend[i]=mvtrend[i+1];
mvtrend[479]=300*Un/100.0;
}
//绘制趋势曲线
FormCreate(TObject*Sender)
hDLL=LoadLibrary("
ac6611.dll"
if(hDLL!
=NULL)Label29->
Caption="
AC6611.dllloadok!
"
;
(FARPROC&
)AC6611_CreateDevice=GetProcAddress(hDLL,"
AC6611_CreateDevice"
//创建驱动句柄
)AC6611_CloseDevice=GetProcAddress(hDLL,"
AC6611_CloseDevice"
//关闭驱动句柄
)AC6611_DI=GetProcAddress(hDLL,"
AC6611_DI"
//数字量输入,port=0-1两个通道,8位数据由DiData返回
)A