温湿度传感器和1602

上传人:痛*** 文档编号:65053518 上传时间:2022-03-22 格式:DOC 页数:40 大小:1.86MB
收藏 版权申诉 举报 下载
温湿度传感器和1602_第1页
第1页 / 共40页
温湿度传感器和1602_第2页
第2页 / 共40页
温湿度传感器和1602_第3页
第3页 / 共40页
资源描述:

《温湿度传感器和1602》由会员分享,可在线阅读,更多相关《温湿度传感器和1602(40页珍藏版)》请在装配图网上搜索。

1、温湿度传感器数字温湿一体传感器DHT111、概述 DHTxx 系列数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式测湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此,该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHTxx传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在 OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行输出接口,使系统集成变得简易快捷。超小的体积、极低的功耗,使其成为各类

2、应用甚至最为苛刻的应用场合的最佳选则。本产品为 4 针单排引脚封装,特殊封装形式可根据用户需求而提供。 、产品特性 u 湿温度传感器的一体化结构能相对的同时对相对湿度和温度进行测量 。 u 数字信号输出,从而减少用户信号的预处理负担。 u 单总线结构输出有效的节省用户控制器的I/O口资源。并且,不需要额外电器元件。 u 独特的单总数据传输线协议使得读取传感器的数据更加便捷。 u 全部校准。编码方式为8位二进制数。 u 40bit 二进制数据输出。其中湿度整数部分占1Byte,小数部分1Byte;温度整数部分1Byte,小数部分1Byte。其中,湿度为高16位。最后1Byte为校验和。 u 卓越

3、的长期稳定性,超低功耗。 u 4引脚安装,超小尺寸。 u 各型号管脚完全可以互换。 u 测量湿度范围从20RH到90RH;测量温度范围从0到50。 u 适用范围包括恒湿控制,消费家电类产品,温湿度计等领域。 、外型与引脚排列 图3.0 DHT11外型及管脚4、详细引脚说明传感器管脚方向识别:正面(有通气孔的一面)看过去,从左到右依次为1、2、3、4脚。 表4.0:引脚说明 引脚号引脚名类型引脚说明1VCC电源正电源输入,3V-5.5V DC2Dout输出串行数据,单总线3NC空空脚,扩展未用,请悬空4GND地接地,电源负极电源引脚,DHT11的供电电压为 3.55.5V。传感器上电后,要等待

4、1s 以越过不稳定状态在此期间不要发送任何指令。电源引脚(VDD,GND)之间可增加一个100nF 的电容,用以去耦滤波。 5、传感器性能说明参数条件 Min Typ Max 单位 湿度分辨率1 1 1 %RH 8 Bit 重复性1 %RH 精度25 4 %RH 050 5 %RH 互换性 可完全互换 量程范围0 30 90 %RH 25 20 90 %RH 50 20 80 %RH 响应时间 1/e(63%)25,1m/s 空气 6 10 15 S 迟滞 1 %RH 长期稳定性 典型值 1 %RH/yr 温度 分辨率 1 1 1 8 8 8 Bit 重复性 1 精度 1 2 量程范围 0 5

5、0 响应时间 1/e(63%) 6 30 S 6、连接接口说明 DHTxx数字湿温度传感器连接电路简单,只需要占用控制器一个I/O口即可完成上下位的连接。典型应用电路如下图所示。另外,建议连接线长度短于20时用5K上拉电阻,大于20米时根据实际情况使用合适的上拉电阻,如图5.0所示。图6.0 典型电路连接 7、数据格式及处理 7.1、格式 数字湿温度传感器采用单总线数据格式。即,单个数据引脚端口完成输入输出双向传输。其数据包由5Byte(40Bit)组成。一次通讯时间最大3ms,数据分小数部分和整数部分,具体格式在下面说明。 DATA 用于微处理器与 DHTxx之间的通讯和同步,采用单总线数据

