内容正文:
项目五 测控仪表
任务5.2 数字温度计
明确任务
在工业控制、智能家居等领域的测量系统中,环境温度的测量和控制是非常普遍和重要的。为了能对温度进行检测,需要温度传感器,把温度转换成相应的电信号。常用的模拟量传感器主要是PT100等,但是需要设计人员进行微弱电信号处理,然后再进行AD转换,将数字信息传给单片机进行处理,非常复杂。目前温度传感器正从模拟向数字方法转变,体积小使用方便,在很多场合已经代替了模拟式传感器。
利用数字式温度传感器DS18B20制作一个数字温度计,利用LCD1602进行显示,精度1℃。
DS18B20是DALLAS公司生产的1-Wire,即单总线器件,用它来组成一个测温系统,具有线路简单,体积小的特点。其全部传感元件及转换电路集成在形如一只三极管的集成电路内。另外1-Wire总线协议,节省且经济,可以挂接多个传感器,组建网络。
知识链接
一、DS18B20简介
DQ为数字信号输入/输出端;
GND为电源地;
VDD为外接供电电源输入端(在寄生电源接线方式时接地)
(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)负压特性:电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。
二、DS18B20内部结构
温度寄存器格式
DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位
常用温度表
DS18B20存储器
配置寄存器结构各位的意义如下
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
TM R1 R0 1 1 1 1 1
低5位一直都是"1",TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动。R1和R0用来设置分辨率
DS18B20的温度分辨率设置
DS18B20的ROM指令
三、DS18B20通信指令
DS18B20的RAM指令
四、DS18B20时序
1.初始化时序
2 写时序
3 读时序
寄生电源供电方式
五、DS18B20供电方式
外部电源供电方式
六、单个采用外部电源供电方式的DS18B20发出温度转换命令
序号 主机 数据(LSB在先) 说明
1 TX 复位 复位脉冲
2 RX 存在应答 应答信号
3 TX CCH 发出跳过ROM指令
4 TX 44H 发出温度转换指令
5 RX 1个字节的数据 读“忙”标志3次,直至数据为FFH
6 TX 复位 复位脉冲
7 RX 存在应答 应答脉冲
8 TX CCH 发出跳过ROM指令
9 TX BEH 读暂存存储器命令
10 RX 9个字节的数据 读暂存存储器以及CRC,并把计算得出的CRC和读出的CRC相比较。如果两者相符,数据有效,主机保存温度值。
11 TX 复位 复位脉冲
12 RX 存在应答 应答脉冲,操作完成
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
七 硬件电路设计
八 ADC0809驱动程序设计
/******* 18B20初始化*******/
void init_DS18B20( )
{
unsigned char x=0;
DQ=1; //DQ复位
delay1(8);
DQ=0; //将DQ拉高
delay1(80);
DQ=1; //拉高总线
delay1(15);
x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
delay1(20);
}
/********ds18b20读一个字节*******/
unsigned char DS18B20_read_byte( )
{
unsigned char i,dat;
for(i=0;i<8;i++)
{
DQ=0;
dat>>=1;
DQ=1;
if(DQ)
dat=dat|0x80;
delay1(4);
}
return dat;
}
/********ds18b20写一个字节*******/
void DS18B20_write_byte(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
DQ=0;
DQ=dat&0x01;
delay1(5);
DQ=1;
dat>>=1;
}
}
/********读取温度********/
unsigned char DS18B20_read_C( )
{
unsigned char di,gao,dat;
init_DS18B20();
DS18B20_write_byte(0xcc); // 跳过读序号列号的操作
DS18B20_write_byte(0x44); // 启动温度转换
delay1(300);
init_DS18B20();
DS18B20_write_byte(0xcc);
DS18B20_write_byte(0xbe); //读取温度寄存器,两个就是温度
delay1(300);
di=DS18B20_read_byte(); //读取温度值低位
gao=DS18B20_read_byte(); //读取温度值高位
gao<<=4;
dat=gao+(di>>4);
return dat;
}
任务实施
1.学生分组,制定方案。
2.查阅资料,搭接硬件电路。
3.建立工程文件,编程编译下载程序调试。
4.注意安全。
评价总结
1.学生根据自己实施情况填写任务实施评价单。
2.组间互评,提出问题,解决问题。
3.回收元件及工具,清洁实施现场,6S标准。
4.知识整理总结。
$$