

已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数字温度传感器余晓聪电子科学系 08电科2班 080702236摘 要:本文介绍了基于单片机stc89c52的温度测量系统的设计方案与硬件实现。采用温度传感器ds18b20采集温度数据,数码管显示温度数据,按键设置温度上下限。基于这个基础上可以用于各种温度的控制,如温控饮水机、风扇、咖啡机、冰箱、空调等。关键子:单片机;数字温度传感器引 言随着社会的发展,温度的测量及控制越来越重要。本文采用单片机stc89c52设计了温度实时测量系统。单片机能够根据温度传感器ds18b20所采集的温度数据来控制其他操作。从而把温度控制在设定的范围内。所有的温度数据通过数码管显示。此方法能对温度进行精确有效的控制。通过对单片机进行编程能减少电路的复杂性进行更多的控制。正 文1 系统总体设计系统主要包括单片机模块、温度采集模块、温度显示模块,温度上下限调整模块等四部分。系统总体框架如图1所示。单片机处理模块温度采集模块温度显示模块温度上下限调整模块图1 系统总体框架报警模块2 单元模块21单片机处理模块处理模块是整个设计方案的核心,它控制了温度的采集、处理与显示、温度上下限值的设定。本文采用stc89c52rc作为处理模块。这是stc公司推出的8051系列微处理器。它的特点是价格低、功耗低、高可靠、无法解密,内部flash擦写次数为100,000次以上。图2是该芯片的引脚图。图2 stc89c52引脚图 图3是stc89c52的最小系统。图322温度采集模块温度由dallas 半导体公司的一线数字化温度传感器ds18b20采集。ds18b20测温范围为-55+125,测温分辨率可达0.0625,被测温度用16位二进制形式串行输出。用户设定的上下限温度储存在eeprom中,掉电后依然保存。cpu只需一根端口线就能与诸多ds18b20通信。占用微处理器的端口少,可节省大量的引线和逻辑电路。图4为ds18b20的引脚图。图4 ds18b20是通过一种片上温度测量技术来测量温度的。图5示出了温度测量电路的方框图。图5由图5可知ds18b20用一个高温度系数的振荡器确立一个门周期,内部计数器在这个门周期内对一个低温度系数的振荡器的脉冲进行计数来得到温度值。计数器被预置到对应与-55的一个值。如果计数器在门周期结束前到达0,则温度寄存器(同样被预置到-55)的值增加,表明所测的温度大于-55。同时计数器被复位到一个值,这个值由斜坡式累加器电路确定,斜坡式累加器电路用来补偿感温振荡器的抛物线特性。然后计数器又开始计数直到0,如果门周期仍未结束,将重复这一过程。斜坡式累加器用来补偿感温振荡器的非线性,以及在测温时获得比较高的分辨力。这是通过改变计数器对温度每增加一度所需计数的值来实现的。因此,要想获得所需的分辨力,必须同时知道给定温度下计数器的值和每一度的计数值。ds18b20内部对此计算的结果可提供0.0625的分辨力。温度以16bit带符号位扩展的二进制补码形式读出。表1给出了温度值和输出数据的关系。 表1温度数据输出(二进制)数据输出(十六进制)+1250000 0111 1101 000007d0+25.06250000 0001 1001 00010191+0.50000 0000 0000 1000000800000 0000 0000 00000000-0.51111 1111 1111 1000fff8-25.06251111 1110 0110 1111ffce-551111 1100 1001 0000fc90二进制的低四位是小数数据,高五位是符号位。正温度时,读到的16位数据乘以0.0625就可以得到实际温度。若是负温度则要把读到的数据按位取反再加1,之后按正温度转换,前面加符号就行了。另一种转换方法就是分离出低四位,中间七位和高五位。低四位乘以0.0625就可以得到小数部分的值,中间八位直接就是整数部分的值。高四位就是判断符号的。 ds18b20内部有一个9字节的高速存储器用于存储温度值。其中前两个字节是测得的温度数据,第一个字节的内容是温度的低八位,第二个字节是温度的高八位,第三和第四字节是温度上限th与温度下限tl的易失性拷贝,第五字节是结构寄存器的易失性拷贝,第6,7,8这三个字节用于内部计算,第九个字节是冗余检验字节crc,可用来保证通信的正取性。当温度转换命令发出后,经转换所得的温度值以二字节补码形式存放在此存储器的第1和第2个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后。通过单线总线端口访问ds18b20的协议如下:初始化、rom操作命令、存储器操作命令、执行/数据。rom操作命令:read rom 33h 这个命令允许总线控制器读到ds18b20的8位系列编码、唯一的序列号和8位crc码。只有在总线上存在单只ds18b20的时候才能使用这个命令。如果总线上不止一个从机时,当所有从机试图同时传送信号时就会发生数据冲突。match rom 55h 匹配rom命令,后跟64位rom序列,让总线控制器在多点总线上定位一只特定的ds18b20。只有和64为rom序列完全匹配的ds18b20才能响应随后的储存操作命令。skip rom cch 这条命令允许总线控制器不用提供64位rom编码就使用储存器操作命令,在单点总线情况下用以节省时间。如果总线上不止一个从机,在skip rom命令之后跟着发一条读命令,由于多个从机同时传送信号,总线上就会发生数据冲突。search rom f0h 当一个系统初次启动时,总线控制器可能不知道单线总线上有多少器件或它们的64位rom编码。搜索rom命令允许总线控制器用排除法识别总线上的所有从机的64位编码。alarm search ech 这条命令的流程图和search rom相同。然而,只有在最近一次测温后遇到符合报警条件的情况,ds18b20才会响应这条命令。表2为命令设置。 表2命令说明协议单线总线发出协议后温度转换命令convert t开始温度转换44h存储器命令read scratchpad读取暂存器和crc字节behwriteschratchpad把字节写入暂存器的地址2和3(th和tl温度报警促发)4ehcopy scratchpad把暂存器内容拷贝到非易失性存储器中(仅指地址2和3)48hrecall e2把非易失性存储器中的值召回暂存器(温度报警触发)b8hread power supply标识ds18b20的供电模式b4hds18b20具体的命令和时序图请参考文献1。图6为ds18b20的电路连接图。图6ds18b20有两种供电接法,图6采用的是接入外部电源。这样做的好处是i/o线上不需要加强上拉,而且总线控制器用在温度转换期间总保持高电平。这样在转换期间可以允许在单线总线上进行其他数据的往来。另外,在单总线上可以挂任意多片ds18b20,而且如果它们都使用外部电源的话,就可以先发一个skip rom命令,再接一个convert t命令,让它们同时进行温度转换。注意当加上外部电源时,gnd引脚不能悬空。23温度显示模块由于此文重在说明ds18b20的功能及使用,所以显示部分就采用简单的数码管显示。只显示两位整数和一位小数,负温度就不显示了。图6为数码管的连接图。图724温度上下限调整模块图7为温度上下限调整模块。图8所选按键是轻触开关。按一次s1后,会在数码管显示ds18b20内储存的温度上限。按第2次后就能调节温度的上限,通过s3和s4来调节。按下第3次后恢复到温度的显示。s2是调节温度下限的。操作方法和s1一样。25报警电路该模块只是用发光二极管表示。灯亮就报警。如图9图93 总体原理图 图10为电路的总体原理图。图10图104 程序本程序是采用c语言写的。/*功能说明按s1查看温度上下限按s2、s3可改变上下限,按s2减1,按s3加1如果实际温度超过上下限或18b20不存在,则报警*/#include #include #define uint unsigned int#define uchar unsigned char#define flag1 f0 /18b20存在标志sbit io=p22;sbit key1=p10;/查看温度上下限sbit key2=p11;/ 减1sbit key3=p12;/ 加1 sbit wei1=p21;/第一个数码管位选sbit wei2=p23;/第二个数码管位选sbit wei3=p24;/第三个数码管位选sbit bj=p25;uchar count;/key1按下的次数uchar code disp=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/ uchar code xiaoshu16=0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9;uchar a,b,h,l;/从ds18b20读出来的数据uchar shi,ge,xiao,temp;uchar delay1;/作延时用void delay(uint i); /延时11us *ivoid deal_with();void display();void reset();uchar read();/读一个字节void write(uchar dat); /写一个字节到ds18b20/void beep(); /报警void keyscan();void set();/改变温度上下限和精度void copy();/复制温度上下限到romvoid check(); /把当前温度与上下限比较void main() while(1) reset();/改变上下限和精度 while(flag1) /beep(); /报警reset(); reset(); write(0xcc);/ 跳过读序号列号的操作 write(0x44); / 启动温度转换 reset(); write(0xcc);/ 跳过读序号列号的操作 write(0xbe); /读取温度寄存器等(共可读9个寄存器) 前两个就是温度 a=read();/温度低位 b=read();/温度高位 h=read();/温度上限 l=read();/温度下限 if(count=0) /如果无键按下 deal_with(); display(); keyscan(); check(); void delay(uint i) /延时11us *iwhile(i-);void deal_with()b=b4;/舍弃小数xiao=xiao&0x0f;/得到小数temp=b|a; /得到温度整数部分shi=temp/10;ge=temp%10;void display()uchar d;wei1=0;wei2=0;wei3=0;p0=dispshi;wei1=1;wei2=0;wei3=0;delay(100);wei1=0;wei2=0;wei3=0;d=dispge;p0=d&0x7f;/显示小数点 wei1=0;wei2=1;wei3=0;delay(100); wei1=0;wei2=0;wei3=0;p0=dispxiaoshuxiao;wei1=0;wei2=0;wei3=1;delay(100);void reset()/改变上下限和精度函数flag1=1; io=1; delay(8); /稍做延时 io=0; delay(80);/延时大于480us io=1; delay(6); flag1=io;/如果flag是0,则初始化成功 delay(20);uchar read()/读一个字节uchar k,dat=0;for(k=0;k=1;io=1;if(io)dat=dat|0x80;delay(4);return dat;void write(uchar dat) /写一个字节到ds18b20uchar j;for(j=0;j1; /把dat的最低位送到io口io=cy;delay(5);io=1;delay1=1;/延时2u
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 玻璃釉印工设备维护与保养考核试卷及答案
- 烟叶调制员技能操作考核试卷及答案
- 苯乙烯装置操作工技能巩固考核试卷及答案
- 聚偏氟乙烯装置操作工专业技能考核试卷及答案
- 丁基橡胶装置操作工成本预算考核试卷及答案
- 2025-2026学年北师大版数学九年级上册第一次月考押题试卷含解析
- 医学技术喷雾酒精考试题及答案
- 服务心理学(第四版)课件 项目十一 任务一 提高服务业团队管理技巧提高服务业团队管理技巧
- 班组建设与电力安全知识测试卷
- 提升学习质量行动方案范文
- 黄芪注射液联合当归注射液对急性失血性休克围手术期血乳酸水平和氧代谢的影响
- 网络与信息安全事件报告表模板
- 2023年上海市选调生考试《申论》题库【真题精选+章节题库+模拟试题】
- 中学安全事故问责制度(试行)
- 港口航道疏浚工程案例
- DLT-969-2023年变电站运行导则
- 现代铁路铁道信号远程控制系统(第2版)PPT完整全套教学课件
- 通知证人出庭申请书
- 3、反渗透法设备安装及调试施工工艺工法要点
- 高压开关柜技术规范书
- 污染源自动监测设备比对监测技术规定
评论
0/150
提交评论