找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 14305|回复: 2
打印 上一主题 下一主题
收起左侧

51单片机温控

[复制链接]
跳转到指定楼层
楼主
ID:235869 发表于 2017-11-11 11:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目 录
☆摘要 ……………………………………………………………………………2
☆课题任务 ………………………………………………………………………4
☆第1章  总体方案设计 ………………………………………………………5
☆第2章.智能开发版部分
2.1.  51系列单片机的原理图…………………………………………………7
2.1.1. 基本51系列单片机的原理图及STC12C5A60S2主要性能 …………7
2.1.2. STC12C5A60S2单片机部内部结构……………………………………7
2.2   51系列单片机的引脚功能 ………………………………………………9
2.2.1. I/O端口线输入输出引脚………………………………………………9
2.2.2. 控制线控制引脚 ………………………………………………………10
2.2.3. 外接晶体端 ……………………………………………………………10
2.3     51系列单片机的时序 …………………………………………………10
2.4.1   智能最小系统的LED显示器接口 ……………………………………11
2.4.2   音频放大电路 …………………………………………………………12
☆第3章.关于DS18B20的介绍
3.1.DS18B20简介………………………………………………………………13
3.2单总线数字温度计硬件设计原理部分……………………………………13
3.3DS18B20的封装及内部结构………………………………………………14
3.4DS18B20的测温原理………………………………………………………14
3.5DS18B20的工作时序………………………………………………………15
3.6DS18B20与单片机的典型接口设计………………………………………15
3.7DS18B20的精确延时问题  ………………………………………………16
3.8DS18B20工作原理及应用…………………………………………………16
3.9控制器对18B20操作流程………………………………………………17
3.10DS18B20芯片与单片机的接口 …………………………………………18
☆第4章.程序
4.1温度监测51单片机程序 …………………………………………………18
4.2测温程序流程框图…………………………………………………………25
☆第5章.调试过程
软件、硬件调试 ………………………………………………………………27
☆第6章效果展示
6.1实现效果……………………………………………………………………27
6.2实物效果图 ………………………………………………………………27
☆附一:硬件原理图……………………………………………………………28
☆附二:材料清单………………………………………………………………28
☆致谢……………………………………………………………………………30
☆参考文献………………………………………………………………………31
温度是一种最基本的环境参数,在工农业生产及日常生活中对温度的测量及控制具有重要意义。温度的测量及控制对保证产品质量、提高生产效率、节约能源、生产安全、促进国民经济的发展起到非常重要的作用。由于温度测量的普遍性,温度传感器的数量在各种传感器中居首位,约占50%。以往,在实际的温度控制系统中,多采用热敏电阻器或热电偶测量温度。这种温度采集电路有时需要冷端补偿电路,这样就增加了电路的复杂性,而且该种电路易受干扰,使采集到的数据准确性不高。随着微电子技术、单片机技术、传感器技术的不断发展,为温度控制系统测控功能的完善、测控精度的提高和抗干扰能力的增强等提供了条件。本文设计了一种基于AT89C51 单片机与DS18B20 的温度控制系统。该设计通过AT89S52 单片机驱动数字温度传感器DS18B20,进行温度数据采集、读取、处理,并通过数码管显示出来。同时,也可通过RS-232 串行口与PC 机连接,将数据传送至PC 机系统,从而方便温度数据传输和统计工作。该系统还可扩展成为多点温度采集系统、温度远程监控系统等。
温度传感器是通过物体随温度变化而改变某种特性来间接测量的。不少材料、元件的特性都随温度的变化而变化,所以能作温度传感器的材料相当多。温度传感器随温度而引起物理参数变化的有:膨胀、电阻、电容、而电动势、磁性能、频率、光学特性及热噪声等等。随着生产的发展,新型温度传感器还会不断涌现。由于工农业生产中温度测量的范围极宽,从零下几百度到零上几千度,而各种材料做成的温度传感器只能在一定的温度范围内使用。
温度传感器与被测介质的接触方式分为两大类:接触式和非接触式。接触式温度传感器需要与被测介质保持热接触,使两者进行充分的热交换而达到同一温度。这一类传感器主要有电阻式、热电偶、PN结温度传感器等。非接触式温度传感器无需与被测介质接触,而是通过被测介质的热辐射或对流传到温度传感器,以达到测温的目的。
● 关键词:温度、控制、监测。
Abstract
Temperature is a physicalobjects and degree of industrial and agricultural production process, is a veryimportant and universal measuring parameters. Temperature measurement andcontrol to ensure product quality, improve the production efficiency, energysaving, safety, and to promote the development of the national economy play avery important role. Because the universality of measurement temperature,temperature sensors in the number of sensors in the first place, about 50%.
The temperature sensor isthrough the object with temperature changes some properties to measureindirectly. Many materials, components, with the characteristics of temperaturechanges, so can make much of the temperature sensor materials. The temperaturesensor with temperature changes caused by physical parameters are: inflation,resistor, capacitor, emf, magnetic, optical properties and frequency, thermalnoise, etc. With the development of production, new temperature sensors willemerge. Due to the industrial and agricultural production in very wide range oftemperature measurement, from below a few baidu to QianDu, and all kinds ofseveral above freezing temperature sensor materials only under certaintemperature range.
The temperature sensor andtested medium contact into two categories: touch and non-contact. Contacttemperature sensor and tested medium to keep contact with them, heat exchangerand achieve the same adequately. This kind of sensor are mainly resistive,thermocouple, PN junction temperature sensor etc. Contactless temperaturesensor and tested medium without contact, but through the medium of radiationor by convection to temperature sensor, in order to achieve the goal.
● Key words:Temperature, control, measurement.
课题任务
本课题主要介绍基于AT89C51单片机和DS18B20数字温度传感器的温度测量系统。该系统利用AT89C51单片机采集炉温,实现温度显示、报警等功能。它以AT89C51单片机为主控制芯片,采用数字温度传感器DS18B20实现温度的检测,其测量范围在25~31℃之间,精度可以达到0.1℃,采用LCD液晶显示模块,它作为显示器形象直观的显示测出的温度值,或者采用数码管显示结果。
简易温度检测系统是通过DS18B20检测温度,然后通过温度传感器通信模块,将检测到的实际温度(环境温度)传送到开发板上,从而在数码管上显示检测到的温度。从中设置了报警设备,使检测的温度低于或高于一定值,报警设备就会起作用。
系统中使用到的主要材料有:单片机STC12C5A60S2,天线,蜂鸣器,多功能开发板,温度传感器(DS18B20)。在实际检测时,主要通过温度传感器(DS18B20)的温度检测功能,实现实际环境温度在开发板的数码管上的的显示。
本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,该设计控制器使用单片机8051,测温传感器使用DS18B20,用 LED数码管以串口传送数据,实现温度显示,能准确达到以上要求。DS18B20数字温度传感器是单总线器件与51单片机组成的测温系统,具有线路简单、体积小等特点测温准确的有点。
多功能开发板通过下载温度检测程序(由STC12C5A60S2接收程序),与温度检测模块(DS18B20)连接,即可实现实时温度监测控制的效果。
第1章.  总体方案设计
温度传感器按传感器与被测介质的接触方式可分为两大类:一类是接触式温度传感器,一类是非接触式温度传感器。
该温度控制系统的设计包括硬件设计和软件设计两大部分,结合实际情况,该系统应具备如下功能:
  (1)实时采集温度;
  (2)显示温度;
  (3)串行传送数据;
  (4)控制外设;
  (5)温度超限报警;
  (6)可扩展,形成多点温度采集系统,具有远程监控等功能。
  在该温度控制系统中AT89S52 单片机不仅与温度传感器DS18B20,外部设备,数码管连接,还通过与串口电平芯片MAX232 连接,由数据线连接到PC 上,建立起远程通信。系统上电后,AT89S52 单片机驱动温度传感器DS18B20 工作,进行温度数据采集,传输。T89S52单片机在接到温度传感器DS18B20 传送过来的温度数据后,进行操作,一方面送至数码管显示模块进行温度显示,另一方面将数据送至 PC 机上,方便在 PC 机进行一些后续处理和控制操作,有利于远程控制的实现。温度控制系统总体框图如所示。