6、格式, 当前小数部分用于以后扩展,现读出为0。操作流程如下: 一次完整的数据传输为40bit,高位先出。 数据格式:8bit湿度整数数据+8bit湿度小数数据 +8bit温度整数数据+8bit温度小数数据 +8bit校验和 校验和数据为前四个字节相加。 具体见表6.1: 湿度温度校验 整数小数整数小数 8Bit 8Bit8Bit8Bit8Bit 7.2、数据编码及处理 传感器数据输出的是未编码的二进制数据。数据(湿度、温度、整数、小数)之间应该分开处理。如果,某次从传感器中读取如下5Byte数据: byte4 byte3 byte2 byte1 byte0 00101101 00000000

7、00011100 00000000 01001001 整数 小数 整数 小数 校验和 湿度 温度 校验和 由以上数据就可得到湿度和温度的值,计算方法: humi (湿度)= byte4 . byte3=45.0 (RH) temp (温度)= byte2 . byte1=28.0 ( ) jiaoyan(校验)= byte4+ byte3+ byte2+ byte1=73 8、时序 DHT11传感器是通过奥松电子有限公司开发的单总线协议和上位机(控制器)进行数据通信。DHTxx传感器需要严格的读写协议来确保数据的完整性。整个读写分为,上位机发送起始信号,上位机接收下位机发来的握手响应信号,读0

8、,和读1四个步骤。所有的信号除主机启动复位信号外,全部都由DHTxx产生。 通过单总线访问DHTxx顺序归纳如下: u 主机发开始信号 u 主机等待接收DHTxx响应信号 u 主机连续接收40Bit的数据和校验和 u 数据处理8.1、主机复位信号和DHT响应信号 图7.1 DHT复位时序用户主机发送一次开始信号(低电平)DHT从低速模式转换到高速模式,等待主机开始信号结束(拉高)后,DHT发送响应信号,送出40bit的数据,并触发一次信号采集,用户可选择读取部分数据。注意:总线线空闲状态为高电平,主机把总线线拉低等待DHT响应,主机把总线线拉低必须大于18毫秒,保证DHT能检测到起始信号。 D

9、HT接收到主机的开始信号后,等待主机开始信号结束,然后发送低电平响应信号。主机发送开始信号结束后,延时等待20-40us后, 读取DHT的回应信号,主机发送开始信号后,可以切换到输入模式,或者输出高电平均可,总线线由上拉电阻拉高。8.2、DHT开始发送数据流程 图7.2 读DHT数据流程主机发送开始信号后,延时等待20us-40us后读取DHT的回应信号,读取总线为低电平,说明DHT发送响应信号,DHT发送响应信号后,再把总线拉高,准备发送数据,每一bit数据都以低电平开始,格式见下面图示。如果读取响应信号为高电平,则DHT没有响应,请检查线路是否连接正常。 8.3、数字0信号表示方法 图7.

10、3 信号0时序图 数字0表示方法为,首先DHT把总线拉低12-14us然后拉高,高电平保持时间在26-28us这个范围内。则此比特为0电平。 8.4、数字1信号表示方法 图7.4 信号1时序图 数字1表示方法为,首先DHT把总线拉低12-14us然后拉高,高电平保持时间在116-118us这个范围内。则此比特为1电平。 9、 测量分辨率 测量分辨率分别为 8bit(温度)、8bit(湿度)。 10、电气特性 VDD=5V,T = 25,除非特殊标注 参数 条件 min typmax单位 供电 DC 3 5 5.5V 供电电流 测量 0.5 2.5mA 平均 0.2 0.5mA 待机 100 1

11、50uA 采样周期 秒 1 次 注:采样周期间隔不得低于1秒钟。 11、应用信息 11.1工作与贮存条件 超出建议的工作范围可能导致高达3%RH的临时性漂移信号。返回正常工作条后,传感器会缓慢地向校准状态恢复。要加速恢复进程/可参阅7.3小节的“恢复处理”。在非正常工作条件下长时间使用会加速产品的老化过程。 11.2暴露在化学物质中 电阻式湿度传感器的感应层会受到化学蒸汽的干扰,化学物质在感应层中的扩散可能导致测量值漂移和灵敏度下降。在一个纯净的环境中,污染物质会缓慢地释放出去。下文所述的恢复处理将加速实现这一过程。高浓度的化学污染会导致传感器感应层的彻底损坏。 11.3恢复处理 置于极限工作

