【5月原创帖征集活动】TI温湿度HDC1000软件包设计与制作

发布于 2020-05-24 06:35:30    浏览:495
    本帖最后由 X-Jing007 于 2020-5-24 06:44 编辑


PS:因论坛字数与排版方式不太方便,完整文章可查看


1 概述
[p=null, 2, left]本文主要讲述了基于RT-Thread Sensor框架实现的温湿度传感器HDC1000软件包,同时详细记录了RT-Thread传感器软件包的制作过程。[/p][p=null, 2, left]本文的主要内容提要:[/p]



    * 低功耗温湿度传感器HDC1000的基础知

    * HDC1000的工作机制

    * HDC1000软件包功能设计


    * HDC1000软件包的功能简介

    * HDC1000软件包的使用与测试


    * HDC1000软件包制作与发布




      * 制作软件包索引

      * 软件包本地测试

      * PR推送


[p=null, 2, left]HDC1000软件包的代码仓库:[/p]
https://github.com/Forest-Rain/hdc1000

2 HDC1000应用原理
2.1 HDC1000传感器工作原理
[img=451,192]https://cdn.nlark.com/yuque/0/2020/png/253586/1583073535388-47764afe-9761-4e98-bbc4-664cb67be257.png[/img]图2.1 HDC1000功能框图[p=null, 2, left]HDC1000是TI公司开发的一款集成式湿度和温度传感器, 其能够以较低功耗提供出色的测量精度。HDC1000的传感元件位于器件底部,有助于 HDC1000 免受粉尘、灰尘以及其他环境污染物的影响,从而更加稳定可靠。[/p][p=null, 2, left]HDC1000通过IIC接口,作为IIC从设备与Host MCU进行数据交互。[/p][p=null, 2, left]HDC1000内置了加热元件(Heater), 软件可短暂地打开,用于消散设备长期暴露在高湿度环境中产生的冷凝和湿气, 从而增加湿度传感器的可靠性。此外,加热功能也可用于验证集成温度传感器的功能。[/p][indent][p=null, 2, left]注:推荐使用换代产品HDC2010代替HDC1000。HDC2010具有更好的特性功能,但是两者硬件接口与软件接口都不兼容。[/p][/indent][img=589,124]https://cdn.nlark.com/yuque/0/2020/png/253586/1582987559264-c29cc0c4-6fb4-46a9-9a68-cda5717035e2.png[/img]
2.1.1 工作模式
[p=null, 2, left]HDC1000有两种工作模式:睡眠模式(Sleep Mode)与测量模式(Measurement Mode)。[/p]

    * 睡眠模式


    * 上电后默认处于睡眠模式。Host MCU通过IIC接口发送指令来唤醒传感器,并对传感器进行读写操作。在完成一次有效温度\湿度测量后,HDC1000自动回到睡眠模式。



    * 测试模式



      * HDC1000测量模式只支持(手动)按需触发(Trigger on Demand)。( HDC2010支持自动定时采样模式)

2.1.2 典型应用场景


    * IoT低功耗应用,如



      * 智能恒温器

      * 智能冰箱

      * 烟雾和热量探测器

      * 环境标签

      * ...

2.2 硬件设计
[img=518,200]https://cdn.nlark.com/yuque/0/2020/png/253586/1583076535222-f4aef72a-68a1-4bb8-8e5f-4bda4b1bfdab.png[/img]
图2.2 HDC1000典型应用电路[p=null, 2, left]HDC1000有2根地址线.因此一条IIC总线上,最多可以挂载4个HDC1000。[/p]
2.3 软件设计
[p=null, 2, left]获取HDC1000的温度与湿度数据主要是MCU通过IIC接口对指定寄存器读写来完成的,具体实现过程主要包括以下内容:[/p]1. IIC通信驱动



      (*)使用RT-Thread系统提供的模拟I2C驱动,来访问HDC1000传感器,可查看 env工具 --> menuconfig --> RT-Thread Components --> Device Drivers -->
      (*)[img=317,41]https://cdn.nlark.com/yuque/0/2020/png/253586/1583220191840-48d22ec5-3891-42cc-9463-38332e650b2d.png[/img]
* 采样转换完成判断。采样完成可以根据实际情况,有如下两种方式:

