单片机关于温度控制.docx
《单片机关于温度控制.docx》由会员分享,可在线阅读,更多相关《单片机关于温度控制.docx(16页珍藏版)》请在冰豆网上搜索。
单片机关于温度控制
1绪论
目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。
导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。
更不用说自动控制领域的机器人、智能仪表、医疗器械了。
关键词:
单片机温度控制温度采集
2设计方案
单片机温度控制系统采用的装置有单片机、温度传感器和温度调节设备组成起结构如图2.1硬件结构图所示。
图2.1温度控制系统硬件结构图
3AT89S52
3.1AT89S52的结构
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
3.2AT89S52管脚
VCC:
供电电压。
·GND:
接地。
·P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
·P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
引脚号第二功能
P1.0T2(定时器/计数器T2的外部计数输入),时钟输出
P1.1T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)
P1.5MOSI(在系统编程用)
P1.6MISO(在系统编程用)
P1.7SCK(在系统编程用)
·P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
·P3口:
P3口是一个具有内部上拉电阻的8位双向I/O口,p2输出缓冲器能驱动4个TTL逻辑电平。
对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
P3口亦作为AT89S52特殊功能(第二功能)使用,如下所示。
在flash编程和校验时,P3口也接收一些控制信号。
如下所示:
引脚号第二功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
·RST:
复位输入。
晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。
看门狗计时完成后,RST脚输出96个晶振周期的高电平。
特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。
DISRTO默认状态下,复位高电平有效。
·ALE/PROG:
地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。
在flash编程时,此引脚(PROG)也用作编程输入脉冲。
在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。
然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。
如果需要,通过将地址为8EH的SFR的第0位置“1”,ALE操作将无效。
这一位置“1”,ALE仅在执行MOVX或MOVC指令时有效。
否则,ALE将被微弱拉高。
这个ALE使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。
PSEN:
外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。
当AT89S52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。
·/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
·/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
·XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
·XTAL2:
来自反向振荡器的输出。
MCS-51器件有单独的程序存储器和数据存储器。
外部程序存储器和数据存储器都可以64K寻址。
程序存储器:
如果EA引脚接地,程序读取只从外部存储器开始。
对于89S52,如果EA接VCC,程序读写先从内部存储器(地址为0000H~1FFFH)开始,接着从外部寻址,寻址地址为:
2000H~FFFFH。
数据存储器:
AT89S52有256字节片内数据存储器。
高128字节与特殊功能寄存器重叠。
也就是说高128字节与特殊功能寄存器有相同的地址,而物理上是分开的。
当一条指令访问高于7FH的地址时,寻址方式决定CPU访问高128字节RAM还是特殊功能寄存器空间。
直接寻址方式访问特殊功能寄存器(SFR)。
·晶振特性
AT89S52单片机有一个用于构成内部振荡器的反相放大器,XTAL1和XTAL2分
别是放大器的输入、输出端。
从外部时钟源驱动器件的话,XTAL2可以不接,而从XTAL1接入。
由于外部时钟信号经过二分频触发后作为外部时钟电路输入的,所以对外部时钟信号的占空比没有其它要求,最长低电平持续时间和最少高电平
持续时间等还是要符合要求的。
·空闲模式
在空闲工作模式下,CPU处于睡眠状态,而所有片上外部设备保持激活状态。
这种状态可以通过软件产生。
在这种状态下,片上RAM和特殊功能寄存器的内容保持不变。
空闲模式可以被任一个中断或硬件复位终止。
由硬件复位终止空闲模式只需两个机器周期有效复位信号,在这种情况下,片上硬件禁止访问内部RAM,而可以访问端口引脚。
空闲模式被硬件复位终止后,为了防止预想不到的写端口,激活空闲模式的那一条指令的下一条指令不应该是写端口或外部存储器。
·中断
AT89S52有6个中断源:
两个外部中断(INT0和INT1),三个定时中断(定时器0、1、2)和一个串行中断。
每个中断源都可以通过置位或清除特殊寄存器IE中的相关中断允许控制位分别使得中断源有效或无效。
IE还包括一个中断允许总控制位EA,它能一次禁止所有中断。
IE.6位是不可用的。
对于AT89S52,IE.5位也是不能用的。
用户软件不应给这些位写1。
它们为AT89系列新产品预留。
定时器2可以被寄存器T2CON中的TF2和EXF2的或逻辑触发。
程序进入中断服务后,这些标志位都可以由硬件清0。
实际上,中断服务程序必须判定是否是TF2或EXF2激活中断,标志位也必须由软件清0。
定时器0和定时器1标志位TF0和TF1在计数溢出的那个周期的S5P2被置位。
它们的值一直到下一个周期被电路捕捉下来。
然而,定时器2的标志位TF2在计数溢出的那个周期的S2P2被置位,在同一个周期被电路捕捉下来
4温度控制元件
4.1温度传感器的选择
DALLAS最新单线数字温度传感器DS18B20简介新的“一线器件”体积更小、适用电压更宽、更经济Dallas半导体公司的数字化温度传感器DS1820是世界上第一片支持“一线总线”接口的温度传感器。
一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。
DS18B20、DS1822“一线总线”数字化温度传感器同DS1820一样,DS18B20也支持“一线总线”接口,测量温度范围为-55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。
DS1822的精度较差为±2°C。
现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。
适合于恶劣环境的现场温度测量,如:
环境控制、设备或过程控制、测温类消费电子产品等。
与前一代产品不同,新的产品支持3V~5.5V的电压范围,使系统设计更灵活、方便。
而且新一代产品更便宜,体积更小。
DS18B20、DS1822的特性DS18B20可以程序设定9~12位的分辨率,精度为±0.5°C。
可选更小的封装方式,更宽的电压适用范围。
分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。
DS18B20的性能是新一代产品中最好的!
性能价格比也非常出色!
DS1822与DS18B20软件兼容,是DS18B20的简化版本。
省略了存储用户定义报警温度、分辨率参数的EEPROM,精度降低为±2°C,适用于对性能要求不高,成本控制严格的应用,是经济型产品。
继“一线总线”的早期产品后,DS1820开辟了温度传感器技术的新概念。
DS18B20和DS1822使电压、特性及封装有更多的选择,让我们可以构建适合自己的经济的测温系统。
DS1820采用3脚PR-35封装或8脚SOIC封装,管脚排列如图1所示。
图中GND为地,I/O为数据输入/输出端(即单线总线),该脚为漏极开路输出,常态下呈高电平。
VDD是外部+5V电源端,不用时应接地。
NC为空脚。
图2所示为DS1820的内部框图,它主要包括寄生电源、温度传感器、64位激光ROM单线接口、存放中间数据的高速暂存器(内含便笺式RAM),用于存储用户设定的温度上下限值的TH和TL解发器存储与控制逻辑、8位循环冗余校验码(CRC)发生器等七部分。
内部结构图
5系统硬件设计图
5.1温度分析电路图
数据采集电路如图5.1所示, 由温度传感器DS18B20采集被控对象的实时温度,提供给AT89S52的P3.1口作为数据输入。
在本次设计中我们所控的对象为所处室温。
当然作为改进我们可以把传感器与电路板分离,由数据线相连进行通讯,便于测量多种对象。
图5.1单片机2051与温度传感器DS18B20的连接图
5.2温度显示电路
图5.2数码管显示电路
5.3上拉电阻接线
图5.3单片机上拉电阻示意图
5.4电源设计
7805是我们最常用到的稳压芯片了,他的使用方便,用很简单的电路即可以输入一个直流稳压电源,他的输出电压恰好为5v,刚好是51系列单片机运行所需的电压,介绍一下他的3个引脚以及用它来构成的稳压电路的资料。
其中1接整流器输出的+电压,2为公共地(也就是负极),3就是我们需要的正5V输出电压了。
图5.47085引脚图
图5.57085电源原理图
本次用的下载线电路是以一块74LS373芯片为主的电路。
原理图如图5.6。
该电路在原理图上只有一个下载口的体现,只要把下载线接到下载口就可以把程序下载到单片机中了。
图5.6下载线电路原理图
5.5温度控制电路
温度控制分为高、低温控制。
设计所要达到的效果就是,我们给单片机设置一个固定的温度范围,当温度传感器测量的温度高于我们设置的最高数值时,这时单片机指令控制P3.2口产生一个高电平信号送给固态继电器,是继电器的产开开关闭合,使开关打开通电。
控制一个降温装置的开启(本设计中考虑到成本和技术问题,采用电风扇进行降温控制)。
相反,当温度传感器测量的温度低于设置的最低数值的时候,这时单片机又控制P3.3口产生一个高电平送给继电器,使开关打开从而控制升问装置进行加热(本系统采用电热丝进行加热)。
通过一个升温和一个降温装置,就能实现温度的调节。
只要通过程序,将我们所要达到的温度控制在一个恒温状态下。
控制电路的原理图如5.7所示,
图5.7温度控制电路
6温度控制的软件设计
6.1数码管动态显示
单片机AT89S52输出8个高低电平信号每个数码管的8个段分别连接P0.0-P0.7口上当某个数码管的公共端为“0”时,那么这个数码管被选中,这时此数码管的哪段为”1“则哪段就被点亮初学者可以利用本实验板自带的仿真器功能来单步执行,来观察数码管的工作原理,由于I/O资源有限,一个51单片机只有32个I/O所以只能将8个数码管以动态扫描的方式来显示,何为动态扫描呢?
动态扫描的连接方式是将8个数码管的8个段用相同的I/O来控制,即第一个数码管的”a“段由P0.0控制第二个数码管的”a“段也是由P0.0来控制的而8个数码管的公共端则是由不同的I/O来控制,即第一个数码管的公共端由P2.4控制而第二个数码管的公共端有P2.5控制 动态扫描的控制原理是:
将第一个数码管要显示的内容显示出来,然后立刻将第二个数码管的内容显示出来,一次把第8个数码管的内容显示出来由于单片机的工作速度非常快,所以当显示第8个数码管的时候第一个数码管的内容还没有完全消失,这时立刻重复上面的过程,就实现了数码管的。
数码关分共阳极数码管,还有就是共阴极数码管,我们就采用共阴来使用。
单片机各个口的电压输出的都为高电平。
共阴就通过控制阳极,即可控制LED显示。
6.2DS18B20初始化
DS18B20的一线工作协议流程是:
初始化→ROM操作指令→存储器操作指令→数据传输。
程序:
voidset_ds18b20()
{
while
(1)
{
uchardelay,flag;
flag=0;
TMDAT=1;
delay=1;
while(--delay);
TMDAT=0;//数据线置低电平
delay=250;
while(--delay);//低电平保持500us
TMDAT=1;//数据线置高电平
delay=30;
while(--delay);//高电平保持60us
while(TMDAT==0)//判断DS18B20是否发出低电平信号
{
delay=210;//DS18B20响应,延时420us
while(--delay);
if(TMDAT)//DS18B20发出高电平初始化成功,返回
{
flag=1;//DS18B20初始化成功标志
//初始化成功LED标志
break;
}
}
if(flag)//初始化成功,再延时480us,时序要求
{
delay=240;
while(--delay);
break;
}
}
6.3系统流程图
系统流程图如图6.1所示:
图6.1系统流程图
6.4单片机相应子程序
6.4.1延时子程序(1s)
DEL:
MOVR7,#10
DEL1:
MOVR6,#200
DEL2:
MOVR5,#248
DJNZR5,$
DJNZR6,DEL2
DJNZR7,DEL1
RET
计算:
1+(1*10)+(1*200*10)+(2*248*200*10)+(2*200*10)+(2*10)+2
=[(2*248+3)*200+3]*10+3⑧
=998033μs≈1s
6.4.2将显示数组里的数显示
voiddis(void)
{
uchari;
for(i=0;i<2;i++)/*输送显示数据*/
{
LED=0xff;//去段码
P2=ledbit[i];//LED位选能
delay(3);
if((i==0)&&(dispbuf[0]==0))
LED=0x00;/*去掉最前面的0,更符合阅读习惯*/
/*保证有效数可靠显示,使其符合习惯*/
LED=ledcode[dispbuf[i]];//送段码
}
delay(5);
if(dispbuf[0]>=3&&dispbuf[1]>=5)
{
Q1=0;
Q2=1;
}
else
if(dispbuf[0]<=0&&dispbuf[1]<=5)
{
Q1=1;
Q2=0;
}
else
{
Q1=0;
Q2=0;
}
}
总结
在这次设计中,我受益匪浅。
通过对所学知识的回顾,并对所学知识进行理解,完成了这次设计。
在不断地翻阅资料中,我丰富了自己的只是面,做到了学以致用,将自己所学的知识运用到实践中,增强了自己的动手能力,获得了宝贵的经验。
同时也明白了理论和实际的差距,为自己以后的学习工作提供了宝贵的经验。
自己今后在学习中一定会理论联系实际,以此来提高自己的能力。