1、计算机控制技术课程设计2015/2016学年第二学期设计课题:基于大林算法的电路温度控制系统的设计专业:_班级:_学号:_ _姓名:_ _2016年5月目 录第一章 课题简介11。1课题的目的11。1。1 本机实现的功能11。1。2 扩展功能:11。2课题的任务及要求1第二章 系统方案设计22。1 水温控制系统的总体介绍22。2 系统框图22。3 闭环系统的工作原理2第三章 系统硬件设计33。1 系统原理图33。2 单片机最小系统设计3第四章 大林控制算法设计54。1 大林控制算法原理:54。2 控制器的设计及公式推导过程64.3 采样周期的选择:7第五章 水温控制系统的仿真75.1振铃现象7
2、5.2 Matlab仿真95.2 大林算法控制系统编程设计:105。3各模块子程序设计115.3.1主程序设计115。3。2读出温度子程序125。5.3数码管显示模块135。5。4温度处理程序14第六章 小结与体会15第七章 参考文献16第八章 附录17第一章 课题简介1。1课题的目的1.1。1 本机实现的功能(1)利用温度传感器采集到当前的温度,通过AT89S52单片机进行控制,最后通过LED数码管以串行口传送数据实现温度显示.(2)可以通过按键任意设定一个恒定的温度。(3)将水环境数据与所设置的数据进行比较,当水温低于设定值时,开启加热设备,进行加热;当水温高于设定温度时,停止加热,从而实
3、现对水温的自动控制。(4)当系统出现故障,超出控制温度范围时,自动蜂鸣报警。1.1.2 扩展功能:(1)具有通信能力,可接收其他数据设备发来的命令,或将结果传送到其他数据设备。(2)采用适当的控制方法实现当设定温度或环境温度突变时,减小系统的调节时间和超调量。(3) 温度控制的静态误差。1.2课题的任务及要求一升水由800W的电热设备加热,要求水温可以在一定范围内由人工设定,并能在环境温度降低时实现自动调整,以保持设定的温度基本不变。(1)温度测量范围:10100,最小区分度不大于1。(2)控制精度在0。2以内,温度控制的静态误差小于1。(3)用十进制数码管显示实际水温。第二章 系统方案设计2
4、。1 水温控制系统的总体介绍本次设计采用采样值和键盘设定值进行比较运算的方法来简单精确地控制温度。先通过键盘输入设定温度,保存在AT89S52单片机的指定单元中,再利用温度传感器DS18B20进行信号的采集,送入单片机中,保存在采样值单元.然后把采样值与设定值进行比较运算,得出控制量,从而调节继电器触发端的通断,来实现将水温控制在一定的范围内.当水温超出单片机预存温度时,蜂鸣器进行报警.单片机控制系统是一个完整的智能化的集数据采集、显示、处理、控制于一体的系统.由传感器、LED显示单片机及执行机构控制部分等组成.2。2 系统框图DS18B20温度传感器LED显示指示灯蜂鸣器AT89S52单片机
5、加热继电器按键2.3 闭环系统的工作原理本设计以AT89S52单片机系统进行温度采集与控制。温度信号由模拟温度传感器DS18B20采集输入AT89S52,利用温度传感器采集到当前的温度,通过AT89S52单片机进行控制,最后通过LED数码管以串行口传送数据实现温度显示。可以通过按键任意设定一个恒定的温度。将水环境数据与所设置的数据进行比较,当水温低于设定值时,开启加热设备,进行加热;当水温高于设定温度时,停止加热,从而实现对水温的自动控制。当系统出现故障,超出控制温度范围时,自动蜂鸣报警。用单片机控制水温可以在一定范围内设定,并能在环境温度变化时保持温度不变。第三章 系统硬件设计3.1系统原理
6、图在温度测量控制系统中,实际温度值由PT100恒流工作调理电路进行测量。为了克服PT100线性度不好的缺点,在信号调理电路中加入负反馈非线性校正网络;调理电路的输出电压经ADC0808转换后送入单片机AT89S51;对采样数据进行滤波及标定处理后,由3位7段数码管显示。输入的设定值由4位独立按键电路进行设定,可分别对设定值的十位和个位进行加1、减1操作。设定值送入单片机后,由另外一组3位7段数码管显示。数码管的段码由74HC05驱动,位码由三极管2N2222A驱动。系统采用PID闭环控制方案.将预置初值与温度传感器反馈信号比较得到偏差(e)进行PID运算处理得到控制量(u),通过此量来控制加热
7、器的加热时间,从而控制加热功率.由于水本身具有很大的热惯性,所以必须对水温的变化趋势作出预测,并且根据需要及时反方向抑制,以防止出现较大的超调量的波动。在PID控制中,积分环节(I)具有很强的滞后效应,而微分环节(D)具有预见性,所以该方案最终采用PD算法,能够很好的控制超调,并且稳态误差也很小。图3-1 系统原理图3.2单片机最小系统设计基本的AVR硬件线路,包括以下几部分:(1)复位线路的设计AT89S52已经内置了上电复位设计.并且在熔丝位里,可以控制复位时的额外时间,故AVR外部的复位线路在上电时,可以设计得很简单:直接拉一只10K的电阻到VCC即可(R6)。为了可靠,再加上一只0。1
8、uF的电容(C0)以消除干扰、杂波。D3(1N4148)的作用有两个:作用一是将复位输入的最高电压钳在Vcc+0。5V 左右,另一作用是系统断电时,将R1(10K)电阻短路,让C0快速放电,让下一次来电时,能产生有效的复位.当AVR在工作时,按下S0开关时,复位脚变成低电平,触发AVR芯片复位。重要说明:实际应用时,如果你不需要复位按钮,复位脚可以不接任何的零件,AVR芯片也能稳定工作。即这部分不需要任何的外围零件。图32 复位电路设计(2)晶振电路的设计Mega16已经内置RC振荡线路,可以产生1M、2M、4M、8M的振荡频率。不过,内置的毕竟是RC振荡,在一些要求较高的场合,比如要与RS2
9、32通信需要比较精确的波特率时,建议使用外部的晶振线路.早期的90S系列,晶振两端均需要接22pF左右的电容。Mega系列实际使用时,这两只小电容不接也能正常工作。不过为了线路的规范化,我们仍建议接上。重要说明:实际应用时,如果你不需要太高精度的频率,可以使用内部RC振荡。即这部分不需要任何的外围零件。图3-3 晶振电路设计(3)电源设计AVR单片机最常用的是5V与3。3V两种电压.本线路以转换成5V直流电压,电路需要变压器把220交流电压转换成28V交流电,再通过整流器,把交流电转化成直流电,通过7809和7805三端正电源稳压电路转化成直流5V。电源如图3-4。图34电源电路设计图第四章
10、大林控制算法设计4。1 大林控制算法原理:在许多工业过程中,被控对象一般都有纯滞后特性,而且经常遇到纯滞后较大的对象.美国IBM公司的大林,在1968年提出了一种针对工业生产过程中,含有纯滞后对象的控制算法,具有较好的效果.假设带有纯滞后的一阶、二阶惯性环节的对象为:式中,为纯滞后时间,、为时间常数,K为放大系数.为简单起见,设=NT,N为正整数。大林算法的设计目标是设计合适的数字控制器,使整个闭环系统的传递函数为具有时间纯滞后的一阶惯性环节,而且要求闭环系统的纯滞后时间等于对象的纯滞后时间。4.2 控制器的设计及公式推导过程-电炉温度传感器D/AA/D被控对象的传递函数:采样周期T=1s,期
11、望闭环传递函数的惯性时间常数:设期望闭环传递函数为:系统的广义对象传递函数:系统广义对象的脉冲传递函数为:系统的闭环脉冲传递函数为:数字控制器的脉冲传递函数为:当输入为单位阶跃时,输出为:控制量的输出为:4.3 采样周期的选择:在本实验中,定时中断间隔选取100ms,采样周期T要求既是采样中断间隔的整数倍,又要满足,而由被控对象的表达式可知,所以取N=1,=T,=1s,取T=1s。因为,,因为采样周期T=1s,定时中断为1s,就是说1个定时中断后进行采样。第五章 水温控制系统的仿真5。1振铃现象直接用上述控制算法构成闭环控制系统时,人们发现数字控制器输出U(z)会以1/2采样频率大幅度上下摆动
12、。这种现象称为振铃现象。振铃现象与被控对象的特性、闭环时间常数、采样周期、纯滞后时间的大小等都有关系。振铃现象中的振荡是衰减的,并且于由被控对象中惯性环节的低通特性,使得这种振荡对系统的输出几乎无任何影响,但是振铃现象却会增加执行机构的磨损。在交互作用的多参数控制系统中,振铃现象还有可能影响到系统的稳定性,所以,在系统设计中,应设法消除振铃现象。可引入振铃幅度RA来衡量振荡的强烈程度。振铃幅度RA的定义为:在单位阶跃信号的作用下,数字控制器D(z)的第0次输出与第1次输出之差值.设数字控制器D(z)可以表示为:(51)其中(52)那么,数字控制器D(z)输出幅度的变化完全取决于Q(z),则在单
13、位阶跃信号的作用下的输出为:(53)根据振铃的定义,可得:(54)上述表明,产生振铃现象的原因是数字控制器D(z)在z平面上位于z=-1附近有极点.当z=1时,振铃现象最严重。在单位圆内离z=-1越远,振铃现象越弱。在单位圆内右半平面的极点会减弱振铃现象,而在单位圆内右半平面的零点会加剧振铃现象。由于振铃现象容易损坏系统的执行机构,因此,应设法消除振铃现象。大林提出了一个消除振铃的简单可行的方法,就是先找造成振铃现象的因子,然后令该因子中的z=1。这样就相当于取消了该因子产生振铃的可能性.根据终值定理,这样处理后,不会影响输出的稳态值。本设计的被控对象是含有纯滞后的一阶惯性环节,大林算法求得的
14、数字控制器为式:(5-5)有可表示为式314所示:(5-6)可能引起振铃现象的因子是式3-15所示:(57)其振铃的幅度为:(5-8)根据r值的不同,有一下几种情况:(1)当r=0时,不存在振铃极点因子,此时不产生振铃现象(2)当r=1时,存在一个极点z=();当=时,z1,存在严重的振铃。当r=2时,存在极点Z=当0;a) for(b=100;b0;b);void init() EA=1; ET1=1; TR1=1; TMOD=0x10; TH1=(65536-4000)/256; TL1=(655364000)%256; flag=0; high=100; jdq=1;void didi(
15、) beep=0; led=0; delay(500); beep=1; led=1; delay(500);void dsreset(void) /DS18b20复位,初始化函数 uint i; ds=0; i=103; /延时最短480us while(i0) i-; ds=1; /等待16-60us,收到低电平一个约60-240us则复位成功 i=4; while(i0) i-;bit tempreadbit(void) /读1位数据函数 uint i; bit dat; ds=0;i+; ds=1;i+;i+;/i+起到延时作用 dat=ds; i=8; while(i0)i-; re
16、turn(dat);uchar tempread(void)/读1字节的数据函数 uint i,j,dat; dat=0; for(i=1;i=8;i+) j=tempreadbit(); dat=(j7)(dat1); /读出的数据最低位在最前面,这样刚好一个字节在dat里 return(dat);void tempwritebyte(uchar dat) /向DS18B20写一个字节的数据函数 uint i; uchar j; bit testb; for(j=1;j=8;j+) testb=dat0x01; dat=dat1; if(testb) /写1 ds=0;i+;i+;ds=1;
17、i=8;while(i0)i; else /写0 ds=0;i=8;while(i0) i-;ds=1;i+;i+; void tempchange(void) /DS18B20开始获取温度并转换 dsreset(); delay(1); tempwritebyte(0xcc);/写跳过读ROM指令 tempwritebyte(0x44); /写温度转换指令uint get_temp()/读取寄存器中存储的温度数据 uchar a,b; dsreset(); delay(1); tempwritebyte(0xcc); /写跳过读ROM指令 tempwritebyte(0xbe); /写温度转
18、换指令 a=tempread(); /读低8位 b=tempread(); /读高8位 temp=256b+a; f_temp=temp*0。0625; /温度在寄存器中为12位,分辨率为0。0625 temp=f_temp10+0。5; /乘以10表示小数点后面只取一位 return temp; /temp是整型void keyscan() if(s1=0) P2=0xff; delay(5); if(s1=0) while(!s1); s1num+; if(s1num=1) flag=1; if(s1num=2) s1num=0; flag=0; if(s1num=1) flag=1;if
19、(s2=0) delay(5);if(s2=0) while(!s2);high+=10;if(high=1000) high=100;if(s3=0)delay(5);if(s3=0) while(!s3); high=10; if(high=0) high=100;void main()/主函数 init(); while(1) tempchange(); /温度转换函数 if(temphigh-10) jdq=0;didi(); if((temp=high10)&(temp=high) jdq=0;beep=1; if(temphigh)(temp=high+10)) jdq=1;bee
20、p=1; if(temphigh+10) jdq=1;didi(); void time1() interrupt 3 TH1=(65536-4000)/256; TL1=(655364000)%256; t+; keyscan(); if(flag=0) if(t=4)t=0; switch(t) case 1:P0=tableget_temp()/100; P2=0xfd;break; case 2:P0=table1get_temp()%100/10;P2=0xfb;break; case 3:P0=tableget_temp()%10; P2=0xf7;break; if(flag=1) if(t=4)t=0; switch(t) case 0:P0=0xff; P2=0xfe;break; case 1:P0=0xff; P2=0xfd;break; case 2:P0=tablehigh/100; P2=0xfb;break; case 3:P0=tablehigh100/10; P2=0xf7;break; 班级: 姓名: 学号:1。简要叙述系统的工作原理。2.简述复位电路设计原理。3。系统如何产生报警?4.简述大林算法的原理。5.采样周期如何确立?16