系统的硬件设计部分主要由以下几部分组成:
  (1)单片机最小系统:采用AT89S52 单片机;
  (2)温度采集模块:采用DS18B20 温度传感器;
  (3)温度显示模块:采用4 位LED 数码管显示;
  (4)串行通信模块:与PC 机进行串口通信;
  (5)报警电路:采用蜂鸣器报警;
  (6)外部设备控制电路;
DS18B20是DALLAS公司生产的单总线数字温度传感器,具有3引脚TO-92小体积封装形式;温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,对应的可辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,被测温度用符号扩展的16位数字量方式串行输出,支持3V~5.5V的电压范围,使系统设计更灵活、方便,其工作电源既可在远端引入,也可采用寄生电源方式产生.同时多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用处理器的端口较少,可节省大量的引线和逻辑电路。以上特点使DS18B20非常适用于远距离多点温度检测系统。
file:///C:/Users/%E8%8B%97%E6%B2%B3%E6%B3%89/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg
图5-15 测温系统硬件原理图
1)DS18B20的供电方式选择外接电源的方式,通过单线连接到智能芯片的一个I/O口上。
2)DS18B20与微处理器间采用串行数据传送,在对DS18B20进行读写编程时,必须严格保证读写时序,否则将无法读取测温结果。DS18B20的一线工作协议流程是:初始化→ROM操作指令→存储器操作指令→数据传输。其工作时序包括初始化时序、写时序和读时序。
3)在DS18B20测温程序设计中,向DS18B20发出温度转换命令后,程序总要等待返回信号,一旦DS18B20接触不好或断线,当程序读该DS1820时,将没有返回信号,程序进入死循环。这一点在进行DS1820硬件连接和软件设计时也要给予一定的重视。
第2章.智能开发板部分
2.1. 51系列单片机的内部结构
2.1.1.基本51系列单片机的原理图
file:///C:/Users/%E8%8B%97%E6%B2%B3%E6%B3%89/AppData/Local/Temp/msohtmlclip1/01/clip_image004.gif
图1   51系列单片机原理图
STC12C5A60S2主要性能
⑴高速:1个时钟周期/机器周期,增强型8051内核,速度比普通8051快8到12倍
⑵工作频率:0~35MHZ,相当于普通8051:0~420MHZ
⑶时钟:外部晶体或内部RC振荡器可选,在ISP下载编程用户程序时设置
⑷4个16位定时器,兼容普通8051的定时器T0/T1,2路PCA实现2个定时器
⑸可编程时钟输出功能,T0在P3.4输出时钟,T1在P3.5时输出时钟,BRT在P1.0时输出时钟
⑹先进的指令集结构,兼容普通8051指令集,有硬件乘法/除法指令
⑺每个I/O口驱动功能力均可达到20mA,但整个芯片最大不得超过55mA
2.1.2.STC12C5A60S2单片机部内部结构
STC12CXX单片机部内部结构,各功能部件如图1。
    ⑴ 有1280字节片内RAM数据存储器。
    ⑵ 芯片内有EEPROM功能。            


