
由于微处理器通过二线串行数字接口访问湿度传感器SHT11,而访问协议是芯片生产商白定义的,所以需要用通用I/O口模拟该通信协议。我们选用Atmel公司的微处理器ATmega128。通过对I/O口寄存器的编程,该处理器的I/O口可以根据需要设置成输入、输出、高阻等状态。这为模拟该通信协议提供了条件。在软件实现过程
巾,通过宏定义来实现I/O口状态的改变。

通过以上宏定义,可以实现SCK和DATA总线的各种输入和输出状态。为了模拟该二线串行数字协议,还需要一个延时函数。WINAVR库函数提供了一个延时函数_delay_loop_2(unsigned char s),该延时函数运行用4个时钟周期,所以自定义延时1 μs函数可以定义如下:

基于以上宏定义和延时函数,可以方便地使SCK和DATA总线输出持续一定时间的高电平或低电平,从而可以模拟图5所示的温湿度传感器SHT11的读写协议。
4.3 温度和湿度值的计算
4.3.1 湿度线性补偿和温度补偿
SHT11可通过DATA数据总线直接输出数字量湿度值。该湿度值称为"相对湿度",需要进行线性补偿和温度补偿后才能得到较为准确的湿度值。由于相对湿度数字输出特性呈一定的非线性,因此为了补偿湿度传感器的非线性,可按下式修正湿度值:
式中:RHlinear为经过线性补偿后的湿度值,SORH为相对湿度测量值,C1、C2、C3为线性补偿系数,取值如表2所列。
由于温度对湿度的影响十分明显,而实际温度和测试参考温度25℃有所不同,所以对线性补偿后的湿度值进行温度补偿很有必要。补偿公式如下:

式中:RHtrue为经过线性补偿和温度补偿后的湿度值,T为测试湿度值时的温度(℃),t1和t2为温度补偿系数,取值如表3所列。

4.3.2 温度值输出
由于SHT11是采用PTAT能隙材料制成的温度敏感元件,因而具有很好的线性输出。实际温度值可由下式算得:
Temperature=d1+d2×SOT
式中:d1和d2为特定系数,d1的取值与SHT11工作电压有关,d2的取值则与SHT11内部A/D转换器采用的分辨率有关,其对应关系分别如表4和表5所列。

4.3.3 露点计算
露点是一个特殊的温度值,是空气保持某一定湿度必须达到的最低温度。当空气的温度低于露点时,空气容纳不了过多的水分,这些水分会变成雾、露水或霜。露点可以根据当前相对湿度值和温度值计算得出,具体的计算公式如下:
LogEW=0.66077+7.5×T/(237.3+T)+log10(SORH)-2
Dp=((0.66077-logEW)×237.3)/(logEW-8.16077)
式中:T为当前温度值,SORH为相对湿度值,Dp为露点。
5 结 论
温湿度传感器SHT11集温度传感器和湿度传感器于一体,因此采用SHT11进行温湿度实时监测的系统具有精度高、成本低、体积小、接口简单等优点;另外SHT11芯片内部集成了14位A/D转换器,且采用数字信号输出,因此抗干扰能力也比同类芯片高。该芯片在温湿度监测、自动控制等领域均已得到广泛应用。