完整word版DHT22数字温湿度传感器AM2302温湿度模块带说明.docx

上传人:b****4 文档编号:4193286 上传时间:2022-11-28 格式:DOCX 页数:14 大小:249.25KB
下载 相关 举报
完整word版DHT22数字温湿度传感器AM2302温湿度模块带说明.docx_第1页
第1页 / 共14页
完整word版DHT22数字温湿度传感器AM2302温湿度模块带说明.docx_第2页
第2页 / 共14页
完整word版DHT22数字温湿度传感器AM2302温湿度模块带说明.docx_第3页
第3页 / 共14页
完整word版DHT22数字温湿度传感器AM2302温湿度模块带说明.docx_第4页
第4页 / 共14页
完整word版DHT22数字温湿度传感器AM2302温湿度模块带说明.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

完整word版DHT22数字温湿度传感器AM2302温湿度模块带说明.docx

《完整word版DHT22数字温湿度传感器AM2302温湿度模块带说明.docx》由会员分享,可在线阅读,更多相关《完整word版DHT22数字温湿度传感器AM2302温湿度模块带说明.docx(14页珍藏版)》请在冰豆网上搜索。

完整word版DHT22数字温湿度传感器AM2302温湿度模块带说明.docx

完整word版DHT22数字温湿度传感器AM2302温湿度模块带说明

AM2302温湿度传感器C程序(测试可以用)

2017-8-13

说明:

DHT22与DHT11程序基本相同,DHT11起始信号拉低18ms,DHT22起始信号拉低是800us,用户主机(MCU)发送一次起始信号(把数据总线SDA拉低至少800µs)后,AM2302从休眠模式转换到高速模式。

待主机开始信号结束后,AM2302发送响应信号,从数据总线SDA串行送出40Bit 的数据,先发送字节的高位;发送的数据依次为湿度高位、湿度低位、温度高位、温度低位、校验位,发送数据结束触发一次信息采集,采集结束传感器自动转入休眠模式,直到下一次通信来临。

注意事项:

与DHT11相同,一次采集8个位数据,循环4次采集完成所有数据,40位采集完成后,校验数据,如果数据正确,将高8位左移8位与低8位相或,再保存到一个16位变量中,就可以得到一个整数值。

默认采集的数据是实际值的10倍,例如当前实际温度是32.7度,采集到的数据是327,目的是为了编程时方便分离数据。

(详细见后面说明书)

0000001010001100000000010101111111101110

湿度数据温度数据校验和

湿度高8位+湿度低8位+温度高8位+温度低8位=的末8位=校验和

如果需要处理零下值,16位的最高位为1表示负数,温度最大量程:

-20~80度,分辨率:

0.1度。

如果用数据码管显示且有中断,采集数据开始需要关中断,采集结束开中断,否则在采集数据过程中,中断会打断DHT22时序,造成采集数据不正确。

每次采集间隔大于1秒,否则采集数据不准确。

 

C程序:

为了方便程序阅读,其它器件的初始化及定义都删除掉了,以下代码纯DHT22代码,使用时直接调用RH函数即可。

由于程序多次修改,可能有多余的变量,大家自己清理下。

RH函数调用后,以下四个变量会得相应的数据:

R_H湿度高8位

R_L湿度低8位(包含小数)

T_H温度高8位

T_L湿度低8位(包含小数)

如果采集的数据是:

00000010100011000000000101011111

由上面四个变量是16位,采集数据是8位,分四次采完,8位放在16位里面应该是这样:

R_H=0000000000000010

R_L=0000000010001100

所以R_H左移8个位或上R_L才是我们要的数据。

R_H=R_H&R_L

以上采集数据湿度为652,湿度为351,再除以10就是实际温湿度值。

 

#include

#include

typedefunsignedcharU8;/*definedforunsigned8-bitsintegervariable无符号8位整型变量*/

typedefsignedcharS8;/*definedforsigned8-bitsintegervariable有符号8位整型变量*/

typedefunsignedintU16;/*definedforunsigned16-bitsintegervariable无符号16位整型变量*/

typedefsignedintS16;/*definedforsigned16-bitsintegervariable有符号16位整型变量*/

typedefunsignedlongU32;/*definedforunsigned32-bitsintegervariable无符号32位整型变量*/

typedefsignedlongS32;/*definedforsigned32-bitsintegervariable有符号32位整型变量*/

typedeffloatF32;/*singleprecisionfloatingpointvariable(32bits)单精度浮点数(32位长度)*/

typedefdoubleF64;/*doubleprecisionfloatingpointvariable(64bits)双精度浮点数(64位长度)*/

//

#defineucharunsignedchar

#defineuintunsignedint

#defineData_0_time4