⑶ 有ISP在系统可编程功能。
⑷ 8通道10位高速ADC模拟到数据转换器。
⑸ 可编程计数器阵列PCA和可编程脉宽调节器PWM,右实现时钟和可调频率的PWM输出。
⑹ 高速SPI通信端口。
⑺ 全双工异步串行口(UART)
⑻ 32个通用寄存器。
⑼ 硬件看门狗功能。
file:///C:/Users/%E8%8B%97%E6%B2%B3%E6%B3%89/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg
图2 STC12CXX系列典型单片机内部结构图
2.2 51系列单片机的引脚功能
file:///C:/Users/%E8%8B%97%E6%B2%B3%E6%B3%89/AppData/Local/Temp/msohtmlclip1/01/clip_image008.jpg
图3  微型单片机的引脚
2.2.1.I/O端口线输入输出引脚
P0.0—P0.7(39—32):P0口是一个漏极开路型准双向I/O口。在访问外部存储器时,它是分时多路转换的地址(低8位)和数据总线,在访问期间激活了内部的上拉电阻。在EPROM编程时,它接收指令字节,而在验证程序时,则输出指令字节。验证时,要求外接上拉电阻。
P1.0—P1.7(1-8):P1口是带内部上拉电阻的8位双向I/O口。在EPROM编程和程序验证时,它接收低8位地址。
P2.0—P2.7(21-28):P2口是一个带内部上拉电阻的8位双向I/O口。在访问外部存储器时,它送出高8位地址。在对EFROM编程和程序验证期间,它接收高8位地址。
P3.0—P3.7(10-17):P3口是一个带内部上拉电阻的8位双向I/O口。在MCS—5l中,这8个引脚还兼有专用功能,P3的8条口线都定义有第二功能,详见表1-1-1。
file:///C:/Users/%E8%8B%97%E6%B2%B3%E6%B3%89/AppData/Local/Temp/msohtmlclip1/01/clip_image010.jpg
图4
file:///C:/Users/%E8%8B%97%E6%B2%B3%E6%B3%89/AppData/Local/Temp/msohtmlclip1/01/clip_image012.jpgfile:///C:/Users/%E8%8B%97%E6%B2%B3%E6%B3%89/AppData/Local/Temp/msohtmlclip1/01/clip_image014.jpg2.2.2.控制线控制引脚(ALE/PROG、     、          、RST/VPD)
ALE(30脚)地址锁存控制信号。在系统扩展时,ALE用于控制P0口输出的低8位地址锁存起来,以实现低位地址和数据的隔离。此外,由于ALE是以晶振1/6的固定频率输出的正脉冲,因此,可作为外部时钟或外部定时脉冲使用。
file:///C:/Users/%E8%8B%97%E6%B2%B3%E6%B3%89/AppData/Local/Temp/msohtmlclip1/01/clip_image016.jpg(29脚)外部程序存储器读选通信号。在读外部ROM时,有效(低电平),以实现外部ROM单元的读操作。
file:///C:/Users/%E8%8B%97%E6%B2%B3%E6%B3%89/AppData/Local/Temp/msohtmlclip1/01/clip_image018.jpg(31脚)访问程序存储控制信号。当信号为低电平时,对ROM的读操作限定在外部程序存储器;当信号为高电平时,对ROM的读操作是从内部程序存储器开始,并可延至外部程序存储器。
RST/Vpp (9脚) 复位信号。当输入的复位信号延续两个机器周期以上的高电平时即为有效,用以完成单片机的复位初始化操作。
2.2.3.外接晶体端
XTAL1(19脚)和XTAL2(18脚)外接晶体引线端。当使用芯片内部时钟时,此二引线端用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。
主电源引脚高VCC和低VSS
VCC(40脚)+5V电源。
VSS(20脚)地线(GND)。     
以上是MCS-51单片机芯片40条引脚的定义及简单功能说明,读者可以对照实训电路找到相应引脚,在电路中查看每个引脚的连接使用。
2.3  51系列单片机的时序
805l的基本时序周期一条指令译码产生的一系列微操作信号在时间上有严格的先后次序,这种次序就是计算机的时序。其基本时序周期有如下四种。
●振荡周期:指振荡源的周期,若为内部产生方式,则为石英晶体的振荡周期。T振荡周期=1/fosc;
●时钟周期:(称S周期)为振荡周期的两倍,时钟周期=2倍的振荡周期T时钟周期=2* T振荡周期;
●机器周期:一个机器周期含6个时钟周期(S周期)。T机器周期=6*T时钟周期=12* T振荡周期=12/fosc; STC12CXX系列单片机有1个时钟周期/机器周期。
●指令周期:完成一条指令占用的全部时间。805l的指令周期含1—4个机器周期,其中多数为单周期指令,还有2周期和4周期指令。
2.4 . 1   智能最小系统的LED显示器接口
通过2个74LS595芯片将8位段码信号(a—h)和8位位码信号(a1—a8)串行转为并行信号驱动2个LED显示模块的8个LED数码灯,P2.1是a—h、a1—a8串行数据的输入端(SER),P2.2串行移位信号的SCLK输入端,P2.3是并输出信号的锁存端(RCLK)。这些信号由单片机软件生成。
file:///C:/Users/%E8%8B%97%E6%B2%B3%E6%B3%89/AppData/Local/Temp/msohtmlclip1/01/clip_image019.gif
图1-1-12 显示部分电路
在单片机系统中,通常用LED数码显示器来显示各种数字或符号。由于它具有显示清晰、亮度高、使用电压低、寿命长的特点,因此使用非常广泛。
LED显示器又称数码管,八段LED显示器由8个发光二极管组成。其中7个发光二极管构成字型“8”的各个笔画段,另一个小数点为dp发光二极管。LED显示器有两种不同的形式:一种是发光二极管的阳极都连在一起的,称之为共阳极LED显示器;另一种是发光二极管的阴极都连在一起的,称之为共阴极LED显示器。如图1-1-13所示。
共阴和共阳结构的LED显示器各笔划段名和安排位置是相同的。当二极管导通时,相应的笔划段发亮,由发亮的笔划段组合而显示各种字符。8个笔划段hgfedcba对应于一个字节(8位)的D7 D6 D5 D4 D3 D2 D1 D0,于是用8位二进制码就可以表示欲显示字符的字型代码。例如,对于共阴LED显示器,当公共阴极接地(为零电平),而阳极hgfedcba各段为0111011时,显示器显示"P"字符,即对于共阴极LED显示器,“P”字符的字形码是73H。如果是共阳LED显示器,公共阳极接高电平,显示“P”字符的字形代码应为10001100(8CH)。
file:///C:/Users/%E8%8B%97%E6%B2%B3%E6%B3%89/AppData/Local/Temp/msohtmlclip1/01/clip_image021.jpg
图1-1-13  LED数码管共阳极和共阴极示图
LED显示方式有动态显示和静态显示两种方式。本系统采用动态扫描显示接口电路,动态显示接口电路是把所有显示器的8个笔划段a-h同名端连在一起,而每一个显示器的公共极COM各自独立地受I/O线控制。CPU向字段输出口送出字型码时,所有显示器接收到相同的字型码,但究竟是哪个显示器亮,则取决于COM端。也就是说我们可以采用分时的方法,轮流控制各个显示器的COM端,使各个显示器轮流点亮。在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。
2.4. 2  音频放大电路
音频放大电路由放大三接管、蜂鸣器SPEAKER、限流电阻组成,音频信号的输出连接到单片机P3.3如图1-1-15所示当P3.2为低时,SPEAKER发声,声音脉宽不同发出的声音不同。图1-1-15 音频放大电路。
file:///C:/Users/%E8%8B%97%E6%B2%B3%E6%B3%89/AppData/Local/Temp/msohtmlclip1/01/clip_image023.jpgP3.2
图1-1-15 音频放大电路
第3章.关于DS18B20的介绍
DS18B20是美国DALLAS半导体公司继DS1820之后最新推出的一种改进型智能温度传感器。与传统的热敏电阻相比,他能够直接读出被测温度并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。可以分别在93.75 ms和750 ms内完成9位和12位的数字量,并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写,温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。因而使用DS18B20可使系统结构更趋简单,可靠性更高。他在测温精度、转换时间、传输距离、分辨率等方面较DS1820有了很大的改进,给用户带来了更方便的使用和更令人满意的效果。  
3.1.DS18B20简介
    1)独特的单线接口方式:DS18B20与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
    2)在使用中不需要任何外围元件。
    3)可用数据线供电,电压范围:+3.0~ +5.5 V
    4)测温范围:-55 ~+125 ℃。固有测温分辨率为0.5 ℃。
    5)通过编程可实现9~12位的数字读数方式。
    6)用户可自设定非易失性的报警上下限值。
    7)支持多点组网功能,多个DS18B20可以并联在惟一的三线上,实现多点测温。
