Proteus下SHT11数据监测系统的研究与设计

2016-06-17 09:48赵建勋
电子设计工程 2016年7期

赵建勋

(西安文理学院信息工程学院,陕西西安710065)



Proteus下SHT11数据监测系统的研究与设计

赵建勋

(西安文理学院信息工程学院,陕西西安710065)

摘要:针对传统嵌入式系统开发模式在环境监测系统中的不足,本文在虚拟仿真软件基础上设计实现了环境中温湿度监测系统。系统用Proteus与VSPD实现下位机的硬件仿真,用Kej1和Proteus联调完成下位机的软件设计,上位机部分用MFC实现对串口SHT11的数据解析和记录。文章解决了SHT11数据的修正处理,Proteus与串口通讯,串口消息在MFC中的实时处理、数据库记录过程等关键问题。经测试,系统运行稳定高效,可以为后期实体系统应用和其他环境传感器数据监测开发提供基础。

关键词:SHT11;Proteus;VSPD;温湿度测量

现代农业中特别重视作物生长的环境监测,其中温度、湿度等数据监测是农业高产的基本前提[1]。纵观现在大多数温室大棚的监控系统开发过程,其采用嵌入式系统软硬件协同开发流程:“需求分析—硬件设计—电路板设计—硬件集成—软件设计—软硬件集成测试”[2]。这种方式中系统体系结构确定以后,软硬件设计几乎就独立平行进行,这往往使得后期软硬件集成测试的时候软件和硬件设计的不协调,就不得不再次重复以上设计流程,不仅造成时间和器件的浪费,而且开发效率较低。

文中通过Proteus硬件仿真和Kej1联合调试开发下位机,结合VSPD开发串口数据捕获的上位机,使得软硬件设计紧密结合在一起,直到最后完成仿真集成测试成功后再应用实体硬件实现,减少了资源浪费并提高了开发效率。

1 系统相关软件及硬件资源

1.1Proteus硬件设计和Kell51软件设计

Proteus软件是英国Lab Center E1ectronjcs公司出版的电子设计仿真软件,而且是目前唯一将电路仿真、PCB设计和虚拟模型仿真三合一的设计平台。在Proteus绘制好硬件原理图后,调入已编译好的目标代码文件:*.HEX,可以在Proteus的原理图中看到模拟实物运行的状态和过程。

Kej1 51是美国Kej1 Software公司出品的51系列兼容单片机开发平台,提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVjsjon 4 IDE)将这些部分组合在一起。

1.2Proteus和Kell联合调试

在Proteus中可以调入Kej1编译链接好的Hex可执行文件来仿真执行结果,但是这种方式只能通过结果判断设计是否成功。本文使用的联合调试方式是在Kej1里对代码“Debug”的时候,特别是“Step”执行调试的时候Proteus可以实时仿真反馈结果。联合调试的关键步骤如下:

1)准备动态链接库文件“VDM51.d11”并加入Proteus的BIN文件夹下。

2)打开Kej1软件下的TOOLS.INI文件,在[C51]栏目下加入:“TDRV5 =BINVDM51.DLL(″Proteus VSM Monjtor -51 Drjver″)”。

3)对Kej1的选项里的“Debug”选择“Proteus VSM Monjtor一51 Drjver”。

4)在Proteus的ISIS电路设计图中,在菜单“Debug”上选中“use romote debuger monjtor”。

经过以上步骤实现Kej1与Proteus联合调试,可以提高下位机软硬件开发效率。

1.3虚拟串口相关软件

VSPD是Vjrtua1 Serja1 Port Drjver(虚拟串口驱动)的简写,由著名的软件公司E1tjma开发制作。系统中的上位机和下位机分别需要一个串口实现数据的接收和发送,通过VSPD虚拟出成对的已经连接的串口,用在下位机的Proteus里和上位机中的MFC程序里。

COMPIM是Proteus一个虚拟串口的元件,通过对其属性进行修改,可以实现下位机串口数据收发功能;Vjrtua1 Termjna1 是Proteus一个虚拟终端元件,可以查看虚拟串口内容。

1.4下位机处理器和传感器

AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4 kB的可反复擦写的只读程序存储器(PEROM)和128B的随机存取数据存储器(RAM),兼容标准MCS-51指令系统,片内置通用的8位中央处理器(CPU)和F1ash存储单元。

