《智能产品设计与应用》课件-智能产品开发-DS18B20温度传感器_第1页
《智能产品设计与应用》课件-智能产品开发-DS18B20温度传感器_第2页
《智能产品设计与应用》课件-智能产品开发-DS18B20温度传感器_第3页
《智能产品设计与应用》课件-智能产品开发-DS18B20温度传感器_第4页
《智能产品设计与应用》课件-智能产品开发-DS18B20温度传感器_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

智能产品设计与应用DS18B20温度传感器案例导入01/PART

ONEDS18B20温度传感器设计任务【8-1】温度传感器DS18B20工作原理【8-2】DS18B20温度数据采集上报【8-3】光照电压与温度数据采集上报【8-4】基于数据监测助手的光温采集上报DS18B20温度传感器任务8.1DS18B20温度数据采集上报将温度模块装到扩展口,信号线接到至P0_7。USART0选择UART模式,波特率9600,I/O引脚映射到备用位置1。将DS18B20底层驱动文件复制到工程文件下,并进行移植。在主函数中,每隔一段时间进行一次温度采集,通过串口发送字符串“温度数据:XX.X摄氏度\r\n"到上位机,LED1作为采样指示灯,启动温度转换前点亮LED1灯,上报完成关闭LED1灯。CC2530模块P1_0P0_7LED1AIN6DS18B20温度传感器1.DS18B20的基本概述工作电压:3.0V~5.5V。测量范围:-55摄氏度~+125摄氏度。通信方式:单总线,数据线接上拉电阻,使总线空闲时,处于高电平。转换精度:9~12位分辨率可调,默认为12位,即分辨率是0.0625。转换时间:典型值200ms。DS18B20温度传感器2.DS18B20的内部存储结构DS18B20的内部有64位的ROM单元和9字节的高速暂存器。64位ROM单元包含了DS18B20唯一的序列号。第0字节:温度数据的低8位。第1字节:温度数据的高8位。第2字节:TH用户字节,设置报警温度最高值。第3字节:TL用户字节,设置报警温度最低值。第4字节:配置寄存器,设置转换精度,默认12位。第5、6、7字节:保留,不用管。第8字节:CRC码。注:上电后,第2字节、第3字节和第4字节的状态值为EEPROM中的数据。DS18B20温度传感器DS18B20以16位带符号位扩展的二进制补码形式读出。低4位为小数部分,中间7位为整数部分。高5位为扩展符号位,即BIT15~BIT11为00000,读出的数据为正温度,若为11111,则为负温度。在应用开发中,首先要对读出的温度数据的符号位进行判断,再根据正负温度的不同,进行相应的处理。3.DS18B20的温度数据格式与处理DS18B20温度传感器3.DS18B20的温度数据格式与处理从输出数据与温度值的关系表中可知,DS18B20的分辨率为0.0625。读出数据为正温度时,将LSB和MSB整合成的16位整数,直接乘以0.0625即可。读出数据为负温度时,则需要将LSB和MSB整合成的16位整数,取反加1后,再乘以0.0625,因为温度数据是以补码形式表示的。例如:读出结果为00A2H,温度值=162×0.0625=10.125摄氏度。

读出结果为FF5EH,取反加1就是00A2H,温度值则为-10.125摄氏度。DS18B20温度传感器复位:让其处于初始状态;写时序:将命令写入温度传感器中;读时序:从温度传感器中读取数据。4.DS18B20的读取方式DS18B20温度传感器5.DS18B20的复位时序微处理器首先将总线拉低480us微秒以上,然后释放总线。总线释放后,上拉电阻会将其拉至高电平。DS18B20发现总线有0us后,拉低总线,表示应答。微处理器在DS18B20应答上升沿,等待15~60us期间,读取总线上的电平,如果是低电平则表示复位成功。DS18B20在产生60~240us的应答信号后,会释放总线。DS18B20温度传感器微处理器首先将总线拉低480us以上,然后释放总线。总线释放后,上拉电阻会将其拉至高电平。DS18B20发现总线有上升沿,等待15~60us后,拉低总线,表示应答。微处理器在DS18B20应答期间,读取总线上的电平,如果是低电平则表示复位成功。DS18B20在产生60~240us的应答信号后,会释放总线。5.DS18B20的复位时序DS18B20温度传感器5.DS18B20的复位时序//DS18B20的复位底层驱动代码参考--51版bitInit_DS18B20(void)

{

bitinitflag=

0;

DQ=

0;

Delay_OneWire(50);

//拉低总线480us以上

DQ=

1;

//释放总线

Delay_OneWire(5);

//等待15~60us

initflag=DQ;

//读取18B20的复位应答信号

Delay_OneWire(10);

//等待60~240us

returninitflag;

//应答信号为低电平,表示复位成功

}