12、条件下或化学蒸汽中的传感器,通过如下处理程序,可使其恢复到校准时的状态。在50-60和70%RH的湿度条件下保持 5小时以上。 11.4温度影响 气体的相对湿度,在很大程度上依赖于温度。因此在测量湿度时,应尽可能保证湿度传感器在同一温度下工作。如果与释放热量的电子元件共用一个印刷线路板,在安装时应尽可能将DHT11远离电子元件,并安装在热源下方,同时保持外壳的良好通风。为降低热传导,DHT11与印刷电路板其它部分的铜镀层应尽可能最小,并在两者之间留出一道缝隙。 11.5光线 长时间暴露在太阳光下或强烈的紫外线辐射中,会使性能降低。 11.6配线注意事项 DATA信号线材质量会影响通讯距离和通讯

13、质量,推荐使用高质量屏蔽线。 12、封装信息 13、 焊接信息 手动焊接,在最高260的温度条件下接触时间须少于10秒。 14、注意事项 (1)避免结露情况下使用。 (2)长期保存条件:温度1040,湿度60以下。 例程:/*/ DHT11使用范例 /单片机 : AT89S52 或 STC89C52RC / 功能 :串口发送温湿度数据 波特率 9600 /硬件连接: P3.3口为通讯口连接DHT11,DHT11的电源和地连接单片机的电源和地,单片机串口加MAX232连接电脑/*/#include #include stdio.h#define LCD_DATA P1 /LCD1602 data

14、 transfer define#define uchar unsigned char /定义一下方便使用#define uint unsigned intsbit bit11=P33;sbit LCD_E = P34;sbit LCD_RS = P35; /1602 control define sbit RW = P36; void Delay_ms(unsigned int n); void Delay_us(unsigned char n); uchar U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;float F1

15、6T,F16RH; /用于最终读取的温湿度数据/* 名 称:LCD_en_write(void) * 功 能:液晶使能* 入口参数:无* 出口参数:无* 范 例: 直接调用*CD_set_xy*/void LCD_en_write(void) /液晶使能 Delay_ms(1); LCD_E=1;/EN=1 Delay_ms(1); LCD_E=0;/EN=0/* 名 称:LCD_byte(abc); * 功 能:写一个字符到 or called one byte to LCD中* 入口参数:* 出口参数:无*LCD_set_xy*/void LCD_byte(unsigned char ab

16、c) RW = 0; LCD_E = 0; LCD_DATA = abc; LCD_en_write();/* 名 称:LCD_write_char(uchar cd,uchar ab) * 功 能:写指令或数据 当写ab时 应使cd=0 当cd不为0 则写cd 且ab的赋值无效* 入口参数:cd:指令内容ab:数据内容 指令常量已在上面定义 但一般不用* 出口参数:无* 范 例: LCD_write_char( 0, f)*LCD_set_xy*/void LCD_write_char(uchar cd,uchar ab) / 写数据 /Delay_us(20); if(cd=0) LCD_

17、RS=1; /RS=1,写显示内容 LCD_byte(ab); else LCD_RS=0; /RS=0,写命令 LCD_byte(cd); /* 名 称:LCD_set_xy( uchar x, uchar y ) the optic sign flash?* 功 能:指定一个地址* 入口参数:X:横坐标 Y:纵坐标 * 出口参数:无* 范 例: LCD_set_xy(5,1)*CD_set_xy*/void LCD_set_xy( uchar x, uchar y ) /写地址函数 unsigned char address; if (y=0) address =0x80+x; else

18、address =0xc0+x; LCD_write_char( address, 0 ); /* 名 称:LCD_write_str(uchar X,uchar Y,uchar *s)主函数调用* 功 能:在指定地址写一个字符串 eg:Y=0,1,2,3,4,5,6,7,8,9,10.15。 X=0,1。* 入口参数:X:横坐标 Y:纵坐标 *s:字符串首地址* 出口参数:无* 范 例: LCD_write_str(1,1,uchar *s)*/void LCD_write_str(unsigned char X,unsigned char Y,unsigned char *s) LCD_w

