<
>
  • 温湿度模块DHT21

  • 温湿度模块DHT21产品是采用高稳定性电容式感湿元件作为传感元件,经过微处理器采集处理转化成数字信号输出。每一个传感器都经过标定校准和测试。具有长期稳定、可靠性高、 精度高、低功耗等特点。

1727332071235.png

1727332046351.png

一、 产品概述

本产品是采用高稳定性电容式感湿元件作为传感元件,经过微处理器采集处理转化成数字信号输出。每一个传感器都经过标定校准和测试。具有长期稳定、可靠性高、 精度高、低功耗等特点。

二、 尺寸图

单位:mm(±0.5)

1727313476564.jpg 

  

三、产品特点

DHT21数字温湿度模块具有以下特点:

1、数字输出,单总线协议,通距离支持100米;

2、超低功耗;

3、0-100%相对湿度测量范围;

4、全标定、温漂校准。

5、使用独立感湿元器件,稳定性好,抗污染能力强

四、性能特征

相对湿度                                        温度

参数    

条件   

最小   

典型

最大

单位

分辨率



0.1


%RH

量程范围


0


99.9

%RH

精度

25℃


±3


%RH

重复性



±0.1



响应时间

1/e(63%)


<8


S

迟滞



±0.5



漂移

典型值


<3


%RH/r

参数    

条件   

最小   

典型

最大

单位

分辨率



0.1


工作范围


-40


80

精度



±0.5


重复性



±0.2


响应时间

1/e(63%)

1



S

迟滞



±0.1



漂移

典型值


<0.2


℃/r

 

 

 

 

1727313524710.jpg 

 

 1727313505939.jpg

 

 

五、 电气特性

参数    

条件

最小      

典型  

最大  

单位  

供电电压VDD


2.8

3.3

5.5

V

供电电流

休眠模式


0.2     


uA

测量模式


500


uA

采样周期



2.0


S

低电平输出电压

Io<4mA

0


250

mV

高电平输出电压

Rp<25kΩ

80%


100%

VDD

低电平输入电压

下降沿

0%


20%

VDD

高电平输入电压

上升沿

80%


100%

VDD

输出电流

On



4

mA

三态门(Off)


10

20

μA

3  Io表示低电平输出电流 Rp代表上拉电阻

六、 用户指南  

1727314117024.jpg1、 引脚分配

 引脚

名称

描述

   1

VDD

电源 2.8~5.5V

   2

SDA

串行数据,双向口

   3

NC

NC

   4

GND

        

 4 引脚分配                                   

1.1、电源引脚(VDD GND)

本产品的供电电压为2.8~5.5V,建议供电电压为3.3V。

1.2、串行数据(SDA)

SDA为数据口,三态结构,SDA在SCK时钟下降沿之后改变状态,并仅在SCK上升沿有效

2、通信协议

DHT21为了精确测量气体的湿度,减少温度对测量的影响,DHT21传感器在非工作期间,自动转为休眠模式,以降低传感器自身的发热对周围气体湿度的影响。DHT21采用被动式工作模式,即主机通过指令唤醒传感器后,传感器才开始测量、应答等动作。通讯结束后,传感器进入休眠状态。

2.1、DHT21连接图

 


1727314164392.jpg 

 

  注:上拉电阻一般建议采用10KΩ电阻,传感器与主机传输距离超过10米,建议用5.1KΩ

 

2.2、单总线接口时序    

参数    

符号

最小      

典型  

最大  

单位  

时序长度

tSLOT

60


120

us

恢复时间

tREC

1

5     


us

0低电平时间

     tLOW0

60

60

120

us

1低电平时间

tLOW1

1

5

15

us

读数据有效时间

tRDV


5

15

us

复位低电平时间

tRSTL

480

960


us

应答高电平时间

tPDHIGH

15

30

60

us

应答低电平时间

tPDLOW

60

115

240

us

 

单总线写0时序

1727314211170.jpg 

 

单总线写1时序

