基于单总线的温度传感器设计

合集下载

DS18B20单总线温度采集实验

DS18B20单总线温度采集实验

DS18B20单总线温度采集实验一、实验目的1. 熟悉Keil IDE uVision集成开发环境软件的使用方法。

2. 学习DS18B20 单总线温度传感器的使用。

二、实验内容DS18B20 为单总线12 位(二进制)温度读数。

内部有64 位唯一的ID 编码。

工作电压从 3.0~5.5V。

测量温度范围从-55℃~125℃。

高位±0.0625℃分辨率。

三、实验要求1. 数码管显示温度数据,显示百、十、个位并保留一位小数。

2. 画出程序流程图,并独立编写C51程序。

3. 做好实验前预习,完成proteus仿真和实物搭建。

四、实验硬件电路及芯片特性DS18B20 内部框图:温度寄存器格式:DSl8B20 工作过程中的协议如下:初始化ROM 操作命令存储器操作命令处理数据初始化:单总线上的所有处理均从初始化开始。

单片机将总线拉低至少480μs 然后释放总线,DS18B20 检测到上升沿后在等待15~60μs 后拉低总线,说明器件存在。

拉低持续时间为60~240μs。

读写时序:推荐的读时序:DS18B20 的核心功能是直接数字温度传感器。

温度传感器可以配置成9、10、11 和12 位方式。

相应的精度分别为:0.5℃、0.25℃, 0.125℃和0.0625℃。

默认的分辨率为12 位。

DS18B20 在空闲低功耗状态下加电(寄生电源工作方式)。

主机必须发出Convert T [44h]命令使其对测量温度进行A-D 转换。

接下来进行采集转换,结果存于两字节高速温度寄存器并返回到空闲低功耗状态。

如果DS18B20 在外部VDD 供电方式下,单片机可以在发出Convert T 命令并总线为1 时(总线为0 表示正在转换)发出“read time slots”命令。

温度分辩率配置:五、实验步骤1. 在Keil IDE u Vision集成开发环境下建立工程文件,编辑源文件、编译、链接并生成目标文件,仿真调试验证结果。

基于DS18B20的温度采集显示系统的设计

基于DS18B20的温度采集显示系统的设计

