《数字式温度计的设计》毕业设计1Word格式文档下载.docx
- 文档编号:17068740
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:14
- 大小:171.95KB
《数字式温度计的设计》毕业设计1Word格式文档下载.docx
《《数字式温度计的设计》毕业设计1Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《《数字式温度计的设计》毕业设计1Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。
用DS18B20可使系统结构更简单,可靠性更高。
DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式;
温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出;
其工作电源既可在远端引入,也可采用寄生电源方式产生,多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。
DS18B20的外形如图2所示,有三个引脚,引脚定义:
DQ为数字信号输入/输出端,GND为电源地,VDD为外接供电电源输入端(在寄生电源接线方式时接地)。
DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:
用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。
这是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。
DS18B20与单片机的接口电路很简单,如下图3所示。
DS18B20的DQ即2号端于单片机P26口相接,另外两个管脚一个接5V电源,另外一个管脚接地。
上拉电阻为5.1K的上拉电阻,分别接于单片机的EA/VP端与P2.7口。
上拉电阻作用主要是若温度传感器开路或没接时,能起到上拉作用,使之为高电平,使后读电路保护作用。
4.3单片机最小系统
4.3.1单片机选型
在本次设计中,主要用单片机STC89C51来控制。
STC89C51是与8051兼容的CHMOS微控制器。
其FLASH存储器容量为2KB。
与CHMOS工艺的89C51一样,支持软件选择的空闲和掉电两种节电运行方式。
性能如下:
8位CPU
工作电压范围2.7~6V
全静态工作方式:
0Hz~24Hz;
一个可编程串行口;
有片内精密模拟比较器;
2KB的FLASH存储;
128B的数据存储器;
15根输入/输出线;
2个16位定时/计数器;
5个中断源,2个优先级。
STC89C51的FLASH存储器编程:
STC89C51单片机提供了2KB的片内FLASH程序存储器,它允许在系统改写或用非易失性存储器编程器编程。
FLASH存储器加密位:
STC89C51单片机有2个加密位。
可以编程(P)或不编程(U)以获得不同的加密功能。
4.3.2最小系统
图4单片机最小系统
时钟复位电路如图4所示,采用12MHz的晶振。
复位电路采用了微分型复位电路。
复位电路的基本功能是:
系统上电时提供复位信号直至系统电源稳定后撤销复位信号为可靠起见电源稳定后还要经一定的延时才撤销复位信号以防电源开关或电源插头分-合过程中引起的抖动而影响复位,有效的防止系统有时会出现一些不可预料的现象,如无规律可循的“死机”、“程序走飞”等。
4.4显示电路
主要采用四位一体共阳极LED数码管组成,采用动态法显示,直接显示当前环境温度。
P0口接数码管的段码,P1.0-P1.3接数码管的位线。
按钮开关可选择小数点后显示一位或两位。
4.5电源电路
市电220V经过变压器T1降压,得到一个交流的16v电压,再经过四个整流二极管整流、C5滤波得到直流电压,最后经过三端集成稳压管稳压,得到一个稳定的5V直流电压。
2软件设计
在此系统中,主要包括温度测量、显示、键盘。
最主要的程序是温度测量部分。
2.1系统主流程图
系统上电后,首先对DS18B20进行初始化设置,接着对DS18B20发出SKIPROM指令(即跳过ROM存储器)延时5ms后,对DS18B20发出启动温度转换命令,然后,从DS18B20的暂存储器中读出温度数据,接着对该数据进行转换,转换成当前环境温度。
最后将实际温度与设置温度比较,超过限制则发出报警。
2.2温度测量设计
通过STC89C51芯片的一个通用I/O口就可以实现对智能温度测量模块DS18B20的控制。
读取DS18B20测量的温度主要是通过初始化命令、ROM功能命令、存储器功能命令、温度转换命令、读存储器命令等组成。
冷端温度补偿
三、系统软件算法分析
程序命令时序
总线命令序列如下:
第一步:
初始化
第二步:
ROM命令(跟随需要交换的数据)
第三步:
功能命令(跟随需要交换的数据)
每次访问单总线器件,必须严格遵守这个命令序列,如果出现序列混乱,则一线器件不会响应单片机。
基于一线上的所有传输过程都时以初始化开始的,初始化过程由单片机发出的复位脉冲和DS18B20的响应的应答脉冲组成。
应答脉冲使单片机知道,总线上有1-WIRE设备,且准备就绪。
系统中CPU采用12MHz晶振,DQ端接P2.6。
RESET子程序
RESET:
CLRP2.6;
拉低总线至少480us,否则在温度较高时会无法完成复位。
MOVR2,#130;
在调试过程中发现延时520uS,测温值可到110℃,达到
D1:
DJNZR2,D1;
DS18B20的技术参数。
SETBP2.6;
释放总线
MOVR2,#20
D4:
DJNZR2,D4
JBP2.6,D0;
总线若为低,则复位成功;
否则复位失败,返回。
MOVR2,#110
D2:
DJNZR2,D2;
延时等待复位过程结束
RET
在单片机检测到应答(presence)脉冲后,就可以发ROM命令,命令长度为8位。
该命令字要通过1-WIRE通信协议规定的严格的写时隙(Writetimeslots),逐位写到一线上,DS18B20会自动接收到这些命令,并准备响应相应的操作。
本系统是单点使用,故只须用到SKIMROMCOMMAND(0CCH),这样单片机可以同时访问总线上的所有设备,而无须发出任何ROM代码信息。
例如,单片机在发出SKIPROM命令后跟随CONVENTT(功能COMMAND)即启动温度转换命令(44H),值得注意的是:
若SKIPROM命令后跟的是READSCRATCHPAD(0BEH)命令(包含其他读操作命令),则该系统只能用于单点系统,否则将由于多个节点都响应该命令而引起数据冲突。
在单片机发出ROM命令后,接着就可以发送功能命令,然后DS18B20就开始执行命令,本单点应用系统中主要用到CONVENTT和READSCRATCHPAD在执行READSCRATCHPAD命令时,单片机可以通过发送RESET脉冲在任何时候中断数据传输。
读、写时序
在对DS18B20进行ROM或功能命令字的写入及对其进行读出操作时,都要求按照严格的1-WIRE通信协议(时序),以保证数据的完整性。
其中有写0、写1、读0和读1时序。
在这些时序中,都由单片机发出同步信号,并且所有的命令字和数据在传输的过程中都是字节的LSb在前,这一点于基于其他总线协议的串行通信格式(比如SPI、等)不同,它们通常是字节的MSb在前。
读时序
DS18B20仅在单片机发送读时隙(READSLOT)时才发送数据,所以单片机在发送READSCRATCHPAD命令后必须立即产生读时隙。
所有的读时隙都要至少保持60us,并且在两个读时隙间至少要有1us的恢复时间。
单片机通过把总线拉低至少1us来做为一个读时隙的开始,DS18B20的输出数据在读时序下降沿过后15us内有效,所以在此期间单片机应释放总线,进入读数据状态以便读取数据,15us后一线总线被上拉电阻拉为高电平,程序延时等待读时隙结束。
读一字节子程序出口条件:
读出字节数据在A中
RE1W:
MOVR6,#8;
从1-Wire总线读出1字节数据的子程序
RE1:
拉低总线,发出读时序
NOP
释放总线,等待输入
MOVR4,#02H
RE2:
DJNZR4,RE2
MOVC,P2.6;
通过RRCA指令,从低位开始依次读入数据
RRCA
MOVR5,#20
RE3:
DJNZR5,RE3;
延时,等待读时隙结束
恢复时间DJNZR6,RE1
SETBP2.6
写时隙
写时隙也有两种,写0和写1。
主要用于单片机通过1-WIRE总线向DS18B20
写入命令字。
所有的写时隙也至少要保持60us,且在两个写周期之间至少要有1us的恢复时间。
单片机通过拉低一线总线至少1us来产生写时隙。
当写1时,单片机拉低总线,然后必须在15us内释放总线,总线被上拉电阻拉高。
当写0时,单片机拉低总线后,然后必须继续保持总线为低(至少60us)。
DS18B20在单片机发出写时隙后的15—60us之间开始采样,在这期间内,若总线为高,则1被写入进DS18B20;
若总线为低,则0被写入DS18B20。
写一字节子程序入口条件:
写入的字节在A
WR1W:
MOVR3,#08H;
向1-Wire总线写入1字节数据的位数
W1:
SETBP2.6;
恢复时间
MOVR4,#02
RRCA;
通过RRCA指令依次向总线写入1字节的数据
CLRP2.6;
拉低总线,发出写时隙
W2:
DJNZR4,W2
MOVP2.6,C
MOVR4,#20
W3:
DJNZR4,W3
DJNZR3,W1
SETBP2.6
结论
通过这次高精高精度数字式温度的设计和制作,让我感觉到在大学三年里,掌握了一定的专业知识和动手能力,在制作计的过程中学到了很多东西。
比如了解了温度传感器DS18B20的功能,如何编写单片机STC89C51的程序来实现数码管直接显示环境温度。
还有巩固了以前学过的知识,比如用制图Protel99SE等等。
最主要的还是使我能利用硬件和软件的结合,来完成一个产品的设计和制作!
总之,在这个毕业论文的完成过程中,让我感觉一种对知识的一种重温,让我知道如何有步骤和计划的完成一项任务,不过在这个其中也让我感觉到自己所学的知识还是有限的和解决问题的不够完善,希望自己今后做好每一件事情。
数字温度传感器DS18B20介绍
1、DS18B20的主要特性
1.1、适应电压范围更宽,电压范围:
3.0~5.5V,在寄生电源方式下可由数据线供电
1.2、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯
1.3、DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温
1.4、DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内
1.5、温范围-55℃~+125℃,在-10~+85℃时精度为±
0.5℃
1.6、可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温
1.7、在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快
1.8、测量结果直接输出数字温度信号,以"
一线总线"
串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力
1.9、负压特性:
电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。
2、DS18B20的外形和内部结构
DS18B20内部结构主要由四部分组成:
64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
DS18B20的外形及管脚排列如下图1:
DS18B20引脚定义:
(1)DQ为数字信号输入/输出端;
(2)GND为电源地;
(3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。
图2:
DS18B20内部结构图
3、DS18B20工作原理
DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。
DS18B20测温原理如图3所示。
图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。
高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。
计数器1和温度寄存器被预置在-55℃所对应的一个基数值。
计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。
图3中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。
图3:
DS18B20测温原理框图
MAIN:
LCALLGET_TEMPER;
调用读温度子程序
MOVA,29H
MOVC,40H;
将28H中的最低位移入C
RRCA
MOVC,41H
MOVC,42H
MOVC,43H
MOV29H,A
LCALLDISPLAY;
调用数码管显示子程序
AJMPMAIN;
循环显示
INIT_18B20:
;
这是DS18B20复位初始化子程序
SETBP3.2
CLRP3.2
MOVR1,#3;
主机发出延时537微秒的复位低脉冲
TSR1:
MOVR0,#107
DJNZR0,$
DJNZR1,TSR1
SETBP3.2;
然后拉高数据线
MOVR0,#25H
TSR2:
JNBP3.2,TSR3;
等待DS18B20回应
DJNZR0,TSR2
LJMPTSR4;
延时
TSR3:
SETBFLAG1;
置标志位,表示DS18B20存在
LJMPTSR5
TSR4:
CLRFLAG1;
清标志位,表示DS18B20不存在
LJMPTSR7
TSR5:
MOVR0,#117
TSR6:
DJNZR0,TSR6;
时序要求延时一段时间
TSR7:
GET_TEMPER:
读出转换后的温度值
LCALLINIT_18B20;
先复位DS18B20
JBFLAG1,TSS2
RET;
判断DS18B20是否存在?
若DS18B20不存在则返
回
TSS2:
DS18B20已经被检测到!
MOVA,#0CCH;
跳过ROM匹配
LCALLWRITE_18B20
MOVA,#44H;
发出温度转换命令
这里通过调用显示子程序实现延时一段时间,等待AD转
换结束,12位的话750微秒
LCALLDISPLAY
准备读温度前先复位
MOVA,#0BEH;
发出读温度命令
LCALLREAD_18B20;
将读出的温度数据保存到
35H/36H
WRITE_18B20:
写DS18B20的子程序(有具体的时序要
求)
MOVR2,#8;
一共8位数据
CLRC
WR1:
MOVR3,#6
DJNZR3,$
MOVP3.2,C
MOVR3,#23
DJNZR2,WR1
READ_18B20:
读DS18B20的程序,从DS18B20中读出
两个字节的温度数据
MOVR4,#2;
将温度高位和低位从DS18B20中读出
MOVR1,#29H;
低位存入29H(TEMPER_L),高位存入
28H(TEMPER_H)
RE00:
数据一共有8位
RE01:
MOVR3,#9
RE10:
DJNZR3,RE10
MOVC,P3.2
RE20:
DJNZR3,RE20
DJNZR2,RE01
MOV@R1,A
DECR1
DJNZR4,RE00
显示子程序
display:
mova,29H;
将29H中的十六进制数转换成10进
制
movb,#10;
10进制/10=10进制
divab
movb_bit,a;
十位在a
mova_bit,b;
个位在b
movdptr,#numtab;
指定查表启始地址
movr0,#4
dpl1:
movr1,#250;
显示1000次
dplop:
mova,a_bit;
取个位数
MOVCA,@A+DPTR;
查个位数的7段代码
movp1,a;
送出个位的7段代码
clrp3.4;
开个位显示
acalld1ms;
显示1ms
setbp3.4
mova,b_bit;
取十位数
查十位数的7段代码
送出十位的7段代码
clrp3.3;
开十位显示
setbp3.3
djnzr1,dplop;
100次没完循环
djnzr0,dpl1;
4个100次没完循环
ret
1MS延时(按12MHZ算)
D1MS:
MOVR7,#80
DJNZR7,$
7段数码管0~9数字的共阳显示代码
numtab:
DB0C0H,0F9H,0A4H,0B0H,099H,092H,082H,
0F8H,080H,090H;
0,1,2,3,4,5,6,7,8,9
END
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字式温度计的设计 数字式 温度计 设计 毕业设计