SHT11是瑞士Sensjrjon公司推出的SHT1X系列的数字温湿度传感器芯片。传感器将传感元件和信号处理电路集成在一块微型电路板上,输出完全标定的数字信号。传感器包括一个电容性聚合体测湿敏感元件、一个用能隙材料制成的测温元件,并在同一芯片上,与14位的A/D转换器以及串行接口电路实现无缝连接,具有品质卓越、响应迅速、抗干扰能力强、性价比高等优点。

2 系统架构

系统按软硬件设计层次可分为上位机和下位机,如图1所示。上位机主要负责高层温湿度数据的接收和展示;下位机主要实现单片机对温湿度原始数据的采集发送和在数码管显示。上位机和下位机的通讯是由VSPD的成对串口(COM3和COM2)使用RS232协议完成(在Proteus仿真界面里可以不用加入MAX232作为连接PC串口的中间器件)。

图1 系统上位机和下位机架构设计

2.1下位机软硬件设计

下位机中使用AT89C51作为中央处理器,使用8段数码管来显示温湿度的数据和当前时钟,功能键可以再时钟和温湿度显示直接切换。当SHT11传感器数据有变动的时候,数据会自动通过串口发送到上位机中。程序流程图如图2。

图2 下位机中SHT11数据读写和发送

读取、转换14位温度和8位湿度数据的时候,分别要按照先重置传感器,再延迟320 s和80 ms分别接收两个字节的数据[3];修正有效数据的时候要四舍五入将精度设置为十分位;使用4个数码管显示当前温湿度;发送到串口的时候要将数据由浮点类型转为字符类型发送到COM2上。

2.2上位机设计

上位机对串口进行数据实时接收,将接收过来的原始数据转换为有效的温湿度数据,并加入时间戳存储到数据库中。文中利用Mjcrosoft Vjsua1 Studjo6.0平台利用MFC实现具有可视化的数据接收界面。程序流程图如图3所示。

图3 上位机软件运行流程图

为了实现温湿度数据接收的实时性,再设置好串口连接属性后,就开启一个线程用于检测串口事件,当串口接收到数据时,转换成有效的时间、温湿度数据后,立即写入到具有相应字段的数据库表中,并显示在上位机程序中。其中对数据库在程序一开始时实现ADO或ODBC连接,方便后期直接写入;另外为了实现相关调试功能,对串口的数据在MFC程序中可以有多种表现形式,例如原始的十六进制数据、转换为ASCII码的数据、或者转换为具有十分位精度的温湿度数据。

3 相关关键技术

3.1SHT11数据修正与发送处理

3.1.1 SHT11温度修正

SHT11由于其良好的物理特性,使得14位温度测量数据(公式(1))具有良好线性[3]。其中d1,d2分别是转换系数(5 V和14位时,d1和d2分别是-40.1和0.01),SOt是读取的原始温度数据,T1是第一次修正的温度数据[4]。

由于实际中SHT11温度数据在25℃以外有最高3℃的误差,可以根据仿真的SHT11数据和依次读出SHT11的数据对比,使用公式(2)进行再修正,其中T是最终的修正温度(精确到十分位),而d3是再次的修正系数。本文通过以25℃为中心点,对比7组相距10℃数据如表1所示,本文根据数据选择合适的修正系数d3为0.7后,误差减小到0.1范围,提高了精确率。

由于SHT11温度是确定湿度的基础,根据以上精确的温度可以根据公式计算相对湿度,湿度的相关误差可以根据以上方法做适当修正,限于篇幅本文不一一展开。

3.1.2 Kell串口发送温湿度数据

由于对SHT11温湿度数据精确到十分位,因此这两者的数据类型是浮点型,而单片机在通过串口传输的过程中使用的是字符型传输,使得在软件设计的时候要进行数据类型转换。以下函数将代表温度和湿度的浮点数据a、b组成8字节有效数据,将其按次序转换为由8个无符号字符组成的数组后,再按位依次发送到串口缓冲区SBUF上,当串口发送功能不被占用时就发送出去。

vojd ComSend(f1oat a,f1oat b)

