基于大林算法的电加热炉温度控制系统设计.docx
《基于大林算法的电加热炉温度控制系统设计.docx》由会员分享,可在线阅读,更多相关《基于大林算法的电加热炉温度控制系统设计.docx(22页珍藏版)》请在冰豆网上搜索。
基于大林算法的电加热炉温度控制系统设计
HefeiUniversity
基于大林算法的电加热炉温度控制系统设计
课程名称计算机控制技术课程设计
任课教师丁健
班级10级自动化1班
姓名
学号1005072100507210050720
日期2013/06/20
2010级自动化专业《计算机控制技术》课程设计任务书
论文
题目
基于大林算法的电加热炉温度控制系统设计
设计类型
设计型
导师姓名
丁健
主要内容及目标
电阻加热炉用于合金钢产品热力特性实验,电加热炉用电炉丝提供功率,使其在预定的时间内将炉内温度稳定到给定的温度值。
在本控制对象电阻加热炉功率为8KW,有220V交流电源供电,采用双向可控硅进行控制。
本设计针对一个温区进行控制,要求控制温度范围50~350℃,保温阶段温度控制精度为±1℃。
选择合适的传感器,计算机输出信号经转换后通过双向可控硅控制器控制加热电阻两端的电压,其对象温控数学模型为:
其中:
时间常数
=350秒,放大系数
=50,滞后时间τ=10秒,控制算法选用大林算法。
件条
1.PC机一台,教学实验箱一台;
计划学生数及任务
3人
(1):
明确课题功能。
(2):
把复杂问题分解为若干模块,确定各模块处理方法,画出流程图。
(3):
存储器资源分配
(4):
编制程序,根据流程图来编制源程序
(5):
对程序进行汇编,调试和修改,直到程序运行结果正确为止。
计划设计进程
一、总体方案设计
二、控制系统的建模和数字控制器设计
三、硬件的设计和实现
1、选择计算机字长(选用51内核的单片机)
2、设计支持计算机工作的外围电路(EPROM、RAM、I/O端口、键盘、显示接口电路等);
3、设计输入信号接口电路;
4、设计DA转换和电流驱动接口电路;
5、其它相关电路的设计或方案(电源、通信等)。
四、软件设计
1、分配系统资源,编写系统初始化和主程序模块框图;
2、编写AD转换和温度检测子程序框图;
3、编写控制程序和DA转换控制子程序模块框图;
4、其它程序模块(显示与键盘等处理程序)框图。
五、编写课程设计说明书,绘制完整的系统电路图(A3幅面)。
任务分工:
针对本次设计课题,我们明确了各自的分工,顾胜池主要负责软件程序的编写、连接和调试,黄安福主要负责各个模块硬件的仿真和调试和部分模块程序的编写,柴文峰负责报告的整理。
摘要
电加热炉在化工、冶金等行业应用广泛,因此温度控制在工业生产和科学研究中具有重要意义。
其控制系统属于一阶纯滞后环节,具有大惯性、纯滞后、非线性等特点,导致传统控制方式超调大、调节时间长、控制精度低。
采用单片机进行炉温控制,具有电路设计简单、精度高、控制效果好等优点,对提高生产效率、促进科技进步等方面具有重要的现实意义。
常规的温度控制方法以设定温度为临界点,超出设定允许范围即进行温度调控:
低于设定值就加热,反之就停止或降温。
这种方法实现简单、成本低,但控制效果不理想,控制温度精度不高、容易引起震荡,达到稳定点的时间也长,因此,只能用在精度要求不高的场合。
电加热炉是典型的工业过程控制对象,在我国应用广泛。
电加热炉的温度控制具有升温单向性,大惯性,大滞后,时变性等特点。
其升温、保温是依靠电阻丝加热,降温则是依靠环境自然冷却。
当其温度一旦超调就无法用控制手段使其降温,因而很难用数学方法建立精确的模型和确定参数,应用传统的控制理论和方法难以达到理想的控制效果。
本设计采用大林算法进行温度控制,使整个闭环系统所期望的传递函数相当于一个延迟环节和一个惯性环节相串联来实现温度的较为精确的控制。
关键词:
单片机;A/D、D/A;达林算法;传感器;炉温控制
目录
一、绪论5
1.1系统设计背景5
1.2技术综述5
二、系统总体设计5
2、1系统概述5
2、2系统的结构框图5
三、硬件设计7
3、1微处理器80C517
3、2温度传感器8
3、3驱动电路9
3、4键盘模块9
3、5LED显示模块10
四、软件设计11
4、1系统软件设计11
4、2大林算法的系统设计11
4、3程序控制流程图13
五、调试运行14
六、课程设计总结15
参考文献17
附录一系统原理图18
附录二程序18
一、绪论
1.1系统设计背景
近年来,加热炉温度控制系统是比较常见和典型的过程控制系统,温度是工业生产过程中重要的被控参数之一,冶金﹑机械﹑食品﹑化工等各类工业生产过程中广泛使用的各种加热炉﹑热处理炉﹑反应炉,对工件的处理均需要对温度进行控制。
因此,在工业生产和家居生活过程中常需对温度进行检测和监控。
由于许多实践现场对温度的影响是多方面的,使得温度的控制比较复杂,传统的加热炉电气控制系统普遍采用继电器控制技术,由于采用固定接线的硬件实现逻辑控制,使控制系统的体积增大,耗电多,效率不高且易出故障,不能保证正常的工业生产。
随着计算机控制技术的发展,传统继电器控制技术必然被基于计算机技术而产生的计算机控制技术所取代。
1.2技术综述
自70年代以来,由于工业过程控制的需要,特别是在电子技术的迅猛发展,以及自动控制理论和设计方法发展的推动下,国外温度控制系统发展迅速,并在智能化自适应参数自整定等方面取得成果。
在这方面以日本、美国、德国、瑞典等国技术领先,并且都生产出了一批商品化的性能优异的温度控制器及仪器仪表,在各行业广泛应用。
二、系统总体设计
2、1系统概述
本设计在硬件部分选择了单片机的AT80C51芯片为核心控制部分,输出为K型热电偶传感器,检测温度后传回单片机系统,最后经过温度控制系统,从而加热电阻,来达到控制电加热炉的目的。
2、2系统的结构框图
电加热炉控制系统的硬件结构框图如图2.1
图2.1系统的总体结构框图
加热炉温度控制实现过程是:
首先温度传感器将加热炉的温度传回单片机,然后AT80C51芯片将给定的温度值与反馈回来的温度值进行比较并经过最小拍无纹波算法运算处理后,传给温度控制系统,判断加热器材输出端导通与否从而使加热炉开始加热或停止加热。
既加热炉温度控制得到实现。
其中单片机的80C51系统为加热炉温度控制系统的核心部分起着重要作用。
三、硬件设计
3、1微处理器80C51
本系统设计的单片机采用80C51或其兼容系列芯片,采用24MHZ或更高频率晶振,以获得较高的刷新频率,时期显示更稳定。
图3.1单片机芯片引脚图
3、2温度传感器
在温度传感器部分,选择了K型热电偶传感器。
(1)K型热电偶的测温原理
热电传感器是利用转换元件的参数随温度变化的特性,将温度和与温度有关的参数的变化转换为电量变化输出的装置。
两种不同的导体或半导体组成的闭合回路就构成了热电偶,热电偶两端为两个热电极,温度高的接点为热端、测量端或自由端;温度低的接点为冷端、参考端或自由端。
测量时,将工作端置于被测温度场中,自由端恒定在某一温度。
热电偶是基于热电效应工作的,热电效应产生的热电势是由接触电势和温差电势两部分组成的。
(2)MAX6675单片热电偶数字转换器。
其工作原理如下:
K型热电偶产生的热电势,经过低噪声电压放大器A1和电压跟随器A2放大、缓冲后,得到热电势信号U1,再经过S4送至ADC。
对于K型热电偶,电压变化率为(41μV/℃),电压可由如下公式来近似热电偶的特性。
U1=(41μV/℃)×(T-T0)
上式中,U1为热电偶输出电压(mV),T是测量点温度;T0是周围温度。
在将温度电压值转换为相应的温度值之前,对热电偶的冷端温度进行补偿,冷端温度即是MAX6675周围温度与0℃实际参考值之间的差值。
通过冷端温度补偿二极管,产生补偿电压U2经S4输入ADC转换器。
U2=(41μV/℃)×T0
在数字控制器的控制下,ADC首先将U1、U2转换成数字量,即获得输出电压U0的数据,该数据就代表测量点的实际温度值T。
这就是MAX6675进行冷端温度补偿和测量温度的原理如图3-2所示。
图3.2温度采集电路
3、3驱动电路
图3.3驱动电路
3、4键盘模块
在本次设计当中,输入设备采用矩阵键盘:
图3-4键盘模块电路
当“设定”键按下时触发键盘中断服务程序,由程序程控扫描法确定那个键按下并执行相应的动作。
程控扫描的任务是:
(1)首先判断是否有键按下。
方法:
使所有的行输出均为低电平,然后从端口A读入列值。
如果没有键按下,则读人值为FFH.如果有链按下.则不为FFH。
(2)去除键抖动。
方法:
延时10—20ms,再一次判断有无键按下,如果此时仍有键按下,则认为键盘上确实有键处于稳定闭合期。
(3)若有键闭合,则求出闭合键的键值。
方法:
对键盘逐行扫描。
(4)程序中需等闭合键释放后才对其进行处理。
3、5LED显示模块
图3-5LM016L液晶模块
LM016L液晶模块采用HD44780控制器。
HD44780具有简单而功能较强的指令集,可以实现字符移动、闪烁等功能。
LM016L与单片机MCU(MicrocontrollerUnit)通讯可采用8位或者4位并行传输两种方式。
HD44780控制器由两个8位寄存器、指令寄存器(IR)和数据寄存器(DR)、忙标志(BF)、显示数据RAM(DDRAM)、字符发生器ROM(CGROM)、字符发生器RAM(CGRAM)、地址计数器(AC)。
IR用于寄存指令码,只能写入不能读出;DR用于寄存数据,数据由内部操作自动写入DDRAM和CGRAM,或者暂存从DDRAM和CGRAM读出的数据。
BF为1时,液晶模块处于内部处理模式,不响应外部操作指令和接受数据。
DDRAM用来存储显示的字符,能存储80个字符码。
CGROM由8位字符码生成5*7点阵字符160种和5*10点阵字符32种,8位字符编码和字符的应关系。
四、软件设计
4、1系统软件设计
控制系统的软件主要包括:
温度的采样和处理、控制计算、控制输出、中断、显示、调节参数修改、温度设定及修改。
其中控制算法采用最小拍无纹波控制算法,以达到更好的控制效果。
考虑到电加热炉是一个非线性、时变和分布参数系统,所以本文采用一种新型的智能控制算法。
它充分吸取数学和自动控制理论成果,与定性知识相结合,做到取长补短,在实时控制中取得较好的成果。
其中,系统的软件流程图如图
4.1系统软件流程图
4、2大林算法的系统设计
大林算法中D(z)的基本形式
设被控对象为带有纯滞后的一阶惯性环节惯性环节,其传递函数分别为:
其中t1为被控对象的时间常数,
为被控对象的纯延迟时间,为了简化,设其为采样周期的整数倍,即N为正整数。
由于大林算法的设计目标是使整个闭环系统的传递函数相当于一个带有纯滞后的一阶惯性环节,即
,其中
由于一般控制对象均与一个零阶保持器相串联,所以相应的整个闭环系统的脉冲传递函数是
(2-3)
于是数字控制器的脉冲传递函数为
(2-4)
D(z)可由计算机程序实现。
由上式可知,它与被控对象有关。
下面对一阶纯滞后环节进行讨论。
一阶惯性环节的大林算法的D(z)基本形式
当被控对象是带有纯滞后的一阶惯性环节时,由式(2-1)的传递函数可知,其脉冲传递函数为:
将此式代入(2-4),可得
(2-5)
式中:
T——采样周期350秒:
———被控对象的时间常数50;
———闭环系统的时间常数10秒。
4、3程序控制流程图
1、程序流程基本思路:
控制过程:
手动输入一个温度设定值,需要调用键盘扫描子程序,再由传感器检测现场的温度值,调用A/D转换子程序,将模拟信号转换为数字信号送单片机处理,调用温度控制子程序来实现温度控制,调用显示子程序将处理后的结果送LCD显示。
在使用键盘时,要考虑键盘的去抖问题,消抖处理有硬件和软件两种方法:
硬件消抖是利用加抖动电路滤避免产生抖动信号;软件消抖是利用数字滤波技术来消除抖动。
我们采用软件的方法,利用主程序循环扫描,主程序每循环一次扫描到的键值相同时,则说明是某键按下。
2、A/D转换程序流程图如图4-3所示
图4-3A/D转换程序流程图
3、温度控制流程图如图4-4所示
图4-4温度控制流程图
五、调试运行
通过Proteus仿真和程序调试,基本完成了设计任务:
温度传感器将加热炉的温度传回单片机,然后AT80C51芯片将给定的温度值与反馈回来的温度值进行比较并经过算法处理后,传给温度控制系统,判断加热器材输出端导通与否从而使加热炉开始加热或停止加热,使加热炉温度控制得到实现:
图5-1运行显示状态
六、课程设计总结
两周的课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。
在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。
学会了合作,学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世。
课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程.”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义.我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础。
通过这次模具设计,本人在多方面都有所提高。
通过这次模具设计,综合运用本专业所学课程的理论和生产实际知识进行一次基于达林算法的加热炉温度控制系统设计从而培养和提高学生独立工作能力,巩固与达林算法设计等课程所学的内容,掌握基于达林算法的设计的方法和步骤,掌握达林算法设计的基本的模型,怎样确定设计方案,提高了计算能力,绘图能力,熟悉了规范和标准,同时各科相关的课程都有了全面的复习,独立思考的能力也有了提高。
在这次设计过程中,体现出自己单独设计的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。
在此感谢我们的丁健老师.,老师严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;老师循循善诱的教导和不拘一格的思路给予我无尽的启迪;这次模具设计的每个实验细节和每个数据,都离不开老师您的细心指导。
而您开朗的个性和宽容的态度,帮助我能够很顺利的完成了这次课程设计。
同时感谢对我帮助过的同学们,谢谢你们对我的帮助和支持,让我感受到同学的友谊。
由于本人的设计能力有限,在设计过程中难免出现错误,恳请老师们多多指教,我十分乐意接受你们的批评与指正,本人将万分感谢。
参考文献
[1]梅丽凤,单片机原理及接口技术,北京:
清华大学出版社,2004:
19-48,81-93
[2]周继明,江世明.传感技术与应用[M],长沙:
中南大学出版社,2005:
45-56
[3]张毅刚,单片机原理及应用,北京:
高等教育出版社,2003:
126-135
[4]顾兴源,计算机控制系统,北京:
冶金工业出版社,1981:
25-40
[5]张连华,单片机应用系统设计方法,北京:
科学之友,2010,07:
27-28
[6]楼然苗,51系列单片机设计实例,北京:
北京航空航天出版社,2003.3-35
[7]李生明,单片机LED显示接口技术,长江职工大学学报,2003,(4):
18-24
[8]袁强,基于单片机89C51和89C2051点阵LED图文显示,工程地质计算机应用2006
附录一系统原理图
附录二程序
#include
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitrs=P3^3;
sbitrw=P3^6;
sbiten=P3^7;
uchardis2[]={"nowT:
"};
uchardis3[]={"setT:
"};
ucharflag=0;
uchartemp;
sbitSO=P3^1;
sbitCS=P3^4;
sbitSCK=P3^5;
sbitADD=P0^5;
sbitSUB=P0^6;
sbitHOLD=P0^7;
ucharADH,ADL;
inti,z,j;
voiddelay(uchara)
{
uchari,j;
for(i=0;ifor(j=0;j<110;j++);
}
voidwdata(uchardat)//写数据
{
P1=dat;
rs=1;
rw=0;
en=0;
delay(4);
en=1;
}
voidwcom(ucharcom)//写命令
{
P1=com;
rs=0;
rw=0;
en=0;
delay(4);
en=1;
}
//初始程序
voidinit(void)
{
uchari;
wcom(0x38);
wcom(0x0c);
wcom(0x06);
wcom(0x01);
wcom(0x80);
while(dis2[i]!
='\0')
{
wdata(dis2[i]);
i++;
}
}
voidgettemper()
{
inta,b,c,d,T;
ADH=ADL=0;
SCK=0;
//CS=0;
SCK=1;
CS=0;
SCK=0;
SCK=1;
for(i=4;i>0;i--)//D15~D11
{SCK=0;
ADH=SO;
ADH=ADH<<1;
SCK=1;
}
for(i=8;i>0;i--)//D10~3
{SCK=0;
ADL=SO;
ADL=ADL<<1;
SCK=1;
}
SCK=0;
flag=SO;
SCK=1;
SCK=0;
//temp=ADH;
//temp<<=8;
//temp=temp|ADL;
//T=1023.75*temp/4095;
T=ADH*256+ADL;
a=T/1000;
b=(T/100)%10;
c=(T/10)%10;
d=T%10;
wcom(0x86);
wdata(a+0x30);
wdata(b+0x30);
wdata(c+0x30);
wdata(d+0x30);
wdata('');
wdata('C');
CS=1;
}
intgetkey()
{uchartemp;
intc;
P2=0x0f;
temp=P2;
temp=temp&0x0f;//屏蔽高4位,取列值
if(temp==0x0e)
c=0;
elseif(temp==0x0d)
c=1;
elseif(temp==0x0b)
c=2;
elseif(temp==0x07)
c=3;
P2=0xf0;//给P2的高4位高电平,求行值
temp=P2;
temp=temp&0xf0;//屏蔽低4位
if(temp==0xe0)
c=c+0;
elseif(temp==0xd0)
c=c+4;
elseif(temp==0xb0)
c=c+8;
returnc;//最后返回行加列的值
}
voidmain()
{intkey;
init();
wcom(0x80+0x40);
while(dis3[i]!
='\0')
{
wdata(dis3[i]);
i++;
}
while
(1)
{gettemper();
P2=0x0f;
if((P2&0x0f)!
=0x0f)//延时后在判断一次,去除抖动影响
{
key=getkey();//求键盘值
wcom(0x80+0x46);
wdata(key+0x30);
wdata(1+0x30);
wdata(4+0x30);
wdata('');
wdata('C');
if(100*key+14<514)
{
SUB=0;
ADD=1;
HOLD=1;
}
if(100*key+14>514)
{
ADD=0;
SUB=1;
HOLD=1;
}
if(100*key+14==514)
{
HOLD=0;
SUB=1;
ADD=1;
}
}
}
}