第16章 湿度检测系统剖析.docx
- 文档编号:7320439
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:30
- 大小:371.32KB
第16章 湿度检测系统剖析.docx
《第16章 湿度检测系统剖析.docx》由会员分享,可在线阅读,更多相关《第16章 湿度检测系统剖析.docx(30页珍藏版)》请在冰豆网上搜索。
第16章湿度检测系统剖析
第16章基于RS-485总线的湿度检测系统
本章主要内容包括:
Ð湿度传感器的介绍
ÐRS-485总线通信
ÐRS-485与RS-232转换接口
Ð系统设计及实现
湿度检测系统在仓储管理、生产制造、气象观测、科学研究以及日常生活中被广泛应用,利用计算机实现自动检测将大大简化检测过程,并节约大量人力物力资源。
本章介绍利用单片机和计算机实现自动检测系统,它涉及到湿度数据的采集和数据的传输,为了能够实现远距离传输,该系统采用RS-485总线通信。
16.1概述
图16.1系统框图
该系统中主要包括如下几个模块:
环境湿度数据的提取、数据的传输、总线电平的转换和计算机软件。
系统框图如图16.1所示。
由于计算机没有RS-485接口,故必须把485电平转换为232电平,所以必须设计两种电平的转换接口。
RS-485总线的通信原理和设计在第十二章中做了详细的介绍,因此这里不再赘述,直接给出设计电路和程序,该系统中用到的RS-485芯片为MAX485。
湿度检测分机负责检测环境湿度并把湿度志传输给计算机。
该模块中的重要部分为湿度传感器的控制,湿度传感器的种类很多,不同的传感器的传输总线和精度有所不同,该系统采用瑞士Sensirion公司生产的具有IIC总线接口的单片全校准数字式相对湿度和温度传感器SHT11。
16.2湿度传感器SHT11
SHTxx是瑞士Sensirion公司生产的具有IIC总线接口的单片全校准数字式相对湿度和温度传感器。
该传感器采用独特的CMOSensTM技术,具有数字式输出、免调试、免标定、免外围电路及全互换的特点。
其外观如图16.2所示。
图16.2SHTSSxx外观图
16.2.1SHT11的特点
考虑到使用体积较小的传感器,本系统使用SHT11传感器,SHT11为八引脚(LCC封装)的传感器,该传感器体积小,在PCB图上占面积小,集温度和湿度传感器于一体,同时还具有如下特点:
∙将温湿度传感器、信号放大调理、A/D转换、IIC总线接口全部集成于一芯片(CMOSensTM技术);
∙可给出全校准相对湿度及温度值输出;
∙带有工业标准的IIC总线数字输出接口;
∙具有露点值计算输出功能;
∙具有卓越的长期稳定性;
∙湿度值输出分辨率为14位,温度值输出分辨率为12位,并可编程为12位和8位;
∙小体积(7.65×5.08mm),可表面贴装;
∙具有可靠的CRC数据传输校验功能;
∙片内装载的校准系数可保证100%互换性;
∙电源电压范围为2.4-5.5V;
∙低功耗,测量时电流为550μA,平均电流为28μA,休眠时电流为3μA。
16.2.2SHT11的接口
SHT11有8个引脚,但它通过4条线与其它元件相连,分别是电源(GND、VCC)和IIC总线(SCK和DATA),SHT11的结构框图如图16.3所示。
从图16.3可以看出,该传感器中含有放大电路和A/D转换电路,所以在应用时只需和处理器用IIC连接,读出数据即可。
下面是SHT11的各引脚说明:
∙电源引脚:
SHT11的供电电压为2.4~5.5V。
传感器上电后,要等待11ms以越过“休眠”状态,在此期间无需发送任何指令。
电源引脚(VDD,GND)之间可增加一个100nF的电容,用以去耦滤波。
∙串行时钟输入(SCK):
SCK用于微处理器与SHT11之间的通讯同步。
由于接口包含了完全静态逻辑,因而不存在最小SCK频率。
∙串行数据(DATA):
DATA三态门用于数据的读取。
DATA在SCK时钟下降沿之后改变状态,并仅在SCK时钟上升沿有效。
数据传输期间,在SCK时钟高电平时,DATA必须保持稳定。
为避免信号冲突,微处理器应驱动DATA在低电平。
需要一个外部的上拉电阻(例如:
10kΩ)将信号提拉至高电平。
上拉电阻通常已包含在微处理器的I/O电路中。
注意:
SHTx11的串行接口虽然是IIC总线,但在传感器信号的读取及电源损耗方面,都做了优化处理;但与标准IIC接口不兼容,故一般应用处理器模仿IIC总线。
图16.3SHT11结构框图
1.发送命令
SHT11与处理器通信之前用一组“启动传输”时序,来表示数据传输的初始化。
它包括:
当SCK时钟高电平时DATA翻转为低电平,紧接着SCK变为低电平,随后是在SCK时钟高电平时DATA翻转为高电平,如图16.4所示。
图16.4启动传输时序图
启动传输后,后续指令包括地址位和命令位,其中有三个地址位(目前只支持“000”)和五个命令位。
SHT11会以下述方式表示已正确地接收到指令:
在第8个SCK时钟的下降沿之后,将DATA下拉为低电平(ACK位)。
在第9个SCK时钟的下降沿之后,释放DATA(恢复高电平),如图16.5所示。
表16.1为SHT11的所有命令集。
图16.5SHT11测量时序图
表16.1SHT11的命令集
命令
代码
预留
0000x
温度测量
00011
湿度测量
00101
读状态寄存器
00111
写状态寄存器
00110
预留
0101x-1110x
软复位:
复位接口、清空状态寄存器,下次命令前等待至少11ms
1110
2.测量时序
在进行测量温度或湿度时,需要先启动传输,后续需要向传感器发送三位地址和命令(温度测量为00011;湿度测量为00101),控制器要等待测量结束。
SHT11通过下拉DATA至低电平并进入空闲模式,表示测量的结束。
控制器再次触发SCK时钟前,必须等待这个“数据备妥”信号来读出数据。
检测数据可以先被存储,这样控制器可以继续执行其它任务在需要时再读出数据。
当测量结束后,接着传输2个字节的测量数据和1个字节的CRC-8校验。
处理器需要通过下拉DATA为低电平,以确认每个字节。
所有的数据从MSB开始,右值有效(例如:
对于12bit数据,从第5个SCK时钟起算作MSB;而对于8bit数据,首字节则无意义)。
当使用CRC-8校验时,用CRC数据的确认位,表明通讯结束。
如果不使用CRC-8校验,控制器可以在测量值LSB后,通过保持确认位ack高电平,来中止通讯。
传输时序如图16.5所示。
在测量和通讯结束后,SHT11自动转入休眠模式。
16.2.3SHT11的状态寄存器
STH11中含有一个状态寄存器,某些高级功能可以通过状态寄存器实现。
状态寄存器的各位的具体含义如表16.2。
表16.2状态寄存器
位
类型
说明
默认值
7
预留
0
6
R
低电压检测:
0对应VCC>2.47
1对应VCC<2.47
X
5
预留
0
4
预留
0
3
仅供测试,不使用
0
2
R/W
加热
0
关
1
R/W
不从OTP加载
0
记载
0
R/W
1:
湿度8位/温度12位分辨率
0:
湿度12位/温度14位分辨率
0
湿度12位
温度14位
∙测量分辨率默认的测量分辨率分别为14bit(温度)、12bit(湿度),也可分别降至12bit和8bit。
通常在高速或超低功耗的应用中采用该功能。
∙电量不足“电量不足”功能可监测到VCC电压低于2.47V的状态。
精度为±0.05V。
∙加热元件芯片上集成了一个可通断的加热元件。
接通后,可将SHT11的温度提高大约5-15℃,功耗增加大约8mA(VCC=5V)。
应用于比较加热前后的温度和湿度值,可以综合验证两个传感器元件的性能。
说明:
在高湿度(>95%RH)环境中,加热传感器可防止凝露,同时缩短其响应时间,提高测量精度。
警告:
加热后较之加热前,SHT11将显示温度值略有升高、相对湿度值稍有降低。
注意:
传感器的输出值和湿度之间不是完全的线性变换,所以在获得湿度值时一般按照如下公式计算得到的。
其中:
SORH为从传感器读出的数值,c1、c2和c3的取值如下表:
表16.3湿度转换系数
SORH
C1
C2
C3
12bit
-4
0.0405
-2.8×10-6
8bit
-4
0.648
-7.2×10-4
16.3系统的硬件电路设计
湿度检测系统主要由湿度数据采集模块、传输电平转换接口和计算机处理软件组成,在本章中我们主要讨论前两部分的设计。
为适应远距离传输的条件,该系统使用RS-485总线传输。
16.3.1RS-485和RS-232转换接口
图16.6MAX485结构和管脚图
由于计算机上没有RS-485接口,故计算机不能直接连接485总线,但计算机上有RS-232接口,所以可以先把485电平转换为232电平,再传输到计算机上,由计算机处理。
在该接口中用到MAX232、MAX485和6N137,下面分别介绍。
1.RS-485驱动芯片MAX485
MAX485是由Maxim公司生产的低功耗RS-485收发芯片,内部集成了一个驱动器和一个接收器。
结构及管脚图如图16.6所示。
MAX485有8个引脚,是半双工通信的启动芯片,各引脚意义如下:
∙RO:
接收器输出端。
∙
:
接收器输出使能端。
0:
允许接收器输出;1:
禁止接收器输出。
∙DE:
驱动器输出使能端。
0:
禁止驱动器工作;1:
允许驱动器工作。
∙DI:
驱动器输入端。
∙GND:
接地端。
∙A:
接收器非反相输入和驱动器非反相输出端。
∙B:
接收器反相输入和驱动器反相输出端。
∙VCC:
电源端,电压范围4.75V-5.25V。
从MAX485各引脚的功能可以看出,该芯片工作在半双工状态,接收使能端和传输使能端正好处于两个相反状态,所以在进行硬件连接时,可以把这两个引脚连到一个单片机输出引脚上。
由于RS-232的原理和连接在其他章节中介绍了,故在此不再过多赘述。
2.光电隔离技术
为了提高数据传输的可靠性,防止两种电平信号的相互干扰,在两种电平之间采用了光电隔离技术。
为了达到完全隔离效果,两个子系统应该用两套相互独立的电源供电,因此在电路设计当中采用了电源的光电隔离模块:
DC-DC模块,该模块可以产生两个相互独立的电源。
为达到隔离效果,在传输数据的信号线之间采用光电耦合器,由于信号的传输要求光耦具有高速特性,所以该系统中采用了高速光耦6N137,其内部结构和引脚图如16.7所示。
图16.76N137内部结构图
从6N137的结构图可以看出,该光耦是通过发光二极管的导通和截止来控制另一端的导通和截止,信号输入端为ANODE端和CATHOLD端,信号输出端为VE端和VO端,内部结构中由于有一个反相器,所以通常输出电平为输入电平的反向电平。
表16.4为6N137的逻辑真值表。
表16.46N137的真值表
发光二极管LED
VE端
VO端
ON
H
L
OFF
H
H
ON
L
H
OFF
L
H
ON
NC
L
OFF
NC
H
由于6N137内部采用高强度红外发光二极管和高速高增益的光敏检测集成电路,从而能够满足在数字传输中的高速变化的逻辑电平。
6N137典型的应用电路如图16.8所示。
图16.86N137应用典型电路
该电路应用于单片机的通信系统中的隔离技术,所以单片机控制端和数据通信端应用了两套相互独立的电源,分别用VCC和+5v表示,这样可以有效抑制系统对通信的干扰,从而提高通信的质量和距离。
3.电路设计
该电路的设计主要由三部分构成,分别为电源部分,RS-485通信部分和RS-232通信部分。
在该通信接口中由于用到了光电隔离技术,所以在电路中必须要用两套相互独立的电源。
为了减少设计的复杂度,电路中用到了一个带光电隔离的DC-DC模块,该模块在一个电源输入的情况下能够产生另一个独立的电源。
图16.9为该部分的电路。
图16.9通信接口的电源电路
图16.10DC-DC电源模块连接图
图16.9中把220v交流电通过整流桥和变压模块LM317变为直流5v电源,图16.10中利用DC-DC电源模块产生两套独立电源,它们都是直流的5v电源。
在通信接口中,通信中信号电平的转换顺序为:
RS-232电平转换为TTL电平,TTL电平再转换为RS-485电平,前一次转换过程应用MAX232芯片,电路图如图16.11。
图16.11RS-232电平转换TTL电平电路图
电路中,接头采用9针的针式插头,可以直接连接到计算机的串行接口上。
MAX232后方的传输线TD和RD上传输的信号为TTL电平信号。
TTL电平信号到RS-485电平的转换是利用MAX485芯片实现的,电路如图16.12所示。
图16.12TTL电平转换RS-485电平电路图
在RS-485通信中为了减小干扰,在总线两端增加了120Ω的电阻,所以在电路的设计中增加了一个跳线,用于接入120Ω电阻。
为了防止MAX232和MAX485之间的相互干扰,在两个芯片传输线之间用6N137进行了光电隔离。
图16.13光电隔离电路
16.3.2湿度检测分机电路设计
图16.14分机通信模块电路原理图
湿度检测分机负责检测外部环境的湿度,并把检测结果实时的传输到计算机上。
假设计算机可以管理多个环境的湿度检测,则在系统中存在多台分机,为了能够区分各个分机,在每个分机上分配一个地址。
根据分机的功能,可将分机划分如下几个功能模块:
电源模块、通信模块和湿度检测模块。
电源的设计与通信接口中的电源设计是相同的,同样应用了光电隔离技术。
通信模块仍然用MAX485实现,电路图如图16.14所示。
在图16.14中,由于MAX485的发送控制端DE和接收控制端RE的控制电平正好相反,故把此两个引脚共同连到单片机上进行控制,空闲状态下保持MAX485为接收状态。
单片机和湿度传感器的电路比较简单,只要对应连到单片机的I/O线即可,如图16.15所示。
图16.15分机显示及检测电路
在图16.15中,SW为拨码开关,用于设置检测分机的地址号。
分机除了向上位机传送当前的湿度值外,还将检测到的湿度值用LED数码管显示出来,同时电路中应用了串转并电路74164以减少单片机端口的数量。
为了提高系统的可靠性,电路增加了看门狗电路,并用MAX813L实现。
16.4系统的软件设计
该系统的软件设计包括上位机软件和单片机程序的设计,该章中不具体介绍上位机软件的设计,只说明上位机软件的功能。
上位机软件除了存储、查询和设置等功能外,与单片机向关的功能就是与单片机的数据通信,上位机软件用循环的方式查询各检测分机的检测数据。
整个通信工程必须有统一的通信协议。
16.4.1系统通信协议的设定
为了单片机能够快速高效的处理上位机软件发送到命令,单片机程序和上位机软件都必须按照统一的通信协议进行数据和命令的传输,从而使单片机能够快速响应上位机软件的命令。
图16.16为通信的帧的格式。
起始字符
帧头
字节数
帧标志
帧数据
校验值
帧尾
图16.16通信帧格式
∙起始字符:
该部分用于指示通信的开始。
由两字节组成,两个FFH;
∙帧头:
一字节,用于说明通信帧的开始,68H;
∙字节数:
一字节,用于指示该帧中的字节数目,其中不包括起始字符、帧头、检验值和帧尾;
∙帧标志:
一个字节,表示本帧数据是命令帧(A5H)还是数据帧(5AH),命令帧用于上位机软件向检测分机查询湿度值,数据帧用于检测分机向上位机传送。
∙帧数据:
每帧要发送到数据;
∙校验值:
一字节,该校验为和检验,即将帧头、字节数、帧标志和帧数据求和;
∙帧尾:
一字节,FAH。
命令帧的帧标志为A5H,帧中的数据为一字节的分机地址。
数据帧的帧标志为5AH,帧中的数据为分机地址号和湿度值。
当上位机软件进行查询数据时,若收不到检测分机的数据帧,则在延时一段时间后再次查询检测分机,如此三次,若仍收不到数据帧,则断定该检测分机出现故障。
16.4.2单片机程序设计
检测分机的单片机程序包括如下几个模块:
显示模块程序、湿度检测模块程序和通信模块程序。
程序总流程图如图16.17。
图16.16单片机程序流程图
1.函数声明及变量定义
为方便程序的编写,把部分常用的变量进行伪定义。
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineboolbit
#definetrue1
#definefalse0
sbitSCK=P3^4;//IIC时钟信号
sbitSAL=P3^5;//IIC数据线
sbitLED_SCK=P3^2;//显示部分串转并时钟线
sbitLED_SAL=P3^3;//显示部分串转并数据线
sbitWDI=P3^7;//喂狗脚
sbitCTR_485=P1^0;//RS_485总线传输控制
ucharcodeled_char[16]={0xfa,0x48,0xf4,0xdc,0x4e,0x9e,0xbe,
0xc8,0xfe,0xde,0x00};//0~9,0x00为数码管不显示任何数字
ucharAddress;//分机地址号
ucharidataData_Buffer[20];//接收缓冲区
boolCommand_Send;
voidStart(void)//SHT11启动子程序
ucharReadreg(void)//读状态寄存器
voidWritereg(ucharregdata)//写状态寄存器
voidIntSHT11(void)//设置SHT11湿度检测工作在8位状态,状态寄存器bit0=0
ucharReadData(void)//获取补偿前的SHT11的返回值
intGetRH(void)//获取补偿后的湿度值
voidLED_Display(ucharright,ucharleft)//LED显示子程序
voidDisplay(intRH)//湿度值显示子程序
ucharReceive_Data(void)//接收字节子程序
voidSend_Data(ucharSerial_data)//串口发送一个字节函数
bitReceive_One(uchar*s)//接收一帧数据子程序
voidRXD_Int(void)interrupt4//串口接收中断子程序
voidSend_One(uchar*s)//串口发送一帧数据子程序
voidSend_RH(ucharRH)//命令处理子程序
ucharGet_address(void)//获取地址号子程序
voidInital(void)//初始化化子程序
2.环境湿度值采集程序的设计
SHT11与单片机的接口为串行IIC总线,但单片机AT89C2051没有IIC接口,所以必须用单片机的I/O线模拟SHT11的时序来完成数据和命令的传输。
发送命令
SHT11与处理器通信之前用一组“启动传输”时序,来表示数据传输的初始化。
如图16.4。
它包括:
当SCK时钟高电平时DATA翻转为低电平,紧接着SCK变为低电平,随后是在SCK时钟高电平时DATA翻转为高电平。
****************************
SHT11启动子程序
****************************/
voidStart(void)
{
SCK=1;//时钟信号变高电平
_nop_();
_nop_();
SAL=0;//数据线变低电平
_nop_();
_nop_();
SCK=0;
_nop_();
_nop_();
SCK=1;
_nop_();
_nop_();
SAL=1;
_nop_();
_nop_();
SCK=0;
}
设置工作模式
SHT11的工作模式的设置是对其状态寄存器的写入状态字。
状态寄存器的每一位的意义在表16.4中已详细说明。
在该章中SHT11工作在8位分辨率的湿度测量中,所以状态寄存器的最低位应为1,而系统默认为0,所以需要对状态寄存器进行执行写入操作,在写入之前必须先进行读出,以保证状态寄存器的其它位不被修改。
/*****************************
读状态寄存器
返回值:
状态寄存器值
******************************/
ucharReadreg(void)
{
uchari,reg;
Start();//启动传输命令
_nop_();
_nop_();
_nop_();
SAL=0;//发送地址000
for(i=0;i<3;i++){
_nop_();
SCK=0;
_nop_();
SCK=1;
}
WDI=0;WDI=1;//清看门狗
//发送读状态寄存器命令码00111
for(i=0;i<2;i++){
_nop_();
SCK=0;
_nop_();
SCK=1;
}
SAL=1;
for(i=0;i<3;i++){
_nop_();
SCK=0;
_nop_();
SCK=1;
}
SAL=0;//保持一个周期的0
_nop_();
SCK=0;
_nop_();
SCK=1;
reg=0;
WDI=0;WDI=1;//清看门狗
//开始读取状态寄存器值
for(i=0;i<8;i++){
SCK=0;
_nop_();
SCK=1;
reg=reg<1;
if(SAL)
reg=reg||0x01;
else
reg=reg&&0xfe;
}
SAL=1;
returnreg;//返回状态寄存器值
}
/*****************************
写状态寄存器
入口参数:
状态寄存器的设置值
******************************/
voidWritereg(ucharregdata)
{
uchari;
Start();//启动传输命令
_nop_();
_nop_();
_nop_();
SAL=0;//发送地址000
for(i=0;i<3;i++){
_nop_();
SCK=0;
_nop_();
SCK=1;
}
//发送写状态寄存器命令码00110
for(i=0;i<2;i++){
_nop_();
SCK=0;
_nop_();
SCK=1;
}
SAL=1;
for(i=0;i<2;i++){
_nop_();
SCK=0;
_nop_();
SCK=1;
}
SAL=1;
_nop_();
SCK=0;
_nop_();
SCK=1;
SAL=0;//保持一个周期的0
_nop
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第16章 湿度检测系统剖析 16 湿度 检测 系统 剖析