文章目录[隐藏]
本次单片机课程设计本人设计了智能数字温度计,其功能主要有,可以测试温度,精确到小数点后三位;其次还附加了时钟功能,其可以显示秒到年的具体时间;并且本人还利用了zigbee无线传输模块,将采集到的温度值无线发送到电脑上。。。。具体设计在下面详细分析。
关键词:温度计;ds18b20,zigbee模块,ds1302 ,89c52
1 课题背景
本课程设计的任务是设计一个数字温度计。由于在生产生活中都有很多领域需要测量温度,所以温度计的好坏即测量灵敏度,测温范围,稳定度以及实用性和适用性就显得尤为重要。传统温度计通常利用固体、液体、气体受温度的影响而热胀冷缩等的现象为设计的依据,因此这种方法无论从设计原理还是视觉读数都有很大的误差。本次课程设计以DS18B20作为数字温度传感器,其具有线性优良、性能稳定、灵敏度高、抗干扰能力强、使用方便等优点,可以大大提高测量温度的精度,并且该设计还具备了无线传输功能,采集到的温度可实时地传送到电脑,有利于对温度设备的远程监控,和远程控制,这是未来智能设备(包括智能家居)的发展方向。。。
1.2 总体方框图
现将系统模块总体设计框图列于下图1中:
图1 总体设计方框图
2 设计方案简述
2.1数字温度计设计方案论证
2.1.1方案一
由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温
度变化的电压或电流采集过来,进行A/D 转换后,就可以用单片机进行数据的处理,在显示
电路上,就可以将被测温度显示出来,这种设计需要用到A/D 转换电路,其中还涉及到电阻
与温度的对应值的计算,感温电路比较麻烦。而且在对采集的信号进行放大时容易受温度的
影响出现较大的偏差。
2.1.2 方案二
进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常
容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测
温度值,进行转换,电路简单,精度高,软硬件都以实现,而且使用单片机的接口便于系统
的再扩展,满足设计要求。
从以上两种方案,很容易看出,采用方案二,电路比较简单,费用较低,可靠性高,软件设
计也比较简单,故采用了方案二。
DS18B20温度传感器是美国DALLAS半导体公司生产的DS18B20型单线智能温度传感器,属于新一代适配微处理器的智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9-12位的数字值读数方式。可广泛用于工业、民用、军事等领域的温度测量及控制仪器、测控系统和大型设备中。它具有体积小,接口方便,传输距离远等特点。
DS18B20从功能和技术的角度来说有以下性能特点:
l 采用单总线专用技术,既可通过串行口线,也可通过其它I/O口线与微机接口,无须经过其它变换电路,直接输出被测温度值(9位二进制数,含符号位)
l 测温范围为-55℃至+125℃,测量分辨率最小为0.0625℃
l 内含64位经过激光修正的只读存储器ROM
l DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内
l 适配各种单片机或系统机
l 测量结果直接输出数字温度信号,以“一线总线”串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力
l 用户可分别设定各路温度的上、下限
l 适应电压范围宽,3.0~5.5V,在寄生电源方式下可由数据线供电
独特的一线接口,只需要一条口线通信 多点能力,简化了分布式温度传感应用 无需外部元件 可用数据总线供电,电压范围为3.0 V至5.5 V 无需备用电源 测量温度范围为-55℃至+125℃,华氏相当于是-10℉至+85℉范围内精度为±0.5℉。
其引脚排列见图2和表1。
序号 |
名称 |
引脚功能描述 |
1 |
Vcc |
可选择的Vcc引脚。当工作于寄生电源时,此引脚必须接地。 |
2 |
DQ |
数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源。 |
3 |
GND |
地信号。 |
表1 DS18B20的管脚分布说明
图2 DS18B20的管脚分布图
DS1820主要包括寄生电源、温度传感器、64位激光ROM单线接口、存放中间数据的高速暂存器(内含便笺式RAM),用于存储用户设定的温度上下限值的TH和TL触发器存储与控制逻辑、8位循环冗余校验码(CRC)发生器等七部分内部,其内部结构框图如图3所示。
图3 DS18B20内部结构
64位ROM的结构开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码。温度报警触发器TH和TL,可通过软件写入户报警上下限。
DS18B20温度传感器与单片机的接口电路DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。另一种是寄生电源供电方式,单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。本实验采用第一种。
DS18B20的测温原理是这这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的一个基数分别置入减法计数器1、温度寄存器中,计数器1和温度寄存器被预置在-55℃所对应的一个基数值。
减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到0时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。其输出用于修正减法计数器的预置值,只要计数器门仍关闭就重复上述过程,直到温度寄存器值大致等于被测温度值。
由于DS18B20的单线通讯功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作按协议进行,操作协议为:初始化DS18B20发复位脉冲à写ROM功能指令à发存储器操作命令à处理数据。DS18B20有六条控制命令如表2所示:
指 令 |
约定代码 |
操 作 说 明 |
温度转换 |
44H |
启动DS18B20进行温度转换 |
读暂存器 |
BEH |
读暂存器9个字节内容 |
写暂存器 |
4EH |
将数据写入暂存器的TH、TL字节 |
复制暂存器 |
48H |
把暂存器的TH、TL字节写到E2RAM中 |
重新调E2RAM |
B8H |
把E2RAM中的TH、TL字节写到暂存器TH、TL字节 |
读电源供电方式 |
B4H |
启动DS18B20发送电源供电方式的信号给主CPU |
表2 DS18B20的控制指令
2.3 AT89C52
AT89C52是此次课程设计的核心部分。其管脚图如下:
AT89C52管脚图
AT89C52是低功耗、高性能的CMOS8位单片机。片内带有8KB的Flash存储器,且允许在系统内改写或用编程器编程。另外,AT89C52的指令系统和引脚与80C52完全兼容。
AT89C52各管脚功能如下:
VCC:供电电压;
GND:接地;
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。;
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流;
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流;
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入;P3口管脚功能: P3.0是RXD(串行输入口);P3.1是TXD(串行输出口);P3.2是/INT0(外部中断0);P3.3是/INT1(外部中断1);P3.4是T0(记时器0外部输入);P3.5是T1(记时器1外部输入);P3.6是/WR(外部数据存储器写选通);P3.7是/RD(外部数据存储器读选通);P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许输出电平用于锁存地址的地位字节。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:来自反向振荡器的输出。
2.4 1602型LCD
本温度计的读数的显示是通过1602型LCD实现的,其具有微功耗、体积小、显示内容丰富、超薄轻巧的特点,常用在袖珍式仪表和低功耗应用系统中。
1602型LCD归纳起来有以下6大特点:
l +5V电压,对比度可调
l 内含复位电路
l 提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能
l 有80字节显示数据存储器DDRAM
l 内建有192个5X7点阵的字型的字符发生器CGROM
l 8个可由用户自定义的5X7的字符发生器CGRAM
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。
因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如'A'。以下是1602的16进制ASCII码表地址:读的时候,先读左边那列,再读上面那行,如:感叹号'!'的ASCII为0x21,字母B的ASCII为0x42。
附加功能模块
单片机技术的最大特点就是可以通过修改程序来实现不同的功能,因此举一反三的能力就必不可少了。每一节课的例程后边,我一般都会布置几个作业,大家尽量去独立完成这个作业。在完成这个作业的过程中,都可以参考我的程序思路,在这个基础上通过动脑思考去构建你自己的程序框架,最终将程序完成。
2.5 DS1302模块分析
DS1302的RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。
其管脚图如下:
DS1302管脚图
各引脚功能:Vcc1为后备电源,VCC2为主电源,X1和X2是振荡源,
SCLK为输入端
RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手
Ds1302部分电路图
2.6 zigbee无线发送模块
Zigbee是基于IEEE802.15.4标准的低功耗个域网协议。根据这个协议规定的技术是一种短距离、低功耗的无线通信技术,ZigBee节点所属类别主要分三种,分别是协调器(Coodinator)、路由器(Router)、终端(End Device)。统一网络中至少需要一个协调器,也只能有1个协调器,负责各个节点16位地址分配(自动分配)。理论上可以连上65536个节点,可以实行多方组网。
3 详细设计
温度采集模块的核心即是温度传感器DS18B20,其接线方法和引脚排列已在上文详述。因此可以设计出图5所示温度采集模块电路图。
图5 温度采集模块
本次设计所采用的温度传感器为Dallas半导体公司的数字化温度传感器,它是世界上第一片支持“一线总线”接口的温度传感器。“一线器件”体积更小、适用电压更宽、更经济。并且分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。
DSl8B20数字温度计提供9位(二进制)温度读数,指示器件的温度信息经过单线接口送入DSl8B20或从DSl8B20送出,因此从主机CPU到DSl8B20仅需一条线,当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625℃/LSB形式表示。
当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。
单片机控制系统的电路图如图6所示,这样便实现了对DS18B20的信息采集、反馈以及对LCD的控制。
图6 单片机控制模块
温度显示和时间显示都主要是通过1602型LCD实现,1602型LCD采用标准的16脚接口,其中:
第1脚:VSS为电源地
第2脚:VDD接5V电源正极
第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。
第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。
第6脚:E(或EN)端为使能(enable)端。
第7~14脚:D0~D7为8位双向数据端。
第15~16脚:空脚或背灯电源。15脚背光正极,16脚背光负极。
显示电路是使用的LCD1602液晶显示,这种显示最大的优点就是使用字符型显示,可以显示两行,第一行显示日期与当前时间,第二行显示当前温度,当DS18B20出现显示错误时第二行温度不显示会出现错误提示,此款液晶功耗低,操作方便,显示相当清晰。
图7 显示模块电路图
3.4 软件设计
本章从设计思路、软件系统框图出发,先介绍整体的思路后,再逐一分析各模块程序算法的实现,最终编写出满足任务需求的程序。
DS18B20器件要求采用严格的通信协议,以保证数据的完整性。该协议定义了几种信号类型:复位脉冲,应答脉冲时隙;写0,写1时隙;读0,读1时隙。与DS18B20的通信,是通过操作时隙完成单总线上的数据传输。发送所有的命令和数据时,都是字节的低位在前,高位在后。
该模块的系统流程
图8 温度采集模块的系统流程图
计算温度子程序
计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图下图所示。
DS18B20的初始化
1.先将数据线置高电平“1”。
2.延时(该时间要求的不是很严格,但是尽可能的短一点)
3.数据线拉到低电平“0”。
4.延时750微秒(该时间的时间范围可以从480到960微秒)。
5.数据线拉到高电平“1”。
6.延时等待(如果初始化成功则在15到60毫秒时间之内产生一个由DS18B20所返回的低电平“0”。据该状态可以来确定它的存在,但是应注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时控制)。
7.若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起(第5步的时间算起)最少要480微秒。
8.将数据线再次拉高到高电平“1”后结束。
3.4.2、时钟显示子程序
3.5系统主程序
首先要根据系统的总体功能和键盘设置选择一种最合适的监控程序结构,然后根据实时性的要求,合理地安排监控软件和各执行模块之间地调度关系。
采用C语言编写代码, 鉴于篇幅限制及DS18B20 的应用已经规范和成熟, 本文仅就主程序流程图和显示子程序流程图及其代码进行说明。主程序流程图主程序通过调用温度采集子程序完成温度数据采集, 然后调用温度转换子程序转换读取温度数据,调用显示子程序进行温度显示和判断温度数据。下面给出流程图
4 设计结果及分析
测试温度:20-50摄氏度。(模拟不同温度值环境)
测试仪器及软件:数字万用表,标准温度计20-100摄氏度。
使电路运行,观察系统硬件检测是否正常。系统自带测试表格数据,观察显示数据是否相符合即可。
采用温度传感器和温度计同时测量水温变化情况,目测显示电路是否正常。并记录温度值,与实际温度值比较,得出系统的温度指标。得到下表结果
标准温度(℃) |
测试温度(℃) |
误差(℃) |
20.21 |
20.25 |
0.04 |
25.10 |
25.32 |
-0.22 |
35.02 |
35.20 |
0.18 |
39.97 |
39.96 |
0.01 |
45.00 |
44.85 |
0.15 |
50.00 |
49.89 |
0.11 |
平均误差(℃): 0.1001
|
表3 温度测试结果
由此可知该数字温度计的误差在1%左右。
5 总结和心得
经过一个星期的设计和制作,本人制作的多功能温度计也已完成,挺有收获的。之前虽然运用过52单片机,但多模块功能混合实现还是第一次,本人首先设计了硬件电路,最后写程序实现了软件的设计。在调试过程中也发现和解决了好些问题。
经过此次课程设计,我真正体会到要理论联系实际,把我们所学的理论知识用到实际当中,通过多动手去提高自己的技能,光靠理论不动手是提高不了的。还有,程序一定要多看多模仿着写才有提高。总之,此次课程设计不仅巩固了单片机方面的理论知识,同时也提高的自己的动手能力、分析问题和解决问题的能力。
[1]张琳娜,刘武发.传感检测技术及应用.中国计量出版社,1999
[2]马忠梅 籍顺心 张凯 马 岩. 单片机的C语言应用程序设计-修订版.北京航空航天大学出版社,1998.10
[3]胡汉才.单片机原理及接口技术.清华大学出版社,1996
[4]阎石.数字电子技术基础.北京航空航天大学出版社,2006.
[5]黄河.基于DS18B20的单总线数字温度计.国防工业出版社,2002
[6] 彭泓. 汪玉凤. 粮仓温湿度智能控制系统[J]. 中国科技信息 , 2006
[7]童诗白,华程英.模拟电子技术基础(第四版)[M].北京:高等教育出版社,2009.
附录一 系统总电路图
图附一 系统总电路图
附录二 实验结果测试图
1.时钟显示
2.温度显示
3.温度通过无线模块发送到电脑
获取源代码及全文:http://pan.baidu.com/s/1nvhfUsh
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >