数字式温度计的设计与制作

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图5:DS18B20初始化时序
单片机先发一个复位脉冲,保持低电平时间最少480us,最多不超过960us。然后单片机释放总线,等待DS18B20的应答脉冲,DS18B20在接收到复位脉冲后等待15到20us才能发出应答脉冲,应答脉冲能保持60到240us。单片机从发送完成复位脉冲到再次控制总线至少要等待480us。初始化程序如下:
FC90 H
DS18B20完成转换后,就把测得的温度值与TH、TL比较,若T>TH或T<TL,当使用报警搜索命令时,DS19B20会输出该器件的64位ROM值。
3.1.2 DS18B20的控制方法
DS18B20与单片机的连接有两种方法,一种是VDD接外部电源,GND接地,DQ与单片机的I/O线相连;另一种是用寄生电源供电,此时VDD、GND接地,DQ接单片机I/O。无论是内部寄生电源还是外部供电,I/O口线都要接5千欧左右的上拉电阻。
/**********对DS18B20写指令**************/
void write_byte(uchar dat)
{
uchar i;
bit onebit;
for(i=1;i<=8;i++)
{
onebit=dat&0x01;
dat=dat>>1;
if(onebit)
{
dp=0;
_nop_();
把E2RAM中的TH、TL字节写到暂存器TH、TL字节
读电源
B4 H
启动DS18B20发送电源供电方式的信号给主CPU
3.1.3
DS18B20与单片机的通信是通过严格的时序来实现的,每次传送数据或命令都是由一系列的时序信号组成,共有3种基本时序:初始化时序,写0、1时序,读0、1时序。初始化时序如图5所示,
图8:蜂鸣器实物
3.2.1 蜂鸣器的结构原理
压电式蜂鸣器:压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱和外壳等组成。有的压电蜂鸣器外壳上还装有发光二极管。多谐振荡器由晶体管或集成电路构成。当接通电源(1.5到15V直流电源)后,多谐振荡器起振,输出1.5到2.5KHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。压电蜂鸣片由铌镁酸铝压电陶瓷材料制成。在陶瓷片的两面镀上银电极,经极化和老化处理后,再与黄铜片或不锈钢片粘在一起。
_nop_();
dp=1;
delay_us(5);
}
else
{
dp=0;
delay_us(8);
dp=1;
_nop_();
_nop_();
}
}
}
DS18B20的读时序如图7所示,
图7:DS18B20的读时序
读时序分为读0和读1两个过程。DS18B20的读时序是从主机把单总线拉低之后,在15us之内就得释放总线,以使DS18B20把数据传输到单总线上,DS18B20完成一个读时序过程至少需要60us,这两个时序可以合并为一个子程序,程序代码如下
根据DS18B20的通信协议,主机(单片机)控制DS19B20完成温度转换必须经过如下几个步骤:每一次读写之前都要对DS18B20进行初始化操作,初始化成功后执行一条对ROM的操作命令,然后进行存储器(包括SCRATCHPAD和E2RAM)操作命令,使DS18B20完成温度测量并将结果存入高速寄存器,在此基础上,主机才能读出转换结果。DS18B20共有5条ROM操作指令(见表4)和6条RAM指令(见表5)。
/*********us延时程序************/
void delay_us(uint us)
{
while(us--);
}
/*********DS18B20初始化程序*********/
void reset()
{
dp=1; //dp复位
delay_us(1); //稍等片刻
dp=0; //单片机将dp拉低
temp=temp|a;
if(temp>0x8000)
{
temp=~temp+1;
flag=1;
}
else
flag=0;
temp=temp*5/8;
return temp;
}
3.2 蜂鸣器的扩展
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机和定时器等电子产品中作为发声器件,按结构的不同,蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型,其实物如图8所示。
表3:温度值与输出数据的关系
温度值
十六进制输出
+125摄氏度
07D0 H
+85摄氏度
0550 H
+25.0625摄氏度
0191 H
+10.125摄氏度
00A2 H
+0.5摄氏度
0008 H
0摄氏度
0000 H
-0.5摄氏度
FFF8 H
-10.125摄氏度
FF5E H
-25.0625摄氏度
FF6FH
-55摄氏度
电磁式蜂鸣器:电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振荡膜片及外壳组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振荡膜片在电磁线圈和磁铁的相互作用下,周期性的振荡发声。
/************温度转换程序*************/
uint readtemperture()
{
uchar a,b;
reset();
write_byte(0xcc);
write_byte(0xbe);
a=read_byte();
b=read_byte();
temp=b;
temp<<=8;
图3:DS18B20内部结构框图
光刻ROM中的64位序列号是出厂前被光刻好的,它可以看做该DS18B20的地址序列号码。第一个8位为单总线器件识别码(DS18B20为28H),接下来48位是器件的唯一系列吗,最后8位是前56位的CRC效验码,每个DS18B20的序列号都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。
报警搜索
EC H
此命令可搜索有报警的DS18B20器件
表5:RAM操作指令
指令
指令代码
操作说明
写暂存存Fra Baidu bibliotek器
4E H
将数据写入暂存器的TH、TL字节
读暂存存储器
BE H
读暂存器内容
复制暂存存储器
48 H
把暂存器的TH、TL字节写到E2RAM中
温度转换
44 H
启动DS18B20进行温度转换
重新调出
B8 H
为了满足测温的灵活性,需要在不同的场合选择不同的精度,通过配置寄存器(CONFIG)的编程即可实现上述目的,CONFIG的格式如图4所示。
图4:配置寄存器CONFIG
其中R1、R0决定温度转换的精度位数,R1、R0与转换位数,转换时间的关系如表1所示,如果不对CONFIG编程,默认12转换精度。
表1:分辨率与转换时间的关系
*温度检测:系统能够实时检测大棚温度,温度分辨率为0.1摄氏度,温度范围为—55到+55摄氏度。
*温度显示:系统能实时显示大棚温度值,显示到小数点后一位,在设置上、下限报警时,显示上、下限提醒标志。
*温度报警:系统能够设置大棚温度范围,当棚内温度超出设定范围时发生报警。
*报警设置:系统能够设置上、下限报警温度值,设定精度为0.1摄氏度。
表2:DS18B20温度值格式表
LSBYTE
BIT7
BIT6
BIT5
BIT4
BIT3
BIT2
BIT1
BIT0
MSBYTE
BIT15
BIT14
BIT13
BIT12
BIT11
BIT10
BIT9
BIT8
S
S
S
S
S
S=SIGN
其中S为符号位,如果测得的温度大于0,这5位为0,只要将测到的数据乘以0.0625即可得到实际温度;如果温度小于0,这5位为1,测得的数值要取反加1再乘以0.0625即可得到实际温度,不同温度与数字输出的对应关系如表3所示。
(3)能实现上、下限报警。
二 项目分析
2.1 任务意义
一些温室大棚常常需要有较好的恒温性,即当温度变化达到一定数值时,需要及时调整,以保持温度恒定,保证作物的品质。现某大棚希望设计一个数字式温度计,能实时测量和显示大棚温度。当温度发生较大变化时,能及时做出报警提示。
2.2 系统方案设计
根据醒目的需求,本系统使用STC89C52单片机,DS18B20数字温度传感器等,监测大棚的温度变化。具体功能如下:
/************读DS18B20指令*************/
bit read_bit()
{
bit dat;
dp=0;
_nop_();
dp=1;
_nop_();
_nop_();
dat=dp;
delay_us(10);
return(dat);
}
uchar read_byte() //读一个位
{
uchar value,i,j;
value=0;
for(i=0;i<8;i++)
{
j=read_bit();
value=(j<<7)|(value>>1);
}
return(value);
}
结合DS18B20温度读取命令,就可以编写DS18B20的温度读取程序,编写时,需要注意温度数据的转换。按照表3所示温度值与输出数据的关系,这里只介绍一种带一位小数的转换方法。
R1
R0
分辨率
最大转换时间
0
0
9 bit
93.75 ms
0
1
10 bit
187.5 ms
1
0
11 bit
375 ms
1
1
12 bit
750 ms
DS18B20中的温度传感器可完成对温度的测量,以16位符号的扩展的二进制补码读数形式存储在高速缓存器0、1字节单元。单片机可以通过单总线接口独到该数据,读取对低位在前,高位在后。表2所示是分辨率为12 bit时的数据格式,
表4:ROM操作指令
指令
指令代码
操作说明
读ROM
33 H
读取固化在ROM中的64位序列号(用于多点测量)
匹配ROM
55 H
主机对多个DS18B20进行某一个操作时,需要发出匹配ROM命令
跳过ROM
CC H
表示之后的操作是对所有DS18B20,此命令可节省时间
搜索ROM
F0 H
主机通过此命令对总线上的多个器件进行ROM编码的搜索
数字式温度计的设计与制作
10级电子1班
一 项目提出
1.1 任务
为某温室大棚设计一个数字式温度计,以便当棚内温度变化时,能及时提醒工作人员进行处理,保证温室温度变化在较小范围。
1.2 要求
(1)能实现温度数据的采集与记录。
(2)能实现各测量值的显示,精度为0.1摄氏度,温度范围在-55到+55摄氏度。
根据以上功能分析,数字温度计基本结构如图1所示,由单片机最小系统、按键模块、温度采样模块、显示模块和报警模块等组成。
图1:数字温度计的基本结构
三 项目相关知识
3.1 数字温度传感器DS18B20的使用
可以测量温度的器件很多,但DS18B20是一种无须进过其它变换电路,直接输出被测温度数字量的传感器。它采用单总线专用技术,可通过串口线或其它I/O口线与计算机接口相连,支持多器件扩展,使用相当方便,测温范围为-55到+125摄氏度,其分辨率为0.5摄氏度,最高可达0.0625摄氏度。
3.1.1 DS18B20的外观及内部结构
DS18B20采用3脚TO-92A封装,外形如同普通的半导体三极管,除此之外,DS18B20也有8脚的SOIC封装及6脚的TSOC封装等形式,如图2所示。
图2:DS18B20封装形式
DS18B20内部结构框图,如图3所示,主要包括7部分,64位光刻ROM与单总线接口,温度传感器,温度报警触发器TH和TL(E2RAM),分别用来存储用户设定的温度上、下限,高速暂存器(SCRATCHPAD RAM),用于存取中间数据,存储与控制逻辑,寄生电源,8位循环冗余效验码(CRC)。
delay_us(80); //精确延时大于480us
dp=1; //拉高总线
delay_us(8);
flag1=dp; //如果flag=0,则初始化成功,否则,失败!
delay_us(20);
}
DS18B20写时序如图6所示。
图6:DS18B20的写时序
写时序分为写0和写1两个过程,当要写0时,单总线要被拉低至少60us,保证DS18B20能够在15到45us之间正确地采样总线上的0电平。当要写1时,单总线被拉低之后,在15us之内就得释放总线。写0时序和写1时序两个过程可以合并为一个子程序,分别在DS18B20的采样区送0和1,写程序如下:
由于DS18B20的温度转换数据是按补码形式表示的,所以对温度大于0摄氏度的数据,只需将读到的16位温度数据(读到的高8位数据左移8位后)乘以5除以8,就可以得到带一位小数的温度值。而小于0摄氏度的数据需要先求补码后再进行转换,转换时不考虑符号,转换结束后再将符号加上。例如:温度+85摄氏度所对应数据为0x0550,将其乘以5除以8后为0x352,对应于十进制为850,即85.0摄氏度。编写程序如下:
相关文档
最新文档