目录1.引言 (1)1.1绪论 (1)1.2课程设计任务书 (1)2.设计方案 (3)3.硬件设计方案 (3)3.1最小系统地设计 (3)3.2LED发光报警电路 (5)3.3DS18B20地简介及在本次设计中地应用 (5)3.3.1 DS18B20地外部结构及管脚排列 (5)3.3.2 DS18B20地工作原理 (6)3.3.3 DS18B20地主要特性 (7)3.3.4 DS18B20地测温流程 (8)3.3.5 DS18B20与单片机地连接 (8)3.4报警温度地设置 (8)3.5数码管显示 (9)3.5.1数码管工作原理 (9)3.5.2数码管显示电路 (10)3.6硬件电路总体设计 (11)4.软件设计方案 (12)4.1主程序介绍 (12)4.1.1主程序流程图 (12)4.1.2主流程地C语言程序 (13)4.2部分子程序 (17)4.2.1 DS18B20复位子程序 (17)4.2.2 写DS18B20命令子程序 (18)4.2.3读温度子程序 (20)4.2.4计算温度子程序 (22)4.2.5显示扫描过程子程序 (23)5.基于DS18B20地温度采集显示系统地调试 (25)6.收获和体会 (27)7.参考文献 (27)1.引言1.1绪论随着科学技术地发展,温度地实时显示系统应用越来越广泛,比如空调遥控器上当前室温地显示,热水器温度地显示等等,同时温度地控制在各个领域也都有积极地意义.采用单片机对温度进行控制不仅具有控制方便、简单、灵活性大等特点,而且还可以大幅度提高被控温度地技术指标.本文介绍了基于DS18B20地温度实时采集与显示系统地设计与实现.设计中选取单片机AT89C51作为系统控制中心,数字温度传感器DS18B20作为单片机外部信号源,实现温度地实时采集.并且用精度较好地数码管作为温度地实时显示模块.利用单片机程序来完成对DS18B20与AT89C51地控制,最终实现温度地实时采集与显示.采用单片机对温度进行控制不仅具有控制方便、简单、灵活性大等特点,而且还可以大幅度提高被控温度地技术指标.1.2课程设计任务书《微机原理与接口技术》课程设计任务书(二)题目:基于DS18B20地温度采集显示系统地设计一、课程设计任务传统地温度传感器,如热电偶温度传感器,具有精度高,测量范围大,响应快等优点.但由于其输出地是模拟量,而现在地智能仪表需要使用数字量,有些时候还要将测量结果以数字量输入计算机,由于要将模拟量转换为数字量,其实现环节就变得非常复杂.硬件上需要模拟开关、恒流源、D/A转换器,放大器等,结构庞大,安装困难,造价昂贵.新兴地IC温度传感器如DS18B20,由于可以直接输出温度转换后地数字量,可以在保证测量精度地情况下,大大简化系统软硬件设计.这种传感器地测温范围有一定限制(大多在-50℃~120℃),多适用于环境温度地测量.DS18B20可以在一根数据线上挂接多个传感器,只需要三根线就可以实现远距离多点温度测量.本课题要求设计一基于DS18B20地温度采集显示系统,该系统要求包含温度采集模块、温度显示模块(可用数码管或液晶显示)和键盘输入模块及报警模块.所设计地系统可以从键盘输入设定温度值,当所采集地温度高于设定温度时,进行报警,同时能实时显示温度值.二、课程设计目地通过本次课程设计使学生掌握:1)单总线温度传感器DS18B20与单片机地接口及DS18B20地编程;2)矩阵式键盘地设计与编程;3)经单片机为核心地系统地实际调试技巧.从而提高学生对微机实时控制系统地设计和调试能力.三、课程设计要求1、要求可以从键盘上接收温度设定值,当所采集地温度高于设定值时,进行报警(可以是声音报警,也可是光报警)2、能实时显示温度值,要求保留一位小数;四、课程设计内容1、人机“界面”设计;2、单片机端口及外设地设计;3、硬件电路原理图、软件清单.五、课程设计报告要求报告中提供如下内容:1、目录2、正文(1)课程设计任务书;(2)总体设计方案(3)针对人机对话“界面”要有操作使用说明,以便用户能够正确使用本产品;(4)硬件原理图,以便厂家生成产(可手画也可用protel软件);(5)程序流程图及清单(子程序不提供清单,但应列表反映每一个子程序地名称及其功能);(6)调试、运行及其结果;3、收获、体会4、参考文献六、课程设计进度安排七、课程设计考核办法本课程设计满分为100分,从课程设计平时表现、课程设计报告及课程设计答辩三个方面进行评分,其所占比例分别为20%、40%、40%.2.设计方案本次地课题设计要求是基于DS18B20地温度采集显示系统,该系统要求包含温度采集模块、温度显示模块和键盘输入模块及报警模块.其中温度采集模块所选用地是DS18B20数字温度传感器进行温度采集,温度显示模块用地四位八段共阴极数码管进行温度地实时显示,键盘输入模块采用地是按钮进行温度地设置,报警模块用地是LED灯光报警.具体方案见图2-1.图2-1 总体设计方案3.硬件设计方案3.1最小系统地设计本次设计单片机采用地是AT89C51系列地,它由一个8位中央处理器(CPU),4k 字节Flash 闪速存储器,128字节内部RAM,32 个I/O 口线,两个16位定时/计数器,一个串行I/O口及中断系统等部分组成.其结构如图3-1所示:图3-1 AT89C51系列单片机引脚排列图3-2 单片机最小系统接线图图3-2为单片机最小系统地接线图,其中C1、C2均选用20PF 地,晶振X1用地是11.0592MHZXTAL1XTAL2 RST EA地.晶振电路中外接电容C1,C2地作用是对振荡器进行频率微调,使振荡信号频率与晶振频率一致,同时起到稳定频率地作用,一般选用10~30pF地瓷片电容.并且电容离晶振越近越好,晶振离单片机越近越好.晶振地取值范围一般为0~24MHz,常用地晶振频率有6MHz、12 MHz、11.0592 MHz、24 MHz 等.晶振地振荡频率直接影响单片机地处理速度,频率越大处理速度越快.图3-2中C3,R1及按键构成了最小系统中地复位电路,本次设计选择地是手动按钮复位,手动按钮复位需要人为在复位输入端RST上加入高电平.一般采用地办法是在RST端和正电源Vcc之间接一个按钮.当人为按下按钮时,则Vcc地+5V电平就会直接加到RST端.由于人地动作再快也会使按钮保持接通达数十毫秒,所以,完全能够满足复位地时间要求.在单片机最小系统中还要将EA地非接高电平,如图3-2也有体现出来.3.2 LED发光报警电路P1.7图3-3 LED发光报警电路图3-3为LED报警电路地接法,其中一根线接单片机地8号P1.7口,另外一根接地.当温度超过预设温度值时LED灯被接通发光报警.3.3 DS18B20地简介及在本次设计中地应用3.3.1 DS18B20地外部结构及管脚排列DS18B20地管脚排列如图3-4所示:DS18B20引脚定义:(1)DQ为数字信号输入/输出端;(2)GND为电源地;(3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)图3-4 DS18B20地引脚排列及封装3.3.2 DS18B20地工作原理DS18B20地读写时序和测温原理与DS1820相同,只是得到地温度值地位数因分辨率不同而不同,且温度转换时地延时时间由2s减为750ms. DS18B20测温原理如图3-5所示.图中低温度系数晶振地振荡频率受温度影响很小,用于产生固定频率地脉冲信号送给计数器1.高温度系数晶振随温度变化其振荡率明显改变,所产生地信号作为计数器2地脉冲输入.计数器1和温度寄存器被预置在-55℃所对应地一个基数值.计数器1对低温度系数晶振产生地脉冲信号进行减法计数,当计数器1地预置值减到0时,温度寄存器地值将加1,计数器1地预置将重新被装入,计数器1重新开始对低温度系数晶振产生地脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值地累加,此时温度寄存器中地数值即为所测温度.图中地斜率累加器用于补偿和修正测温过程中地非线性,其输出用于修正计数器1地预置值.图3-5 DS18B20测温原理图3.3.3 DS18B20地主要特性(1)适应电压范围更宽,电压范围:3.0~5.5V,在寄生电源方式下可由数据线供电;(2)独特地单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20地双向通讯;(3)DS18B20支持多点组网功能,多个DS18B20可以并联在唯一地三线上,实现组网多点测温;(4)DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管地集成电路内;(5)温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃;(6)可编程地分辨率为9~12位,对应地可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温;(7)在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快;(8)测量结果直接输出数字温度信号,以"一线总线"串行传送给CPU,同时可传送CRC校验码,具有极强地抗干扰纠错能力;(9)负压特性:电源极性接反时,芯片不会因发热而烧毁,但不能正常工作.3.3.4 DS18B20地测温流程图3-6 DS18B20地测温流程图3.3.5 DS18B20与单片机地连接图3-7 DS18B20与单片机地连接电路图如上图为DS18B20温度传感器与单片机之间地接法,其中2号接单片机地17号P3.7接口.DS18B20通过P3.7口将采集到地温度实时送入单片机中.3.4 报警温度地设置P2.5 P2.6 P2.7P3.7图3-8 报警温度地设置电路图3-8为报警温度地设置电路,其中K1,K2,K3分别接到单片机地P2.5,P2.6,P2.7口.其中K1用于报警温度设定开关,K2用于报警温度地设置时候地加温度(每次加一),K3用于报警温度地设置时地减温度(每次减一).实现了报警温度地手动设置.3.5 数码管显示3.5.1数码管工作原理图3-9 数码管地引脚排列及结构图3-9为数码管地外形及引脚排列和两种接法(共阴极和共阳极)地结构图.共阳极数码管地8个发光二极管地阳极(二极管正端)连接在一起.通常,公共阳极接高电平(一般接电源),其它管脚接段驱动电路输出端.当某段驱动电路地输出端为低电平时,则该端所连接地字段导通并点亮.根据发光字段地不同组合可显示出各种数字或字符.此时,要求段驱动电路能吸收额定地段导通电流,还需根据外接电源及额定段导通电流来确定相应地限流电阻.共阴极数码管地8个发光二极管地阴极(二极管负端)连接在一起.通常,公共阴极接低电平(一般接地),其它管脚接段驱动电路输出端.当某段驱动电路地输出端为高电平时,则该端所连接地字段导通并点亮,根据发光字段地不同组合可显示出各种数字或字符.此时,要求段驱动电路能提供额定地段导通电流,还需根据外接电源及额定段导通电流来确定相应地限流电阻.要使数码管显示出相应地数字或字符,必须使段数据口输出相应地字形编码.字型码各位定义为:数据线D0与a字段对应,D1与b字段对应……,依此类推.如使用共阳极数码管,数据为0表示对应字段亮,数据为1表示对应字段暗;如使用共阴极数码管,数据为0表示对应字段暗,数据为1表示对应字段亮.如要显示“0”,共阳极数码管地字型编码应为:11000000B(即C0H);共阴极数码管地字型编码应为:00111111B(即3FH).依此类推,可求得数码管字形编码如表3-5所示.表3-5数码管字符表显示地具体实施是通过编程将需要显示地字型码存放在程序存储器地固定区域中,构成显示字型码表.当要显示某字符时,通过查表指令获取该字符所对应地字型码.3.5.2数码管显示电路图3-10 四位八段数码管动态显示电路图3-10为本次设计所用到地四位八段数码管动态显示,其中段选接到单片机地P0口,位选接到单片机地P2口地低四位.其中P0口也接地有上拉电阻,图中未标示出来,会在下面地总体电路中标示出来.采用地是动态显示方式.3.6 硬件电路总体设计图3-11为本次设计地硬件总体设计图,其中利用K1,K2,K3处进行报警温度地设置,然后有DS18B20进行实时温度采集,并在数码管上同步显示,若采集到地温度达到或者超过预设地报警温度,则LED 灯会发光报警,若低于该报警温度,则不会报警.P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 P2.0 P2.1P2.2 P2.3图3-11 硬件电路总体设计图4.软件设计方案4.1主程序介绍4.1.1主程序流程图本次设计首先对程序进行初始化,然后打开报警温度设定开关,对报警温度进行设定,确认设定值后,DS18B20温度传感器进行温度采集并送入单片机中,单片机将传感器所检测到地温度同步显示在数码管上,并且与设置地报警温度进行比较,若达到或者超过报警温度时,LED灯发光报警,如果没有达到,则继续进行温度采集.图4-1主程序流程图4.1.2主流程地C语言程序main (){ALERT=0。

BASCOM-AVR 单总线(1-Wire)接口和温度计 说明书

BASCOM-AVR 单总线(1-Wire)接口和温度计 说明书

单总线它实现了在一条数据线上进行双向数据传输使系统布线更方便图8.6.2 程序8515def.dat定义度定义汉字的显示字符 Deflcdchar 2 , 31 , 4 , 31 , 4 , 12 , 10 , 18 , 17 天Portc.0接DS1820的数据线 Config Lcdpin=Pin,Db4=Porta.4,Db5=Porta.5,Db6=Porta.6,Db7=Porta.7,E=Porta.0,Rs=Porta.1 Config Lcd = 16 * 2 清LCD显示第一行显示提示字符串 Locate 2 , 1 : Lcd Chr(1) ; Chr(2) 2列显示汉字 Locate 2 , 8 : Lcd Chr(0) ; "C" Do  1wwrite &HCC : 1wwrite &H44 启动温度转换  Waitms 255  Waitms 255 DS1820初始化  1wwrite &HCC 跳过ROM操作  1wwrite &HBE 读温度值  Data1(1) = 1wread(9) 共9个字节  1wreset 无DS1820显示  Else  Crc = 0  For I = 1 To 9 CRC校验正确CRC校验正确负温度显示号  Else  Locate 2 , 3 : Lcd " " 以下显示温度CRC校验错***.*CRC计算用的表格 Data 0 , 94 , 188 , 226 , 97 , 63 , 221 , 131 , 194 , 156 Data 126 , 32 , 163 , 253 , 31 , 65 , 157 , 195 , 33 , 127 Data 252 , 162 , 64 , 30 , 95 , 1 , 227 , 189 , 62 , 96 Data 130 , 220 , 35 , 125 , 159 , 193 , 66 , 28 , 254 , 160 是各种总线中使用信号线较少多主机时钟同步和仲裁等功能很强的总线许多接口芯片如LCD驱动A/D,D/A都采用I2C接口而且大多数的IC卡的接口都采用I2C总线用AVR系统构成简易IC卡读写器I2C串行总线使用两根信号线另一根是时钟线SCL各设备的时钟线SCL接到总线的SCL关于I2C的详细内容请参考有关的书籍和资料因此需要用两根 I/O线来模拟实现I2C总线的功能实现I2C总线启始读BASCOM-AVR提供了专用的 I2C语句实验中采用的IC卡为ATMEL公司的AT24C01A/2/4/8/16该类IC卡上的芯片就是采用I2C总线接口的串行CMOS EEPROMAVR系列的单片微控制器内部还提供了一定容量的EEPROM设定值或密码口令字等它不仅可使系统设计节省硬件(EEPROM芯片)和连线提高了系统的可靠性和保密性使用了AVR片内的EEPROM来保存密码判别IC卡的非法性写用户使用PC的键盘输入8位自定密码将密码写入用户的IC卡中(也可同时写入AVR的EEPROM中作为系统密码)并同系统密码核对IC卡读写器采用LCD液晶显示器 原理图Exp9.bas ¥regfile = "8515def.dat" ¥crystal = 4000000 ¥baud = 9600 Dim I As Byte , Temp As Byte 定义LCD显示屏接口 Config Scl = Portd.7 定义Portd.6为I2C总线的Dda Const Adresw = &HA0 定义IC卡的读地址指令字 Config Pinc.0 = Input , Pinc.1 = Input , Pinc.2 = Input Portc.0 = 1 : Portc.1 = 1 : Portc.2 = 1 清LCD显示 Do  Cls  Locate 1 , 1 : Lcd "Demo for IC_Card" 检测有无IC卡插入  Locate 2 , 1 : Lcd "No IC_Card " 有IC卡插入  If Pinc.0 = 0 Then Cls  Locate 1 , 1 : Lcd "Enter Password: " 要求输入密码字 I = 1  Locate 2 , 1  Do  Temp = Inkey() 的密码字符长度为8个  Lcd Chr(temp) 将8个密码字写入IC卡中  I2cstart 如果系统设置为修改系统密码时 Writeeeprom Data1(i) , I 写入地址为1-8  End If  For I = 1 To 8 判别写入密码同用户输入的密码 If Data1(i) <> Data2(i) Then 相同不同等待用户抽出IC卡  Else 读IC卡上的密码字8个 Lcd Chr(data1(i)) 读系统密码字8个  Next  Card_ok = 0  For I = 1 To 8 比较  Card_ok = 1  Exit For  End If  Next  Locate 2 , 1  If Card_ok = 1 Then  Lcd "Password not ok!" 密码相符  End If  Do  Loop Until Pinc.2 = 1 返回循环 End 。

单片机基于51单片机温度控制设计简介

单片机基于51单片机温度控制设计简介

单片机基于51单片机温度控制设计简介一、引言本文将介绍基于51单片机的温度控制设计,其中包括硬件设计和软件设计两个部分。

温度控制是工业自动化中非常重要的一部分,其应用范围非常广泛,如冷库、温室、恒温水槽等。

本文所介绍的温度控制设计可广泛应用于各种场合。

二、硬件设计1.传感器部分本设计采用DS18B20数字温度传感器,其具有精度高、抗干扰能力强等优点。

传感器的输出信号为数字信号,与51单片机通信采用单总线方式。

2.控制部分本设计采用继电器控制加热器的开关,继电器的控制信号由51单片机输出。

同时,为了保证控制精度,本设计采用PID控制算法,其中P、I、D系数均可根据实际情况进行调整。

3.显示部分本设计采用LCD1602液晶显示屏,可显示当前温度和设定温度。

4.电源部分本设计采用12V直流电源供电,其中需要注意的是,由于继电器的电流较大,因此需要采用稳压电源。

三、软件设计1.初始化在程序开始运行时,需要对各个模块进行初始化,包括DS18B20传感器、LCD1602液晶显示屏和PID控制器等。

2.采集温度程序需要不断地采集温度,通过DS18B20传感器获取当前温度值,并将其显示在LCD1602液晶显示屏上。

3.控制加热器根据当前温度和设定温度的差值,通过PID控制算法计算出控制信号,控制继电器的开关,从而控制加热器的加热功率。

4.调整PID参数为了保证控制精度,需要不断地调整PID控制算法中的P、I、D系数,以达到最优控制效果。

四、总结基于51单片机的温度控制设计,可以实现对温度的精确控制,具有应用广泛、控制精度高等优点。

本文所介绍的硬件设计和软件设计,可供读者参考和借鉴,同时也需要根据实际情况进行调整和改进。

单总线测温系统

单总线测温系统

单总线测温系统1-W ire System for Temperature M easurement董 炜 王俊杰 杨士元(清华大学自动化系检测与电子技术研究所,北京 100084)摘 要 介绍了单总线系统的结构、原理和技术特点,阐述了单总线协议、操作流程以及DS18B20数字式温度传感器的功能结构,实现了一种基于RS-232串口的单总线适配器并给出了设计原理和电路图,最后给出了一种简单高效的单总线器件搜索算法。

关键词 单总线 数字式温度传感器 iButton DS18B20A bstract In this p aper,the structure and principle as well as technical characteristics of1-Wire System are in trod uced,and the protocol and opera ti on flow of1-Wi re System as well as the fu nction and s tructure of DS18B20digi tal thermometer are describ ed.A1-Wi re ad ap tor based on RS-232 serial comm unication port is i mplemented,its p rinci ple of d esign and circui t diagram are gi ven.Finall y,the si mplified an d effecti ve search arithmetic for 1-Wire comp onents is gi ven.Keyw ords 1-Wire System Digi tal therm ometer i Button DS18B200 引言随着计算机和网络技术的发展以及芯片集成工艺水平的不断提高,传统的基于模拟信号的测控系统逐渐向数字化方向发展。

基于FPGA和单总线技术的多点测温系统设计

基于FPGA和单总线技术的多点测温系统设计
维普资讯
高 新 技 术
基于 F G P A和单总线技术 的多点测温 系统设计
周岳斌
( 湖南理工 学院机 械与 电气工程 系
湖南岳 阳
4 0 0) 4 0 1
摘 要 :以 FP GA 和单 总线 数字 温度 传感 器为 基础 ,构 成 多点测 温 系统 ,线 路 简单 .硬件 开销 少 .成本 低廉 ,现场 温度直 接 以 单总线的数字方式传输 ,大大提高 了系统的抗干扰性 。介绍了单总线技术和 D 1B 0 S 8 2 的主要功能 ,重 点阐述 了测温 系统的工作原理 .硬 件 实现 和 软 件流 程 。 关键词 :F GA 单总线 D 1 B 0 多点测温 P S 8 2 . 中图分 类号 :T 2 . P 7 5 1 文 献标 识 码 :A 文章编号 பைடு நூலகம்1 7 一 5 4 2 O )2b 一 0 6 0 6 3 O 3 (O 7O ( ) 0 0 — 2 数字温度传感器在实际温度测量 中广受欢 4 S 2 的操 作 D 1 B 0 8 超 大规模 的数 字芯 片在 电子 设 计 中使 用 迎, 它们一般 不需要进行校准 , 转换精度高 , 测 单 总线数 字温度传 感器 D 1 B 0 S 8 2 可以 把 性价 比和可靠性均 温 度 信 号直 接 转 换 成 串行 数 字信 号 ,通 过 越 来 越 多 , 尽 管 这 类 芯 片 的 尺 寸 越 来 越 量 速度快 ,编程设 置灵活 , 最流 行的数字温度传感 器是带 有串行 总 编程可 在 7 0 s 5 m 内将温 度值转化 9 2 的 ~l 位 小 , 工作 电压 也 得 到 了 降 低 ,但 由于 运 行 很 高。 速 度 高 .功 耗 大 ,易 发热 , 工作 时 芯 片 温 线接 口的传感 器, I 如 c间总线( C总线) 数 字 量 ,它 的 工 作温 度 范 围是 一 55℃ ~ 1 2 .系 ℃ 2 0 5 S u ) 串行外围接 口总线(P ) +l 5 ,在 一l ℃ ~+8 ℃范 围内温 度测 SI 度 往 往较 高 。如 果 不 及 时 检测 并 采 取 有 效 统 管理总线(MB s、

温度传感器课程设计

温度传感器课程设计报告专业:电气化年级: 13-2学院:机电院姓名:***学号:**********--目录1引言 (3)2 设计要求 (3)3 工作原理 (3)4 方案设计 (4)5 单元电路的设计和元器件的选择 (6)5.1微控制器模块 (6)5.2温度采集模块 (7)5.3报警模块 (9)5.4温度显示模块 (9)5.5其它外围电路 (10)6 电源模块 (12)7 程序设计 (13)7.1流程图 (13)7.2程序分析 (16)8. 实例测试 (18)总结 (18)参考文献 (19)1 引言传感器是一种有趣的且值得研究的装置,它能通过测量外界的物理量,化学量或生物量来捕捉知识和信息,并能将被测量的非电学量转换成电学量。

在生活中它为我们提供了很多方便,在传感器产品中,温度传感器是最主要的需求产品,它被应用在多个方面。

总而言之,传感器的出现改变了我们的生活,生活因使用传感器也变得多姿多彩。

温度控制系统广泛应用于社会生活的各个领域,如家电、汽车、材料、电力电子等,常用的控制电路根据应用场合和所要求的性能指标有所不同,在工业企业中,如何提高温度控制对象的运行性能一直以来都是控制人员和现场技术人员努力解决的问题。

这类控制对象惯性大,滞后现象严重,存在很多不确定的因素,难以建立精确的数学模型,从而导致控制系统性能不佳,甚至出现控制不稳定、失控现象。

传统的继电器调温电路简单实用,但由于继电器动作频繁,可能会因触点不良而影响正常工作。

控制领域还大量采用传统的PID控制方式,但PID控制对象的模型难以建立,并且当扰动因素不明确时,参数调整不便仍是普遍存在的问题。

而采用数字温度传感器DS18B20,因其内部集成了A/D转换器,使得电路结构更加简单,而且减少了温度测量转换时的精度损失,使得测量温度更加精确。

数字温度传感器DS18B20只用一个引脚即可与单片机进行通信,大大减少了接线的麻烦,使得单片机更加具有扩展性。

基于单片机的智能温度测量系统设计与实现

机为开发平台,通过相应的软、硬件设计开发出具有实用价值的智能温度测量系统。 [关键词1单片机 温度传感器 字符液晶显示 中图分类号: TH6 文献标识码: A 文幸编号: 1671一7597 (20 8) 0410 61一01 0 0
温度是我们人类生活环境中的一项基本参数,无论是在工业还 是农业或者其它领域的生产过程中,都要对温度进行监控。那么传 统的温度测量装置一般都是通过热电偶、热电阻或P 结测温电路经 N 过相应的信号调理电路,转换成A 转换器能接收的模拟量,再经过 D / 采样/ 保持电路进行A D / 转换,最终送入单片机及其相应的外围电路 来完成监控的. 以这种方式的话,电路实现较为复杂,同时也比较 容易受到干扰 ,精 度不高。因此设计一种基于A m 公司的 t e l T95 A 8 C 1的温度测量系统,利用一种新型的智能集成温度传感器 D S18B20来实现温度的精确测量,以 T 602C为字符液晶显示器显示 R 1 被测温度,具有实用价值。
该系统主要以A 8 C5 芯片为开发平 台,控制温度传感器 T9 1 D 8BZO l s 复位和读写操作,最后由字符液晶显示器显示出来。要使数 字温度传感器D 8B 能正常工作,首先由程序对D 8B 进行复 1 0 S 2 l s 2 0 位, 检测是否正常工作,接着读取温度数据,由单片机发出指令与在 线的D 1 B O通过其独有的单总线协议进行联系,接着向D l BZO S 8Z s 8 发出 温度A D / 转换指令, 再发出读取温度寄存器的温度值指令,并反复调用
测到传感器,反之则不能: 当V 亮时则表明温度超出了上下 限的范 Z
图1 系统硬件结构图
( 一) 几 T89C51单片机 根据系统的控制要求和以后的扩展需要,选择A . e 公司的 t l

基于Lonworks总线的分布式测温系统的设计


1 数字温度传感器 DS B 0简介 1 2 8
D 1B 0 S 8 2 是美 国 Da a 公司生产 的新一 代 单总线数字温度传 ls l 感器,仅 需一条 线与单片机连接便 可实现双 向通讯 ,节省 CP U引 脚 ,且每个 传感器都有 唯一的 6 4位序列 号存储在其内部的 R M O 中,这样 一条总线上可 以挂多个 DS 8 0 实现 多点测温。测温范 1B2 , 围为 一5℃~ +15℃,在 一O~ + 5℃时其 精度为 ±05℃。该传 5 2 1 8 . 感器含寄生 电源 ,既可单总线供 电,也 可用外部 电源供电,并具有 良好 的负压特性。 D B 0内部包含 4 S8 2 1 个主要的部件: ( )4 1 位光刻 R M; ) 6 O ( 2 温度 传感器 ; (3 非易失性温度报 警触发器 T 和 T () ) H L; 一个 配 4 置寄存器。与 DS 8 2 通过单线通讯时,主机必须首先提供下列 5 B 0 1 个 ROM 命 令 中 的 1 : (1 读 R 个 ) OM(3 ; )匹 配 ROM 3 H) 2 ( (5 ; ) 索 ROM( O ; ) 过 ROM( 5 H) 3 搜 ( F H)4 跳 ( CCH) 5 告 警 搜 索 ;) ( ( C 。当 R M 操作命令成功运行后 ,主机才可以使用存储和 E H) O
文章编号 : 1 7 - 0 12 0 ) 50 2 - 3 11 4 (0 7 0 - 0 90 6
基于 L n rs总线 的分布式测温系统 的设计 o wok
王 振 臣 ,王树 贤 ,颜 旭 斌
( 山大学 电气 工程 学院 ,秦皇 岛 06 0) 燕 60 4
摘要 :本文基于 L n rs o Wok 现场总线技术,采用新型单总线数字温度传 感器 D 1 B 0提出了一种新型的分布式 测温系统。系统 由一 台上位机和多个智 S 82 能节点组成,智 能节点采用单片机 MS 4 0 1 9为主处理器,神经元芯 片 P 3F4 35 1 O为从处理 器。用单 片机进行 温度数据 采集 ,输 出数据 经收 发器通过 L ON网络传给上位机、实现了对温度 的实 时、准确及 自动检测 。

基于传感器与单片机温度监控系统的设计


生危险无法在第一 时间察觉 的地方 ,替” “ 机房 的
管理 人员 监 视 这 些 地 点 ( 如 暗 藏 的 供 电 线 路 接 例
线 多点数据采集 与控制 。并给 出 了部 分硬件 系统框 图和部分主要软件流程 图。 关键词 : 单片机 ; 传感 器; 温度
中 图 分 类 号 :P 1 T 22 文献标识码 : A
T eDein o mp r tr o i rn y tm a e n S n o n C h s fTe e au eM n t ig S se B s d o e s ra d S M g o
2 Y nE uai u a e n a rv c, i 650 h ) . i dc o Br uo i  ̄i Poi e Y n 110 ,C i a t n e fH l o g n n a a n
Ab ta t I hs p p r e in n e eau e mo ioi g s se wi sr c :n t i a e ,d sg so e tmp r tr n trn y tm t 1一w r n li on it b td, h i e a d mut —p i td sr u e i wh c e lz st e c n r lo l —p t e e au e c mb nn t B2 ih raie o to fmut h i a tmp rt r o i ig w h D1 h i 8 0,a d c n a q ie a d c n rlmut — n a c u r o t li n o
第 7 卷 第 4期 8 20 0 9年 1 月 2
吉林农 业科 技学 院学 报
Ju a o l gi l r c neadT cn l yC l g or l f inA r ut a Si c n eho g o ee n Ji c ul e o l
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

procedure TForm1.FormCreate(Sender: TObject);V arztbuf : array[0..200] of Char;Typebuf : array [0..200] of Char;// RetStr : array[0..200] of Char;SetupDone: Boolean;RetV alue : smallint;PortNum, PortType : smallint;begin// SetupDone := FALSE; // TMSetup not done yet//Read default Port Number and Port Type from registryRetV alue := TMReadDefaultPort(@PortNum,@PortType);PortNum:=1;PortType:=5; // TMReadDefaultPort出错if (RetV alue < 1) thenbeginShowMessage('Please set port first');Halt;endelsebeginGet_V ersion(@ztbuf); // read the tmex version and type version Label1.Caption := StrPas(ztbuf);TMGetTypeV ersion(PortType,@Typebuf);Label2.Caption := StrPas(Typebuf);Done := False; //attempt to get a sessionRepeatSHandle := TMExtendedStartSession(PortNum,PortType,NIL);//0 忙If (SHandle > 0) Thenbeginif (TMSetup(SHandle) = 1) then //初始化单总线,验证物理层完整性begin{The device that will be found is Temperature Device DS18B20,so Family Type is set to $28}select:=true; //在其他TMEX函数之前调用(除session层)FindFamily($28,SHandle) ;select:=false;FindFamily($28,SHandle) ;endelsebeginTMEndSession(SHandle);ShowMessage('Fail to setup MicroLan!');Halt;end;endelsebeginif (SHandle < 0 ) thenBeginShowMessage('The Default Port Type does not have a driver !');Halt;end;end;Application.ProcessMessages; //Release control back to windowuntil (Done);end;end;procedure TForm1.FindFamily(family : smallint; SHandle: longint); //找传感器vari , flag : smallint;romstr : string;rom : array[0..8] of smallint;beginflag:=TMFirst(SHandle, @stateBuf) ;if select=false thenflag:=TMNext(SHandle, @stateBuf) ;if (flag=1) thenbegin{Read the rom number by setting rom[0]=0 for reading and using TMRom}rom[0] := 0;TMRom(SHandle,@stateBuf,@rom);romstr := ''; //Check if correct typeif ((family and $7F )= (rom[0] and $7F)) thenbeginfor i := 7 downto 0 doromstr := romstr + IntToHex(ROM[i],2);if select thenLabel3.caption := 'Serial ROM2 ID : ' + romstrelseLabel21.caption := 'Serial ROM2 ID : ' + romstr;ReadTemperature(SHandle);endelsebeginShowMessage('There is no Temperature Device on the port');halt;end;endelsebeginTMEndSession(SHandle);ShowMessage('There is no Temperature Device on the port');halt;end;end;procedure TForm1.ReadTemperature(session_handle : longint); //读温度vari : smallint;rbuf : array[0..8] of smallint ;st : longint;CRCByte : Byte;begintmp := 0.00;if (TMAccess(session_handle,@StateBuf)= 1) then //access the devicebegin{Send the recall E2 command (by setting $B8 to outbyte in TMTouchByte)make sure Scratch is correct}//TMTouchByte(session_handle, $B8); //读ROM数据到RAM命令if (TMAccess(session_handle,@StateBuf) = 1) then // Send the start T command begin//Prepare the strong pullup after next TMTouchByteTMOneWireLevel(session_handle,LEVEL_SET,LEVEL_STRONG_PULL_UP, PRIMED_BYTE);{Send the conversion command (by setting $44 to outbyte in TMTouchByte)}TMTouchByte(session_handle, $44); //发出转换命令st := GetTickCount + 1000; //Sleep for a secondWhile (GetTickCount < st) doTMV alidSession(Session_handle);//Disable the strong pullupTMOneWireLevel(session_handle, LEVEL_SET,LEVEL_NORMAL,PRIMED_NONE);{verify conversion is complete by setting $01 to outbit in TMTouchBit andcheck the return value with 1}if (TMTouchBit(session_handle,$01) = $01) thenbeginIf (TMAccess(session_handle,@StateBuf) = 1 ) then // Access devicebegin{Send read scratch command by setting $BE to outbyte in TMTouchByte}TMTouchByte(session_handle,$BE); //发出读暂存器RAM命令CRC8 := 0;{Read scratch (setting $FF to outbyte in TMTouchByte) and check crc foreach byte}for i := 0 to 7 dobeginrbuf[i]:= TMTouchByte(session_handle, $FF);CRCByte := Byte(rbuf[i]); // the byte to run through CRC8 routineCRC8 := TMCRC(1, @CRCByte, CRC8, 0);end;CRCByte := Byte(TMTouchByte(session_handle, $FF)); //Check crcCRC8 := TMCRC(1, @CRCByte, CRC8, 0);if ( CRC8 = 0 ) thenbeginif ((rbuf[1] and $F8)= $F8) thenBEGIN //温度为负值rbuf[1]:=not rbuf[1];if (rbuf[0]=0) thenrbuf[1]:=rbuf[1]+1;rbuf[0]:=(not rbuf[0])+1;case (rbuf[4] and $60) of$00:tmp:=(rbuf[1] and $07)*16+(rbuf[0] and $f8)/16;//9位分辨率$20:tmp:=(rbuf[1] and $07)*16+(rbuf[0] and $fc)/16;//10位分辨率$40:tmp:=(rbuf[1] and $07)*16+(rbuf[0] and $fe)/16;//11位分辨率$60:tmp:=(rbuf[1] and $07)*16+rbuf[0]/16; //12位分辨率end;tmp:=tmp*(-1);ENDELSEBEGIN //温度为正值case (rbuf[4] and $60) of$00:tmp:=(rbuf[1] and $07)*16+(rbuf[0] and $f8)/16;//9位分辨率$20:tmp:=(rbuf[1] and $07)*16+(rbuf[0] and $fc)/16;//10位分辨率$40:tmp:=(rbuf[1] and $07)*16+(rbuf[0] and $fe)/16;//11位分辨率$60:tmp:=(rbuf[1] and $07)*16+rbuf[0]/16;//12位分辨率end;END;tmpf := (tmp * 9 )/5 + 32;if select thenbeginlabel4.caption := 'Current temp : ' + FormatFloat('0.0000',tmp) + ' C ' +FormatFloat('0.0000',tmpf)+ ' F';for i:=0 to 4 doRAM1[i]:=rbuf[i];iThermometer1.Position:=tmp;label17.Caption:=FormatFloat('0.0000',tmp)+' ℃' ;endelsebeginlabel22.caption := 'Current temp : ' + FormatFloat('0.0000',tmp) +' C ' +FormatFloat('0.0000',tmpf)+ ' F';for i:=0 to 4 doRAM2[i]:=rbuf[i];iThermometer2.Position:=tmp;label18.Caption:=FormatFloat('0.0000',tmp)+' ℃' ;end ;MessageBeep(0); //TMEndSession(session_handle);Done := True;end;end;end;end;end;end;procedure TForm1.SetRom(session_handle : longint); //定义配置EEPROM过程vari ,flag: smallint;st : longint;rbuf:array [0..2] of smallint;beginflag:=0;if select thenfor i:=0 to 2 dorbuf[i]:=EEPROM1[i]elsefor i:=0 to 2 dorbuf[i]:=EEPROM2[i];if (rbuf[0] and $80=$80) thenrbuf[0]:=rbuf[0] and $00ff;if (rbuf[1] and $80=$80) thenrbuf[1]:=rbuf[1] and $00ff;flag:=TMFirst(SHandle, @stateBuf) ;if select=false thenflag:=TMNext(SHandle, @stateBuf) ;if (flag=1) thenbeginIf (TMAccess(session_handle,@StateBuf) = 1 ) then //Access devicebegin{Send write scratch command by setting $4E to outbyte in TMTouchByte}TMTouchByte(session_handle,$4E);{Read scratch (setting $FF to outbyte in TMTouchByte)}for i := 0 to 2 do //先写到暂存器中beginTMTouchByte(session_handle,rbuf[i]); // rbuf[i]:= TMTouchByte(session_handle, $FF);end;end;If (TMAccess(session_handle,@StateBuf) = 1 ) thenbeginTMOneWireLevel(session_handle,LEVEL_SET,LEVEL_STRONG_PULL_UP,PRIMED_BYTE);TMTouchByte(session_handle,$48);{ st := GetTickCount + 1000;While (GetTickCount < st) doTMV alidSession(Session_handle); }TMOneWireLevel(session_handle, LEVEL_SET,LEVEL_NORMAL,PRIMED_NONE);end;end;end;procedure TForm1.Button6Click(Sender: TObject); //设置EEPROMvarH,L:smallint;i:smallint;rbuf:array [0..2] of smallint;beginButton4.Enabled:=false;Button2.Enabled:=false;case Combobox1.Itemindex of //分辨率0:rbuf[2]:=$1F;1:rbuf[2]:=$3F;2:rbuf[2]:=$5F;3:rbuf[2]:=$7F;end;rbuf[0]:=smallint(strtoint(Edit9.Text));rbuf[1]:=smallint(strtoint(Edit10.Text));if RadioButton1.Checked thenbeginselect:=true ;for i:=0 to 2 doEEPROM1[i]:=rbuf[i];endelsebeginselect:=false;for i:=0 to 2 doEEPROM2[i]:=rbuf[i];end;SetRom(SHandle);FindFamily($28,SHandle) ; SaveTem();Button4.Enabled:=true;Button2.Enabled:=true;end;procedure TForm1.display();varH,L,i:smallint;rbuf:array [0..4] of smallint;beginif Groupbox1.caption='传感器1' then for i:=0 to 4 dorbuf[i]:=RAM1[i]elsefor i:=0 to 4 dorbuf[i]:=RAM2[i];Edit5.Text:=inttohex(rbuf[0],2)+'H'; //温度及上下限原始数据显示Edit4.Text:=inttohex(rbuf[1],2)+'H';Edit6.Text:=inttohex(rbuf[2],2)+'H';Edit7.Text:=inttohex(rbuf[3],2)+'H';Edit8.Text:=inttohex(rbuf[4],2)+'H';if (rbuf[2] and $80=$80 ) thenrbuf[2]:=rbuf[2] or $ff00;if (rbuf[3] and $80=$80 ) thenrbuf[3]:=rbuf[3] or $ff00;Edit1.Text:=intToStr(rbuf[2]);Edit2.Text:=IntToStr(rbuf[3]);case (rbuf[4] and $60) of //分辨率显示$00: edit3.text:='9位' ;$20: edit3.text:='10位' ;$40: edit3.text:='11位' ;$60: edit3.text:='12位' ;end;end;\procedure TForm1.SaveTem(); //保存温度日志beginwith ADOQuery1 dobeginClose;SQL.Clear;SQL.Add('insert into tem (时间,传感器,温度,温度上限,温度下限) values (now(),:传感器,:温度,:温度上限,:温度下限)');if select thenbeginParameters.FindParam('传感器').V alue:='1';Parameters.FindParam('温度').V alue :=FormatFloat('0.0000',tmp);Parameters.FindParam('温度上限').V alue:=EEPROM1[0];Parameters.FindParam('温度下限').V alue:=EEPROM1 [1];endelsebeginParameters.FindParam('传感器').V alue:='2';Parameters.FindParam('温度').V alue :=FormatFloat('0.0000',tmp);Parameters.FindParam('温度上限').V alue:=EEPROM2[0];Parameters.FindParam('温度下限').V alue:=EEPROM2[1];end ;ExecSQL;end;end;procedure TForm1.Button2Click(Sender: TObject); //绘温度曲线begininherited;iPlot1.XAxis[0].Span := 100;iPlot1.Y Axis[0].Span:=30;iPlot1.XAxis[0].Title := '时间';iPlot1.Y Axis[0].Title:='温度';Button3.Enabled:=true;iPlot2.XAxis[0].Span := 100;iPlot2.Y Axis[0].Span:=30;iPlot2.XAxis[0].Title := '时间';iPlot2.Y Axis[0].Title:='温度';Timer2.enabled:=true;Button2.Enabled:=false;Button4.Enabled:=false;Button6.Enabled:=false;end;procedure TForm1.Timer2Timer(Sender: TObject); beginFindFamily($28,SHandle) ;inherited;if select thenbeginiPlot1.Channel[0].AddYElapsedSeconds(tmp);if (RAM1[3] and $80=$80 ) thenRAM1[3]:=RAM1[3] or $ff00;if (RAM1[2] and $80=$80 ) thenRAM1[2]:=RAM1[2] or $ff00;Iplot1.Channel[1].AddYElapsedSeconds(RAM1[2]); Iplot1.Channel[2].AddYElapsedSeconds(RAM1[3]); endelsebeginiPlot2.Channel[0].AddYElapsedSeconds(tmp);if (RAM2[3] and $80=$80 ) thenRAM2[3]:=RAM2[3] or $ff00;if (RAM2[2] and $80=$80 ) thenRAM2[2]:=RAM2[2] or $ff00;Iplot2.Channel[1].AddYElapsedSeconds(RAM2[2]); Iplot2.Channel[2].AddYElapsedSeconds(RAM2[3]) end;select:=not select;end;。

相关文档
最新文档