基于AT89C51的温度控制器方案设计书石礼君终稿Word格式.docx
《基于AT89C51的温度控制器方案设计书石礼君终稿Word格式.docx》由会员分享,可在线阅读,更多相关《基于AT89C51的温度控制器方案设计书石礼君终稿Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
AD590temperaturesensor
1系统总体方案设计
本次设计采用MCS-51单片机作为控制芯片,采用半导体集成温度传感器AD590采集温度信号。
通过温度传感器将采集的温度信号转换成与之相对应的电信号,经过放大处理送入A/D转换器进行A/D转换,将模拟信号转换成数字信号送入到控制芯片进行数据处理。
通过在芯片外围添加显示、控制等外围电路来实现对保温箱温度的实时检测和控制功能。
本系统功能由硬件和软件两大部分协调完成,硬件部分主要完成传感器信号的采集处理,信息的显示等。
软件主要完成对采集的温度信号进行处理及显示控制等功能。
系统结构框图如图1所示:
图1系统结构框图
2系统硬件设计
2.1中央处理器
MCS-51系列单片机是8位增强型,其主要的技术特征是为单片机配置了完善的外部并行总线和具有多级识别功能的串行通讯接口(UART),规范了功能单元的SFR控制模式及适应控制器特点的布尔处理系统和指令系统。
属于这类单片机的芯片有许多种,如8051、8031、80C51等等。
由于单片机具有较高的性能比,国内MCS-51系列单片机应用最广,易于开发、使用灵活、而且体积小、易于开发、抗干扰能力强,可以工作于各种恶劣的条件下,工作稳定等特点。
本设计本着实用性和适用性的要求,选择AT89C51单片机作为中央处理器。
2.1.1AT89C51简介
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的具有低电压,高性能CMOS的8位微处理器,俗称单片机。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
如图2为AT89C51的内部结构框图。
图2AT89C51的内部结构框图
2.1.2特殊功能存储器
在单片机内高128BRAM中,由有21个特殊功能寄存器(AFR),它们离散的分布在80H-FFH的RAM空间中,访问特殊功能寄存器只允许使用直接寻址方式。
2.1.3芯片擦除
整个EPROM阵列电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms来完成。
在芯片擦除操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。
此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。
在闲置模式下,CPU停止工作。
但RAM,定时器,计数器,串口和中断系统仍在工作。
在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。
2.1.4复位电路的设计
复位使单片机处于起始状态,并从该起始状态开始运行。
AT89C51的RST引脚为复位端,该引脚连续保持2个机器周期(24个时钟振动周期)以上高电平,则可使单片机复位。
内部复位电路在每一个机器周期的S5P2期间采样斯密特触发器的输出端,该触发器可抑制RST引脚的噪声干扰,并在复位期间不产生ALE信号,内部RAM处于不断电状态。
其中的数据信息不会丢失,也即复位后,只影响SFR中的内容,内部RAM中的数据不受影响。
外部复位有上电复位和按键电平复位。
由于单片机运行过程中,其本身的干扰或外界干扰会导致出错,此时我们可按复位键重新开始运行。
为了便于本设计运行调试,复位电路采用按键复位方式。
按键复位电路如图3所示。
图3复位电路
2.1.5时钟电路设计
时钟电路是单片机的心脏,它控制着单片机的工作节奏。
MCS-51单片机允许的时钟频率是因型号而异的,其典型值为12MHZ。
AT89C51内部有一个反相振荡放大器,XTAL1
和XTAL2分别是该反向振荡放大器的输入端和输出端。
该反向放大器可配置为片内振荡器,石晶振荡和陶瓷振荡均可采用。
本设计采用的晶振频率为12MHZ。
其时钟电路如图4所示。
51系列单片机还可使用外部时钟。
在使用外部时钟时,外部时钟必须从XTAL1输入,而XTAL2悬空。
图4时钟电路
2.2温度传感器AD590
温度传感器的应用范围很广,它不仅用于日常生活中,而且也大量应用于自动化和过程检测控制系统。
温度传感器的种类很多,根据现场使用条件,选择恰当的传感器类型才能保证测量的准确可靠,并且同时达到增加使用寿命和降低成本的目的。
AD590温度传感器不但实现了温度转化为线性电量测量,而且精度高、互换性好。
AD590测量热力学温度、摄氏温度、两点温度差、多点最低温度、多点平均温度的具体电路,广泛应用于不同的温度控制场合。
由于AD590精度高、价格低、不需辅助电源、线性好,常用于测温和热电偶的冷端补偿。
本设计采用AD590作为温度传感器,它只需要一个电源即可实现温度到电流的线性变换,然后再终端使用一只取样电阻,即可实现电流到电压的转换。
它使用方便,并且具有较高的精度。
图5为AD590的封装形式和基本应用电路。
图5AD590封装形式和应用电路
AD590集成温度传感器是将温敏电阻晶体管与相应的辅助电路集成在同一块芯片上,能直接给出正比于绝对温度的理想线形输出,温敏晶体管在管子的集电极电流恒定时,其基极发射极电压与温度成线形关系,由于生产厂家生产时采用激光微调来校正集成电路内的薄膜电阻,使其在摄氏零度(对应绝对温度为273.2K),输出电流微273.2uA,灵敏度微1uA/K。
当其感受的温度升高或者降低时,则其电流就以1uA/K的速率增大或减小,从而将被测电流转换为电压,则可以用电压来表示其温度大小。
为克服温敏晶体管vb电压产生时的离散性,采用了特殊的差分电路。
集成温度传感器具有电压型和电流型两种。
因此,它不容易受接触电阻、引线电阻、电压噪音的干扰,具有很好的线性特性。
AD590温度传感器作为一个恒流源,在本设计的温度检测电路中在AD590的输出端接一取样电阻可将输出电流信号变化转换为电压信号变化。
由于AD590温度传感器温度每变化1℃其输出电流变化1mA。
所以在接上10K的取样电阻的情况下,温度每变化10℃,输出电压就将变化0.1V。
2.3信号调理电路
经过温度传感器采集输出的电压信号一般来说是非常微弱的,因此,在送往单片机处理之前应对该信号进行放大。
本系统所采用的A/D转换器为ADC0809,由于ADC0809的输入信号应在0~5V之间,因此,经过放大电路放大的信号进入A/D转换器的电压信号应控制在0~5V之间,根据此原则可设计合适的放大倍数。
信号调理电路主要由运算放大器0P07等组成。
为了使温度检测电路的输出电压能够适合于A/D转换器的参考电压,利用超低温漂移高精度运算放大器0P07将温度电压信号进行放大到0~5V的范围之内,便于A/D进行转换,以提高温度采集电路的可靠性。
本设计中,信号调理电路部分由集成运放OP07分别构成一个电压跟随器,电压比较器和一个同相输入放大器用于对AD590输出的小电压信号进行放大处理[9]。
信号调理电路如图6所示
图6温度检测电路
在该放大电路中,电压跟随器起阻抗匹配的作用。
反馈电阻为零时,放大倍数为1,电压跟随器的输入电压等于输出电压
电压比较器用于对输出电压小信号电压进行调零,在上述电路图中的电压比较器部分由于R2=R4,R3=R5可得电压比较器的输出电压
根据电压跟随器的输出电压
调节电位计R9就改变电压比较器的输入电压
。
使得当温度为温度测量下限时电压比较器的输出电压为零。
起放大作用的是同相输入放大器OP07。
其放大倍数:
因此放大器的输出电压
2.4A/D转换
ADC0809是一种8位逐次逼近式A/D转换器,其内部有一个8位“三态输出锁存器”可以锁存A/D转换后的数字量,故它本身既可看作一种输入设备,也可以认为是并行I/O接口芯片。
故ADC0809可以和微机直接接口,本设计就是用AT8951和ADC0809直接相连的。
AT89C51与ADC0809的连接方法如图7所示,AT89C51通过地址线P2.7和写控制信号线
用一个或非门联合控制启动转换信号端(START)和地址锁存信号端(ALE)。
地址线P2.7和读控制信号线
用一个或非门联合控制输出允许控制端(EOC)。
低三位地址线加到ADC0809的ADDA、ADDB、ADDC端,所以选中ADC0809的IN0通道的地址为7FF8H。
转换结束信号EOC通过一个反相器接到INT1。
AT89C51和ADC0809连接通常可以采用查询和中断两种方式。
本系统采用中断方式传送数据,EOC线作为CPU的中断请求输入线。
CPU线响应中断后,应在中断服务程序中使OE线变为高电平,以提取A/D转换后的数字量。
图7AT89C51与ADC0809连接图
和START的逻辑关系分别为:
=P2.7•
=P2.7+
START=P2.7•
=P2.7+
对ADC0809地址的确定:
根据系统硬件连接图可知所选定模拟电压路数为IN0,其对应的地址为ABC=000,即P0.0、P0.1、P0.2=000。
又P2.7=0时才能启动ADC0809工作和使AT89C51从ADC0809接收A/D转换电压的数字量。
故确定ADC0809其中一个地址为:
0111111111111000B=7FF8H,其中“__”表示固定量。
ADC0809的IN0和变送器输出端线连,故IN0上输入的0V~+5V范围的模拟电压经A/D转换后可由AT89C51通过程序从P0口输入到它的内部RAM单元。
2.5LED显示
单片机应用系统中使用的显示器主要有发光二极管显示器,简称LED;
液晶显示器,简称LCD。
前者价廉,配置灵活,与单片机接口方便;
后者可进行图形显示,但接口复杂,成本较高。
结合本设计的特点,在这里系统的显示采用发光二极管作为显示器件。
单片机中使用7段LED构成字形“8”,另外,还与一个小数点发光二极管用以显示数字、符号及小数点。
这种显示器有共阴极和共阳极两种,如图8所示。
发光二极管的阳极连在一起称为共阳极显示器,阴极连在一起的称为共阴极显示器。
一位显示器由八个发光二极管组成,其中,7个发光二极管构成字形“8”的各个笔划(段)a-g,另一个小数点为dp发光二极管。
当在某段发光二极管施加一定的正向电压是,该段笔划即点亮;
不加电压则该段二极管不亮。
为了保护各段LED不被损坏,需要外加限流电阻。
图8数码管
如果要显示某个字形,则应使此字形的相应段点亮,也即送一个不同的电平组合代表的数据来控制LED的显示字形,此数据称为字符的段码。
如使用共阳极数码管,数据为0表示对应字段亮,数据为1表示对应字段暗;
如使用共阴极数码管,数据为0表示对应字段暗,数据为1表示对应字段亮。
如要显示“0”,共阳极数码管的字型编码应为:
11000000B(即C0H);
共阴极数码管的字型编码应为:
00111111B(3FH)。
74LS164是8位串入并出移位寄存器。
它的引脚如图9所示。
A、B为串行输入端,QA~QH为串行输出端,CLK为串行时钟输入端,
为串行输出清零端,VCC为+5V电源输入端,GND为接地端。
具体输入输出关系如表3-6所示。
X代表任意状态;
QA0、QB0~QH0代表在稳态输入条件建立之前QA、QB~QH的输出状态;
QAn、QBn~QHn代表在最近的时钟上升沿↑转换之前QA、QB~QH的输出状态;
H/L、QAn~QBn代表在最近的时钟上升沿↑转换之后QA、QB~QH的输出状态。
表174LS164输入输出关系如所示
输入
输出
清除时钟AB
QAQB~QH
LXXX
HLXX
H↑HH
H↑LX
H↑XL
LL~L
QA0QB0~QH0
HQAn~QGn
LQAn~QGn
图974LS164引脚如图
串行显示电路属于静态显示,比动态显示亮度更大一些。
由于74LS164在低电平输出时,允许通过的电流达8mA,故不必添加驱动电路,亮度也比较理想。
与动态扫描相比较,无需CPU不停的扫描,频繁地为显示服务,节省了CPU时间,软件设计也比较简单。
由于本设计采用的是共阳极数码管,所以相应的亮段必须送0,相应的暗段必须送1。
原理图如图10所示:
图10LED串行静态显示
2.6控制电路
在本设计中,被测温度信号经采样处理后,还需要通过单片机系统的P1.2口输出用以控制保温箱的温度,通过这种方式达到控制的目的。
控制的方式主要有模拟量控制和开关量控制。
本系统采用的是开关量控制。
所谓的开关量控制就是通过控制设备的“开”或“关”状态的时间来达到控制的目的。
由于输出设备往往需要大电压来控制,而单片机系统输出的为TTL电平,这种电平不能直接驱动外部设备的开启和关闭。
另一方面,许多外部设备在开关过程中会产生很强的电磁干扰信号,如果不隔离会使系统进行错误的处理。
因此在开关量的输出控制过程中要考虑到两个问题,一要隔离;
二要放大。
本设计采用继电器作为控制电路的主要器件,继电器具有一定的隔离作用,在继电器前面加一个三极管用以放大输出信号就可以驱动继电器的闭合和断开,从而实现弱电控制强电的效果。
继电器是一种电子控制器件,它具有控制系统(又称输入回路)和被控制系统(又称输出回路),通常应用于自动控制电路中,它实际上是用较小的电流控制较大电流的一种开关。
故在电路中起自动调节、安全保护、转换电路等作用。
在工业自动化控制系统中,继电器经常被用来控制执行机构,特别是应用在一些耐潮、耐腐蚀、防爆的特殊装置中。
固态继电器和MCS-51系列单片机组成的控制系统,具有抗干扰性强、编程简单、系统兼容性好等特点,具有非常广阔的应用前景。
继电器一般由通电线圈和触电组成。
当线圈通电时,由于磁场作用,使开关触电闭合。
当不通电时,则开关触点断开。
一般线圈可用直流低电压控制(+5V,+9V,+12V)。
继电器的特性参数包括输入和输出参数,主要的参数为额定输入电压、额定输出电流、浪涌电流。
根据输入电压参数值大小,可确定工作电压大小。
如采用TTL或CMOS等逻辑电平控制时,采用有足够带载能力的低电平驱动,并尽可能使“0”电平低于0.8V。
如在噪声很强的环境下工作,不能选用通、断电压值相差小的产品,必需选用通、断点压值相差大的产品,(如选接通电压为8V或12V的产品)这样不会因噪声干扰而造成控制失灵。
本设计就是采用直流驱动电压为+5V的继电器。
触电输出部分可以直接与市电连接。
继电器控制电路如图11所示:
图11继电器控制电路
3系统软件设计
本次单片机温控系统的功能是由硬件电路配合软件来实现的,当硬件基本定型后,软件的功能也就基本定下来了。
系统软件的功能又可分为两大类:
一是监控软件,它是整个控制系统的核心,专门用来协调各执行模块和操作者的关系。
二是执行软件,它是用来完成各种实质性的功能如测量、显示等功能。
每一个执行软件也就是一个小的功能执行模块。
本文将各执行模块一一列出,各执行模块规划好后,就可以规划监控程序了。
本系统程序设计包括温度采集子程序、显示子程序、标度转换资程序、键盘子程序、控制子程序[11]。
程序流程图如图12所示。
小于等于-2大于等于2
图12系统流程图
3.1程序初始化
程序初始化部分根据系统硬件原理图及设计要求对单片机系统进行系统资源分配、参数的设置以及定义。
系统内部资源分配和参数设置如下:
A/D端口地址(ADPORT):
7FF8H
显示缓冲起始地址:
(LEDBUF):
30H
段码存储起始地址(TEMP):
40H
设定温值存储地址(SETTEMP):
50h
测量温度存储地址(CURTEMP):
51H
温度设定上限(HIGHLIMIT):
80
温度设定下限(LOWLIMIT):
25
温度测量上限(HIGHTEMP)107
温度测量下限(LOETEMP)21
初始化程序代码如下:
ADPORTEQU7FF8H;
A/D端口地址
LEDBufequ30H;
显示缓冲
TEMPEQU40H;
段码存储
UPequ1;
增温
DOWNequ2;
减温
LowLimitequ25;
设定值下限
HighLimitequ80;
设定值上限
LowTempequ21;
A/D0
HighTempequ107;
A/D255
SetTempequ50h;
设定温值
CurTempequ51h;
测量温度
DINBIT0B0H;
P3.0
CLKBIT0B1H;
P3.1
ORG0000H
ljmpStart
3.2主程序
主程序的编写是为了实现程序在各个模块间的跳转。
这样使程序编写思路更加明了,简化了程序的编写难度,有利于程序的调试。
本软件系统包括A/D转换模块,标度转换模块,显示模块,键盘模块,控制模块等。
主程序代码如下:
Start:
movSetTemp,#20;
初始恒温值为20℃
MLoop:
callTestKey;
测试有无键入
jnzKeyPressed;
更改设定值
callDisplayResult;
数制转换
callDisplayLED;
显示
callReadTemp;
读入温度
CONTROL:
......;
控制子程序
KeyPressed:
......;
键盘子程序
END
3.3A/D转换子程序
根据系统硬件连接图可知,在系统中将ADC0809作为一个外部扩展并行I/O口,采用线选寻址。
由P2.7和
联合控制启动转换信号端(ATART)和ALE端,低三位地址线架到ADC0809和ADDA,ADDB,ADDC端,所以选中ADC0809的IN0通道的地址为7FF8H。
启动DAC0809的工作过程是:
先送通道号地址到ADDA,ADDB,ADDC,由ALE信号锁存通道号地址,后让ATART有效,启动A/D转换,即执行一道“MOVX@DPTR,A”指令产生
信号,使ALE,START有效,锁存通道号并启动A/D转换,A/D转换完毕后,EOC端发出一正脉冲,申请中断。
图4.2A/D转换流程图在中断服务程序中,“MOVA,@DPTR”指令产生
信号,使OE端有效,打开输出锁存器三态门,8位数据便读入到CPU中。
A/D转换子程序流程图如图4.2所示。
A/D转换子程序代码如下:
ReadAD:
movdptr,#ADPORT
clra
movx@dptr,a;
startA/D
JNBP3.3,$
MOVXA,@DPTR;
读入结果
ret
3.4标度转换子程序
系统温度测量范围的计算原理:
根据温度标定结果选取两个温度状态T1T2,模拟输出电压V1V2;
根据0809的输入范围在0到5伏,即可计算出温度极限。
计算公式如下:
0伏时对应的温度TL:
T1-(V1-0)(T2-T1)/(V2-V1)
5伏时对应的温度TH:
T1-(V1-5)(T2-T1)/(V2-V1)
根据所得结果采用在温度为50℃和60℃下所测量的电压输出1.6V和2.2V为计算温度测量范围的参数,根据上式可得:
TL=50-(1.68-0)(50-40)/(2.26-1.68)=21
TH=50-(1.68-5)(50-40)/(2.26-1.68)=107
所以A/D转化的极限范围为21℃-107℃之间,而根据系统要求温度的控制范围为25℃-80℃之间,符合系统要求。
程序中温度的计算原理:
首先用温度范围除以0到256(即每个十六进制数的温度增长率),然后乘以模拟转换的数字量,即得到升高的温度,再和最低温度相加,就可以得到实际的温度值。
其公式为:
TL+AX(TH-TL)/256。
TL:
显示的最低温度
TH:
显示的最高温度
AX:
模拟电压所转换的数字量
3.5控制子程序
本设计采用P1.2作为输出控制口。
当设定温度比当前温度高2℃以上时,P1.2置1,使其输出高电平,用以驱动继电器,使继电器闭合,电炉开始加热。
当设定温度比