- HDC1000提供了一个DRDY/INT硬件引脚,用于指示温度\湿度采样转换完成,该引脚可以用于唤醒Host MCU。
- 若实际应用电路未使用该引脚,则可以采用了固定延时的方式来等待传感器转换完成,采样转换时间如下所示:
[img=678,199]https://cdn.nlark.com/yuque/0/2020/png/253586/1584541939942-956b617f-9671-4c78-8db7-6317463bad02.png[/img]图2.3 温度与湿度采样转换时间2. 单次采样(按需触发),这里默认采用序列采样方式(即每次采样,先后执行一次温度与湿度采样)
[img=425,533]https://cdn.nlark.com/yuque/0/2020/png/253586/1583218032456-c8cb8c55-d663-4441-884d-feef3220b08f.png[/img]图2.4 单次采样流程2.3.1 IIC从机地址
[p=null, 2, left]由图2.2电路图(ADR0 = 0、ADR1 = 0)可知,当前HDC1000传感器的IIC从机地址为0x40。[/p][indent]注:若使用的是STM32硬件IIC驱动,则传入HAL_I2C_Init()的从机地址是0x80(8位地址形式)[/indent]
/* according to hdc1000 spec */// ADR0 = 0,ADR1 = 0 ==> hdc1000 slave address 0x40(7-bit address)[indent]#define HDC1000_DEVICE_IIC_BUS_ADDRESS 0x40

[/indent]

2.3.2 IIC时序
[p=null, 2, left]HDC1000主要IIC时序包括读写配置寄存器(Configuration Register(0x02))、触发采样(rigger Humidity/Temperature Measurement(0x00\0x01))、读取温度与温度(Read Humidity/Temperature Measurement)。[/p][p=null, 2, left]读取温度与湿度的IIC时序,如下所示:[/p][img=746,303]https://cdn.nlark.com/yuque/0/2020/png/253586/1583218558551-ac1748e0-93b8-4a8d-984a-592c8dc2f00c.png[/img]图2.5 读取温度与湿度的IIC时序(序列采样方式)[p=null, 2, left]读取温湿度值的IIC时序实例,如下所示[/p][img=746,117]https://cdn.nlark.com/yuque/0/2020/png/253586/1584543976290-80dc07db-968e-450f-a0ed-568c0b9eba90.png[/img]图2.6 读取温度与湿度IIC实例(序列采样方式)[p=null, 2, left]特别注意:[/p][p=null, 2, left]HDC1000温度与湿度寄存器位为16bit,高位先发(大端模式),因此读回的数值需要转换为小端模式。[/p][p=null, 2, left]对读回的寄存器数据的处理代码如下所示:[/p][indent] if (rt_i2c_transfer((struct rt_i2c_bus_device *)dev->bus, msgs, 1) == 1) [/indent][indent] { [/indent][indent] res = RT_EOK; [/indent][indent] *temp_raw = (buffer[0] << 8) | buffer[1]; [/indent][indent] *humi_raw = (buffer[2] << 8) | buffer[3]; [/indent][indent]} [/indent][indent]else [/indent][indent]{ [/indent][indent] res = -RT_ERROR; [/indent]}


2.3.3 温湿度值结果转换
[img=473,120]https://cdn.nlark.com/yuque/0/2020/png/253586/1583220395247-fcffd1a5-f6bd-4417-8c97-338356c0720e.png[/img]图2.7 温湿度结果转换计算式[p=null, 2, left]按照图2.7公式,将获取到的温度\湿度寄存器值转换为实际的温度(℃)与湿度(%RH)。[/p]
3 HDC1000软件包功能设计
3.1 HDC1000软件包功能简介
3.2 HDC1000软件包功能实现
3.2.1 HDC1000软件包的依赖* RT-Thread 4.0.0+

* Sensor 组件

* IIC 驱动:HDC1000 设备使用 IIC 进行数据通讯,需要RT-Thread系统 IIC 驱动框架支持;

3.2.2 HDC1000软件包的主要实现文件
[img=746,401]https://cdn.nlark.com/yuque/0/2020/png/253586/1585663968868-ddfbab78-e136-4b7e-bc11-ac110a0e0ff6.png[/img][indent][p=null, 2, left]注: Sconscript的编写可参照RT-Thread官方的Scons构建工具说明文档:https://www.rt-thread.org/document/site/programming-manual/scons/scons/[/p][/indent]

查看更多

0 个回答
暂无答案,快来添加答案吧

撰写答案

请登录后再发布答案,点击登录
关注者
0
被浏览
495

发布
问题

分享
好友

手机
浏览

扫码手机浏览