介绍

GXHT3x-DIS 是中科银河芯开发的新一代单芯片集成温湿度一体传感器,它有两个供用户选择的 I2C 地址, I2C 通信速度高达1MHz,芯片采用小型化 DFN 封装,外形尺寸 2.5 x 2.5 mm2,高度 0.9 mm. 这使得 GXHT3x-DIS 可以集成在各种应用场合;此外 2.2-5.5V 宽供电电压范围使得它可以适应各种供电环境

范围精度

  • GXHT30典型精度:±3%RH和±0.3°C
  • 温度典型值:从-45°C到130°C
  • 电源电压范围:从2.2V到5.5V
  • 工作范围:测量范围0-100%相对湿度
  • 响应速度:内部数据测量时间低至 2.5ms

硬件电路

最小电路:i2c接口的两个引脚SCL和SDA接上拉电阻到VDD,模块的接法是上拉电阻为4.7kΩ

img

芯片引脚功能表

引脚编号 引脚名称 功能说明
1 SDA 数据端口;输入/输出
2 ADDR 地址端口,接电源或者地,不能悬空;输入
3 AIFRT 报警标志位,超出设定阈值会被置高,如果不用时该管脚悬空;输出
4 SCL 时钟端口;输入/输出
5 VDD 电源端口;输入
6 nRESET 复位端口,低电平有效,不用时建议悬空;输入
7 R 无用端口,使用时接地
8 Vss

电气参数

img

设备地址默认为0x44,通过改变 ADDR 的连接方式可以改变传感器的 I2C 地址。当ADDR 接低电平时,传感器芯片的地址为 0x44,当 ADDR 接高电平时,传感器芯片的地址为 0x45。 需要注意在通信过程中 ADDR的 电 平 不 能发生改变。这种地址选择方式可以将 两 颗GXHT3x-DIS 连接在同一个 I2C 总线上。

GXHT 3x-DIS 十六进制的 I2C 地址 说明
I2C 地址 A 0x44(默认) ADDR 管脚接低电平
I2C 地址 B 0x45 ADDR 管脚接高电平

工作流程

测量

需先发送一个开始信号,然后发送一个 I2C的写操作头,然后再跟随一个 16 位的温湿度转换命令。 传感器收到上位机发送的每个字节数据后,会通过将 SDA 总线拉到低电平给出 ACK 信号。在正确的收到温湿度转换命令并发送 ACK 信号给微处理器之后, GXHT3x-DIS 内部开始启动温度和湿度的转换测量。

  1. 初始化(软复位)
  2. 写cmd(2个字节:寄存器+模式)
  3. 读取data(6个字节)
  4. 校验CRC

寄存器

复位寄存器:0x30 → 0xA2

写测量模式寄存器:0x2C → 0x06(高),0x0D(中),0x10(低)

读取状态命令寄存器:0xF3 → 0x2D

示例代码

i2c写命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
static HAL_StatusTypeDef HT30_WriteCommand(uint16_t command)
{
uint8_t cmd_buf[2];

cmd_buf[0] = (uint8_t)((command >> 8) & 0xFFU);
cmd_buf[1] = (uint8_t)(command & 0xFFU);

if (HT30_I2C_Write(HT30_I2C_ADDRESS, cmd_buf, sizeof(cmd_buf)) != HAL_OK)
{
printf("HT30_WriteCommand: failed (0x%04X)\r\n", command);
HT30_I2C_ScanBus();
return HAL_ERROR;
}

return HAL_OK;
}

初始化(软复位):往0x30寄存器写0xA2

1
HT30_WriteCommand(HT30_CMD_SOFT_RESET)

读取原始数据:温度(2个字节)+ 校验(1个字节)+ 湿度(2个字节)+ 校验(1个字节)

1
2
3
4
5
6
uint8_t raw[6] = {0};
if (HT30_I2C_Read(HT30_I2C_ADDRESS, raw, 6U) != HAL_OK)
{
printf("HT30_PerformMeasurement: read failed\r\n");
return HAL_ERROR;
}

温度湿度数据校验:一次性读取6个字节

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
static uint8_t HT30_CalculateCRC(const uint8_t *data, uint8_t len)
{
uint8_t crc = 0xFFU;
uint8_t i;
uint8_t j;

if (data == NULL || len == 0U)
{
return 0U;
}

for (i = 0; i < len; i++)
{
crc ^= data[i];
for (j = 0; j < 8U; j++)
{
if (crc & 0x80U)
{
crc = (uint8_t)((crc << 1) ^ 0x31U);
}
else
{
crc <<= 1;
}
}
}

return crc;
}

uint8_t expected;

// 前面2个字节算crc,第三个字节是校验码
expected = HT30_CalculateCRC(raw, 2U);
if (expected != raw[2])
{
return HAL_ERROR;
}

// 前面2个字节算crc,第三个字节是校验码
expected = HT30_CalculateCRC(&raw[3], 2U);
if (expected != raw[5])
{
return HAL_ERROR;
}

温湿度数据解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
uint8_t raw[6] = {0};
uint16_t raw_t;
uint16_t raw_h;

if (HT30_PerformMeasurement(raw) != HAL_OK)
{
raw_t = ((uint16_t)raw[0] << 8) | raw[1];
raw_h = ((uint16_t)raw[3] << 8) | raw[4];

if (temperature != NULL)
{
*temperature = -45.0f + 175.0f * ((float)raw_t / 65535.0f);
}
if (humidity != NULL)
{
*humidity = 100.0f * ((float)raw_h / 65535.0f);
}
}

下里巴人
海纳百川,文以载道
hywing技术自留地
总访问 113701 次 | 本页访问 326