计算机温度控制系统课程设计.docx
《计算机温度控制系统课程设计.docx》由会员分享,可在线阅读,更多相关《计算机温度控制系统课程设计.docx(23页珍藏版)》请在冰豆网上搜索。
计算机温度控制系统课程设计
摘要
温度控制是工业生产过程中经常遇到的过程控制,有些工艺过程对其温度的控制效果直接影响着产品的质量,因而设计一种较为理想的温度控制系统是非常有价值的。
本设计介绍了以AD590集成温度传感器为采集器、AT89C51为控制器、ADC0809为A/D转换器对温度进行智能控制的温度控制系统。
其主要过程如下:
利用传感器对将非电量信号转化成电信号,转换后的电信号再入A/D转换成数字量,传递给单片机进行数据处理,并向外围设备发出控制信号。
论文首先介绍了单片机控制系统的整体方案设计及原理,然后具体介绍了控制系统的温度传感器部分、A/D转换部分、控制器89C51部分以及数码管显示和键盘控制部分,接着相信介绍了温度控制系统各个单元电路的设计,最后阐述了温度控制系统软件设计的主程序和各个子程序。
关键字:
单片机89C51温度传感器A/D转换器温度控制
计算机温度测控系统
1.设计目的
设计制作和调试一个由工业控制机控制的温度测控系统。
通过这个过程学习温度的采样方法,A/D变换方法以及数字滤波的方法。
通过实践过程掌握温度的几种控制方法,了解利用计算机进行自动控制的系统结构。
2.设计要求和设计指标
1根据设计室提供的设备及设计要求,设计出实际电路组成一个完整的计算机温度测控系统。
2根据设备情况以及被控对象,选择1~2种合适的控制算法,
框图和源程序,并进行实际操作和调试通过。
编制程序温度指标:
60~80℃之间任选;偏差:
1℃。
3.总体方案设计
本系统主要由数据采集、信号放大、模数转换等模块构成。
设计思想是通过温度传感器将温度信号转变为电流(电压)信号,但我们要知道经温度变化引起电流(电压)信号的改变是非常小的,此时如果被模数转换器采集的话效果是非常不明显的,因此我们将其通过一个信号放大模块进行放大。
再通过模数转换器后送入单片机AT89C51,而单片机通过PID算法控制烘箱的电炉加热,并且使数码管显示实时温度,从而实现温度的高精度控制。
4.硬件选择以及相关电路设计
4.1温度传感器的选择
传感器的选取目前市场上温度传感器繁多就此我们提出了以下三种选取方案:
方案一:
选用铂电阻温度传感器,此类温度传感器在各方面特性都比较优秀,但其成本较高。
方案二:
采用热敏电阻,选用此类元器件有价格便宜的优点,但由于热敏电阻的非线性特性会影响系统的精度。
方案三:
选用美国AnalogDevices公司生产的二端集成电流传感器AD590,此器件具有体积小、质量轻、线形度好、性能稳定等优点。
其测量范围在-50℃--+150℃,满刻度范围误差为±0.3℃,当电源电压在5—10V之间,稳定度为1﹪时,误差只有±0.01℃,其各方面特性都满足此系统的设计要求。
比较以上三种方案,方案三具有明显的优点,因此此次设计选用方案三。
选用温度传感器AD590,AD590具有较高精度和重复性(重复性优于0.1℃,其良好的非线形可以保证优于0.1℃的测量精度,利用其重复性较好的特点,通过非线形补偿,可以达到0.1℃测量精度)。
超低温漂移高精度运算放大器OP-07将“温度-电压”信号放大。
便于A/D进行转换,以提高温度采集电路的可靠性。
集成温度传感器的输出形式分为电压输出和电流输出两种。
电压输出型的灵敏度一般为10mV/K,温度0℃时输出为0,温度25℃时输出为2.982V。
电流输出型的灵敏度为1µA/K。
这样便于A/D转换器采集数据。
4.1温度采集图
4.2模数转换器
ADC0809是M美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式A/D转换器。
其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换,其转换时间为100μs左右。
是目前国内使用最广泛的8位通用A/D芯片。
图4.2ADC0809引脚图
4.2.1ADC0809内部结构
图中多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用一个A/D转换器进行转换,这是一种经济的多路数据采集方法。
地址锁存和译码电路完成对A、B、C3个地址位进行锁存和译码,其译码输出用于通道选择,其转换结果通过三态输出锁存器存放、输出,因此可以直接和系统数据总线相连,表4-1为通道选择表。
图4.3ADC0809内部结构图
表4-1通道选择表
4.2.2信号引脚
ADC0809的内部结构和外部引脚分别如图4-3和图4-2所示。
内部各部分的作用和工作原理在内部结构图中已一目了然,在此就不再赘述,下面仅对各引脚定义分述如下:
(1)IN0~IN7——8路模拟输入,通过3根地址译码线ADDA、ADDB、ADDC来选通一路。
(2)D7~D0——A/D转换后的数据输出端,为三态可控输出,故可直接和微处理器数据线连接。
8位排列顺序是D7为最高位,D0为最低位。
(3)ADDA、ADDB、ADDC——模拟通道选择地址信号,ADDA为低位,ADDC为高位。
地址信号和选中通道对应关系如表4-1所示。
(4)VR(+)、VR(-)——正、负参考电压输入端,用于提供片内DAC电阻网络的基准电压。
在单极性输入时,VR(+)=5V,VR(-)=0V;双极性输入时,VR(+)、VR(-)分别接正、负极性的参考电压。
(5)ALE——地址锁存允许信号,高电平有效。
当此信号有效时,A、B、C三位地址信号被锁存,译码选通对应模拟通道。
在使用时,该信号常和START信号连在一起,以便同时锁存通道地址和启动A/D转换。
(6)START——A/D转换启动信号,正脉冲有效。
加于该端的脉冲的上升沿使逐次逼近寄存止,重新从头开始转换器清零,下降沿开始A/D转换。
如正在进行转换时又接到新的启动脉冲,则原来的转换进程被中。
(7)EOC——转换结束信号,高电平有效。
该信号在A/D转换过程中为低电平,其余时间为高电平。
该信号可作为被CPU查询的状态信号,也可作为对CPU的中断请求信号。
在需要对某个模拟量不断采样、转换的情况下,EOC也可作为启动信号反馈接到START端,但在刚加电时需由外电路第一次启动。
(8)OE——输出允许信号,高电平有效。
当微处理器送出该信号时,ADC0808/0809的输出三态门被打开,使转换结果通过数据总线被读走。
在中断工作方式下,该信号往往是CPU发出的中断请求响应信号。
4.2.3工作时序和使用说明
图4-4ADC0809工作时序图
用单片机控制ADC时,多数采用查询和中断控制两种方式。
查询法是在单片机把启动命令送到ADC之后,执行别的程序,同时对ADC的状态进行查询,以检查ADC变换是否已经完成,如查询到变换已结束,则读入转换完毕的数据。
中断控制是在启动信号送到ADC之后,单片机执行别的程序。
当ADC转换结束并向单片机发出中断请求信号时,单片机响应此中断请求,进入中断服务程序,读入转换数据,并进行必要的数据处理,然后返回到原程序。
这种方法单片机无需进行转换时间管理,CPU效率高,所以特别适合于变换时间较长的ADC。
本设计采用查询方式进行数据收集。
由于ADC0809片内无时钟,故运用8051提供的地址锁存使能信号ALE经D触发器二分频后获得时钟。
因为ALE信号的频率是单片机时钟频率的1/6,如果时钟频率为6MHz,则ALE信号的频率为1MHz,经二分频后为500kHz,和AD0809时钟频率的典型值吻合。
由于AD0809具有三态输出锁存器,故其数据输出引角可直接和单片机的总线相连。
地址码引脚ADDA~C分别和地址总线的低3位A0、A1、A2相连,以选通IN0~IN7中的一个通道。
采用单片机的P2.7(地址总线最高位A15)作为A/D的片选信号。
并将A/D的ALE和START脚连在一起,以实现在锁存通道地址的同时启动ADC0809转换。
启动信号由单片机的写信号和P2.7经或非门而产生。
在读取转换结果时,用单片机的读信号和P2.7经或非门加工得到的正脉冲作为OE信号去打开三态输出锁存器。
编写的软件按下列顺序动作:
令P2.7=A15=0,并用A0、A1、A2的组合指定模拟通道的地址;执行一条输出指令,启动A/D转换;然后根据所选用的是查询、中断、等待延时三种方式之一的条件去执行一条输入指令,读取A/D转换结果。
ADC0809是一个8路8位逐次逼近的A/D转换器。
AD0809的转换时间为100µs。
在CPU启动A/D命令后,便执行一个固定的延时程序,延时时间应略大于A/D的转换时间;延时程序一结束,便执行数据读入指令,读取转换结果。
我们只用了其一路AD转换,参考电压2.56V,即一位数字量对应10mV即1℃。
所以用起来很方便。
ADC0809是带有8路模拟开关的8位A/D转换芯片,所以它可有8个模拟量的输入端,由芯片的A,B,C三个引脚来选择模拟通道中的一个。
A,B,C三端分别和AT89C51的P0.0~P0.2相接。
地址锁存信号(ALE)和启动转换信号(START),由P2.6和/WR或非得到。
输出允许,由P2.6和/RD或非得到。
时钟信号,可有89C51的ALE输出得到,不过当采用12M晶振时,应该先进行二分频,以满足ADC0809的时钟信号必须小于640K的要求。
4.3控制器89C51
AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4kbytes的可反复擦写的Flash只读程序存储器和128bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机可为您提供许多高性价比的使用场合,可灵活使用于各种控制领域。
AT89C51单片机的主要特性:
(1)和MCS-51兼容,4K字节可编程闪烁存储器;
(2)灵活的在线系统编程,掉电标识和快速编程特性;
(3)寿命为1000次写/擦周期,数据保留时间可10年以上;
(4)全静态工作模式:
0Hz-33Hz;
(5)三级程序存储器锁定;
(6)128*8位内部RAM,32可编程I/O线;
(7)两个16位定时器/计数器,6个中断源;
(8)全双工串行UART通道,低功耗的闲置和掉电模式;
(9)片内振荡器和时钟电路;
图4.5AT89C51结构图
4.4数码管显示电路
4.4.1LED数码管的组成
LED数码管显示器是由发光二极管显示字段的显示器件,也称为数码管。
其结构如图4.6所示。
它由8个发光二极管构成,通过不同的组合可用来显示0-9、A-F及小数点“.”等字符。
数码管有共阴极和共阳极两种结构规格,电阻为外接。
共阴极数码管的发光二极管阴极共地,当某发光二极管的阳极为高电平时,二极管点亮;共阳极数码管的发光二极管是阳极,并接高电平,对于需点亮的发光二极管将其阴极接低电平即可。
图4-6LED数码管显示图
4.4.2数码管显示方式
(1)静态显示方式
直接利用并行口输出。
LED显示工作于静态显示方式时,各位的共阴极连接在一起接地;每位的段选线分别于一个8位的锁存输出相连。
一般称之为静态显示,是由于显示器中的各位相互独立。
而且各位的显示字符一经确定,相应锁存器的输出将维持不变,直到显示另一个字符为止。
本实验采用串入并出的静态显示方式。
利用通信号串行输出。
在实际使用中,多位LED显示时,为了简化电路,在系统不需要通信功能时,经常采用串行通信口工作方式0,外接移位寄存器74LS164来实现静态显示。
(2)动态显示方式
对多位LED显示器的动态显示,通常都时采用动态扫描的方法进行显示,即逐个循环点亮各位显示器。
这样虽然在任一时刻只有一位显示器被点亮,但是由于间隔时间较短,且人眼具有视觉残留效应,看起来和全部显示器持续点亮一样。
为了实现LED显示器的动态扫描,除了要给显示器提供的输入之外,还要对显示器加位选择控制,这就是通常所说的段控和位控。
因此多位LED显示器接口电路需要有两个输出口,其中一个用于输出8位控信号;另一个用于输出段控信号,其连接图如图4-7所示。
图4.7数码管显示电路
表4.2七段LED段选码表
显示字符
共阴极段
显示字符
共阴极段
0
3FH
C
39H
1
06H
D
5EH
2
5BH
E
79H
3
4FH
F
71H
4
66H
P
73H
5
6DH
U
3EH
6
7DH
Γ
31H
7
07H
y
6EH
8
7FH
8.
FFH
9
6FH
“灭”
00H
A
77H
/
/
B
7CH
/
/
5.PID控制算法
在工程实际中,使用最为广泛的调节器控制规律为比例、积分、微分控制,简称PID控制,又称PID调节。
PID控制器问世至今已有近70年历史,它以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。
当被控对象的结构和参数不能完全掌握,或得不到精确的数学模型时,控制理论的其它技术难以采用时,系统控制器的结构和参数必须依靠经验和现场调试来确定,这时使用PID控制技术最为方便。
即当我们不完全了解一个系统和被控对象,或不能通过有效的测量手段来获得系统参数时,最适合用PID控制技术。
PID控制,实际中也有PI和PD控制。
PID控制器就是根据系统的误差,利用比例、积分、微分计算出控制量进行控制的。
比例控制比例控制是一种最简单的控制方式。
其控制器的输出和输入误差信号成比例关系。
当仅有比例控制时系统输出存在稳态误差。
积分控制在积分控制中,控制器的输出和输入误差信号的积分成正比关系。
对一个自动控制系统,如果在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的或简称有差系统。
为了消除稳态误差,在控制器中必须引入“积分项”。
积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。
这样,即便误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。
因此,比例+积分控制器,可以使系统在进入稳态后无稳态误差。
微分控制在微分控制中,控制器的输出和输入误差信号的微分(即误差的变化率)成正比关系.自动控制系统在克服误差的调节过程中可能会出现振荡甚至失稳。
其原因是由于存在有较大惯性组件(环节)或有滞后组件,具有抑制误差的作用,其变化总是落后于误差的变化。
解决的办法是使抑制误差的作用的变化“超前”,即在误差接近零时,抑制误差的作用就应该是零。
这就是说,在控制器中仅引入“比例”项是不够的,比例项的作用仅是放大误差的幅值,而目前需要增加的是“微分项”,它能预测误差变化的趋势,这样,具有比例+微分的控制器,就能够提前使抑制误差的控制作用等于零,甚至为负值,从而避免了被控量的严重超调。
6.各子程序设计及流程图
6.1PID控制程序流程图
6.2A/D转换程序流程图
6.3显示程序流程图
6.4温度控制总程序流程图
心得体会
作为一名自动化专业的大三学生,我觉得做计算机控制系统课程设计是很有意义的,而且也是必要的。
个星期很快就过去了,计算机控制技术课程设计也告一段落。
本次课程设计,我的题目是计算机温度控制系统。
温度控制是工业生产过程中经常遇到的过程控制,有些工艺过程对其温度的控制效果直接影响着产品的质量,因而设计一种较为理想的温度控制系统是非常有价值的,也是十分有必要的。
其次,在这次课程设计中,我们运用了以前学过的专业课知识,如:
Proteus绘图仿真、C语言、模拟和数字电路知识等。
虽然以前在上课的时候学的都不是很好,很多知识都学习的模棱两可,可是如果你怀着一种目的性去学习它,你就会发现学习的效率非常高,以前看了都头痛的东西在你现在一定要用的时候再拿出来学习,会感觉其实也很简单的。
这是我做这次课程设计的又一收获。
最后,要做好一个课程设计,就必须做到:
在做设计之前,一定要对我们的对象有充分的了解,对所要用到的东西有深刻的认识,是指系统化、模块化,必须有一个清晰的思路。
在设计程序时,不能妄想一次将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,这样为资料的保留和交流提供了方便;在设计中遇到的问题要记录,以免下次遇到同样的问题。
总的来说,此次课程设计的过程比较轻松,从拿到问题到彻底解决问题,这是一个令人振奋并享受的过程。
经过去图书馆大量的查阅书籍,我也学到了很多在课本上没有的知识,收获颇丰。
这段过程让我懂得了一个道理,那就是学生要学的绝对不该仅仅是课本上的东西,有些东西只有走进图书馆,你才可能学习到。
也只有这样,我们才能成为一个见多识广、渊博的人。
参考文献
[1].于海生等编著.微型计算机控制技术[M].北京:
机械工业出版社,2007.
[2].邴志刚等编著.计算机控制:
基础•技术•工具•实例[M].北京:
清华大学出版社,2005.
[3].邹伯敏主编.自动控制原理(第二版)[M].北京:
机械工业出版社,2002.
[4].吕震中,刘吉臻,王志明编.计算机控制技术和系统(第二版)[M],北京:
中国电力出版社,2005.
[5].张宇河主编.计算机控制系统[M].北京:
北京理工大学出版社,2002.
[6].冯勇编,现代计算机控制系统[M].哈尔滨:
哈尔滨工业大学出版社,2003
[7].karlJ.Astrom,BjornWittenmark著.计算机控制系统理论和设计:
英文版[M].北京:
清华大学出版社,2002.
[8].MorrisDriels著.线性控制系统工程(英文影印版)[M].北京:
清华大学出版社,2000.
[9].JohnJ.D'azzo&ConstantineH.Houpis著.线性控制系统分析和设计(第4版)[M].北京:
清华大学出版社,2000.
[10].韩建国.Foundationandapplicationofmicrocontroller.北京:
高等教育出版社.2004.10
附录1:
温度控制系统总电路图
附录2:
温度控制系统程序清单
(1)主函数如下:
#include
#include
#include"KEYSCAN.H"
#include"PID.H"
voidPIDBEGIN(void);//PID参数初始化//
voidmain()
{
unsignedcharkey1=0,i,k;
unsignedinttmp;
unsignedcharshu[3]={13,13,0};
unsignedcharcounter=0;
PIDBEGIN();
while
(1)
{
if(counter--==0)
{
tmp=ReadTemperature();
counter=20;
}
view(tmp);//温度显示;
compare_temper();
}
}
(2)PID算法温度控制程序
#ifndef_PID_H__
#define_PID_H__
#include
#include
#include
structPID{
unsignedintSetPoint;//设定目标DesiredValue
unsignedintProportion;//比例常数ProportionalConst
unsignedintIntegral;//积分常数IntegralConst
unsignedintDerivative;//微分常数DerivativeConst
unsignedintLastError;//Error[-1]
unsignedintPrevError;//Error[-2]
unsignedintSumError;//SumsofErrors
}
structPIDspid;//PIDControlStructure
unsignedintrout;//PIDResponse(Output)
unsignedintrin;//PIDFeedback(Input)
sbitoutput=P3^4;
unsignedcharhigh_time,low_time,count=0;//占空比调节参数
unsignedcharset_temper=33;
voidPIDInit(structPID*pp)
{
memset(pp,0,sizeof(structPID));
}
unsignedintPIDCalc(structPID*pp,unsignedintNextPoint)
{
unsignedintdError,Error;
Error=pp->SetPoint-NextPoint;//偏差
pp->SumError+=Error;//积分
dError=pp->LastError-pp->PrevError;//当前微分
pp->PrevError=pp->LastError;
pp->LastError=Error;
return(pp->Proportion*Error//比例
+pp->Integral*pp->SumError//积分项
+pp->Derivative*dError);//微分项
}
/***********************************************************
温度比较处理子程序
***********************************************************/
compare_temper()
{
unsignedchari;
//EA=0;
if(set_temper>temper)
{
if(set_temper-temper>1)
{
high_time=100;
low_time=0;
}
else
{
for(i=0;i<10;i++)
{get_temper();
rin=s;//ReadInput
rout=PIDCalc(&spid,rin);//PerformPIDInteration
}
if(high_time<=100)
high_time=(unsignedchar)(rout/800);
else
high_time=100;
low_time=(100-high_time);
}
}
elseif(set_temper<=temper)
{
if(temper-set_temper>0)
{
high_time=0;
low_time=100;
}
else
{
for(i=0;i<10;i++)
{get_temper();
rin=s;//ReadInput
rout=PIDCalc(&spid,rin);//PerformPID