(8)负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。
3.2单总线数字温度计硬件设计原理部分
file:///C:/Users/%E8%8B%97%E6%B2%B3%E6%B3%89/AppData/Local/Temp/msohtmlclip1/01/clip_image025.gif
3.3  DS18B20的封装及内部结构
file:///C:/Users/%E8%8B%97%E6%B2%B3%E6%B3%89/AppData/Local/Temp/msohtmlclip1/01/clip_image027.jpg
DS18B20引脚功能:1 GND为电源地
2、 DQ为数字信号输入/输出端
3、VDD为外接供电电源输入端(在寄生电源接线方式时接地)
DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
3.4 DS18B20的测温原理
    DS18B20的测温原理如图2所示,图中低温度系数晶振的振荡频率受温度的影响很小〔1〕,用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55 ℃所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在 -55 ℃ 所对应的一个基数值。减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图2中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,这就是DS18B20的测温原理。
另外,由于DS18B20单线通信功能是分时完成的,他有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作必须按协议进行。操作协议为:初始化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。
3.5DS18B20的工作时序
DS18B20的一线工作协议流程是:初始化→ROM操作指令→存储器操作指令→数据传输。其工作时序包括初始化时序、写时序和读时序,如图3a)(b)(c)所示。
file:///C:/Users/%E8%8B%97%E6%B2%B3%E6%B3%89/AppData/Local/Temp/msohtmlclip1/01/clip_image029.jpg
3.6.DS18B20与单片机的典型接口设计
以MCS51单片机为例,图3中采用寄生电源供电方式, P1 1口接单线总线为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管和89C51的P1 0来完成对总线的上拉〔2〕。当DS18B20处于写存储器操作和温度A/D变换操作时,总线上必须有强的上拉,上拉开启时间最大为10 μs。采用寄生电源供电方式是VDD和GND端均接地。由于单线制只有一根线,因此发送接收口必须是三态的。主机控制DS18B20完成温度转换必须经过3个步骤:初始化、ROM操作指令、存储器操作指令。假设单片机系统所用的晶振频率为12 MHz,根据DS18B20的初始化时序、写时序和读时序,分别编写3个子程序:INIT为初始化子程序,WRITE为写(命令或数据)子程序,READ为读数据子程序,所有的数据读写均由最低位开始,实际在实验中不用这种方式,只要在数据线上加一个上拉电阻4.7 kΩ,另外2个脚分别接电源和地。  
3.7 DS18B20的精确延时问题
    虽然DS18B20有诸多优点,但使用起来并非易事,由于采用单总线数据传输方式,DS18B20的数据I/O均由同一条线完成。因此,对读写的操作时序要求严格。为保证DS18B20的严格I/O时序,需要做较精确的延时。在DS18B20操作中,用到的延时有15 μs,90 μs,270 μs,540 μs等。
    只要用该函数进行大约15 μs×N的延时即可。有了比较精确的延时保证,就可以对DS18B20进行读写操作、温度转换及显示等操作。  