19、rite_char(0, ); LCD_set_xy( X, Y ); /写地址 while (*s) / 写显示字符 LCD_write_char( 0, *s );s +; /* 名 称:Init_Lcd() 主函数调用* 功 能:Lcd初始化* 入口参数:无* 出口参数:无* 范 例: 在主函数中直接调用*/void Init_Lcd() /LCD初始化 LCD_write_char(0x38,0); Delay_ms(1); LCD_write_char(0x38,0); Delay_ms(1); LCD_write_char(0x38,0); Delay_ms(1); LCD_wri

20、te_char(0x0c,0); Delay_ms(1); LCD_write_char(0x06,0); Delay_ms(1); LCD_write_char(0x0c,0); Delay_ms(1); /在液晶中显示浮点数函数LCD_value(unsigned char x,unsigned char y,float f)unsigned char str15; /不能定义为char* str,数组长度一定要大于浮点数的总位数sprintf(str,%.1f,f); /1表示小数位数 小数太多 自动四舍五入LCD_write_str( x, y, str);return 0;/ rea

21、d 8 bits onice char COM(void) char i,U8temp,U8comdata; for(i=0;i8;i+) while(!bit11); /表示读取的高电位延时大于20多us 则读取的是1 否则读取的是0 Delay_us(35); /通过U8FLAG 可判断bit11 显示数据的脉长U8temp=0; if(bit11)U8temp=1; while(bit11); U8comdata=1; U8comdata|=U8temp; /U8temp=1; return U8comdata;/-/-温湿度读取子程序 -/-/-以下变量均为全局变量-/-温度高8位=

22、U8T_data_H-/-温度低8位= U8T_data_L-/-湿度高8位= U8RH_data_H-/-湿度低8位= U8RH_data_L-/-校验 8位 = U8checkdata-/-调用相关子程序如下-/- Delay();, Delay_10us();,COM(); /-void getDHT11(void) /主机拉低18ms GO1: bit11=0; Delay_ms(20); bit11=1; /总线由上拉电阻拉高 主机延时60us Delay_us(60); /主机设为输入 判断从机响应信号 / bit11=1; /判断从机是否有低电平响应信号 如不响应则跳出,响应则向

23、下运行 if(!bit11) /T ! while(!bit11);/wait DHT goto high while(bit11); /数据接收状态 U8RH_data_H=COM(); U8RH_data_L=COM(); U8T_data_H=COM(); U8T_data_L=COM(); U8checkdata=COM(); bit11=1; /数据校验 if(U8T_data_H+U8T_data_L+U8RH_data_H+U8RH_data_L)!=U8checkdata) /if check wrong,read again goto GO1; /fi F16T=U8T_da

24、ta_H+(float)U8T_data_L/256;/change integer to float F16RH=U8RH_data_H+(float)U8RH_data_L/256;/* 主函数*/void main () Init_Lcd(); LCD_write_str(0,1,abc); /液晶预显示测试 LCD_value(0,0,34.3); Delay_ms(2000); Init_Lcd(); while(1) getDHT11(); LCD_write_str(0,0,T=); /显示温度 LCD_value(3,0,F16T); LCD_write_str(8,0,C);

25、 /字符 应用转义格式 LCD_write_str(0,1,RH=);/显示温湿度 LCD_value(4,1,F16RH); LCD_write_str(9,1,%); Delay_ms(500); /延时函数文件/以下为延时函数 this is fit to old C51 12MHz, 12 devide freqencyvoid Delay_ms(unsigned int n)/毫秒延时 unsigned char j; while(n-) for(j=0;j125;j+); void Delay_us(unsigned char n) /N us延时函数 精度 4us n=n/2;

26、while(-n); 温度传感器DS18B20DS18B20的特性DS18B20可以程序设定912位的分辨率,精度为0.5C。可选更小的封装方式,更宽的电压适用范围。分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。省略了存储用户定义报警温度、分辨率参数的EEPROM,精度降低为2C,适用于对性能要求不高,成本控制严格的应用,是经济型产品。DS18B20使电压、特性及封装有更多的选择,让我们可以构建适合自己的经济的测温系统。一、 DS18B20的主要特性(1)适应电压范围更宽,电压范围:3.05.5V,在寄生电源方式下可由数据线供电(2)独特的单线接口方式,DS18B20在

