简易的数字温度计.doc_第1页
简易的数字温度计.doc_第2页
简易的数字温度计.doc_第3页
简易的数字温度计.doc_第4页
简易的数字温度计.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

简易的数字温度计学 院:物理与电信工程学院年 级:2008级专 业:物理学学 号:20082301002作 者:甘腾胜指导老师:杨志勇简易的数字温度计摘要:温度测量涉及各行各业,而传统的温度测量仪器有酒精温度计、煤油温度计、水银温度计等,都需人工手动测量.在科学技术发展的今天很多场合(有毒、高温、无人等),用传统的温度测量技术就显得比较麻烦。单片机的出现,电子技术的飞速发展,使温度计的自动化、数字化就变得容易。本文将介绍一种基于STC89C52单片机和温度传感器DS18B20的数字温度计,用4位共阳极LED数码管以动态方式实现温度显示。该温度计具有读数方便,测温范围广(能够测出55125之间的温度),测温准确的特点。适合日常生活、工业生产和科学研究等领域对温度测量的需要。关键词:单片机、DS18B20、STC89C52、温度计、数字控制方案设计与讨论:1.方案一由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,再将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。2.方案二 进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。方案特点:功耗低,线路简单,体积小,测温精确度高,测温范围广。原理:1.DS18B20产品的特点DS18B20数字温度计是DALLAS公司生产的1Wire,即单总线器件,具有线路简单,体积小的特点,在一根通信线,可以挂很多这样的数字温度计。(1).只要求一个I/O口即可实现通信;(2).在DS18B20中的每个器件上都有独一无二的序列号;(3).实际应用中不需要外部任何元器件即可实现测温;(4).测量温度范围在-55到+125之间;(5).数字温度计的分辨率用户可以从9位到12位选择;(6).内部有温度上、下限告警设置。2.DS18B20详细引脚功能描述1GND为电源地;2DQ为数字信号输入/输出端;3 VDD为外接供电电源输入(在寄生电源接线方式时接地)。图1 DS18B20引脚示意图3.DS18B20工作原理图2 DS18B20内部结构图DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。DS18B20测温原理如图3所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在55所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图3中的斜率累加器用于补偿和修正测温过程中的非 线性,其输出用于修正计数器1的预置值。图3 DS18B20测温原理框图DS18B20有5个主要的数据部件:(1)光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。(2)DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625/LSB形式表达,其中S为符号位。表1 DS18B20温度值格式表 这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。例如+125的数字输出为07D0H,+25.0625的数字输出为0191H,-25.0625的数字输出为FF6FH,-55的数字输出为FC90H。表2 DS18B20温度数据表(3)DS18B20温度传感器的存储器。DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EEPRAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。 (4)配置寄存器。该字节各位的意义如下:表3 配置寄存器结构TMR1R011111 低五位一直都是“1”,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动。R1和R0用来设置分辨率,如下表所示:(DS18B20出厂时被设置为12位)表4 温度分辨率设置表R1R0分辨率温度最大转换时间009位93.75ms0110位187.5ms1011位375ms1112位750ms(5)高速暂存存储器。高速暂存存储器由9个字节组成,其分配如表5所示。当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。 单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式如表1所示。对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S =1时,先将补码变为原码,再计算十进制值。表 2是对应的一部分温度值。第九个字节是冗余检验字节。表5 DS18B20暂存寄存器分布寄存器内容字节地址温度值低位 (LS Byte)0温度值高位 (MS Byte)1高温限值(TH)2低温限值(TL)3配置寄存器4保留5保留6保留7CRC校验值8 根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,当 DS18B20收到信号后等待1660微秒左右,后发出60240微秒的存在低脉冲,主CPU收到此信号表示复位成功。表6 ROM指令表指 令约定代码功 能读ROM33H读DS1820温度传感器ROM中的编码(即64位地址)符合 ROM55H发出此命令之后,接着发出 64 位 ROM 编码,访问单总线上与该编码相对应的 DS1820 使之作出响应,为下一步对该 DS1820 的读写作准备。搜索 ROM0FOH用于确定挂接在同一总线上 DS1820 的个数和识别 64 位 ROM 地址。为操作各器件作好准备。跳过 ROM0CCH忽略 64 位 ROM 地址,直接向 DS1820 发温度变换命令。适用于单片工作。告警搜索命令0ECH执行后只有温度超过设定值上限或下限的片子才做出响应。温度变换44H启动DS1820进行温度转换,12位转换时最长为750ms(9位为93.75ms)。结果存入内部9字节RAM中。读暂存器0BEH读内部RAM中9字节的内容写暂存器4EH发出向内部RAM的3、4字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。复制暂存器48H将RAM中第3 、4字节的内容复制到EEPROM中。重调 EEPROM0B8H将EEPROM中内容恢复到RAM中的第3 、4字节。读供电方式0B4H读DS1820的供电模式。寄生供电时DS1820发送“ 0 ”,外接电源供电 DS1820发送4.硬件电路图(看不清就把这个图拉大)系统实现及原理分析:在不改动系统硬件的基础上,通过计算方法的调整,DS18B20的测温分辨率可以提高到0.1以上,由四位LED显示成“.”的格式。DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。每隔2ms扫描一位数码管,每隔600ms读取一次传感器的温度。测量结果与误差分析:温度小于0,数码管第一位会显示“-”号;温度介于0与100之间,第一位不显示;温度大于等于100,第一位会显示“1”;温度的绝对值小于10,第二位不显示。温度能精确到0.1。参考文献:1李朝青,单片机原理及接口技术(简明修订版).杭州:北京航空航天大学出版社,19982李广弟,单片机基础.北京:北京航空航天大学出版社,19943阎石,数字电子技术基础.北京:高等教育出版社,19894廖常初,现场总线概述J.电工技术,1999.5 王永华,赵志亮,涂时亮,单片微型机原理、应用与实验,上海,复旦大学出版社,2000年6月6 李勋,刘源,李新民,单片机实用教程,北京,北京航空航天大学出版社,2000年6月7 胡乾斌,李玲,甘锡英,单片微型计算机原理与应用,武汉,华中理工大学出版社,2003年3月8 张毅刚,新编MCS-51单片机应用设计,哈尔滨,哈尔滨工业大学出版社 2003 年10月附件:C语言源程序:#include /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#define DataPort P1 /定义数据端口 程序中遇到DataPort 则用P1 替换bit ReadTempFlag;/定义读时间标志/sbit LATCH1=P20;/定义锁存使能端口 段锁存/sbit LATCH2=P21;/ 位锁存unsigned char code HEYAO_DuanMa10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/unsigned char code HEYAO_DuanMa10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/ 显示段码值0123456789/unsigned char code HEYAO_WeiMa=0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80;/unsigned char code HEYAO_WeiMa=0x1,0x2,0x4,0x8;unsigned char code HEYAO_WeiMa=0xfe,0xfd,0xfb,0xf7;/分别对应相应的数码管点亮,即位码unsigned char TempData8=0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF; /存储显示值的全局变量/unsigned char TempData8=0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00; /存储显示值的全局变量sbit DQ=P33;/ds18b20 端口bit Init_Ds18B20(void); /函数声明unsigned char ReadOneChar(void);void WriteOneChar(unsigned char dat);unsigned int ReadTemperature(void);void Delay(unsigned char t); void Display(unsigned char FirstBit,unsigned char Num);void Init_Timer0(void);/定时器初始化void DelayMs(unsigned char t);/*- 主函数-*/void main (void) unsigned int TempH,TempL,temp;Init_Timer0();while (1) /主循环 if(ReadTempFlag=1) ReadTempFlag=0; temp=ReadTemperature(); TempData0=0XFF; if(temp&0x8000) TempData0=0xBF;/负号标志 temp=temp; / 取反加1 temp +=1; TempH=temp4; TempL=temp&0x0F; TempL=TempL*5/8;/小数近似处理 if(TempH/100=1) TempData0=HEYAO_DuanMa1; if(TempH/100=0)&(TempH%100)/10=0)/消隐 TempData1=0XFF;else TempData1=HEYAO_DuanMa(TempH%100)/10; /十位温度 TempData2=HEYAO_DuanMa(TempH%100)%10&0x7F; /个位温度,带小数点 TempData3=HEYAO_DuanMaTempL; /*- 18b20初始化-*/bit Init_DS18B20(void) bit dat=0; DQ = 1; /DQ复位 Delay(5); /稍做延时 DQ = 0; /单片机将DQ拉低 Delay(200); /精确延时 大于 480us 小于960us Delay(200); DQ = 1; /拉高总线 Delay(50); /1560us 后 接收60-240us的存在脉冲 dat=DQ; /如果x=0则初始化成功, x=1则初始化失败 Delay(25); /稍作延时返回 return dat;/*- 读取一个字节-*/unsigned char ReadOneChar(void)unsigned char i=0;unsigned char dat = 0;for (i=0;i=1; DQ = 1; / 给脉冲信号 if(DQ) dat|=0x80; Delay(25); return(dat);/*- 写入一个字节-*/void WriteOneChar(unsigned char dat) unsigned char i=0; for (i=0;i=1; Delay(25);/*- 读取温度-*/unsigned int ReadTemperature(void)unsigned char a=0;unsigned int b=0;unsigned int t=0;Init_DS18B20();WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x44); / 启动温度转换DelayMs(10);Init_DS18B20();WriteOneChar(0xCC); /跳过读序号列号的操作 WriteOneChar(0xBE); /读取温度寄存器等(共可读9个寄存器) 前两个就是温度a=ReadOneChar(); /低位b=ReadOneChar(); /高位b=8;t=a+b;return(t);/*- 定时器初始化子程序-*/void Init_Timer0(void) TMOD |= 0x01; /使用模式1,16位定时器,使用|符号可以在使用多个定时器时不受影响 /TH0=0x00; /给定初值 /TL0=0x00; EA=1; /总中断打开 ET0=1; /定时器中断打开 TR0=1; /定时器开关打开/*- 定时器中断子程序-*/void Timer0_isr(void) interrupt 1 static unsigned int num;TH0=(65536-2000)/256; /重新赋值 2ms TL0=(65536-2000)%256; Display(0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论