HDC1080 的概述以及 HDC1080 用OSS-ECAL的提供情况。HDC1080 是 Texas Instruments 公司生产的 温湿度传感器 IC(-40 至 +125°C,0.0 至 100.0%RH)。
MCU interface : I2C
注意: 本资源的原始语言为英语。 翻译仅为方便起见提供概要,可能使用了机器翻译,我们对翻译的准确性和合理性不作任何保证。 此外,在进行实际设计等操作前,请务必参考最新版本的Datasheet。
HDC1080
概述
HDC1080是一款内置温度传感器的数字湿度传感器,具有极低的功耗和出色的测量精度。HDC1080可在广泛的电源范围内运行,为各种应用提供低成本、低功耗的解决方案,替代竞争对手的产品。湿度和温度传感器已通过工厂校准。
特点
- 相对湿度精度 ±2% (typical)
- 温度精度 ±0.2°C (typical)
- 高湿度环境下出色的稳定性
- 14bit测量分辨率
- 100 nA 睡眠模式电流
- 平均供电电流:
710nA@1sps、11bit RH测量
1.3μA@1sps、11bit RH及温度测量 - 电源电压 2.7 V~5.5 V
- 小型 3mm x 3mm设备占用空间
- I2C 接口
OSS-ECAL规格
API 函数
OSS-ECAL API 函数基本上被假定为周期性Thread (TASK) 的函数调用。
etSTS oHDC1080( etCMD cmd, uint16 cfg, stHDC1080_O* rlt )
oHDC1080函数是一个API函数,它根据参数cmd执行的命令来处理HDC1080。
备注:
测量时间如下。(小数点后不足1毫秒的部分向上取整)
温度:11位转换 3.65毫秒,14位转换 6.35毫秒
湿度:8位转换 2.50ms,11位转换 3.65ms,14位转换 6.5ms
测量时间的计算基于调用本API函数的线程周期,因此请将线程周期设置为THREAD_OSS_ECAL_PERIOD[ms]。
返回值 | etSTS | OSS-ECAL status code | |
eSTS_FIN | 成功完成 | ||
eSTS_EXE | 处理中 | ||
eSTS_ERR_MIN | 最小温度误差(rlt.temperature 为最小温度) 或 最小湿度误差(rlt.humidity 为最小湿度) | ||
eSTS_ERR_MAX | 最大温度误差(rlt.temperature为最大温度) 或 最大湿度误差(rlt.humidity为最大湿度) | ||
eSTS_ERR_COMMAND_CODE | 命令选择错误 | ||
eSTS_ERR_DIAG | 如果使用以下命令比较结果为 NG eCMD_DIAG_DEVI_ID eCMD_DIAG_MANU_ID | ||
eSTS_ERR_I2C_OBJECT | I2C 对象选择错误 | ||
eSTS_ERR_OTHERS_RUN | 其他组件正在执行程序 | ||
eSTS_ERR_HAL_OTHERS_RUN | 其他应用程序正在运行 HAL (iMXRT1051B1052B, STM32F4) | ||
eSTS_ERR_HAL_I2C | HAL I2C 错误 | ||
参数 IN | etCMD cmd | OSS-ECAL 指令码 | |
eCMD_WRITE_CFG | 将cfg的值写入配置寄存器(指针寄存器0x02)的命令 1. 根据温度和湿度的转换位数计算测量时间 2. 将cfg的值写入 “Configuration Register”( “Pointer Register” 0x02) | ||
eCMD_READ_TEMP | 该命令读取温度寄存器中的值,将其转换为温度并存储在 rlt.temperature 中。 1. 将0x00写入 “Pointer Register” 2. 等待测量时间结束 等待期间返回值为eSTS_EXE 3. 读取 “Temperature Register” 的值 4. 将 “Temperature Register” 的读取值转换为温度 温度=(读取值/增益系数)+温度偏移值 (最小值, 最大值) 5. 将温度保存到rlt.temperature中 | ||
eCMD_READ_HUMI | 读取湿度注册表的值,将其转换为湿度值,并将该湿度值保存到rlt.humidity中的命令。 1. 将0x01写入 “Pointer Register” 2. 等待测量时间结束 等待期间返回值为eSTS_EXE 3. 读取 “Humidity Register” 的值 4. 将 “Humidity Register” 读取的值转换为湿度 湿度=读取的值/增益系数 (最小值,最大值限制) 5. 将湿度保存到rlt.humidity中 | ||
eCMD_READ_TEMP_HUMI | 读取湿度寄存器(Humidity Register)和温度寄存器(Temperature Register)的值,将这些值转换为温度和湿度,并将转换后的温度和湿度分别保存到rlt.temperature和rlt.humidity中的命令。 1. 将0x00写入”Pointer Register” 2. 等待测量时间结束 等待期间返回值eSTS_EXE 3. 读取 “Temperature Register” 的值和 “Humidity Register” 的值 4. 将 “Temperature Register” 读取的值转换为温度 温度=(读取的值/增益系数)+温度偏移值 (最小值, 最大值限制) 5. 将 “Humidity Register” 读取的值转换为湿度 湿度=读取的值/增益系数 (最小值, 最大值限制) 6. 将温度保存到rlt.temperature 7. 将湿度保存到rlt.humidity | ||
eCMD_READ_SERI_ID | 读取序列号ID的值,并将该值保存到rlt.serialID中的命令 1. 将0xFB写入 “Pointer Register” 2. 读取 “Serial ID ( First )” 3. 将0xFC写入 “Pointer Register” 4. 读取 “Serial ID ( Mid )” 5. 将0xFD写入 “Pointer Register” 6. 读取 “Serial ID ( Last )” 7. 将读取的值保存到rlt.serialID中 | ||
eCMD_READ_CFG | 读取 “Configuration Register” 的值,并将该值保存到rlt.config中的命令 1. 将0x02写入 “Pointer Register” 2. 读取 “Configuration Register” 3. 将读取的值保存到rlt.config中 | ||
eCMD_DIAG_DEVI_ID | 读取 “DeviceID Register” 的值,并将该值与0x1050进行比较,然后将比较结果作为返回值返回的命令 1. 将0xFF写入 “Pointer Register” 2. 读取 “DeviceID Register” 3. 将读取的值与0x1050进行比较,并将比较结果作为返回值返回 True … eSTS_FIN False … eSTS_ERR_DIAG | ||
eCMD_DIAG_MANU_ID | 读取“ManufacturerID Register”的值,并将该值与0x5449进行比较,然后将比较结果作为返回值返回的命令 1. 将0xFE写入 “Pointer Register” 2. 读取 “ManufacturerID Register” 3. 将读取的值与0x5449进行比较,并将比较结果作为返回值返回 True … eSTS_FIN False … eSTS_ERR_DIAG | ||
uint16 cfg | “Configuration register (Pointer 0x02)” 配置数据 | cfg的设置请参阅数据手册 “Configuration Register Description” | |
参数 OUT | stHDC1080_O* rlt | 从 HDC 1080 收到的数据 | |
float32 temperature | 温度 [°C] | ||
float32 humidity | 湿度 [%RH] | ||
uint16 config | Register 0x02 之値 | ||
uint64 serialID | Register 0xFB 至 0xFD之値 |
etSTS oHDC1080_WRITE_CFG( uint16 cfg )
oHDC1080_WRITE_CFG 函数是用于向 HDC1080 的 Configuration Register(Pointer Register 0x02)写入数据的 API 函数。
1. 根据温度和湿度的转换位数计算测量时间
2. 将cfg的值写入Configuration Register(Pointer Register 0x02)
备注:
测量时间如下。(小数点后不足1毫秒的部分向上取整)
温度:11位转换 3.65毫秒,14位转换 6.35毫秒
湿度:8位转换 2.50ms,11位转换 3.65ms,14位转换 6.5ms
测量时间的计算基于调用本API函数的线程周期,因此请将线程周期设置为THREAD_OSS_ECAL_PERIOD[ms]。
返回值 | etSTS | OSS-ECAL status code | |
eSTS_FIN | 成功完成 | ||
eSTS_EXE | 处理中 | ||
eSTS_ERR_I2C_OBJECT | I2C 对象选择错误 | ||
eSTS_ERR_OTHERS_RUN | 其他组件正在执行程序 | ||
eSTS_ERR_HAL_OTHERS_RUN | 其他应用程序正在运行 HAL (iMXRT1051B1052B, STM32F4) | ||
eSTS_ERR_HAL_I2C | HAL I2C 错误 | ||
参数 IN | uint16 cfg | Configuration register (Pointer 0x02) 设置数据 | cfg的设置,请参阅 Datasheet “Configuration Register Description”部分 |
etSTS oHDC1080_READ_TEMP( stHDC1080_O* rlt )
oHDC1080_READ_TEMP函数是一个API函数,用于读取HDC1080的“Temperature Register”的值,将其转换为温度,并将其保存到rlt.temperature中。
- 将0x00写入 “Pointer Register”
- 等待测量时间结束
等待期间返回值为eSTS_EXE - 读取 “Temperature Register” 的值
- 将 “Temperature Register” 的读取值转换为温度
温度=(读取值/增益系数)+温度偏移值
(最小值, 最大值) - 将温度保存到rlt.temperature中
备注:
测量时间的计算基于调用本API函数的线程周期,因此请将线程周期设置为THREAD_OSS_ECAL_PERIOD[ms]。
返回值 | etSTS | OSS-ECAL status code | |
eSTS_FIN | 成功完成 | ||
eSTS_EXE | 处理中 | ||
eSTS_ERR_MIN | 最小温度误差(rlt.temperature 为最小温度) | ||
eSTS_ERR_MAX | 最大温度误差(rlt.temperature为最大温度) | ||
eSTS_ERR_I2C_OBJECT | I2C 对象选择错误 | ||
eSTS_ERR_OTHERS_RUN | 其他组件正在执行程序 | ||
eSTS_ERR_HAL_OTHERS_RUN | 其他应用程序正在运行 HAL (iMXRT1051B1052B, STM32F4) | ||
eSTS_ERR_HAL_I2C | HAL I2C 错误 | ||
参数 OUT | stHDC1080_O* rlt | 从 HDC 1080 收到的数据 | |
float32 temperature | 温度 [°C] | ||
float32 humidity | 湿度 [%RH](未更新) | ||
uint16 config | Register 0x02 之値(未更新) | ||
uint64 serialID | Register 0xFB 至 0xFD之値(未更新) |
etSTS oHDC1080_READ_HUMI( stHDC1080_O* rlt )
oHDC1080_READ_HUMI函数用于读取HDC1080的“Humidity Register”值,将其转换为湿度值,并保存到rlt.humidity中。这是一个API函数。
- 将0x01写入 “Pointer Register”
- 等待测量时间结束
等待期间返回值为eSTS_EXE - 读取 “Humidity Register” 的值
- 将 “Humidity Register” 的读取值转换为湿度
湿度=(读取值/增益系数)
(最小值, 最大值) - 将湿度保存到rlt.humidity中
备注:
测量时间的计算基于调用本API函数的线程周期,因此请将线程周期设置为THREAD_OSS_ECAL_PERIOD[ms]。
返回值 | etSTS | OSS-ECAL status code | |
eSTS_FIN | 成功完成 | ||
eSTS_EXE | 处理中 | ||
eSTS_ERR_MIN | 最小湿度误差(rlt.humidity 为最小湿度) | ||
eSTS_ERR_MAX | 最大湿度误差(rlt.humidity为最大湿度) | ||
eSTS_ERR_I2C_OBJECT | I2C 对象选择错误 | ||
eSTS_ERR_OTHERS_RUN | 其他组件正在执行程序 | ||
eSTS_ERR_HAL_OTHERS_RUN | 其他应用程序正在运行 HAL (iMXRT1051B1052B, STM32F4) | ||
eSTS_ERR_HAL_I2C | HAL I2C 错误 | ||
参数 OUT | stHDC1080_O* rlt | 从 HDC 1080 收到的数据 | |
float32 temperature | 温度 [°C](未更新) | ||
float32 humidity | 湿度 [%RH] | ||
uint16 config | Register 0x02 之値(未更新) | ||
uint64 serialID | Register 0xFB 至 0xFD之値(未更新) |
etSTS oHDC1080_READ_TEMP_HUMI( stHDC1080_O* rlt )
oHDC1080_READ_TEMP_HUMI 函数是用于读取 HDC1080 的“Humidity Register”和“Temperature Register”的值,并将这些值转换为温度和湿度,然后将转换后的温度和湿度保存到 rlt.temperature 和 rlt.humidity 中的 API 函数。
备注:
测量时间的计算基于调用本API函数的线程周期,因此请将线程周期设置为THREAD_OSS_ECAL_PERIOD[ms]。
返回值 | etSTS | OSS-ECAL status code | |
eSTS_FIN | 成功完成 | ||
eSTS_EXE | 处理中 | ||
eSTS_ERR_MIN | 最小温度误差(rlt.temperature 为最小温度) 或 最小湿度误差(rlt.humidity 为最小湿度) | ||
eSTS_ERR_MAX | 最大温度误差(rlt.temperature为最大温度) 或 最大湿度误差(rlt.humidity为最大湿度) | ||
eSTS_ERR_I2C_OBJECT | I2C 对象选择错误 | ||
eSTS_ERR_OTHERS_RUN | 其他组件正在执行程序 | ||
eSTS_ERR_HAL_OTHERS_RUN | 其他应用程序正在运行 HAL (iMXRT1051B1052B, STM32F4) | ||
eSTS_ERR_HAL_I2C | HAL I2C 错误 | ||
参数 OUT | stHDC1080_O* rlt | 从 HDC 1080 收到的数据 | |
float32 temperature | 温度 [°C] | ||
float32 humidity | 湿度 [%RH] | ||
uint16 config | Register 0x02 之値(未更新) | ||
uint64 serialID | Register 0xFB 至 0xFD之値(未更新) |
etSTS oHDC1080_READ_SERI_ID( stHDC1080_O* rlt )
oHDC1080_READ_SERI_ID 函数是一个 API 函数,用于读取 HDC1080 的“Serial ID”值,并将该值保存到 rlt.serialID 中。
- 将0xFB写入 “Pointer Register”
- 读取 “Serial ID ( First )”
- 将0xFC写入 “Pointer Register”
- 读取 “Serial ID ( Mid )”
- 将0xFD写入 “Pointer Register”
- 读取 “Serial ID ( Last )”
- 将读取的值保存到rlt.serialID中
备注:
返回值 | etSTS | OSS-ECAL status code | |
eSTS_FIN | 成功完成 | ||
eSTS_ERR_I2C_OBJECT | I2C 对象选择错误 | ||
eSTS_ERR_OTHERS_RUN | 其他组件正在执行程序 | ||
eSTS_ERR_HAL_OTHERS_RUN | 其他应用程序正在运行 HAL (iMXRT1051B1052B, STM32F4) | ||
eSTS_ERR_HAL_I2C | HAL I2C 错误 | ||
参数 OUT | stHDC1080_O* rlt | 从 HDC 1080 收到的数据 | |
float32 temperature | 温度 [°C](未更新) | ||
float32 humidity | 湿度 [%RH](未更新) | ||
uint16 config | Register 0x02 之値(未更新) | ||
uint64 serialID | Register 0xFB 至 0xFD之値 |
etSTS oHDC1080_READ_CFG( stHDC1080_O* rlt )
oHDC1080_READ_CFG函数是一个API函数,用于读取HDC1080的“Configuration Register”的值,并将该值保存到rlt.config中。
- 将0x02写入 “Pointer Register”
- 读取 “Configuration Register”
- 将读取的值保存到rlt.config中
备注:
请参阅“Datasheet”中的“Configuration Register Description”。
返回值 | etSTS | OSS-ECAL status code | |
eSTS_FIN | 成功完成 | ||
eSTS_ERR_I2C_OBJECT | I2C 对象选择错误 | ||
eSTS_ERR_OTHERS_RUN | 其他组件正在执行程序 | ||
eSTS_ERR_HAL_OTHERS_RUN | 其他应用程序正在运行 HAL (iMXRT1051B1052B, STM32F4) | ||
eSTS_ERR_HAL_I2C | HAL I2C 错误 | ||
参数 OUT | stHDC1080_O* rlt | 从 HDC 1080 收到的数据 | |
float32 temperature | 温度 [°C](未更新) | ||
float32 humidity | 湿度 [%RH](未更新) | ||
uint16 config | Register 0x02 之値 | ||
uint64 serialID | Register 0xFB 至 0xFD之値(未更新) |
etSTS oHDC1080_DIAG_DEVI_ID( void )
oHDC1080_DIAG_DEVI_ID 函数是一个 API 函数,用于读取 HDC1080 的“DeviceID Register”的值,并将该值与 0x1050 的比较结果作为返回值返回。
- 将0xFF写入 “Pointer Register”
- 读取 “DeviceID Register”
- 将读取的值与0x1050进行比较,并将比较结果作为返回值返回
True … eSTS_FIN
False … eSTS_ERR_DIAG
备注:
返回值 | etSTS | OSS-ECAL status code | |
eSTS_FIN | 成功完成 | ||
eSTS_ERR_DIAG | DeviceID Register的值与0x1050不一致 | ||
eSTS_ERR_I2C_OBJECT | I2C 对象选择错误 | ||
eSTS_ERR_OTHERS_RUN | 其他组件正在执行程序 | ||
eSTS_ERR_HAL_OTHERS_RUN | 其他应用程序正在运行 HAL (iMXRT1051B1052B, STM32F4) | ||
eSTS_ERR_HAL_I2C | HAL I2C 错误 |
etSTS oHDC1080_DIAG_MANU_ID( void )
oHDC1080_DIAG_MANU_ID 函数是一个 API 函数,用于读取 HDC1080 的“ManufacturerID Register”的值,并将该值与 0x5449 的比较结果作为返回值返回。
- 将0xFE写入 “Pointer Register”
- 读取 “ManufacturerID Register”
- 将读取的值与0x5449进行比较,并将比较结果作为返回值返回
True … eSTS_FIN
False … eSTS_ERR_DIAG
备注:
返回值 | etSTS | OSS-ECAL status code | |
eSTS_FIN | 成功完成 | ||
eSTS_ERR_DIAG | ManufacturerID Register的值与0x5449不一致 | ||
eSTS_ERR_I2C_OBJECT | I2C 对象选择错误 | ||
eSTS_ERR_OTHERS_RUN | 其他组件正在执行程序 | ||
eSTS_ERR_HAL_OTHERS_RUN | 其他应用程序正在运行 HAL (iMXRT1051B1052B, STM32F4) | ||
eSTS_ERR_HAL_I2C | HAL I2C 错误 |
HAL 支持列表
OSS-ECAL 的 HAL 支持如下。 请注意,即使使用相同的 HAL,不同的版本、MCU 和开发环境也可能无法协同工作。 该列表正在按顺序扩展。
Manufacturer | SDK/IDE Tool | HAL Name | Ver | HALNAME | Support |
---|---|---|---|---|---|
Arduino | Arduino IDE | Arduino | 1.8.6 | ARDUINO | X |
Arm | Keil MDK v6 | Mbed OS | 6.17.0 | MBED | X |
Debian | – | GNU/Linux | 10.3 | Linux | X |
Infineon | ModusToolbox | mtb-hal-cat1 | 2.4.3 | ModusToolbox | X |
NXP | MCUXpresso SDK | SDK_2.x_EVKB-IMXRT1050 | 2.16 | iMXRT1051B1052B | X |
Renesas | Synergy Software Package | HAL | 2.6.0 | SSP | X |
STMicroelectronics | STM32Cube | STM32CubeF4 | V1.28.1 | STM32F4 | X |
开发环境
OSS-ECAL 开发过程中的 MCU 和开发环境如下。
HALNAME | Manufacturer | Board | MCU | IDE |
---|---|---|---|---|
ARDUINO | Arduino | 1.Mega 2560 Rev3 2.Arduino Pro Mini 3.3V | ATmega2560 ATmega328P | Arduino IDE 2.3.3 |
MBED | STMicroelectronics | STM32 Nucleo-64 boards | STM32F401RETx | Arm Keil Studio Cloud |
Linux | BeagleBoard | BeagleBone Black | TI AM335x | – |
ModusToolbox | Infineon | CY8CPROTO-063-BLE PSoC 6 BLE Prototyping Kit | CYBLE-416045-02 | ModusToolbox |
iMXRT1051B1052B | NXP | IMXRT1050-EVKB | i.MX RT1050 | MCUXpresso IDE |
SSP | Renesas | S7G2 SK | R7FS7G27H3A01CFC | e² studio for Renesas Synergy |
STM32F4 | STMicroelectronics | STM32 Nucleo-64 boards | STM32F401RETx | STM32CubeIDE |
文件结构
Folder* | File | Summary |
---|---|---|
HDC1080_HALNAME_010000/sample | sample.c (.cpp) | Sample application program |
sample.h | Sample application header | |
HDC1080_HALNAME_010000 | oHDC1080.c (.cpp) | OSS-ECAL program for HDC1080 |
oHDC1080.h | OSS-ECAL header for HDC1080 | |
oss_ecal.h | OSS-ECAL common header | |
HDC1080_ARDUINO.ino | Sample application programs for Arduino | |
user_setting.c (.cpp) | User configured constants and tables | |
user_setting.h | User configuration Header | |
oHAL_i2c_stm32f4.c | HAL Program for STM32Cube FW_F4 | |
oHAL_i2c_stm32f4.h | HAL Header for STM32Cube FW_F4 | |
readme.md | Readme | |
OSS-ECAL Terms of Use.txt | OSS-ECAL Terms of Use |
* 有关 HALNAME,请参阅 HAL 支持。
OSS-ECAL 下载
请从 OSS-ECAL 英文网站下载 OSS-ECAL。下载时,请先登录 OSS-ECAL 英文网站,然后再进行操作。
内置方法
如何在用户程序中整合多个 OSS-ECAL(相同的 MCU 功能)
如何在用户程序中整合多个 OSS-ECAL(不同 MCU 功能)
注意
OSS-ECAL 示例版本不适用于线程(任务)或不同优先级的中断。 请不要像下面的示例那样使用它。
例如 如果每个传感器被分配到相同的 ADC 组,而 OSS-ECAL API 在具有不同优先级的进程中执行,则可能无法获得正确的值。
ADC Gr0 Ch0 Temperature sensor AD22100A 每隔 100 毫秒采集一次温度(低优先级)
ADC Gr0 Ch1 Pressure sensor MPX5999D 事件中断时采集压力(高优先级)