27、与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯(3)DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温(4)DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内(5)温范围55125,在-10+85时精度为0.5(6)可编程的分辨率为912位,对应的可分辨温度分别为0.5、0.25、0.125和0.0625,可实现高精度测温(7)在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快(8)测量结果直接输出数字温度信号,以一线总

28、线串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力(9)负压特性:电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。二、DS18B20的外形和内部结构DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。图2: DS18B20内部结构图三、DS18B20工作原理DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。 DS18B20测温原理如图3所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数

29、器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在55所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图3中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。图3: DS18B20测温原理框图DS18B20有4个主要的数据部件: (1)光刻ROM中的64位序列

30、号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。 (2)DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625/LSB形式表达,其中S为符号位。表1: DS18B20温度值格式表这是12位转化后得到的12位数据,存储在18B20的两个8

31、比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。 例如+125的数字输出为07D0H,+25.0625的数字输出为0191H,-25.0625的数字输出为FF6FH,-55的数字输出为FC90H。 表2: DS18B20温度数据表(3)DS18B20温度传感器的存储器 DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EEPRAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。 (4)配置寄

32、存器 该字节各位的意义如下:TMR1R011111表3: 配置寄存器结构低五位一直都是1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动。R1和R0用来设置分辨率,如下表所示:(DS18B20出厂时被设置为12位)R1R0分辨率温度最大转换时间009位93.75ms0110位187.5ms1011位375ms1112位750ms表4: 温度分辨率设置表四、 高速暂存存储器 高速暂存存储器由9个字节组成,其分配如表5所示。当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。单片机可

33、通过单线接口读到该数据,读取时低位在前,高位在后,数据格式如表1所示。对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。表?2是对应的一部分温度值。第九个字节是冗余检验字节。寄存器内容字节地址温度值低位 (LS Byte)0温度值高位 (MS Byte)1高温限值(TH)2低温限值(TL)3配置寄存器4保留5保留6保留7CRC校验值8表5: DS18B20暂存寄存器分布根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,

34、最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,当DS18B20收到信号后等待1660微秒左右,后发出60240微秒的存在低脉冲,主CPU收到此信号表示复位成功。指 令约定代码功 能读ROM33H读DS1820温度传感器ROM中的编码(即64位地址)符合 ROM55H发出此命令之后,接着发出 64 位 ROM 编码,访问单总线上与该编码相对应的 DS1820 使之作出响应,为下一步对该 DS1820 的读写作准备。搜索 ROM0FOH用于确定挂接在同一总线上 DS1820 的个数和识别 64 位 ROM 地址。为操作各器件作好准备。

35、跳过 ROM0CCH忽略 64 位 ROM 地址,直接向 DS1820 发温度变换命令。适用于单片工作。告警搜索命令0ECH执行后只有温度超过设定值上限或下限的片子才做出响应。指 令约定代码功 能温度变换44H启动DS1820进行温度转换,12位转换时最长为750ms(9位为93.75ms)。结果存入内部9字节RAM中。读暂存器0BEH读内部RAM中9字节的内容写暂存器4EH发出向内部RAM的3、4字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。复制暂存器48H将RAM中第3 、4字节的内容复制到EEPROM中。重调 EEPROM0B8H将EEPROM中内容恢复到RAM中的第3

36、 、4字节。读供电方式0B4H读DS1820的供电模式。寄生供电时DS1820发送“ 0 ”,外接电源供电 DS1820发送“ 1 ”。五、DS18B20的应用电路DS18B20测温系统具有测温系统简单、测温精度高、连接方便、占用口线少等优点。下面就是DS18B20几个不同应用方式下的测温电路图: 1、DS18B20寄生电源供电方式电路图如下面图4所示,在寄生电源供电方式下,DS18B20从单线信号线上汲取能量:在信号线DQ处于高电平期间把能量储存在内部电容里,在信号线处于低电平期间消耗电容上的电能工作,直到高电平到来再给寄生电源(电容)充电。独特的寄生电源方式有三个好处:1)进行远距离测温时