DS18B20温度传感器6.DS18B20的写时序(低位先发)微处理器将总线拉低10~15us。在接下来的15~45us直接,根据逻辑1或逻辑0,控制总线的高低电平。释放总线。DS18B20温度传感器微处理器将总线拉低10~15us。在接下来的15~45us直接,根据逻辑1或逻辑0,控制总线的高低电平。释放总线。6.DS18B20的写时序(低位先发)//DS18B20的写操作底层驱动代码参考--51版

void

Write_DS18B20(unsigned

chardat)

{

unsigned

chari;

for(i=0;i<8;i++)

{

DQ=

0;

//先拉低总线电平10~15us

DQ=dat&0x01;

//向总线写入一个位数据

Delay_OneWire(5);

//维持状态20~45us

DQ=

1;

//释放总线

dat>>=

1;

//准备发送下一个数据位

}

}

写一个字节DS18B20温度传感器7.DS18B20的读时序(低位先读)微处理器先将总线拉低10-15us,然后释放总线。微处理器读取总线上的电平。微处理器读取电平后,延时约45us。DS18B20温度传感器微处理器先将总线拉低10-15us,然后释放总线。微处理器读取总线上的电平。微处理器读取电平后,延时约45us。7.DS18B20的读时序(低位先读)

//DS18B20的读操作底层驱动代码参考--51版

unsigned

char

Read_DS18B20(void)

{

unsigned

chari;

unsigned

chardat;

for(i=0;i<8;i++)

{

DQ=

0;

//先将总线电平拉低10~15us

dat>>=

1;

DQ=

1;

//然后释放总线

if(DQ)

//读取总线上的电平状态

{dat|=

0x80;

}

Delay_OneWire(5);

//延时45us左右,再度下一个数据位

}

returndat;

}

DS18B20温度传感器8.DS18B20的几个重要指令CCH:跳过ROM指令。忽略64位ROM地址,直接向DS18B20发起各种执行指令。44H:温度转换指令。启动DS18B20进行温度转换。BEH:读取暂存器指令。DS18B20收到该指令后,会逐个输出高速暂存器中字节0到字节9的内容。如果要停止读取,必须进行复位操作。如果只需要读取温度数据,那么,在读完第0个字节和第1个字节数据后,不再理会DS18B20后面发出的数据即可。DS18B20温度传感器9.DS18B20温度采样应用开发要点微处理器访问DS18B20需要遵循以下的步骤:DS18B20复位

–>

执行ROM指令

–>

执行DS18B20功能指令DS18B20的复位操作,在某种意义上可以理解为一个访问DS18B20的开始。ROM操作,主要有访问、搜索、匹配等,在单点传感器的应用中,可以直接跳过ROM指令(CCH)。DS18B20温度传感器9.DS18B20温度采样应用开发要点微处理器读取单个DS18B20的温度数据,可参考以下步骤:DS18B20复位。写入字节0xCC,跳过ROM指令。写入字节0x44,开始温度转换。延时700~900ms。DS18B20复位。写入字节0xCC,跳过ROM指令。写入字节0xBE,读取高速暂存器。读取暂存器的第0字节,即温度数据的LSB。读取暂存器的第1字节,即温度数据的MSB。DS18B20复位,表示读取数据结束。将LSB和MSB整合成为一个16位数据。判断读取结果的符号,进行正负温度的数据处理。DS18B20温度传感器9.DS18B20温度采样应用开发要点//DS18B20温度采样与结果处理参考代码

void

Read_Temperature()

{

unsigned

charLSB,MSB;

Init_DS18B20();

//DS18B20复位

Write_DS18B20(0xCC);

//跳过ROM操作指令

Write_DS18B20(0x44);

//开始温度转换

Delay(1000);

//延时700ms左右,等待温度转换完成

Init_DS18B20();

//DS18B20复位

Write_DS18B20(0xCC);

//跳过ROM操作指令

Write_DS18B20(0xBE);

//开始读取高速暂存器LSB=

Read_DS18B20();

//读取温度数据的低8位

MSB=

Read_DS18B20();

//读取温度数据的高8位Init_DS18B20();

//DS18B20复位,停止暂存器数据读取T_dat=

0x0000;

T_dat=MSB;

T_dat<<=

8;

T_dat=T_dat|LSB;

//将LSB和MSB整合成为一个16位的整数

//首先通过温度数据的高5位判断采用结果是正温度还是负温度

if((T_dat&

0xf800)

温馨提示

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

评论

0/150

提交评论