Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
【5月原创帖征集活动】TI温湿度HDC1000软件包设计与制作
发布于 2020-05-24 06:35:30 浏览:1460
订阅该版
* 本帖最后由 X-Jing007 于 2020-5-24 06:44 编辑 * **PS:因论坛字数与排版方式不太方便,完整文章可查看** [https://blog.csdn.net/nich2009/article/details/106309725](https://blog.csdn.net/nich2009/article/details/106309725) **1 概述**本文主要讲述了基于RT-Thread Sensor框架实现的温湿度传感器HDC1000软件包,同时详细记录了RT-Thread传感器软件包的制作过程。本文的主要内容提要:[list] * 低功耗温湿度传感器HDC1000的基础知 * HDC1000的工作机制 * HDC1000软件包功能设计 [/list][list] * HDC1000软件包的功能简介 * HDC1000软件包的使用与测试 [/list][list] * HDC1000软件包制作与发布 [/list][list] [list] * 制作软件包索引 * 软件包本地测试 * PR推送 [/list][/list] HDC1000软件包的代码仓库:> https://github.com/Forest-Rain/hdc1000 **2 HDC1000应用原理****2.1 HDC1000传感器工作原理**[align=center] ![451,192](https://cdn.nlark.com/yuque/0/2020/png/253586/1583073535388-47764afe-9761-4e98-bbc4-664cb67be257.png) [align=center]图2.1 HDC1000功能框图HDC1000是TI公司开发的一款集成式湿度和温度传感器, 其能够以较低功耗提供出色的测量精度。HDC1000的传感元件位于器件底部,有助于 HDC1000 免受粉尘、灰尘以及其他环境污染物的影响,从而更加稳定可靠。HDC1000通过IIC接口,作为IIC从设备与Host MCU进行数据交互。HDC1000内置了加热元件(Heater), 软件可短暂地打开,用于消散设备长期暴露在高湿度环境中产生的冷凝和湿气, 从而增加湿度传感器的可靠性。此外,加热功能也可用于验证集成温度传感器的功能。[indent]注:推荐使用换代产品HDC2010代替[HDC1000](http://www.ti.com.cn/product/cn/HDC1000)。HDC2010具有更好的特性功能,但是两者硬件接口与软件接口都不兼容。[/indent][align=center] ![589,124](https://cdn.nlark.com/yuque/0/2020/png/253586/1582987559264-c29cc0c4-6fb4-46a9-9a68-cda5717035e2.png) **2.1.1 工作模式**HDC1000有两种工作模式:睡眠模式(Sleep Mode)与测量模式(Measurement Mode)。[list] * 睡眠模式 [/list][list] * 上电后默认处于睡眠模式。Host MCU通过IIC接口发送指令来唤醒传感器,并对传感器进行读写操作。在完成一次有效温度\湿度测量后,HDC1000自动回到睡眠模式。 [/list][list] * 测试模式 [/list][list] [list] * HDC1000测量模式只支持(手动)按需触发(Trigger on Demand)。( HDC2010支持自动定时采样模式) [/list][/list]**2.1.2 典型应用场景**[list] * IoT低功耗应用,如 [/list][list] [list] * 智能恒温器 * 智能冰箱 * 烟雾和热量探测器 * 环境标签 * ... [/list][/list]**2.2 硬件设计**** ![518,200](https://cdn.nlark.com/yuque/0/2020/png/253586/1583076535222-f4aef72a-68a1-4bb8-8e5f-4bda4b1bfdab.png) **[align=center]图2.2 HDC1000典型应用电路HDC1000有2根地址线.因此一条IIC总线上,最多可以挂载4个HDC1000。 **2.3 软件设计**获取HDC1000的温度与湿度数据主要是MCU通过IIC接口对指定寄存器读写来完成的,具体实现过程主要包括以下内容:1. IIC通信驱动[list] [list] (*)使用RT-Thread系统提供的模拟I2C驱动,来访问HDC1000传感器,可查看 env工具 --> menuconfig --> RT-Thread Components --> Device Drivers --> (*) ![317,41](https://cdn.nlark.com/yuque/0/2020/png/253586/1583220191840-48d22ec5-3891-42cc-9463-38332e650b2d.png) [/list][/list][list=1] (*)采样转换完成判断。采样完成可以根据实际情况,有如下两种方式: [/list] - HDC1000提供了一个DRDY/INT硬件引脚,用于指示温度\湿度采样转换完成,该引脚可以用于唤醒Host MCU。 - 若实际应用电路未使用该引脚,则可以采用了固定延时的方式来等待传感器转换完成,采样转换时间如下所示: [align=center] ![678,199](https://cdn.nlark.com/yuque/0/2020/png/253586/1584541939942-956b617f-9671-4c78-8db7-6317463bad02.png) [align=center]图2.3 温度与湿度采样转换时间2. 单次采样(按需触发),这里默认采用序列采样方式(即每次采样,先后执行一次温度与湿度采样) [align=center] ![425,533](https://cdn.nlark.com/yuque/0/2020/png/253586/1583218032456-c8cb8c55-d663-4441-884d-feef3220b08f.png) [align=center]图2.4 单次采样流程**2.3.1 IIC从机地址**由图2.2电路图(ADR0 = 0、ADR1 = 0)可知,当前HDC1000传感器的IIC从机地址为0x40。[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时序**HDC1000主要IIC时序包括读写配置寄存器(Configuration Register(0x02))、触发采样(rigger Humidity/Temperature Measurement(0x00\0x01))、读取温度与温度(Read Humidity/Temperature Measurement)。读取温度与湿度的IIC时序,如下所示:[align=center] ![746,303](https://cdn.nlark.com/yuque/0/2020/png/253586/1583218558551-ac1748e0-93b8-4a8d-984a-592c8dc2f00c.png) [align=center]图2.5 读取温度与湿度的IIC时序(序列采样方式)读取温湿度值的IIC时序实例,如下所示[align=center] ![746,117](https://cdn.nlark.com/yuque/0/2020/png/253586/1584543976290-80dc07db-968e-450f-a0ed-568c0b9eba90.png) [align=center]图2.6 读取温度与湿度IIC实例(序列采样方式)特别注意:HDC1000温度与湿度寄存器位为16bit,高位先发(大端模式),因此读回的数值需要转换为小端模式。对读回的寄存器数据的处理代码如下所示:[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 温湿度值结果转换**[align=center] ![473,120](https://cdn.nlark.com/yuque/0/2020/png/253586/1583220395247-fcffd1a5-f6bd-4417-8c97-338356c0720e.png) [align=center]图2.7 温湿度结果转换计算式按照图2.7公式,将获取到的温度\湿度寄存器值转换为实际的温度(℃)与湿度(%RH)。 **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软件包的主要实现文件**[align=center] ![746,401](https://cdn.nlark.com/yuque/0/2020/png/253586/1585663968868-ddfbab78-e136-4b7e-bc11-ac110a0e0ff6.png) [indent]注: Sconscript的编写可参照RT-Thread官方的Scons构建工具说明文档:_https://www.rt-thread.org/document/site/programming-manual/scons/scons/_[/indent]
查看更多
0
个回答
默认排序
按发布时间排序
暂无答案,快来添加答案吧
撰写答案
登录
注册新账号
关注者
0
被浏览
1.5k
关于作者
X-Jing007
这家伙很懒,什么也没写!
提问
2
回答
3
被采纳
0
关注TA
发私信
相关问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
【24嵌入式设计大赛】基于RT-Thread星火一号的智慧家居系统
2
RT-Thread EtherKit开源以太网硬件正式发布
3
如何在master上的BSP中添加配置yml文件
4
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
5
RT-Thread 发布 EtherKit开源以太网硬件!
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
MicroPython
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
15
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
5
次点赞
RTT_逍遥
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部