37、,无需本地电源2)可以在没有常规电源的条件下读取ROM3)电路更加简洁,仅用一根I/O口实现测温要想使DS18B20进行精确的温度转换,I/O线必须保证在温度转换期间提供足够的能量,由于每个DS18B20在温度转换期间工作电流达到1mA,当几个温度传感器挂在同一根I/O线上进行多点测温时,只靠4.7K上拉电阻就无法提供足够的能量,会造成无法转换温度或温度误差极大。因此,图4电路只适应于单一温度传感器测温情况下使用,不适宜采用电池供电系统中。并且工作电源VCC必须保证在5V,当电源电压下降时,寄生电源能够汲取的能量也降低,会使温度误差变大。注: 站长曾经就此电路做过实验,在实验中,降低电源电压V

38、CC,当低于4.5V时,测出的温度值比实际的温度高,误差较大。当电源电压降为4V时,温度误差有3之多,这就应该是因为寄生电源汲取能量不够造成的吧,因此,站长建议大家在开发测温系统时不要使用此电路。图42、DS18B20寄生电源强上拉供电方式电路图改进的寄生电源供电方式如下面图5所示,为了使DS18B20在动态转换周期中获得足够的电流供应,当进行温度转换或拷贝到E2存储器操作时,用MOSFET把I/O线直接拉到VCC就可提供足够的电流,在发出任何涉及到拷贝到E2存储器或启动温度转换的指令后,必须在最多10S内把I/O线转换到强上拉状态。在强上拉方式下可以解决电流供应不走的问题,因此也适合于多点测

39、温应用,缺点就是要多占用一根I/O口线进行强上拉切换。图5注意:在图4和图5寄生电源供电方式中,DS18B20的VDD引脚必须接地3、DS18B20的外部电源供电方式在外部电源供电方式下,DS18B20工作电源由VDD引脚接入,此时I/O线不需要强上拉,不存在电源电流不足的问题,可以保证转换精度,同时在总线上理论可以挂接任意多个DS18B20传感器,组成多点测温系统。注意:在外部供电的方式下,DS18B20的GND引脚不能悬空,否则不能转换温度,读取的温度总是85。图6:外部供电方式单点测温电路图7:外部供电方式的多点测温电路图外部电源供电方式是DS18B20最佳的工作方式,工作稳定可靠,抗干

40、扰能力强,而且电路也比较简单,可以开发出稳定可靠的多点温度监控系统。站长推荐大家在开发中使用外部电源供电方式,毕竟比寄生电源方式只多接一根VCC引线。在外接电源方式下,可以充分发挥DS18B20宽电源电压范围的优点,即使电源电压VCC降到3V时,依然能够保证温度量精度。六、DS1820使用中注意事项 DS1820虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题: 1) 较小的硬件开销需要相对复杂的软件进行补偿,由于DS1820与微处理器间采用串行数据传送,因此,在对DS1820进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。在

41、使用PL/M、C等高级语言进行系统程序设计时,对DS1820操作部分最好采用汇编语言实现。 2) 在DS1820的有关资料中均未提及单总线上所挂DS1820数量问题,容易使人误认为可以挂任意多个DS1820,在实际应用中并非如此。当单总线上所挂DS1820超过8个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时要加以注意。 3) 连接DS1820的总线电缆是有长度限制的。试验中,当采用普通信号电缆传输长度超过50m时,读取的测温数据将发生错误。当将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达150m,当采用每米绞合次数更多的双绞线带屏蔽电缆时,正常通讯距离进一步加长。这

42、种情况主要是由总线分布电容使信号波形产生畸变造成的。因此,在用DS1820进行长距离测温系统设计时要充分考虑总线分布电容和阻抗匹配问题。 4) 在DS1820测温程序设计中,向DS1820发出温度转换命令后,程序总要等待DS1820的返回信号,一旦某个DS1820接触不好或断线,当程序读该DS1820时,将没有返回信号,程序进入死循环。这一点在进行DS1820硬件连接和软件设计时也要给予一定的重视。 测温电缆线建议采用屏蔽4芯双绞线,其中一对线接地线与信号线,另一组接VCC和地线,屏蔽层在源端单点接地。例程#includereg52.h#includeintrins.h #define unc