1727314235859.jpg 

 

 

单总线读取时序

 

1727314253296.jpg 

    

单总线复位时序

 

1727314269650.jpg 


  

读取湿度校准数A、B

CCDDH

触发温湿度测量

CC10H

读取转化结果

CCBDH

 

 

 

 

 

时序说明:(详细请参考程序例程附件

每一帧时序长度为60us。每次数据通信前使用单总线复位时序,同步时序。

紧接着监测应答信号。

发送指令0xCCDD 获取湿度校准数据A、B

发送指令0xCC10 触发温湿度转化。耗时约30ms

发送指令0xCCBD 获取温湿度转化结果。

客户同样可以无需等待读取,则此时读取的为上次触发转化的温湿度数据。

 

温度、相对湿度转换

通过上面两种方式可以获得16bit温度原始数据St16bit湿度原始数据Sh

最终带入下面公式

 温度(℃):

              1727314651713.jpg

 湿度(%RH):

             1727314676811.jpg 

 

        RHrel = RH + 0.25*(T - 25.0)   (注: 温漂1℃为 -0.25%RH)

          

 : RH限定在0~100,  if(RH>100) RH=100;

                      Else if(RH<0) RH=0;

 

 

1)循环冗余校验(CRC)计算

 

 

u8 CRC8MHT_Cal(u8 *serial, u8 length)

{

    u8 result = 0x00;

    u8 pDataBuf;

    u8 i;

 

    while(length--) {

        pDataBuf = *serial++;

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

            if((result^(pDataBuf))&0x01){

                result ^= 0x18;

                result >>= 1;

                result |= 0x80;

            }

            else {

                result >>= 1;

            }

            pDataBuf >>= 1;

        }

    }

    return result;

}

 

七、 应用信息

1、工作条件

确保传感器性能正常稳定的工作,建议使用温度范围-40℃-80℃,湿度范围0-99.9%RH。超出建议的范围可能导致测量结果暂时性漂移。

2、存储条件与恢复

湿度传感器为环境敏感型电子元器件,需要仔细防护。长期暴露在高浓度的化学蒸汽中将会致使传感器的测量产生漂移。因此建议将传感器存放于原包装内,并符合存储条件:温度范围10℃-50℃;湿度范围20-60%RH。在生产和运输过程中,要保证传感器远离高浓度的化学溶剂。要避免使用挥发性胶水、粘性胶带、不干胶贴纸,或者具有挥发性的包装材料,如发泡塑料袋、泡沫塑料等。

3温度影响

相对湿度,很大程度上依赖于温度。产品在出厂前都做了温度的校准补偿,测量湿度时,应尽可能的保证传感器在同一温度下工作,安装在产品上时要尽可能的远离热源。否则将无法准确的测试到气体的相对湿度。

 

八、 特别说明

许可协议

以上内容由公司提供,版权所有,未经本公司之书面许可,此手册中任何段落,章节内容均不得被摘抄、拷贝或以任何形式复制、传播,否则一切后果由违者自负,本公司保留一切法律权利。

本公司保留对手册所描述之产品规格进行修改的权利,恕不另行通知。订货前,请垂询当地代理商以获悉本产品的最新规格。

警告

使用及人身伤害

勿将本产品用于安全保护装置或急停设备上,以及由于本产品故障可能导致人身受到伤害的任何应用中;在使用本产品前,请仔细阅读本说明书中的内容;

禁止在易燃气体附近使用

禁止在易燃、易爆气体的场所使用;

严禁直接触及传感器

为防止污染感湿膜,避免手指直接触摸元件表面;汗液会污染感湿膜会导致性能漂移,接触传感器请戴防静电手指套;

工作环境

建议使用温度范围-40℃-80℃,湿度范围0-100%RH。超出建议的范围可能导致测量结果暂时性漂移;本产品对光线不敏感,但长时间暴露在太阳光或则紫外线辐射中,同样加速老化

 

附件1:

 

协议说明:

1、上电后数据口SDA高电平。拉低>480us后,让数据口SDA转换为输入状态对电平检测,等待该模块低电平响应信号。发现低电平响应信号后等待模块释放该总线(即变为高电平)。

2、写入字节,(低位先),SDA转为输出口,发送1即:拉低电平>1us <15us然后拉高电平>60us

 发送0即:拉低电平>60us然后拉高电平(该时间要求不高典型值5us)

3、读取字节,(位先出),SDA转为输出口,拉低电平(>1us 典型5us <15us)触发模块输出,释放总线延时5us左右后采样,当总线为高电平,即代表当前接收位为1,否则为0。

 

 

static u16 OwHumA,OwHumB;

 

//初始化,获取校准数据 A B值

void DHT21Init_OW(void)

{

uint8_t i,crc;

u8 ResDat[13];


Timer4Stop(); //暂停有可能打断通信的中断

DQ_Rst();

DQ_Presence();

  DQ_Write_Byte(0xcc);

DQ_Write_Byte(0xdd);


OwHumA = DQ_Read_Byte();

OwHumA = (OwHumA<<8)|DQ_Read_Byte();

OwHumB = DQ_Read_Byte();

OwHumB = (OwHumB<<8)|DQ_Read_Byte();


Timer4Start();

 

//当读取满一组数据即13个字节后,才有CRC值

//无需要时可以按上面读取前面4个即可

/*

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

{

ResDat[i] = DQ_Read_Byte();

}

crc = CRC8MHT_Cal(ResDat,13);

if(crc == 0)

{

OwHumA = ResDat[0];

OwHumA = (OwHumA<<8)|ResDat[1];

OwHumB = ResDat[2];

OwHumB = (OwHumB<<8)|ResDat[3];

}

*/

}

 

//读取温湿度函数

u8 ReadDHT21_onewire(s16 *tem,u16 *hum)

{

u8 ResDat[5],crc=0,ReBit;

u16 i;

s16 TemBuf;

   Long CapBuf;//s32

 

Timer4Stop();//单总线通讯 暂停中断

DQ_Rst();

DQ_Presence();

DQ_Write_Byte(0xcc);

DQ_Write_Byte(0x10);

Timer4Start();  

              //可以不延时直接读取,但读取到的是上次转化的数据

delay(7075);//2ms*15  35ms  改时间可以去处理其他任务回来读取


Timer4Stop();  

DQ_Rst();

DQ_Presence();

DQ_Write_Byte(0xcc);

DQ_Write_Byte(0xbd);

ResDat[0] = DQ_Read_Byte();

ResDat[1] = DQ_Read_Byte();

ResDat[2] = DQ_Read_Byte();

ResDat[3] = DQ_Read_Byte();

ResDat[4] = DQ_Read_Byte();



Timer4Start();

crc = CRC8MHT_Cal(ResDat,5);

if(crc == 0)

{

TemBuf = (u16)ResDat[1]<<8|(ResDat[0]);

TemBuf = 400+TemBuf/25.6;//*10 结果*10倍 286即28.6℃

*tem = TemBuf;


 CapBuf = (u16)ResDat[3]<<8|(ResDat[2]);

    CapBuf = (CapBuf-OwHumB)*600/(OwHumA-OwHumB)+300;//同样结果*10

 

  //20℃为5个湿度点  即1℃为0.25个湿度点 0.1℃ 为0.025

 CapBuf = CapBuf+ 25*(TemBuf-250)/100;

 

 if(CapBuf>999)CapBuf = 999;

 else if(CapBuf<0)CapBuf=0;

*hum = (u16)CapBuf;

}


return crc;

}

 

//子函数-------------------------------

void DQ_Rst(void)

{

HDCSDA_Output();

    DelaySus(2);    //5us 无需严格要求

    HDCSDA_CLR();

    delay(114);  //>480us 典型值960us  规格书:tRSTL

    HDCSDA_SET();

    DelaySus(7);  //8us  无需严格要求

}

 