//----------------------------------------------//

//----------------IO口定义区--------------------//

//----------------------------------------------//

sbitP2_0=P3^2;

//----------------------------------------------//

//----------------定义区--------------------//

//----------------------------------------------//

U8U8FLAG,k;

U8U8count,U8temp;

U8U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;

U8U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;

U8U8comdata;

U8outdata[5];//定义发送的字节数

U8indata[5];

U8count,count_r=0;

U8str[5]={"RS232"};

U16U16temp1,U16temp2;

U16R_H,R_L,T_H,T_L;

voidDelay(U16j)

{U8i;

for(;j>0;j--)

{

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

}

}

voidDelay_10us(void)

{

U8i;

i--;

i--;

i--;

i--;

i--;

i--;

}

voidCOM(void)

{

U8i;

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

{

U8FLAG=2;

while((!

P2_0)&&U8FLAG++);

Delay_10us();

Delay_10us();

Delay_10us();

U8temp=0;

if(P2_0)U8temp=1;

U8FLAG=2;

while((P2_0)&&U8FLAG++);

//超时则跳出for循环

if(U8FLAG==1)break;

//判断数据位是0还是1

//如果高电平高过预定0高电平值则数据位为1

U8comdata<<=1;

U8comdata|=U8temp;//0

}//rof

}

//--------------------------------

//-----湿度读取子程序------------

//--------------------------------

//----以下变量均为全局变量--------

//----温度高8位==U8T_data_H------

//----温度低8位==U8T_data_L------

//----湿度高8位==U8RH_data_H-----

//----湿度低8位==U8RH_data_L-----

//----校验8位==U8checkdata-----

//----调用相关子程序如下----------

//----Delay();,Delay_10us();,COM();

//--------------------------------

voidRH(void)

{

//主机拉低18ms

P2_0=0;

Delay(18);

P2_0=1;

//总线由上拉电阻拉高主机延时20us

EA=0;

Delay_10us();

Delay_10us();

Delay_10us();

Delay_10us();

//主机设为输入判断从机响应信号

P2_0=1;

//判断从机是否有低电平响应信号如不响应则跳出,响应则向下运行

if(!

P2_0)//T!

{

U8FLAG=2;

//判断从机是否发出80us的低电平响应信号是否结束

while((!

P2_0)&&U8FLAG++);

U8FLAG=2;

//判断从机是否发出80us的高电平,如发出则进入数据接收状态

while((P2_0)&&U8FLAG++);

//数据接收状态

COM();

U8RH_data_H_temp=U8comdata;

COM();

U8RH_data_L_temp=U8comdata;

COM();

U8T_data_H_temp=U8comdata;

COM();

U8T_data_L_temp=U8comdata;

COM();

U8checkdata_temp=U8comdata;

P2_0=1;

//数据校验

U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);

if(U8temp==U8checkdata_temp)

{

R_H=U8RH_data_H_temp;

R_L=U8RH_data_L_temp;

T_H=U8T_data_H_temp;

T_L=U8T_data_L_temp;

U8checkdata=U8checkdata_temp;

}

}

EA=1;

}

说明书:

数字温湿度传感器

AM2302

小体积AM2302

►相对湿度和温度测量

►全部校准,数字输出

►卓越的长期稳定性

►无需额外部件

►超长的信号传输距离

►超低能耗

►4引脚安装

►完全互换

AM2302产品概述

AM2302数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。

它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。

传感器包括一个电容式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。

因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。

每个AM2302传感器都在极为精确的湿度校验室中进行校准。

校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。

单线制串行接口,使系统集成变得简易快捷。

超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。

产品为4针单排引脚封装。

连接方便,特殊封装形式可根据用户需求而提供。

应用领域

►暖通空调►测试及检测设备

►汽车►数据记录器

►消费品►自动控制

►气象站►家电

►湿度调节器►医疗

1、传感器性能说明

参数

条件

Min

Typ

Max

单位

湿度

分辨率

0.1

%RH

16

Bit

重复性

±0.3

%RH

精度

25℃

±2

%RH

-20-80℃

±2

%RH

互换性

可完全互换

采样周期

2

S

响应时间

1/e(63%)25℃,1m/s空气

<5

S

迟滞

<±0.3

%RH

长期稳定性

典型值

<±0.5

%RH/yr

温度

分辨率

0.1

16

Bit

重复性

±0.2

精度

<±0.5

量程范围

-40

80

响应时间

1/e(63%)

6

20

S

2、采样周期不得低于最小值,否则会引起错误

3、接口说明

建议连接线长度短于20米时用5K上拉电阻,大于20米时根据实际情况使用合适的上拉电阻

AM2302的接线图如下图所示。

