基于单片机的温度报警器设计方案.docx
- 文档编号:7407886
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:17
- 大小:161.13KB
基于单片机的温度报警器设计方案.docx
《基于单片机的温度报警器设计方案.docx》由会员分享,可在线阅读,更多相关《基于单片机的温度报警器设计方案.docx(17页珍藏版)》请在冰豆网上搜索。
基于单片机的温度报警器设计方案
天津滨海职业学院全日制高等职业教育
毕业实践环节毕业设计(典型性项目)说明书
基于单片机的温度报警器设计(方案)
作者:
李佳璐
院系:
天津滨海职业学院机电工程系
专业:
电子信息工程技术
年级:
2012级
学号:
113
指导教师:
×××
时间:
2015年4月
主要内容简介
在农业生产中,温室的温度很难把握。
往往超过或低于允许值,致使大批良种的报废,耽误农时,影响生产。
这就需要设计一个温度报警器,在环境温度超过一定范围时报警,来提醒使用者。
基于以上背景设计基于单片机的温度报警器。
本设计采用ATMEL公司的ATmega16单片机为硬件核心系统,添加数码管、按键和温度传感器芯片,组成完整的硬件系统。
采用C语言为编程语言,进行系统的软件系统开发。
通过本系统硬件、软件部分设计完成如下目标:
1、完成系统的硬件部分设计,硬件部分包括电源、显示、按键、温度接口、报警触发等部分设计。
在此基础上保证软件功能实现。
2、温度报警器可以通过按键方便设定报警范围。
3、温度报警器通过数码管显示实时显示测量的环境温度。
当环境温度温度超出设定范围时,启动报警。
本设计硬件制作方便,通过C语言程序实现软件设计,可移植性强,能够精准的对环境进行温度测量并显示,实用性强。
关键字:
M16 ;18B20 ;温度控制;C语言
一、绪论
(一)研究背景与现状
1.在农业生产中,温室的温度很难把握。
往往超过或低于允许值,致使大批良种的报废,耽误农时,影响生产。
日常生活中,经常要用到高功率电器,但是高功率电器的发热量大,有时候可能引起火灾。
等等之类的情况,这就需要一个温度报警器在环境温度超过一定范围时报警,来提醒使用者。
经过试用和改进,温度报警器可适用于变压器超温报警、环境温度监测、配电柜温度监测及风扇自动控制、机房、仓库、鱼塘、蔬菜大棚温度监测及报警等等。
2.温度控制器目前普遍采用的几种方法:
方案一:
采用单总线的DS1820的温度传感器的控制仪。
方案二:
采用集温湿度传感器于一体的SHT11芯片为主要芯片的控制仪。
虽然SHT11是瑞士Sensiri-on公司生产的具有二线串行接口的单片全校准数字式新型相对湿度和温度传感器,可用来测量相对湿度、温度和露点等参数,具有数字式输出、免调试、免标定、免外围电路及全互换的特点。
但是本设计只对温度控制,设计原理简单,基于经济效益的考虑此次选择传统的模拟式温度度传感器既方案一。
(二)设计内容及要求
1.本温度报警器为超温报警,及高于选定的高温或低于选定的低温均预报警,也就是说温度超过某个选定的温度范围则报警,温度在这个范围内则不报警。
外观如图1所示:
.
图1设计外观图
2.使用方法:
打开电源开关然后按如下操作:
打开电源开关然后按如下操作:
(1)下限设置:
按下“SET”,进入温度上限设置,数字闪烁,同时左第1位最上面显示一横,表示上限设置,按一次“↑”温度值加0.1摄氏度,按一次“↓”,温度值减小0.1摄氏度,设置好上限;
这时再按“SET”一次,进入下限温度设置,数字闪烁,同时左第1位最下面显示一横,表示是下限设置,按一次“↑”温度值加0.1摄氏度,按一次↓,温度值减小0.1摄氏度,设置好下限,再按一次“SET”,退出上下限设置,并把设置好的上下限参数保存到EEPROM中
(2)负载载控制开关控制:
有时不需要控制负载,就是待机状态,在工作状态下,按下"WAIT",下面的数码管会关显示,什么也不显示,表示不控制负载,这时再按下WAIT,又回到工作状态,设置状态也保存EEPROM中,交替显示所设定的温度上下限值。
二、关键技术简介
1.单片机的技术的背景状况
单片机是靠程序的,并且可以修改。
通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,这是别的器件需要费很大力气才能做到的,有些则是花大力气也很难做到的。
一个不是很复杂的功能要是用美国50年代开发的74系列,或者60年代的CD4000系列这些纯硬件来搞定的话,电路一定是一块大PCB板,但是如果要是用美国70年代成功投放市场的系列单片机,结果就会有天壤之别。
只因为单片机的通过你编写的程序可以实现高智能,高效率,以及高可靠性。
2.目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。
导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录象机、摄象机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。
更不用说自动控制领域的机器人、智能仪表、医疗器械了。
三、M16单片机概述
(一)ATmega16 的主要性能
1、先进的、高性能的的8位CPU内核结构:
1)耗先进的RISC (精简指令集计算机)结构;
2)高速度,低功耗的 新8 位中央处理器;
2、非易失性程序和数据存储器:
3、丰富的核外功能资源电路:
完善的串、并、及JTAG(联合测试行动组)接口。
4、电压范围宽、功率消耗低、时钟频率灵活。
5、极高的性价比和适于高级语言开发;
(二)M16的基本组成及引脚
M16的基本组成及引脚配置,见下图2所示。
图2M16的组成结构图
(三)M16的引脚基本功能
1、VCC:
数字电路电源(+5V)
2、GND:
地(0V)
3、端口A( PA7„PA0)
端口A 为8 位双向I/O 口,也是A/D 转换器的模拟输入端。
具有可编程的内部上拉电阻。
其输出缓冲器可以输出和吸收大电流。
作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。
4、端口B(PB7..PB0)
为8位双向I/O 口,具有可编程的内部上拉电阻。
作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。
5、端口C(PC7..PC0)
为8 位双向I/O 口,具有可编程的内部上拉电阻。
作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。
在复位过程中,即使系统时钟还未起振,端口C 也处于高阻状态
6、端口D(PD7..PD0)
为8位双向I/O 口,具有可编程的内部上拉电阻。
作为输入使用时,若内部上拉电阻使能,则端口被外部电路拉低时将输出电流。
7、RESET:
复位输入引脚。
8、XTAL1:
反相振荡放大器与片内时钟操作电路的输入端。
9、XTAL2:
反相振荡放大器的输出端
9、XTAL2:
反相振荡放大器的输出端。
10、AVCC:
端口A与A/D转换器的电源。
11、AREF:
A/D 的模拟基准电压输入引脚。
(1)ATmega16所有的I/O端口及外围设备都被放置于I/O专用空间。
所有的I/O寄存器都可以通过IN 与OUT指令来访问,在32个通用工作寄存器和I/O 之间传输数据。
地址为0x00 - 0x1F 的前32个I/O 寄存器还可用SBI 和CBI 指令直接进行位寻址,而SBIS 和SBIC 则用来检查某一位的值。
(2)M16系统内可编程的Flash程序存储器:
ATmega16具有16K字节(8K字0000-1FFF)的在线编程Flash,用于存放程序指令代码。
其结构具有两个主要的存储器空间:
应用程序存储空间和引导程序存储空间。
两个空间通过对应锁定位来选择,引导区程序可用SPM指令再应用修改
(4)外部晶体振荡器
外部晶体振荡器接线图,如下图3所示。
图3外部晶体振荡器
四、温度传感器18B20介绍
(一)温度传感器18B20的特性
1.DS18B20 可以程序设定 9~12 位分辨率可调,适用电压为 3V~5V,精度为±0.5°C。
可选更小的封装方式,更宽的电压适用范围。
分辨率设定,及用户设定的报警温度存储在 EEPROM 中,掉电后依然保存。
DS18B20 的性能是新一代产品中最好的!
性能价格比也非常出色!
DS1822 与 DS18B20 软件兼容,是 DS18B20 的简化版本。
省略了存储用户定义报警温度、分辨率参数的 EEPROM,精度降低为±2°C,适用于对性能要求不高,成本控制严格的应用,是经济型产品。
TO-92、SOIC 及 CSP 封装可选,经济型版本无 EEPROM 合自己的经济的测温系统。
2.继“一线总线”的早期产品后,DS1820 开辟了温度传感器技术的新概念。
DS18B20 和 DS1822 使电压、 特性及封装有更多的选择,让我们可以构建适合自己的经济的测温系统。
(二)温度传感器18B20的基本组成,见下图4所示。
图4温度传感器
DS1820 数字温度计以 9 位数字量的形式反映器件的温度值。
DS1820 通过一个单线接口发送或接收信息,因此在中央微处理器和 DS1820 之间仅需一条连接线(加上 地线)。
用于读写和温度转换的电源可以从数据线本身获得,无需外部电源。
因为每个 DS1820 都有一个独特的片序列号,所以多只 DS1820 可以同时连在一根单线总线上,这样就 可以把温度传感器放在许多不同的地方。
这一特性在 HVAC 环境控制、探测建筑物、仪器或机器的温度以及 过程监测和控制等方面非常有用。
1.引脚说明
16 脚 SSOP PR35 符号 说明
8 2 DQ 数据输入/输出脚。
对单线操作:
漏极开路
7 3VDD 可选的 VDD 引脚。
DS1820S(16 脚 SSOP):
所有上表中没提到的脚均接地
DS1820 的主要部件模块
图5DS1820 的主要部件模块
图5 的方框图示出了 DS1820 的主要部件。
DS1820 有三个主要数字部件:
1)64 位激光 ROM,2)温度传 感器,3)非易失性温度报警触发器 TH 和 TL。
器件用如下方式从单线通讯线上汲取能量:
在信号线处于高 电平期间把能量储存在内部电容里,在信号线处于低电平期间消耗电容上的电能工作,直到高电平到来再 给寄生电源(电容)充电。
DS1820 也可用外部 5V 电源供电。
(三)温度传感器18B20的测温操作
DS1820 通过一种片上温度测量技术来测量温度。
图6示出了温度测量电路的方框图。
图6温度测量电路图
DS1820 是这样测温的:
用一个高温度系数的振荡器确定一个门周期,内部计数器在这个门周期内对一 个低温度系数的振荡器的脉冲进行计数来得到温度值。
计数器被预置到对应于-55℃的一个值。
如果计数器 在门周期结束前到达 0,则温度寄存器(同样被预置到-55℃)的值增加,表明所测温度大于-55℃。
同时,计数器被复位到一个值,这个值由斜坡式累加器电路确定,斜坡式累加器电路用来补偿感温振 荡器的抛物线特性。
然后计数器又开始计数直到 0,如果门周期仍未结束,将重复这一过程。
斜坡式累加器用来补偿感温振荡器的非线性,以期在测温时获得比较高的分辨力。
这是通过改变计数 器对温度每增加一度所需计数的的值来实现的。
因此,要想获得所需的分辨力,必须同时知道在给定温度 下计数器的值和每一度的计数值。
DS1820 内部对此计算的结果可提供 0.5℃的分辨力。
温度以16bit 带符号位扩展的二进制补码形式读 出,表 1 给出了温度值和输出数据的关系。
数据通过单线接口以串行方式传输。
DS1820 测温范围-55℃~+125℃,以 0.5℃递增。
如用于华氏温度,必须要用一个转换因子查找表。
意 DS1820 内温度表示值为 1/2℃LSB。
最高有效(符号)位被复制充满存储器中两字节温度寄存器的高 MSB 位,由这种“符号位扩展”产生出了示于表
1 的 16bit 温度读数。
可用下述方法获得更高的分辨力。
首先,读取温度值,将 0.5℃位(LSB)从读取的值中截去,这个值 叫做 TEMP_READ。
然后读取计数器中剩余的值,这个值是门周期结束后保留下来的值(COUNT_REMAIN)。
最 后,我们用到在这个温度下每度的计数值(COUNT_PER_C)。
用户可以用下面的公式计算实际温度值:
TEMPEATURE=TEMP_READ-0.25=(COUNT_PER_C-COUNT_REMAIN)/COUNT_PER_C
DS18B20的使用:
CPU对DS18B20的访问流程是:
先对DS18B20初始化,再进行ROM操作命令,最后才能对存储器操作,数据操作。
DS18B20每一步操作都要遵循严格的工作时序和通信协议。
如主机控制DS18B20完成温度转换这一过程,根据DS18B20的通讯协议,须经三个步骤:
每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。
DS18B20常用控制命令,如表4-1所示。
表1DS18B20控制命令表
指 令
约定代码
操 作 说 明
温度转换
44H
启动DS18B20进行温度转换
读暂存器
BEH
读暂存器9个字节内容
写暂存器
4EH
将数据写入暂存器的TH、TL字节
复制暂存器
48H
把暂存器的TH、TL字节写到E2RAM中
重新调E2RAM
B8H
把E2RAM中的TH、TL字节写到暂存器TH字节
读电源供电方式
B4H
启动DS18B20发送电源供电方式的信号给主CPU
五、硬件设计
(一)硬件电路设计
系统设计包括硬件系统、软件系统两部分组成,系统硬件电路如图5-1所示。
硬件系统设计由电源、复位、按键、传感器接口、报警驱动、显示等部分组成。
它们可以分成三类:
1)电源、复位:
复位、按键部分
2)输入输出:
按键、显示部分
3)驱动:
传感器接口、报警驱动部分
图7系统硬件原理图
(1)
(二)电源和复位电路设计
系统采用交流供电,系统经过外接12V交流变压器,将市电变成12V交流电。
系统经过全波整流将交流电变成直流电,一部分整流后直流电通过直流稳压芯片7812变成平滑的12V直流电,提供给报警器接口。
另一部分整流后直流电通过直流稳压芯片7805变成平滑的直流电,提供给系统其他部分。
单片机常见的复位电路有:
上电复位、手动复位。
本设计采用上电复位。
图7系统软件原理流程图
(2)
(三)输入、输出部分设计
输入、输出部分是单片机的信息传输通道,本部分实现按键的读取(输入)、温度值的显示(输出)。
传统的按键设计,由电阻和按键组成,电阻的一端接电源,电阻的另一端接按键和单片机引脚。
当按键按下时,单片机引脚为低电平;当按键放开时,单片机引脚为高电平。
本系统在进行输入部分在设计时利用了ATmega16单片机的内部上拉电阻,直接将按键连接到引脚,节省了4个电阻。
显示部分设计由8个共阳级数码管和8个三极管组成,采用动态显示方法实现数字显示。
8个数码管的数字脚并接到单片机PA端口,确定数码管的显示内容;数码管公共端分别接三极管发射极,确定在某一时刻,那个数码管显示。
8个三极管集电极电源,三极管基极接极接单片机PC端口,当某PC端口为高电平时,对应数码管被选中,数字脚显示数字。
(四)驱动部分设计
传感器接口按照18b20的要求,接电源和地后,数据引脚通过上拉电阻接单片机即可。
报警器采用电平驱动,具体报警设备可以外接,也可用蜂鸣器。
此外还采用发光二极管、小灯泡等发光设备进行报警提示。
外接报警设备通过三极管驱动继电器完成
六、软件设计
(一)显示部分设计
1、数码管的外观
图8数码管的外观图95011系列数码管的引脚排列
一个“8”字型的显示模块用“a、b、c、d、e、f、g、dp”8个发光二极管组合而成。
每个发光二极管称为一字段。
其内部电原理图如图6-3、6-4,分别是共阴极和共阳极LED数码管两种结构形式。
图10共阴极数码管图11共阳极数码管
以共阴极数码管为例,由图中可以看出:
如果要点亮数码管的某一段,只需将该段加上高电平,然后使数码管的公共端3、8脚为低电平,那么该段就会点亮。
2、单个数码管的电路连接
单个数码管的电路连接可以直接同AVR单片机的某个口连接。
在图6-5中,PC0接A段对应引脚,PC1接B段对应引脚,PC7接dp段对应引脚,采用的是共阳极数码管。
图12单个数码管的电路连接
2、单数字的显示
单数字的显示通过PC端口输出数字对应字段的编码,在数码管上就可显示对应数字。
程序如下:
#include
#include
unsignedcharseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98},i;
intmain()
{
DDRC=0xff;
PORTC=0xff;
while
(1)
{
for(i=0;i<=9;i++)
{
PORTC=seg[i];
_delay_ms(2000.0);
}
}
}
程序的关键是字形编码的书写,不同的字形编码会得到不同的符号。
在字形编码众多时,字形编码会占用大量的内存空间,字形编码这类数据的特点是:
我们只需要读取它们的内容,而不会修改其内容,即只进行读操作不进行写操作。
这种特点的数据,可以看成常数,对于常数可以保存在程序区。
3、多数字动态显示
单个数码管仅显示一个数字,多数情况往往需要显示多个数字。
多个数字的显示多采用动态显示方法。
4数码管动态显示原理图,如图6-6所示。
图13四数码管动态显示原理图
从多数字动态显示电路可以看出:
所有的数码管的相同脚连在一起,再接到PC端口。
各数码管的公共端分别接在PD0~3。
4、基本多数字动态程序
在多数字动态显示电路下,要显示数字的字形数据由PC端口送出,此字形数据由那个数码管显示,只要那个数码管的公共端同其他不同,对共阳极那个数码管的公共端为高电平,其他为低电平。
程序如下:
#include
#include
#include
constprog_ucharseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98};
unsignedchari;
intmain()
{
DDRC=0xff;
PORTC=0xff;
DDRD=0xff;
PORTD=0xff;
while
(1)
{
PORTC=pgm_read_byte(seg+0);
PORTD=0xf8;
_delay_ms(50.0);
PORTC=pgm_read_byte(seg+1);
PORTD=0xf4;
_delay_ms(50.0);
PORTC=pgm_read_byte(seg+2);
PORTD=0xf2;
_delay_ms(50.0);
PORTC=pgm_read_byte(seg+3);
PORTD=0xf1;
_delay_ms(50.0);
}
}
这个基本多数字动态程序不够灵活,只能显示提前设定的数字,通过带缓冲区的多数字动态程序可以灵活实现数字显示。
5、带缓冲区的多数字动态程序
带缓冲区的多数字动态程序是将显示部分提出,单独写成子程序,在调用子程序前,将要显示数据放入显示缓存区,再调用显示子程序。
#include
#include
#include
constprog_ucharseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98};
unsignedcharbuf[]={4,7,9,8},i;
voiddsp();
intmain()
{
DDRC=0xff;
PORTC=0xff;
DDRD=0xff;
PORTD=0xff;
while
(1)
{
dsp();
}
}
voiddsp()
{
PORTC=pgm_read_byte(seg+buf[0]);
PORTD=0xf8;
_delay_ms(50.0);
PORTC=pgm_read_byte(seg+buf[1]);
PORTD=0xf4;
_delay_ms(50.0);
PORTC=pgm_read_byte(seg+buf[2]);
PORTD=0xf2;
_delay_ms(50.0);
PORTC=pgm_read_byte(seg+buf[3]);
PORTD=0xf1;
_delay_ms(50.0);
}
数组buf为显示缓存区,在其中放入不同数值,执行显示子程序dsp后,会显示对应数字。
(二)按键检测设计
按键是基本方便的输入手段,可通过按键开关控制发光二极管的亮灭来,说明AVR单片机的端口检测外部信号的功能和方法。
1、单按键的电路
典型的单按键的电路如图6-7所示,在按键没有按下时,PA5引脚信号为高电平,当按键按下时PA5引脚信号为低电平。
通过检测引脚的电平会方便的知道按键的状态。
图14按键电路
我们日常所说的按键,外观如图6-8所示,有四个脚。
按键两侧的脚是连通的,之所以做成四个脚,是为了安装牢固。
图15按键开关
2、按键的响应过程
理想的按键的闭合和断开时,接触点的电压应该立即变高或者变低,但是由于机械触点的弹性以及按键按动时电压突变等原因,在触点闭合或断开的瞬间会出现电压抖动现象,如图6-9所示。
在发生抖动的时间一般在5-10ms。
一次按键处理过程如下:
当按键按下之后,相应的按键接触点的电压以高低电平的方式输入到单片机的I/O口。
按键的闭合与断开是有一定时间的,一般为0.1-1S。
而AVR单片机的机器周期一般为1us甚至更短,在0.1-1S的时间段内,程序会检测很多次按键的输入电平,这样单片机可能会认为按键被按下了多次,从而出现误判。
图17按键闭合断开时的电压波动示意图
3、按键去抖动的方法和原理
为了去除按键的抖动,保证单片机对按键的一次输入只响应一次,可以采用硬件和软件两种方法:
硬件电路去抖动是在外围电路中加入去抖动电路(如R-S触发器);软件去抖动是在程序中加入延时程序以跳过抖动时间,等待信号稳定后再次判断按键的输入电平,如果信号电平保持不变,则可以确认一次按键按下。
●硬件去抖动电路的原理
用R-S触发器形成去抖电路是单片机外围电路设计中常用的方法,这种方法可以减少单片机软件对按键动作的延时和计算。
典型的硬件去抖动电路如图6-10,74LS02构成一个R-S触发器电路实现按键的消抖电路。
图6-1074LS02实现的硬件消抖电路
●软件消抖的原理和实现
软件消抖的基本原理是在软件中对按键进行两次检测确认,记载第一次检测到按键按下后,间隔10ms左右再次检测按键是否按下,只有在两次都检测到按键按下时才最终确认有键按下,这样就避开了按键的抖动时间,从而消除了抖动的影响。
在按键接口软件的设计中,除了要考虑按键消抖外,一般还要判别按键的释放,只有检测到按键释放后,才能确定为一次完整的按键动作。
通用的案件检测程序如下:
Keyscan()
{
if((PINA&0X20)==0)//判断按键是否按下,等于0表示按键按下
{
delayms(20);//延时20ms。
避开按键抖动时间
if((PINA&0X20)==0)//再次判断按键是否按下,
{
…//按键按下的处理程序
}
}
While((PINA&0X20)==0);/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 温度 报警器 设计方案
![提示](https://static.bdocx.com/images/bang_tan.gif)