43、har unsigned char#define unint unsigned intsbit rs=P20;sbit rw=P21;sbit en=P22;sbit DQ=P00;/DS18B20部分函数变量 unchar tempL,tempH;unint tmp;void reset();void writechar(unchar dat);unint readchar();unint readtemperature(); void delay(unint t);/液晶部分函数和变量void delay1();unint ttvoid wrcmd(unchar cmd);void wrd

44、ata(unchar date);void display();void lcdchus();void time(unint t);unchar temp2=temperature:;unchar temp3=000.0;/数码管部分/sbit sda=P02;/sbit scl=P03;/sbit inter=P32;/unint n;/void shift();/unchar code table=0x88;/* 写DS18B20开始*/* 延时子函数*/void delay(unint t) unint n;n=0; while(n480us)DQ=1; /拉高数据线 delay(14)

45、; /等待(1560us)这里是等待DS18B20做出回应,如果回应DQ将变低,/MCU是在DQ拉高后开始监视DQ的值的。 /* DS18B20写一个字节函数*/void writechar(unchar dat) unint i; for(i=8;i0;i-) DQ=0; /先将DQ拉低,我们这里先不延时15us先,在下面的 delay(5)一起延了, /因为时序图它是一直保持低电平的DQ=dat&0x01;/去数据的最低位,应为DS18B20是从低到高读的 delay(5);/延时在60-120us之间 DQ=1; /将DQ拉高dat=1;/右移一位 delay(4);/这里延时1us以上

46、 /* DS18B20读一个字节函数*/unint readchar() unchar i,dat=0;/这里要付初值 for (i=8;i0;i-) DQ=1; /DQ稍微拉高,这不可有可无delay(1);/延时小会,这里延时不严格 DQ=0; /按照时序图,将DQ拉低,先不延时,在下面delay(4)在一起延!dat=1;/右移一位 DQ=1; /释放一下总线,等待检查DQ值!if(DQ)/当DQ为1是执行下面,如果DQ为0,值不变。你们想一下。 dat=dat|0x80;/把低位先放在高位,然后右移8次,高位的数据就移到了低位,因为我们是先写低位的! delay(4);/延时60-12

47、0us吧。 return(dat);/返回dat值 /* DS18B20读温度程序*/ unint readtemperature() unint temperature;reset(); /初始化 writechar(0xcc); /写SKIP ROM(跳过检查ROM序列,因为我们一般只有一个DS18B20!)writechar(0x44); /写启动温度转换delay(125); /转换需要一点时间,延时大一点,应该大于500us吧 reset(); /初始化 writechar(0xcc); /写SKIP ROM(跳过检查ROM序列,因为我们一般只有一个DS18B20!) writech

48、ar(0xbe); /读温度寄存器RAM(头两个值分别为温度的低位和高位) tempL=readchar(); /读出温度的低位LSB tempH=readchar(); /读出温度的高位MSB /温度转换,把高低位做相应的运算转化为实际温度 temperature=(tempH*256)+tempL)*0.0625*10+0.5;/tempH*256的意思是tempH向左移8位 delay(200);/两次间隔转换的间隔要延时一下return(temperature); /* 写DS18B20结束*/* 写液晶开始*/* 液晶延时子函数*/void delay1() _nop_(); _no

49、p_(); _nop_(); _nop_(); _nop_();/* 液晶延时子函数*/void time(unint t) unint x,y; for(x=t;x0;x-) for(y=110;y0;y-);/* 检测液晶忙信号子函数*/bit lcdbusy() bit last; rs=0; rw=1; en=1; delay1(); last=(bit)(P2&0x80); en=0; return(last);/* 液晶显示子函数*/void display() unint i; while(lcdbusy(); wrcmd(0xc0);/定位到第二行 while(lcdbusy(); for(i=0;i5;i+) wrdata(temp3); while(lcdbusy();/* 液晶写命令子函数*/void wrcmd(unchar cmd)

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!