3、电源引脚

AM2302的供电电压为3.3-6V。

传感器上电后,要等待1s以越过不稳定状态在此期间无需发送任何指令。

电源引脚(VDD,GND)之间可增加一个100nF的电容,用以去耦滤波。

4、单总线接口

DATA用于微处理器与AM2302之间的通讯和同步,采用单总线数据格式,一次通讯时间5ms左右,具体格式在下面说明,当前数据传输为40bit,高位先出。

数据格式:

40bit数据=16bit湿度数据+16bit温度数据+8bit校验和

例子:

接收40bit数据如下:

0000001010001100000000010101111111101110

湿度数据温度数据校验和

湿度高8位+湿度低8位+温度高8位+温度低8位=的末8位=校验和

例如:

00000010+10001100+00000001+01011111=11101110

湿度=65.2%RH温度=35.1℃

当温度低于0℃时温度数据的最高位置1。

例如:

-10.1℃表示为1000000001100101

用户主机(MCU)发送一次开始信号后,AM2302从低功耗模式转换到高速模式,等待主机开始信号结束后,AM2302发送响应信号,送出40bit的数据,并触发一次信号采集。

(注:

主机从AM2302读取的温湿度数据总是前一次的测量值,如两次测量间隔时间很长,请连续读两次以获得实时的温湿度值)

图1

空闲时总线为高电平,通讯开始时主机(MCU)拉低总线1~10ms后释放总线,延时20-40us后主机开始检测从机(AM2302)的响应信号。

从机的响应信号是一个80us左右的低电平,随后从机在拉高总线80us左右代表即将进入数据传送。

图2

高电平后就是数据位,每1bit数据都是由一个低电平时隙和一个高电平组成。

低电平时隙就是一个50us左右的低电平,它代表数据位的起始,其后的高电平的长度决定数据位所代表的数值,较长的高电平代表1,较短的高电平代表0。

共40bit数据,当最后一Bit数据传送完毕后,从机将再次拉低总线50us左右,随后释放总线,由上拉电阻拉高。

数字1信号表示方法如图4所示

图4

数字0信号表示方法.如图5所示

图5

5、测量分辨率

测量分辨率分别为16bit(温度)、16bit(湿度)。

6、电气特性

VDD=5V,T=25℃,除非特殊标注

参数

条件

min

typ

max

单位

供电

DC

3.3

6

V

供电电流

测量

1

1.5

mA

待机

40

50

uA

采样周期

2

注:

采样周期间隔不得低于2秒钟(建议2秒以上)。

7、应用信息

7.1工作与贮存条件

超出建议的工作范围可能导致高达3%RH的临时性漂移信号。

返回正常工作条后,传感器会缓慢地向校准状态恢复。

要加速恢复进程/可参阅7.3小节的“恢复处理”。

在非正常工作条件下长时间使用会加速产品的老化过程。

7.2暴露在化学物质中

电容式湿度传感器的感湿层会受到化学蒸汽的干扰,化学物质在感应层中的扩散可能导致测量值漂移和灵敏度下降。

在一个纯净的环境中,污染物质会缓慢地释放出去。

下文所述的恢复处理将加速实现这一过程。

高浓度的化学污染会导致传感器感应层的彻底损坏。

7.3恢复处理

置于极限工作条件下或化学蒸汽中的传感器,通过如下处理程序,可使其恢复到校准时的状态。

在50-60℃和<10%RH的湿度条件下保持2小时(烘干);随后在20-30℃和>70%RH的湿度条件下保持5小时以上。

7.4温度影响

气体的相对湿度,在很大程度上依赖于温度。

因此在测量湿度时,应尽可能保证湿度传感器在同一温度下工作。

如果与释放热量的电子元件共用一个印刷线路板,在安装时应尽可能将DHT22远离发热电子元件,并安装在热源下方,同时保持外壳的良好通风。

7.5光线

长时间暴露在太阳光下或强烈的紫外线辐射中,会使性能降低。

7.6配线注意事项

DATA信号线材质量会影响通讯距离和通讯质量,推荐使用高质量屏蔽线。

8、封装信息

①小体积封装

引脚号:

从左到右顺序为1、2、3、4.

DHT22小体积封装引脚说明

Pin

名称

注释

1

VDD

供电3.3-6VDC

2

DATA

串行数据,单总线

3

NC

空脚,请悬空

4

GND

接地,电源负极

②带电路板安装壳封装

DHT22带电路板安装壳封装引脚说明,大封装:

Pin

名称

注释

1

VDD

供电3.3-6VDC

2

DATA

串行数据,单总线

3

GND

接地,电源负极

4

NC

空脚,请悬空(不要接Vcc或Gnd)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1