3.8 DS18B20工作原理及应用
DS18B20的温度检测与数字数据输出全集成于一个芯片之上,从而抗干扰力更强。其一个工作周期可分为两个部分,即温度检测和数据处理。在讲解其工作流程之前我们有必要了解18B20的内部存储器资源。18B20共有三种形态的存储器资源,它们分别是:
ROM 只读存储器,用于存放DS18B20ID编码,其前8位是单线系列编码(DS18B20的编码是19H),后面48位是芯片唯一的序列号,最后8位是以上56的位的CRC码(冗余校验)。数据在出产时设置不由用户更改。DS18B20共64位ROM。
RAM 数据暂存器,用于内部计算和数据存取,数据在掉电后丢失,DS18B20共9个字节RAM,每个字节为8位。第1、2个字节是温度转换后的数据值信息,第3、4个字节是用户EEPROM(常用于温度报警值储存)的镜像。在上电复位时其值将被刷新。第5个字节则是用户第3个EEPROM的镜像。第6、7、8个字节为计数寄存器,是为了让用户得到更高的温度分辨率而设计的,同样也是内部温度转换、计算的暂存单元。第9个字节为前8个字节的CRC码。EEPROM 非易失性记忆体,用于存放长期需要保存的数据,上下限温度报警值和校验数据,DS18B20共3位EEPROM,并在RAM都存在镜像,以方便用户操作。
3.9 控制器对18B20操作流程
1. 复位:首先我们必须对DS18B20芯片进行复位,复位就是由控制器(单片机)给DS18B20单总线至少480uS的低电平信号。当18B20接到此复位信号后则会在15~60uS后回发一个芯片的存在脉冲。
2. 存在脉冲:在复位电平结束之后,控制器应该将数据单总线拉高,以便于在15~60uS后接收存在脉冲,存在脉冲为一个60~240uS的低电平信号。至此,通信双方已经达成了基本的协议,接下来将会是控制器与18B20间的数据通信。如果复位低电平的时间不足或是单总线的电路断路都不会接到存在脉冲,在设计时要注意意外情况的处理。
3. 控制器发送ROM指令:双方打完了招呼之后最要将进行交流了,ROM指令共有5条,每一个工作周期只能发一条,ROM指令分别是读ROM数据、指定匹配芯片、跳跃ROM、芯片搜索、报警芯片搜索。ROM指令为8位长度,功能是对片内的64位光刻ROM进行操作。其主要目的是为了分辨一条总线上挂接的多个器件并作处理。诚然,单总线上可以同时挂接多个器件,并通过每个器件上所独有的ID号来区别,一般只挂接单个18B20芯片时可以跳过ROM指令(注意:此处指的跳过ROM指令并非不发送ROM指令,而是用特有的一条“跳过指令”)。ROM指令在下文有详细的介绍。
4. 控制器发送存储器操作指令:在ROM指令发送给18B20之后,紧接着(不间断)就是发送存储器操作指令了。操作指令同样为8位,共6条,存储器操作指令分别是写RAM数据、读RAM数据、将RAM数据复制到EEPROM、温度转换、将EEPROM中的报警值复制到RAM、工作方式切换。存储器操作指令的功能是命令18B20作什么样的工作,是芯片控制的关键。
5. 执行或数据读写:一个存储器操作指令结束后则将进行指令执行或数据的读写,这个操作要视存储器操作指令而定。如执行温度转换指令则控制器(单片机)必须等待18B20执行其指令,一般转换时间为500uS。如执行数据读写指令则需要严格遵循18B20的读写时序来操作。数据的读写方法将有下文有详细介绍。
若要读出当前的温度数据我们需要执行两次工作周期,第一个周期为复位、跳过ROM指令、执行温度转换存储器操作指令、等待500uS温度转换时间。紧接着执行第二个周期为复位、跳过ROM指令、执行读RAM的存储器操作指令、读数据(最多为9个字节,中途可停止,只读简单温度值则读前2个字节即可)。
3.10 DS18B20芯片与单片机的接口
file:///C:/Users/%E8%8B%97%E6%B2%B3%E6%B3%89/AppData/Local/Temp/msohtmlclip1/01/clip_image031.jpg
第4章.程序及效果展示
4.1 温度监测51单片机程序
#include<reg51.h>
#include<intrins.h>
#defineuchar unsigned char
#defineuint   unsigned int
sbitDQ=P1^4;      //定义通信端口
sbitser=P2^1;      //LED显示 595数据输入
sbitsrclk=P2^2;
sbitrclk=P2^3;
sbitP10=P3^2;     //蜂鸣器报警引脚,P10=1时报警
uchar code
LED[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};//0123456789+-
Uchar code
LED_dot[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};     //带小数点
ucharidata T[5]={0,0,0,0,0};
unsignedchar seg,QQ=0,weima=0x0ef;
unsignedchar FLAG=0;
uinttemph=31;        //初始上限值
uinttempl=25;        //初始下限值
//--------------------------------------------------------------
voiddelayx_us(unsigned char i) //11*x+12
{
while(i--);
}
voiddelay1_us()//1.45us
{_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();
}
voiddelay(unsigned int x)
{unsignedint y=10000    ;
while(x--)
{
while(y--);
y=10000;
}
}
//---------------------------------------------------------------//
void   outbyte(uchar a,b)
{uchar j;
   for(j=0;j<8;j++)
   {      if(a&0x80)  ser=1;  else ser=0;
            a=a<<1;
            srclk=0;
            srclk=1;
    }
    for(j=0;j<8;j++)
   {       if(b&0x80)  ser=1; else  ser=0;
            b=b<<1;
            srclk=0;
            srclk=1;
    }
            rclk=0;
            rclk=1;
         }
