树莓派&Python&SHT10
SHT10的性能.
eg: xx->xx->xx 表示 min值->typ值->max值.
- 湿度分辨率: 0.4->0.05->0.05(%RH) 或者用二进制位 8->12->12(bit)
- 湿度精度: ±4.5 %RH (typ 条件下.)
- 温度分辨率: 0.04->0.01->0.01(℃) 或者用二进制位 12->14->14(bit)
- 湿度精度: ±0.5 ℃ (typ 条件下.)
- 供电电压: 2.4->3.3->5.5(V)
传感器默认测量分辨率为温度14位, 湿度12位, 可以通过给状态寄存器发送命令将其降低为温度12位, 湿度8位.
以下分别为相对湿度和温度数据变化图.
SHT10接口.
接口图:
- 电源引脚: sensor供电电压范围为2.4-5.5v, 建议电压为3.3.在VDD与GND之间须加一个100nF的电容, 用以去耦滤波.
- 串行时钟输入(SCK): SCK用于处理器与sensor之间的通讯同步. 由于接口包含完全静态逻辑, 因而不存在最小SCK频率.
- 串行数据(DATA): 三态结构, 用于读取sensor数据.为保证通讯安全稳定, DATA应处于高电平, SCK处于低电平.
SHT10通讯.
通讯过程:
启动sensor即给其通电, 上电速率不能低于1V/ms. 通电后sensor需要11ms进入休眠状态, 在此之前不允许给sensor发送任何命令.
发送”启动传输”时序, 来完成数据传输的初始化.它包括: 当SCK为高电平时DATA翻转为低电平, 紧接着SCK变为低电平, 随后是在SCK时钟高电平是DATA翻转为高电平.(可看后2图).
发送”测量命令”, 来完成测量湿度/温度. 命名包括: 3个地址位 + 5个命令位.(eg: 000 00011 温度), sensor会以下面的方式来表示已经正确地接收到了命令: 在第8个SCK时钟的下降沿之后, 将DATA下拉为低电平即ACK位.在第9个SCK时钟的下降沿之后, 释放DATA即恢复高电平.(具体命令可看后3图.)
等待sensor测量, 发送一组测量命令后, 控制器需要等待sensor测量完成.这个过程大概为20/80/320ms, 分别对应8/12/14bit测量. sensor通过下拉DATA至低电平并进入空闲模式, 表示测量的结束. 控制器在再次触发SCK时钟前, 必须等待这个结束信号, 来读取数据.
控制器接收sensor传输来的2个字节的测量数据和1个字节的CRC奇偶校验(可以选择是否读取). 所有的数据从MSB开始, 右值有效.eg: 对于12位的数据, 从左到右第5为开始有效; 对于8位数据, 高8位为无意义数据.
数据接收后, sensor自动转入休眠模式.
通讯复位时序:
如果与sensor通讯中断, 可通过下列信号时序复位: 当DATA保持高电平时, 触发SCK时钟9次或者更多, 接着发送一个”启动传输”时序. 这里只是复位了串口, 状态寄存器中的内容仍然保留.
图二:
图三:
eg: 这里是测量湿度数据的通讯过程图. 拿去慢慢琢磨
SHT10数据转换.
相对湿度, 温度值, 湿度信号的温度补偿:
RH_true 为真正的湿度测量值.
T_C 为真正的温度测量值.
- RH_linear = c1 + c2 * SO_RH + c3 * SO_RH * SO_RH
- T_C = d1 + d2 * SO_T
- RH_true = (T_C - 25) * (t1 + t2 * SO_RH) + RH_linear
下列图为上面参数的数值, E为10, eg: -2.80000E-6 相当于 -2.8 * 10^(-6).
以