//应答 DQ_Rst 低电平释放后,模块会有一个 tPDLOW的应答信号

u8  DQ_Presence(void)

{

    u8 pulse_time = 0;

HDCSDA_Input();

    DelaySus(2); //5us 无需严格要求

    while( (HDCGet_SDA()) && pulse_time<100 )   //存在检测高电平15~60us 模块响应高电平时间  tPDHIGH 规格书:

    {

        pulse_time++;

        DelaySus(5);//>6us

    }

    if( pulse_time >=20 )

        return 0x01;

    else

        pulse_time = 0;//应答正常

 

    while((HDCGet_SDA()==0) && pulse_time<240 ) //存在检测低电平时间60~240us  tPDLOW

    {

        pulse_time++;

        DelaySus(2);//1~5us

    }

    if( pulse_time >=10 )// 应答正常

{

         return 0x01;

}

    else

        return 0x0;

}

//拉低最少1us 后延时一小段时间如6us,后再15us内读取完。 后延时45us以上 即一个周期是60us

//tINIT+tRC+tSample < 15us

//tINIT+tRC+tSample+tDelay>60us

u8 DQ_Read_Bit(void)

{

    u8 dat;


HDCSDA_Output();


    HDCSDA_CLR();

    DelaySus(2); //tINIT>1us 典型5us <15us  

 //   HDCSDA_SET();

HDCSDA_Input();

    DelaySus(5);//tRC  典型5us

    if(HDCGet_SDA())//tSample

        dat = 1;

    else

        dat = 0;

    DelaySus(33);//tDelay >60us 确保一帧数据传输完毕

    return dat;

}

u8 DQ_Read_Byte(void)

{

    u8 i, j, dat = 0;

 

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

    {

        j = DQ_Read_Bit();

        dat = (dat) | (j<<i);

    }

    return dat;

}

 

 

void  DQ_Write_Byte(uint8_t dat)

{

    uint8_t i, testb;

HDCSDA_Output();

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

    {

        testb = dat&0x01;

        dat = dat>>1;

       if(testb)//写1

 {

HDCSDA_CLR();

DelaySus(3);//>1us  <15us

HDCSDA_SET();

DelaySus(33);//>=60us

 }

 else//写0

 {

HDCSDA_CLR();

DelaySus(38);//MY_DELAY_US(70);>60us

HDCSDA_SET();

DelaySus(3);//典型5us

 }

    }

}

u8 CRC8MHT_Cal(u8 *serial, u8 length)

{

    u8 result = 0x00;

    u8 pDataBuf;

    u8 i;

 

    while(length--) {

        pDataBuf = *serial++;

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

            if((result^(pDataBuf))&0x01){

                result ^= 0x18;

                result >>= 1;

                result |= 0x80;

            }

            else {

                result >>= 1;

            }

            pDataBuf >>= 1;

        }

    }

return result;

 

时序例程

这是重置总线,然后写入0xccdd命令,获取校准值A、B的时序

 1727314381301.jpg

 

1727314406287.jpg            

 

即按低位先出,写入的数据是:11001100即0xcc  

                            11011101即0xdd  

 

1727314429324.jpg 

 

即得到4个字节依次是(低位先出):01101111即0x6f

                                 00101110 即 0x2e   即HumA为0x6f2e 即28462

                                 00110111即 0x37

                                 00000110即 0x06   即HumB为0x3706 即14086  


  • 网站首页
  • 产品展示
  • 资质证书
  • 应用资讯
  • 商务咨询
  • 电话:0755-26588758 13714285279(倪先生) 13922884770(王先生) 13923716479(倪先生)


    传真:0755-26747274


    邮箱:info@source-sensor.com


    地址:深圳市南山区南头街道马家龙工业区15栋3楼东


    Copyright©2002-2023 源建传感科技. All Rights Reserved 版权所有 粤ICP备17008245号-5 技术支持:图页网 网站地图xml 网站地图html