ucharInit_DS18B20(void)
{ unsignedchar flag=0;
  DQ=0;    //单片机将DQ拉低
  delayx_us(250); //精确延时 480us ~960us
  delayx_us(250);
  DQ=1;   //拉高总线
  delayx_us(30);     //大于15US~60US
  flag=DQ;     //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
  delayx_us(240);
  DQ=1;
  return(flag);
}
ucharReadBit(void)
{bit s;
  DQ=1;           //拉高电平,准备启动读时序
delay1_us();
DQ=0;
delay1_us();
delay1_us();
DQ=1;               //在15US内停止低电平
delay1_us();
delay1_us();
delay1_us();
delay1_us();
delay1_us();
delay1_us();
delay1_us();
s=DQ;           //读取1位数据
delayx_us(60);          //读时序不能少于60us
return(s);
}
ucharReadOneChar(void)
{
unsignedchar i,dat=0;
unsignedchar     j;
for(i=0;i<8;i++)
{j=ReadBit();
  dat=(j<<7)|(dat>>1);
}
return(dat);
}
voidWriteOneChar(unsigned char dat)
{
unsignedchar i=0;
bit n;
for (i=0;i<8;i++)
{   DQ=1; //拉高电平,准备启动写时序
  delay1_us();
  n=dat&0x01;
  dat>>=1;       //取下一位,由低到高
  if(n)       //写1
    {
      DQ=0;       //拉低电平  15US内释放总线
     delay1_us();
     delay1_us();
      DQ=1;       //写1
      delayx_us(60);    //整个时序不能低于60US
     }
  else        //写0
    {
     DQ=0;
     delayx_us(60);  //保持低电平60us~120us
     DQ=1;
     delay1_us();
     }
}
}
floatReadTemperature(void)
{
floatvalue;
unsignedchar a, b;
unsignedint tempInt=0,tempdot=0,tempwhole=0;
Init_DS18B20();
WriteOneChar(0xcc);
WriteOneChar(0x44);
delay(12);
Init_DS18B20();
WriteOneChar(0xcc);
WriteOneChar(0xbe);
a=ReadOneChar();
b=ReadOneChar();
tempInt=b;
tempdot=a;
tempwhole=tempInt*256+tempdot;
value=tempwhole*0.0625;//基本单位为0.0625
return(value);
}
voidtime0() interrupt 1 using 2
{TH0=(65536-4000)/256;
  TL0=(65536-4000)%256;
  if(QQ!=2)
     { seg=LED[T[QQ]];
      outbyte(weima,seg);   }
   else
    { seg=LED_dot[T[QQ]];
      outbyte(weima,seg);   }
   QQ++;
    if(QQ>=4)
    { weima=0x0ef;
     QQ=0;
    }
    else weima=(weima<<1)|0x01;
}
main()
{floattemperature;
int m,n ;
uchar i;
P10=1;
   TMOD=0x21;
   TH0=(65536-4000)/256;
   TL0=(65536-4000)%256;
   TL1=0xfd;TH1=0Xfd;
   SCON=0x50;PCON=0x00;
   TR1=1;
   EA=1;
   ET0=1;
   TR0=1;
while(1)
{
temperature=ReadTemperature();//读温度
m=temperature;
if(m>=31)P10=0;    //温度高于或等于上限值,报警
T[4]=(m%100)/100;
T[3]=(m%100)/10;
T[2]=m%10;
n=(temperature-m)*100+0.5;
T[1]=n/10;
T[0]=n%10;
i=0;
SBUF=0x46;
while(TI==0);
TI=0;
SBUF=0x44;
while(TI==0);
TI=0;
{SBUF=T[3]|0x30;
while(TI==0);
TI=0;
SBUF=T[2]|0x30;
while(TI==0);
TI=0;
SBUF=0x2e;
while(TI==0);                        
TI=0;
SBUF=T[1]|0x30;
while(TI==0);
TI=0;
if(m<25)P10=0;     //温度低于下限值,报警
elseP10=1;         
}
}
}
file:///C:/Users/%E8%8B%97%E6%B2%B3%E6%B3%89/AppData/Local/Temp/msohtmlclip1/01/clip_image032.gif4.2测温程序流程框图
第5章.调试过程
                                   ——软件、硬件调试
