1、目 录第一章 系统设计要求和解决方案第二章 硬件系统第三章 软件系统第四章 实现的功能第五章 缺点及可能的解决方法第六章 心得体会附录一参考文献附录二硬件原理图附录三程序流程图第一章 系统设计要求和解决方案要求:设计基于单片计算机的温度控制器,用于控制温度。具体要求如下: 1. 温度连续可调,范围为0-40 2. 超调量%20% 3. 温度误差0.5 4. 人-机对话方便 解决方案:采用数字温度芯片DS18B20 测量温度,输出信号全数字化.便于单片机处理及控制,省去传统的测温方法的很多外围电路.且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线形较 好.在0100 摄氏度时,最大线形
2、偏差小于1 摄氏度.DS18B20 的最大特点之一采用了单总线的数 据传输, 由数字温度计DS18B20和微控制器AT89S51构成的温度测量装置,它直接输出温度的数字信号, 可直接与计算机连接.这样,测温系统的结构就比较简单,体积也不大.采用51 单片机控制,软件编程 的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方 便.既可以单独对多DS18B20 控制工作,还可以与PC 机通信上传数据,另外AT89S51 在工业控制上也有着广泛的应用,编程 技术及外围功能电路的配合使用都很成熟. 该系统利用AT89S51芯片控制温度传感器DS18B20进行实时温度
3、检测并显示,能够实现快速测量 环境温度,并可以根据需要设定上下限报警温度.该系统扩展性非常强,它可以在设计中加入时钟芯 片DS1302以获取时间数据,在数据处理同时显示时间,并可以利用AT24C16芯片作为存储器件,以此 来对某些时间点的温度数据进行存储, 利用键盘来进行调时和温度查询, 获得的数据可以通过MAX232 芯片与计算机的RS232接口进行串口通信,方便的采集和整理时间温度数据。系统框图如图第二章硬件系统(一)硬件主要有:单片机、温度传感器、显示报警模块(二)硬件的选择1、单片机的选择;对于单片机的选择,可以考虑使用8031与8051系列,由于8031没有内部RAM,系统又需要大量
4、内 存存储数据, 因而不适用. AT89S51 是美国 ATMEL 公司生产的低功耗, 高性能 CMOS8 位单片机, 片内含 4kbytes 的可编程的 Flash 只读程序存储器,兼容标准 8051 指令系统及引脚.它集 Flash 程 序存储器既可在线编程(ISP),也可用传统方法进行编程,所以低价位 AT89S51单片机可为提供许 多高性价比的应用场合, 可灵活应用于各种控制领域, 对于简单的测温系统已经足够. 单片机AT89S51 具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携 手持式产品的设计使用系统可用二节电池供电.主要特性如下与MCS-
5、51 兼容 4K字节可编程闪烁存储器 寿命:1000写/擦循环 数据保留时间:10年 全静态工作:0Hz-24Hz 三级程序存储器锁定 128*8位内部RAM 32可编程I/O线 两个16位定时器/计数器 5个中断源 可编程串行通道 低功耗的闲置和掉电模式 片内振荡器和时钟电路2、温度传感器的选择;由于传统的热敏电阻等测温元件测出的一般都是电压,再转换成对应的温度,需要比较多的外部 元件支持,且硬件电路复杂,制作成本相对较高.这里采用DALLAS公司的数字温度传感器DS18B20 作为测温元件。DALLAS 最新单线数字温度传感器DS18B20是一种新型的一线器件,其体积更小,更适用于 多种场
6、合,且适用电压更宽,更经济.DALLAS 半导体公司的数字化温度传感器DS18B20是世界上第 一片支持一线总线接口的温度传感器.温度测量范围为-55+125 摄氏度,可编程为9位12 位 转换精度,测温分辨率可达0.0625摄氏度,分辨率设定参数以及用户设定的报警温度存储在EEPROM中,掉电后依然保存.被测温度用符号扩展的16位数字量方式串行输出;其工作电源既可以在远端引 入,也可以采用寄生电源方式产生;多个DS18B20可以并联到3 根或2 根线上,CPU只需一根端口线 就能与诸多DS18B20 通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路.因此用它来 组成一个测温系统,具有
7、线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便.DS18B20 的性能特点如下: 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与 DS18B20的双向通讯 DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温 DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集 成电路内 适应电压范围更宽,电压范围:3.05.5V,在寄生电源方式下可由数据线供电 温范围-55+125,在-10+85时精度为0.5 零待机功耗 可编程的分辨率为912位,对应的可分辨温度分别为0.5,0.
8、25,0.125和0.0625,可 实现高精度测温 在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转 换为数字,速度更快 用户可定义报警设置 报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件 测量结果直接输出数字温度信号,以一线总线串行传送给CPU,同时可传送CRC校验码,具 有极强的抗干扰纠错能力 负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作3、显示及报警模块器件选择 ;在本设计中温度测量范围为0+125,精度为0.5,因此只需要液晶就可以完成相关的 显示功能,报警器可以用有源蜂鸣器配合三极管来代替.(三)硬件
9、设计电路温度计电路设计原理图如图所示,控制器使用单片机AT89S51,温度计传感器使用DS18B20, 用液晶实现温度显示. 本温度计大体分三个工作过程.首先,由DS18820温度传感器芯片测量当前的温度,并将结果送 入单片机.然后,通过89S51单片机芯片对送来的测量温度读数进行计算和转换,井将此结果送入 液晶显示模块.最后,SMC1602A芯片将送来的值显示于显示屏上. 由图1可看到,本电路主要由 DSl8820温度传感器芯片,SMCl602A液晶显示模块芯片和89S51单片机芯片组成.其中,DSI8B20 温度传感器芯片采用一线制与单片机相连,它独立地完成温度测量以及将温度测量结果送到单
10、片机 的工作.主控制器单片机AT89S51具有低电压供电和小体积等特点,两个端口刚好满足电路系统的设计需要,很 合适携手特式产品的使用.主机控制DS18B20完成温度转换必须经过三个步骤:初始化,ROM操作指 令,存储器操作指令.必须先启动DS18B20开始转换,再读出温度转换值.显示电路本部分电路主要使用七段数码管和移位寄存器芯片74LS164。单片机通过I2C总线将要显示的数据信号传送到移位寄存器芯片74LS164寄存,再由移位寄存器控制数码管的显示,从而实现移位寄存点亮数码管显示。由于单片机的时钟频率达到12M,移位寄存器的移位速度相当快,所以我们根本看不到数据是一位一位传输的。从人类视
11、觉的角度上看,就仿佛是全部数码管同时显示的一样。具体见实际连线图如图5-3。当清除端(CLEAR)为低电平时,输出端(QAQH)均为低电平。 串行数据输入端(A,B)可控制数据。当 A、B 任意一个为低电平,则禁止新数据输入,在时钟端(CLOCK)脉冲上升沿作用下 Q0 为低电平。当 A、B 有一个为高电平,则另一个就允许输入数据,并在 CLOCK 上升沿作用下决定 Q0 的状态,逻辑封装图如图引出端符号:CLOCK 时钟输入端;CLEAR 同步清除输入端(低电平有效);A,B 串行数据输入端;QAQH 输出端。真值表如下:温度检测电路DS18B20 最大的特点是单总线数据传输方式,DS18B
12、20 的数据I/O 均由同一条线来完成. DS18B20 的电源供电方式有2 种: 外部供电方式和寄生电源方式.工作于寄生电源方式时, VDD 和 GND 均接地, 他在需要远程温度探测和空间受限的场合特别有用, 原理是当1 W ire 总线的信号线 DQ 为高电平时, 窃取信号能量给DS18B20 供电, 同时一部分能量给内部电容充电, 当DQ为低电平 时释放能量为DS18B20 供电.但寄生电源方式需要强上拉电路, 软件控制变得复杂(特别是在完成温 度转换和拷贝数据到E2PROM 时) , 同时芯片的性能也有所降低. 因此, 在条件允许的场合, 尽量采用 外供电方式.无论是内部寄生电源还是
13、外部供电,I/O口线要接5K左右的上拉电.在这里采用前者 方式供电.DS18B20与芯片连接电路如图外部电源供电方式是DS18B20最佳的工作方式,工作稳定可靠,抗干扰能力强,而且电路也比较 简单,可以开发出稳定可靠的多点温度监控系统.站长推荐大家在开发中使用外部电源供电方式,毕 竟比寄生电源方式只多接一根VCC引线.在外接电源方式下,可以充分发挥DS18B20宽电源电压范围 的优点,即使电源电压VCC 降到3V 时,依然能够保证温度量精度. 由于DS18B20 只有一根数据线,因此它和主机(单片机)通信是需要串行通信,而AT89S51 有 两个串行端口,所以可以不用软件来模拟实现.经过单线接
14、口访问DC18B20 必须遵循如下协议:初 始化,ROM 操作命令,存储器操作命令和控制操作.要使传感器工作,一切处理均严格按照时序. 主机发送(Tx)-复位脉冲(最短为480s 的低电平信号).接着主机便释放此线并进入接收方 式 (Rx) 总线经过4.7K的上拉电阻被拉至高电平状态. . 在检测到I/O 引脚上的上升沿之后, DS18B20 等待1560s,并且接着发送脉冲(60240s 的低电平信号).然后以存在复位脉冲表示DS18B20 已经准备好发送或接收,然后给出正确的ROM 命令和存储操作命令的数据.DS18B20 通过使用时间 片来读出和写入数据,时间片用于处理数据位和进行何种指
15、定操作的命令.它有写时间片和读时间片 两种: 写时间片:当主机把数据线从逻辑高电平拉至逻辑低电平时,产生写时间片.有两种类型的 写时间片:写1 时间片和写0 时间片.所有时间片必须有60 微秒的持续期,在各写周期之 间必须有最短为1微秒的恢复时间. 读时间片:从DS18B20 读数据时,使用读时间片.当主机把数据线从逻辑高电平拉至逻辑低电平时产生读时间片.数据线在逻辑低电平必须保持至少1 微秒;来自DS18B20 的输出 数据在时间下降沿之后的15 微秒内有效.为了读出从读时间片开始算起15微秒的状态,主 机必须停止把引脚驱动拉至低电平. 在时间片结束时,I/O 引脚经过外部的上_鱯_9L_%
16、拉 电阻拉回高电平,所有读时间片的最短持续期为60 微秒,包括两个读周期间至少1s 的恢 复时间. 一旦主机检测到DS18B20 的存在,它便可以发送一个器件ROM 操作命令.所有ROM 操作命令 均为8位长. 所有的串行通讯,读写每一个bit 位数据都必须严格遵守器件的时序逻辑来编程,同时还必须遵 守总线命令序列,对单总线的DS18B20 芯片来说,访问每个器件都要遵守下列命令序列:首先是初 始化;其次执行ROM 命令;最后就是执行功能命令(ROM 命令和功能命令后面以表格形式给出).如 果出现序列混乱,则单总线器件不会响应主机.当然,搜索ROM命令和报警搜索命令,在执行两者中 任何一条命令
17、之后,要返回初始化. 基于单总线上的所有传输过程都是以初始化开始的,初始化过程由主机发出的复位脉冲和从机响 应的应答脉冲组成.应答脉冲使主机知道,总线上有从机,且准备就绪. 在主机检测到应答脉冲后,就可以发出ROM 命令.这些命令与各个从机设备的唯一64 位ROM 代码相关.在主机发出ROM命令,以访问某个指定的DS18B20,接着就可以发出DS18B20支持的某个 功能命令.这些命令允许主机写入或读出DS18B20便笺式RAM,启动温度转换.软件实现DS18B20 的工作严格遵守单总线协议: (1)主机首先发出一个复位脉冲,信号线上的DS18B20 器件被复位. (2)接着主机发送ROM命令
18、,程序开始读取单个在线的芯片ROM编码并保存在单片机数据存储器 中,把用到的DS18B20 的ROM 编码离线读出,最后用一个二维数组保存ROM 编码,数据保 存在X25043中. (3)系统工作时,把读取了编码的DS18B20 挂在总线上.发温度转换命令,再总线复位. (4)然后就可以从刚才的二维数组匹配在线的温度传感器, 随后发温度读取命令就可以获得对应的 度值了. 在主机初始化过程,主机通过拉低单总线至少480us,来产生复位脉冲.接着,主机释放总线,并 进入接收模式.当总线被释放后,上拉电阻将单总线拉高.在单总线器件检测到上升沿后,延时15 60us,接着通过拉低总线60240us,以
19、产生应答脉冲. 写时序均起始于主机拉低总线,产生写1 时序的方式:主机在拉低总线后,接着必须在15us之内 释放总线. 产生写0 时序的方式: 在主机拉低总线后, 只需在整个时序期间保持低电平即可(至少60us). 在写字节程序中的写一个bit 位的时候,没有按照通常的分别写0时序和写1 时序,而是把两者结合起 来, 当主机拉低总线后在15us 之内将要写的位c 给DO: 如果c 是高电平满足15us 内释放总线的要求,如果c是低电平,则DO=c这条语句仍然是把总线拉在低电平,最后都通过延时58us 完成一个写时序 (写时序0或写时序1)过程. 写时间时序:当主机把数据从逻辑高电平拉到逻辑低电
20、平的时候,写时间隙开始.有两种写时间 隙,写1 时间隙和写0 时间隙.所有写时间隙必须最少持续60s,包括两个写周期至少1s 的恢复 时间. I/O线电平变低后, DS18B20 在一个15s 到60s 的窗口内对I/O 线采样. 如果线上事高电平, 就是写1,如果是低电平,就是写0.主机要生成一个写时间隙,必须把数据线拉到低电平然后释放, 在写时间隙开始后的15s 内允许数据线拉到高电平.主机要生成一个写0 时间隙,必须把数据线拉 到低电平并保存60s. 每个读时隙都由主机发起,至少拉低总线1us,在主机发起读时序之后,单总线器件才开始在总线 上发送0 或1.所有读时序至少需要60us. 源
21、程序: 假设要写1 B 的数据, 且数据放在A 中. SETB TEM PDN NOP NOP WRITEDS1820LOP: CLR TEM PD IN MOV R6, # 08H ; 延时15 Ls DJN Z R6, $ RRC A ;将要写数据存入CMOV TEM PD IN , C ; 将数据写入总线MOV R6, # 14H ; 延时40LsDJN Z R6, $ SETB TEM PD IN ;释放总线DJN Z R7,WRITEDS1820LO P ;写8位RET读时间时序:当从DS18B20 读数据时,主机生成读时间隙.当主机把数据从高电平拉到低电平 时,写时间隙开始,数据线
22、必须保持至少1s;从DS18B20输出的数据在读时间隙的下降沿出现后15 s 内有效. 因此,主机在读时间隙开始后必须把I/O 脚驱动拉为的电平保持15s,以读取I/O 脚状态.在读 时间隙的结尾,I/O 引脚将被外部上拉电阻拉到高电平.所有读时间隙必须最少60s,包括两个读周 期至少1s的恢复时间. 源程序: 假设要读1B 的数据, 且数据放在A 中. READDS1820:MOV R7, # 08H ;1 个字节 8 位SETB TEM PD IN ; NO PREADDS1820LOO P: CLR TEM PD IN NO PSETB TEM PD IN ; 释放总线MOV R6, #
23、 05H ; 延时10 LsDJN Z R6, $ MOV C, TEM PD N ; 采样总线数据 MOV R6, # 14H ; 延时40 Ls DJN Z R6, $ RRC A ;采样数据存入ASETB TEM PD IN ; 释放总线DJN Z R7, READDS1820LOO P; ; 采样下一位MOV R6, # 14H ; 延时40 LsDJN Z R6,$RET读/写时序如图复位时序: 复位要求主CPU将数据线下拉500微秒, 然后释放, DS18B20收到信号后等待1660 微 秒左右,后发出60240 微秒的存在低脉冲,主CPU 收到此信号表示复位成功.源程序: 其中T
24、EM PD IN 定义为DS18B20 的数据管脚, 主机为A T89C2051. N ITDS1820: SETB TEM PD N NO P NO P CLR TEM PD N MOV R6, # 0A 0H ; 延时640 LsDJN Z R6, $ MOV R6, # 0A 0HDJN Z R6, $ SETB TEM PD N ; 释放总线MOV R6, # 32H ; 延时100 Ls, 等待回应DJN Z R6, $ MOV R6, # 3CH LOO P1820: MOV C, TEM PD N ;采样总线信号JC N ITDS1820OU T DJN Z R6,LOO P18
25、20MOV R6, # 064H DJN Z R6, $SJM P N ITDS1820 RET IN ITDS1820OU T: SETB TEM PD NRET复位时序如图温度报警电路本设计采软件处理报警,利用有源蜂鸣器进行报警输出,采用直流供电.当所测温度超过获低于所预 设的温度时,数据口相应拉高电平,报警输出.(也可采用发光二级管报警电路,如过需要报警,则 只需将相应位置1,当参数判断完毕后,再看报警模型单元ALARM 的内容是否与预设一样,如不一样, 则发光报警)报警电路硬件连接如图第三章软件系统概述整个系统的功能是由硬件电路配合软件来实现的,当硬件基本定型后,软件的功能也就基本定下
26、 来了.从软件的功能不同可分为两大类:一是监控软件(主程序),它是整个控制系统的核心,专门 用来协调各执行模块和操作者的关系.二是执行软件(子程序),它是用来完成各种实质性的功能如 测量,计算,显示,通讯等.每一个执行软件也就是一个小的功能执行模块.这里将各执行模块一一 列出, 并为每一个执行模块进行功能定义和接口定义. 各执行模块规划好后, 就可以规划监控程序了. 首先要根据系统的总体功能选择一种最合适的监控程序结构,然后根据实时性的要求,合理地安排监 控软件和各执行模块之间地调度关系主程序模块主程序需要调用4 个子程序,分别为数码管显示程序,温度测试及处理子程序,报警子程序,中 断设定子程
27、序.各模块程序功能如下: 显示程序:向数码的显示送数,控制系统的显示部分. 温度测试及处理程序:对温度芯片送过来的数据进行处理,进行判断和显示. 报警子程序:进行温度上下限判断及报警输出. 中断设定程序:实现设定上下限报警功能. 主程序流程如图各模块流程系统1, 温度检测流程 DS18B20在单片机控制下分三个阶段: 18B20 初始化:初始化流程。如图 读18B20时序:读DS18B20流程写18B20时序:写18B20 流程。如图2,报警模块流程3, 中断设定流程中断模块采用了外中断和内中断套用方法. 当设计需要实现上下限报警时, 利用INT0口进行中断, set 键进行上下限报警温度设定
28、,进入温度设定状态后(按一下温度设定键),首先会提示显示UP 字母,表示要用户设定高温报警温度,按S3 键 ,表示本位数字+1,按S4 表示移向下一位,如果4 位高温设定完毕,则显示DO,表示要用户设定低温报警温度.4位低温设定完毕,如果用户设置的 高温比设定的低温高的话则显示ERRO表示错误提示,同时会有蜂鸣器及时报警提示,然后自动显 示UP,让用户重新进行温度设定.中断设定子程序流程图第四章实现的功能本设计是利用 AT89C51 芯片控制温度传感器 DS18B20,再辅之以部分外围电路实现 对环境温度的测取,性能稳定,精度度高,而且扩展性好.并且通过单片机的计数器配合 12MHZ 的晶振实
29、现了时间显示的功能.DS18B20 本身具有保存温度限值的功能,使得温度上下限值不容易丢失.且可以实现超温报警功能第五章缺点及可能解决的方法温度监测器缺点:DS18B20的测量精度只有0.5 度,往往很多场合 需要更加精确的温度,在所测温度精度不变的基础上必须对数据进行校正.由于DS18B20 是基于带隙 结构的数字式温度传感器,PN 结增量电压正比于IC 绝对温度(PTAT),它的测温精度较高,但存在 着一定的误差.解决办法:由于其误差在时间和外部环境变化的条件下,保持相当高的稳定性.针对这一特性,基于线性插补的数学思想,利用DSP技术,对其进行误差校正补偿.这种误差校正的补偿方法,不需增加
30、硬 件电路,计算方法简单,软件费用也很小,既提高了测量精度,又不需增加成本.它充分利用监控计算机 的处理能力,在监控计算机上用线性插补的数学方法对其进行误差校正补偿,能轻易地将其提高其精度显示系统 缺点:本次设计采用的是七段位数码管为显示器,显示的字节较少不易于于操作者观测 解决办法:显示电路采用SMCI602A液晶显示模块芯片该芯片可显示162个字符,比七段数码管 LED显示器在显示字符的数量上要多得多.另外,由于SMCl602芯片编程比较简单,界面直观,因此更加易于使用者操作和观测第六章心得体会 本设计利用89S51 芯片控制温度传感器DS18B20,再辅之以部分外围电路实现对环境温度的测
31、控, 性能稳定,精度教高,而且扩展性能很强大.由于DS18B20 支持单总线协议,我们可以将多个DS18B20 可以并联到3 根或2 根线上,CPU 只需一根端口线就能与诸多DS18B20 通信,占用较少的微处理器的 端口就可以实现多点测温监控系统.可以加入1302 时钟芯片实现对时间进行显示,加之AT24C16 存 储芯片来实现对时间和温度数据的记录,利用MAX232芯片和计算机实现串口通讯,这样就可以方便的 统计出特定时间内的需要的时间和温度数据。 从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的 理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就 是我在这次课程设计中的最大收获.附录一 参考文献附录二 硬件原理图附录三程序流程图文档来源网络,版权归原作者。如有侵权,请告知,我看到会立刻处理。