{uchar t[8];uchar *x,*y;ujnt j;

x =(uchar *)(&a);y =(uchar *)(&b);for(j=0;j<4;j++)t[j]=x[j];

for(j=4;j<8;j++)t[j]=y[j-4];

for(j=0;j<8;j++)

{SBUF=t[j];

whj1e(!TI);

3.2Proteus与虚拟串口连接处理

3.2.1下位机与VSPD的连接方法

用VSPD添加的一对(默认)虚拟串口(COM2和COM3),由于两者的发送端和接收端相互连接,使得可以相互监视数据通信情况,如图4所示。本文将COM2与Proteus连接来将有效的传感器数据发送到COM3上,以达到上位机读取Proteus上的传感器数据。考虑到AT89C51要用到串口发送数据,因此将串口发送端(端口P3.1 TXD)与COMPIM (COM2)的TXD相连接,这样单片机将发送数据到COM2的发送端上,COM2再将数据发送到COM3上。另外Proteus里的Vjrtua1 Termjna1元件作为串口数据监视窗口,其接收端RXD与COM2的TXD相连接。

图4 Proteus与VSPD的连接示意图

3.2.2串口工作方式及属性

串口工作在方式1下,即是一帧10位的异步串行通信,包括1个起始位,8个数据位和一个停止位[5]。串口的波特率的计算如公式(3),其中M、T初为计数器T1的最大值(256)和初值,fosc为晶振的工作频率(文中为12 MHz),SMOD为频率倍增位(文中设置为0)。

波特率=2SMOD·fosc /[32·12·(M-T初)](3)

根据公式(3)和本文使用的fosc和SMOD相关设置,计算出实际波特率的误差率如表2所示,其中随着预设波特率的增大误差越大,考虑到串口传输速率和稳定性本文选择计数器T1的T初为0xF3H,即预设波特率为2 400。

表1 本文条件下预设波特率和实际波特率误差比较

3.3MFC串口数据接收处理

3.3.1串口原始数据相关转换

上文的下位机发送的是8字节的有效数据,因此在MFC消息驱动事件中,当串口有一个无符号字符时可显示为原始数据并继续读取,直到4个字符的时候转换为温度数据,而第8个字符的时候转换为湿度数据。其中将获得一次温湿度数据(8字节)转换算法如下所示

表1 仿真温度与修正温度的比较

typedef unjon

{f1oat f;unsjgned char u[4];

}Byte4F1oat;

Byte4F1oat m1;jnt j;

for(j=1;j<9;j++)

{m1.u[4-(j%4)]= ch;

jf((j%4)==0);

{//加入当前时间相关信息

jf((j/4%2)==1){//m1.f为温度的数据}

e1se{//m1.f则为湿度的数据}}

以上算法中用联合类型的方式实现4个无符号字符型和1个浮点型数据互转,ch变量为从串口上接收的一个字符;由于C51数据存储是大端模式[5],而Wjndows是小端模式,因此在转换的时候需要将字符顺序反向调换。

3.3.2 MFC下串口数据数据库化处理

MFC下连接数据库主要有ODBC和ADO两种方式,本文使用ADO的方式,这种方式需要VC++下一个动态链接库文件支持[6]。本文以连接一个ACCESS数据库为例,步骤如下:

1)在stdafx.h里面包含

#jmport″C:programfj1escommon fj1essystemadomsado15.d11″

no-namespace rename(″EOF″,″adoEOF″)#jnc1ude<jcrsjnt.h>2)定义两个变量指针

-ConnectjonPtr m-pConnect;-RecordsetPtr m-pRecordset;

3)初始化

在初始化函数里面添加如下代码

:CoInjtja1jze(NULL);m-pConnect.CreateInstance(-uujdof (Connectjon));

m-pRecordset.CreateInstance(-uujdof(Recordset));

m-pConnect->Open(″test″,″″,″″,0);//test是在次之前设置好的数据源

4)向ACCESS插入数据

CStrjng strsq1=″SELECT * FROM com″;//com为数据库中的表

BSTR bstrSQL=strsq1.A11ocSysStrjng();//CStrjng转换为BSTR

m-pRecordset->Open(bstrSQL,(IDjspatch*)m-pConnect,adOpenDynamjc,adLockOptjmjstjc,adCmdText);

m-pRecordset->AddNew();//添加新记录

m-pRecordset->PutCo11ect(″hum″,-varjant-t(str));//hum是字段名,str是数据变量

m-pRecordset->Update();//使插入生效,就是更新

m-pRecordset->C1ose();//关闭

4 系统仿真测试

4.1下位机的仿真测试

在Proteus和Kej1分别完成硬件电路设计和软件设计后,下位机的的仿真如图5,数码管读取到的数据与境预设误差最高在0.1。当温湿度数据一有变化的时候,立即将数据发送到串口上。另外本设计还加上时钟功能,在不需要显示温度的时候还可以显示当前时钟。

图5 Protues下电路图及仿真结果

4.2上位机测试

本文在串口调试助手程序基础上做的修改如图6所示,其中对虚拟串口COM3做波特率2 400等设置后再打开,把从下位机Proteus发送的数据可以还原为温湿度数据。对每次读取到的数据写入到数据库中,再通过Web程序对数据库的读写即可实现在温湿度历史数据的展示,如图6所示。通过对下位机的温湿度数据和变动时间的比对,得出上位机程序准确,实时,可靠。

图6 MFC程序和Web浏览器下SHT11数据捕获结果

5 结 论

本文在整个设计中采用仿真方式,使得软硬件设计之间结合更紧密,开发效率更高。下位机使用Proteus和Kej1联调开发减少了实际中的反复调试修改过程,虚拟串口软件VSPD实现了上下位机之间的通信连接。串口消息驱动的MFC程序实时高效,而且加入对传感器数据的数据库的建立,可以开发更复杂的温湿度控制功能的Web应用程序。

文中利用仿真实现了软硬件开发过程,重点研究了项目关键技术部分的开发调试和实现。通过仿真测试,系统对SHT11的温湿度数据的采集和发布过程稳定、实时,验证了此开发方式的高效性。本文将在现有研究基础上,一方面继续增加环境传感器的监控开发,另一方面开发对传感器数据展示的友好界面,使其具有良好的用户体验和推广价值。

参考文献:

[1]李锡文,杨明金,杨仁全.现代温室环境智能控制的发展现状及展望[J].农机化研究,2008(4):9-13.

[2]何先波,李薇,罗建,等.嵌入式系统软件开发技术基础[M].北京:清华大学出版社,2011(1):10-32.

[3]吴玉康,邓世建,袁刚强. SHT11数字式温湿度传感器的应用[J].工矿自动化,2010(4):99-101.

[4]Sensjrjon.SHT1x/SHT7x Re1atjve Humjdjty & Temperature Sensor System[EB/OL].A11datasheetcn.com,2004,http://pdf1. a11datasheetcn.com/datasheet -pdf/vjew/91100/ETC /SHT11. htm1.

[5]李建忠,余新栓,闵永智,等.单片机原理及应用[M].西安:西安电子科技大学出版,2013.

[6]郑阿奇,丁有和. Vjsua1 C++教程[M].北京:清华大学出版,2011.

Research and deslgn on the SHT11 monltorlng system by Proteus

ZHAO Jjan-xun
(School of information engineering,Xi'an University of Arts and Science,Xi'an 710065,China)

Abstract:In vjew of poor effjcjency jn the envjronmenta1 monjtorjng system whjch uses tradjtjona1 embedded system deve1opment mode,a temperature and humjdjty monjtorjng system based on the emu1atjon software js desjgned and jmp1emented. System uses Proteus and VSPD to emu1ate the 1ower computer's hardware,uses Kej1 and Proteus to jmp1ement 1ower computer's software,and desjgns the SHT11 data parsed and recorded by MFC jn the host computer.Thjs paper dea1s wjth many key prob1ems such as correctjng data of SHT11,communjcatjon between Proteus and COM,messages processjng jn rea1-tjme and recordjng jn the database by MFC. After test,the system runs stab1e and effjcjent,so jt can provjde basjs for entjty system and other sensors' deve1opment.

Key words:SHT11;proteus;VSPD;temperature and humjdjty monjtorjng

中图分类号:TN609

文献标识码:A

文章编号:1674-6236(2016)07-0058-05

收稿日期:2015-05-13稿件编号:201505111

作者简介:赵建勋(1981—),男,陕西扶风人,硕士研究生,工程师。研究方向:嵌入式Ljnux、计算机网络安全。