1、我们组在前期分工时,利用课余时间焊电路板(电路图见硬件部分)焊出了我们的第一块板子;
2、下一步的工作就是软件部分,简单点就是编写程序。刚拿到题目时,老师给了我们一些相关的资料,我们组花了一天时间先把这些资料研究了下,还是没有头绪修改程序。经过老师给我们的思路,我们组集体出动到图书馆翻阅关于51系列软件编程的相关资料书籍,程序编写出来了。
3、我们使用Keil uVision3进行程序的编写,通过单片机stc-isp-v4.79下载程序到我们焊出的第一块板子,在我们下载程序后,并没有实现出我们的所要见到的效果。在LED上显示95.54。而且始终数字不变,这点让我们很郁闷。
4、我们反复的调试,我们检查DS18B20的数据输入/输出DQ端口与单片机的P1.4端口相连是否正确,将传感器DS18B20的地线和外接供电电源输入端口分别接在单片机的地线端和+5V电源端口测试电源供电情况。
5、先用万用表检查传感器DS18B20的第3脚是否与电源相连,1脚是否与地相接,结果无误。经过一上午的钻研,还是没有结果。我们从程序及电路板焊的正确与否,寻找问题,但还是没有头绪。我们怀疑板子上的芯片可能时间久了有些可能烧坏了;无奈,我们选择了再焊一块板子。
6、第二块板子因为有第一块板子的经验,很快就焊接出来了,焊接工艺还是相当不错的,但结果还是无法实现效果,我们在经过讨论后,决定请教老师,在老师帮我们仔细分析下,用了两三节课左右的时间才出现预期的效果,让我们很是激动。
7、在老师的指导下调试过程:
我们调试了测试了波形,发现DS18B20没有工作。我们又用万用表测试了传感器三只脚的电压,发现我们第一块焊的板子显示电压正常,第二块板子,都显示5V,经检查,发现地线接错了,接入了空脚的一端,我们又将板子的线路重新改装了一下,效果显示的很正常,就是报警声音略微低了一些,老师让我们改变下程序的关于声音的送入时长。
8、第一块板子,我们判断可能是DS18B20烧坏了,于是,我向班级同学借了一个DS18B20重新焊接,皇天不负有心人,我们两块板子效果都实现了。当温度低于设定的25.00℃时,会报警长鸣,当温度高于31.00℃时,会报警,设置这两个温度点是充分考虑到现在的室温与人体的温度,便于通过手上热传导控温。
9、我们还做了录下了一小段视频作为纪念。总体系统调试成功,设计完成。感谢老师的指导和小组成员的共同努力!
第6章效果展示
6.1实现效果
数字温度传感器DS18B20测温,使用单个DS18B20采集环境温度,并使用四位数码管显示温度结果,实现了测温范围在零下10度到50度,可设高低温报警的效果,当温度低于25度,或高于31度的时候,蜂鸣器就会发出声音,实现报警,精确度为0.01,DS18B20采用外部电源供电方式,为保证在有效的时钟周期内提供足够的电流,使用了一个4.7K的电阻,进行相应的控制。
file:///C:/Users/%E8%8B%97%E6%B2%B3%E6%B3%89/AppData/Local/Temp/msohtmlclip1/01/clip_image034.jpg6.2实物效果图效果图
file:///C:/Users/%E8%8B%97%E6%B2%B3%E6%B3%89/AppData/Local/Temp/msohtmlclip1/01/clip_image036.jpgfile:///C:/Users/%E8%8B%97%E6%B2%B3%E6%B3%89/AppData/Local/Temp/msohtmlclip1/01/clip_image038.jpgfile:///C:/Users/%E8%8B%97%E6%B2%B3%E6%B3%89/AppData/Local/Temp/msohtmlclip1/01/clip_image040.jpg
附一:硬件原理图
file:///C:/Users/%E8%8B%97%E6%B2%B3%E6%B3%89/AppData/Local/Temp/msohtmlclip1/01/clip_image042.gif
附二:材料清单
  
Part Type
  
Designator
Footprint
 
Part Type
Designator
Footprint
 
S3
AJ6
 
10k
R12
805
 
S4
AJ6
 
10k
R16
805
 
S1
AJ6
 
10k
R15
805
 
S2
AJ6
 
10uF
C17
LS-100/16
 
S7
AJ6
 
10uF
C18
LS-100/16
 
S8
AJ6
 
10uF
C14
LS-100/16
 
S6
AJ6
 
10uF
C15
LS-100/16
 
S5
AJ6
 
10uF
C16
LS-100/16
 
L7
LJQ
 
10uF
C3
LS-100/16
 
L6
LJQ
 
11.0592MHZ
Y1
XTAL1
 
L9
LJQ
 
20P
C2
RAD0.1
 
L11
LJQ
 
20P
C1
RAD0.1
 
L10
LJQ
 
32.768KHZ
Y2
RAD0.1
 
L2
LJQ
 
36
R25
805
 
L1
LJQ
 
36
R24
805
 
L3
LJQ
 
36
R27
805
 
L5
LJQ
 
36
R26
805
 
L4
LJQ
 
36
R23
805
 
L21
LJQ
 
36
R20
805
 
L20
LJQ
 
36
R21
805
 
L19
LJQ
 
36
R22
805
 
L22
LJQ
 
74LS595
U9
DIP-16
 
L25
LJQ
 
74LS595
U8
DIP-16
 
L24
LJQ
 
128x64lLCD液晶显示器插头
J4
SIP24
 
L23
LJQ
 
430
R100
805
 
L14
LJQ
 
9015
Q6
TO-126
 
L13
LJQ
 
9015
Q9
TO-126
 
L12
LJQ
 
9015
Q8
TO-126
 
L15
LJQ
 
9015
Q7
TO-126
 
L18
LJQ
 
9015
Q5
TO-126
 
L17
LJQ
 
9015
Q2
TO-126
 
L16
LJQ
 
9015
Q1
TO-126
3
RD
AXIAL0.6
 
9015
Q3
TO-126
4K3
R33
805
 
9015
Q4
TO-126
4K3
R34
805
 
BATTERY
BT1
BATTERY
4K3
R5
805
 
CON2
JD
SIP2
4K3
R35
805
 
CON20
J3
SIP20
4K3
R29
805
 
CON20
J2
SIP20
4K3
R28
805
 
DB9
RS232
DB9/F
4K3
R30
805
 
DS18b20
 
TO-126
4K3
R32
805
 
DS1302
U10
DIP8
4K3
R31
805
 
MAX232CPE(16)
U5
DIP-16
4K7
R111
805
 
POT2
RP
TO-126
10K
R18
805
 
SM410561K
D14
SM41056K
10K
R10
805
 
SM410561K
D15
SM41056K
10K
R11
805
 
SPEAKER
LS1
RB.3/.6
10K
R1
AXIAL0.4
 
STC12C5A60S2
U11
DIP-40
10k
R17
805
 
电源
J1
POWER
10k
R13
805
 
红外头
U12
SIP4
10k
R14
805
 
 DS18B20
 
 

在两周的实训课中,我们组成功完成了实训设计任务——基于DS18B20的简易温度显示报警控制设计,我们在完成这份报告时心情激动万分。
从一开始的选题、资料的查找,材料的整理,在顾老师的指导下,我们全组同学认真学习、仔细分析,遇到问题及时商量查找资料,当查找资料后还有不明白的地方及时请教老师。顾老师在我们开始选题时,给我们讲解了每一个课题的大体方案及所需元器件,我们经过商量,选择了我们已有的元器件的这个课题,在我们选择课题后,顾老师就智能电子技术实践技术教材给我们做了详细的讲解;我们受益匪浅。非常感谢顾老师精心的指导、组员们的认真努力。在单片机的学习方面我们更进一步,在两周的实训中,我们对keil软件的编写程序更加熟练,我们又重温了焊接电路板的技术,感觉很是不错。
感谢和我一起努力奋斗的同学们,因为你们,我的学习和生活过得精彩而又充实!
感谢在电子082班一起度过美好时光的同学们,并一起度过那些令人难忘的岁月!
最后,感谢所有关心我、帮助过我的老师、同学和朋友!
参考文献
[1] 智能电子技术实践教程 刘昌珍  无锡商院:电子工程系 2009
[2]Protel199SE原理图与PCB设计教程 无锡:电子工业出版社 2009
[3] DS18_b20.cn.pdf  单数字温度传感器
[4] 徐爱钧.单片机高级语言C51 应用程序设计[M]. 北京:电子工业出版社,2002.
[5] 谢自美.电子线路设计.实验.测试(第二版) [M].武汉:华中科技大学出版社,2000.
[6] 江国强.现代数字逻辑电路.北京:电子工业出版社,2002 .
[7] 张勇.PROTEL 99SE 电路设计技术入门与应用(第一版).北京:电子工业出版社
[8] 樊昌信.通信原理(第五版)[M].北京:国防工业出版社,2001 .

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2017-11-14 05:37 | 只看该作者
好资料,51黑有你更精彩!!!
回复

使用道具 举报

板凳
ID:605453 发表于 2019-8-30 17:08 | 只看该作者
为什么图片看不了啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表