趙建勛
(西安文理學院信息工程學院,陜西西安710065)
?
Proteus下SHT11數(shù)據(jù)監(jiān)測系統(tǒng)的研究與設計
趙建勛
(西安文理學院信息工程學院,陜西西安710065)
摘要:針對傳統(tǒng)嵌入式系統(tǒng)開發(fā)模式在環(huán)境監(jiān)測系統(tǒng)中的不足,本文在虛擬仿真軟件基礎上設計實現(xiàn)了環(huán)境中溫濕度監(jiān)測系統(tǒng)。系統(tǒng)用Proteus與VSPD實現(xiàn)下位機的硬件仿真,用Kej1和Proteus聯(lián)調(diào)完成下位機的軟件設計,上位機部分用MFC實現(xiàn)對串口SHT11的數(shù)據(jù)解析和記錄。文章解決了SHT11數(shù)據(jù)的修正處理,Proteus與串口通訊,串口消息在MFC中的實時處理、數(shù)據(jù)庫記錄過程等關鍵問題。經(jīng)測試,系統(tǒng)運行穩(wěn)定高效,可以為后期實體系統(tǒng)應用和其他環(huán)境傳感器數(shù)據(jù)監(jiān)測開發(fā)提供基礎。
關鍵詞:SHT11;Proteus;VSPD;溫濕度測量
現(xiàn)代農(nóng)業(yè)中特別重視作物生長的環(huán)境監(jiān)測,其中溫度、濕度等數(shù)據(jù)監(jiān)測是農(nóng)業(yè)高產(chǎn)的基本前提[1]。縱觀現(xiàn)在大多數(shù)溫室大棚的監(jiān)控系統(tǒng)開發(fā)過程,其采用嵌入式系統(tǒng)軟硬件協(xié)同開發(fā)流程:“需求分析—硬件設計—電路板設計—硬件集成—軟件設計—軟硬件集成測試”[2]。這種方式中系統(tǒng)體系結構確定以后,軟硬件設計幾乎就獨立平行進行,這往往使得后期軟硬件集成測試的時候軟件和硬件設計的不協(xié)調(diào),就不得不再次重復以上設計流程,不僅造成時間和器件的浪費,而且開發(fā)效率較低。
文中通過Proteus硬件仿真和Kej1聯(lián)合調(diào)試開發(fā)下位機,結合VSPD開發(fā)串口數(shù)據(jù)捕獲的上位機,使得軟硬件設計緊密結合在一起,直到最后完成仿真集成測試成功后再應用實體硬件實現(xiàn),減少了資源浪費并提高了開發(fā)效率。
1.1Proteus硬件設計和Kell51軟件設計
Proteus軟件是英國Lab Center E1ectronjcs公司出版的電子設計仿真軟件,而且是目前唯一將電路仿真、PCB設計和虛擬模型仿真三合一的設計平臺。在Proteus繪制好硬件原理圖后,調(diào)入已編譯好的目標代碼文件:*.HEX,可以在Proteus的原理圖中看到模擬實物運行的狀態(tài)和過程。
Kej1 51是美國Kej1 Software公司出品的51系列兼容單片機開發(fā)平臺,提供了包括C編譯器、宏匯編、連接器、庫管理和一個功能強大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,通過一個集成開發(fā)環(huán)境(μVjsjon 4 IDE)將這些部分組合在一起。
1.2Proteus和Kell聯(lián)合調(diào)試
在Proteus中可以調(diào)入Kej1編譯鏈接好的Hex可執(zhí)行文件來仿真執(zhí)行結果,但是這種方式只能通過結果判斷設計是否成功。本文使用的聯(lián)合調(diào)試方式是在Kej1里對代碼“Debug”的時候,特別是“Step”執(zhí)行調(diào)試的時候Proteus可以實時仿真反饋結果。聯(lián)合調(diào)試的關鍵步驟如下:
1)準備動態(tài)鏈接庫文件“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”。
經(jīng)過以上步驟實現(xiàn)Kej1與Proteus聯(lián)合調(diào)試,可以提高下位機軟硬件開發(fā)效率。
1.3虛擬串口相關軟件
VSPD是Vjrtua1 Serja1 Port Drjver(虛擬串口驅(qū)動)的簡寫,由著名的軟件公司E1tjma開發(fā)制作。系統(tǒng)中的上位機和下位機分別需要一個串口實現(xiàn)數(shù)據(jù)的接收和發(fā)送,通過VSPD虛擬出成對的已經(jīng)連接的串口,用在下位機的Proteus里和上位機中的MFC程序里。
COMPIM是Proteus一個虛擬串口的元件,通過對其屬性進行修改,可以實現(xiàn)下位機串口數(shù)據(jù)收發(fā)功能;Vjrtua1 Termjna1 是Proteus一個虛擬終端元件,可以查看虛擬串口內(nèi)容。
1.4下位機處理器和傳感器
AT89C51是美國ATMEL公司生產(chǎn)的低電壓,高性能CMOS8位單片機,片內(nèi)含4 kB的可反復擦寫的只讀程序存儲器(PEROM)和128B的隨機存取數(shù)據(jù)存儲器(RAM),兼容標準MCS-51指令系統(tǒng),片內(nèi)置通用的8位中央處理器(CPU)和F1ash存儲單元。
SHT11是瑞士Sensjrjon公司推出的SHT1X系列的數(shù)字溫濕度傳感器芯片。傳感器將傳感元件和信號處理電路集成在一塊微型電路板上,輸出完全標定的數(shù)字信號。傳感器包括一個電容性聚合體測濕敏感元件、一個用能隙材料制成的測溫元件,并在同一芯片上,與14位的A/D轉(zhuǎn)換器以及串行接口電路實現(xiàn)無縫連接,具有品質(zhì)卓越、響應迅速、抗干擾能力強、性價比高等優(yōu)點。
系統(tǒng)按軟硬件設計層次可分為上位機和下位機,如圖1所示。上位機主要負責高層溫濕度數(shù)據(jù)的接收和展示;下位機主要實現(xiàn)單片機對溫濕度原始數(shù)據(jù)的采集發(fā)送和在數(shù)碼管顯示。上位機和下位機的通訊是由VSPD的成對串口(COM3和COM2)使用RS232協(xié)議完成(在Proteus仿真界面里可以不用加入MAX232作為連接PC串口的中間器件)。

圖1 系統(tǒng)上位機和下位機架構設計
2.1下位機軟硬件設計
下位機中使用AT89C51作為中央處理器,使用8段數(shù)碼管來顯示溫濕度的數(shù)據(jù)和當前時鐘,功能鍵可以再時鐘和溫濕度顯示直接切換。當SHT11傳感器數(shù)據(jù)有變動的時候,數(shù)據(jù)會自動通過串口發(fā)送到上位機中。程序流程圖如圖2。

圖2 下位機中SHT11數(shù)據(jù)讀寫和發(fā)送
讀取、轉(zhuǎn)換14位溫度和8位濕度數(shù)據(jù)的時候,分別要按照先重置傳感器,再延遲320 s和80 ms分別接收兩個字節(jié)的數(shù)據(jù)[3];修正有效數(shù)據(jù)的時候要四舍五入將精度設置為十分位;使用4個數(shù)碼管顯示當前溫濕度;發(fā)送到串口的時候要將數(shù)據(jù)由浮點類型轉(zhuǎn)為字符類型發(fā)送到COM2上。
2.2上位機設計
上位機對串口進行數(shù)據(jù)實時接收,將接收過來的原始數(shù)據(jù)轉(zhuǎn)換為有效的溫濕度數(shù)據(jù),并加入時間戳存儲到數(shù)據(jù)庫中。文中利用Mjcrosoft Vjsua1 Studjo6.0平臺利用MFC實現(xiàn)具有可視化的數(shù)據(jù)接收界面。程序流程圖如圖3所示。

圖3 上位機軟件運行流程圖
為了實現(xiàn)溫濕度數(shù)據(jù)接收的實時性,再設置好串口連接屬性后,就開啟一個線程用于檢測串口事件,當串口接收到數(shù)據(jù)時,轉(zhuǎn)換成有效的時間、溫濕度數(shù)據(jù)后,立即寫入到具有相應字段的數(shù)據(jù)庫表中,并顯示在上位機程序中。其中對數(shù)據(jù)庫在程序一開始時實現(xiàn)ADO或ODBC連接,方便后期直接寫入;另外為了實現(xiàn)相關調(diào)試功能,對串口的數(shù)據(jù)在MFC程序中可以有多種表現(xiàn)形式,例如原始的十六進制數(shù)據(jù)、轉(zhuǎn)換為ASCII碼的數(shù)據(jù)、或者轉(zhuǎn)換為具有十分位精度的溫濕度數(shù)據(jù)。
3.1SHT11數(shù)據(jù)修正與發(fā)送處理
3.1.1 SHT11溫度修正
SHT11由于其良好的物理特性,使得14位溫度測量數(shù)據(jù)(公式(1))具有良好線性[3]。其中d1,d2分別是轉(zhuǎn)換系數(shù)(5 V和14位時,d1和d2分別是-40.1和0.01),SOt是讀取的原始溫度數(shù)據(jù),T1是第一次修正的溫度數(shù)據(jù)[4]。

由于實際中SHT11溫度數(shù)據(jù)在25℃以外有最高3℃的誤差,可以根據(jù)仿真的SHT11數(shù)據(jù)和依次讀出SHT11的數(shù)據(jù)對比,使用公式(2)進行再修正,其中T是最終的修正溫度(精確到十分位),而d3是再次的修正系數(shù)。本文通過以25℃為中心點,對比7組相距10℃數(shù)據(jù)如表1所示,本文根據(jù)數(shù)據(jù)選擇合適的修正系數(shù)d3為0.7后,誤差減小到0.1范圍,提高了精確率。

由于SHT11溫度是確定濕度的基礎,根據(jù)以上精確的溫度可以根據(jù)公式計算相對濕度,濕度的相關誤差可以根據(jù)以上方法做適當修正,限于篇幅本文不一一展開。
3.1.2 Kell串口發(fā)送溫濕度數(shù)據(jù)
由于對SHT11溫濕度數(shù)據(jù)精確到十分位,因此這兩者的數(shù)據(jù)類型是浮點型,而單片機在通過串口傳輸?shù)倪^程中使用的是字符型傳輸,使得在軟件設計的時候要進行數(shù)據(jù)類型轉(zhuǎn)換。以下函數(shù)將代表溫度和濕度的浮點數(shù)據(jù)a、b組成8字節(jié)有效數(shù)據(jù),將其按次序轉(zhuǎn)換為由8個無符號字符組成的數(shù)組后,再按位依次發(fā)送到串口緩沖區(qū)SBUF上,當串口發(fā)送功能不被占用時就發(fā)送出去。
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),由于兩者的發(fā)送端和接收端相互連接,使得可以相互監(jiān)視數(shù)據(jù)通信情況,如圖4所示。本文將COM2與Proteus連接來將有效的傳感器數(shù)據(jù)發(fā)送到COM3上,以達到上位機讀取Proteus上的傳感器數(shù)據(jù)。考慮到AT89C51要用到串口發(fā)送數(shù)據(jù),因此將串口發(fā)送端(端口P3.1 TXD)與COMPIM (COM2)的TXD相連接,這樣單片機將發(fā)送數(shù)據(jù)到COM2的發(fā)送端上,COM2再將數(shù)據(jù)發(fā)送到COM3上。另外Proteus里的Vjrtua1 Termjna1元件作為串口數(shù)據(jù)監(jiān)視窗口,其接收端RXD與COM2的TXD相連接。

圖4 Proteus與VSPD的連接示意圖
3.2.2串口工作方式及屬性
串口工作在方式1下,即是一幀10位的異步串行通信,包括1個起始位,8個數(shù)據(jù)位和一個停止位[5]。串口的波特率的計算如公式(3),其中M、T初為計數(shù)器T1的最大值(256)和初值,fosc為晶振的工作頻率(文中為12 MHz),SMOD為頻率倍增位(文中設置為0)。
波特率=2SMOD·fosc /[32·12·(M-T初)](3)
根據(jù)公式(3)和本文使用的fosc和SMOD相關設置,計算出實際波特率的誤差率如表2所示,其中隨著預設波特率的增大誤差越大,考慮到串口傳輸速率和穩(wěn)定性本文選擇計數(shù)器T1的T初為0xF3H,即預設波特率為2 400。

表1 本文條件下預設波特率和實際波特率誤差比較
3.3MFC串口數(shù)據(jù)接收處理
3.3.1串口原始數(shù)據(jù)相關轉(zhuǎn)換
上文的下位機發(fā)送的是8字節(jié)的有效數(shù)據(jù),因此在MFC消息驅(qū)動事件中,當串口有一個無符號字符時可顯示為原始數(shù)據(jù)并繼續(xù)讀取,直到4個字符的時候轉(zhuǎn)換為溫度數(shù)據(jù),而第8個字符的時候轉(zhuǎn)換為濕度數(shù)據(jù)。其中將獲得一次溫濕度數(shù)據(jù)(8字節(jié))轉(zhuǎn)換算法如下所示

表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為溫度的數(shù)據(jù)}
e1se{//m1.f則為濕度的數(shù)據(jù)}}
以上算法中用聯(lián)合類型的方式實現(xiàn)4個無符號字符型和1個浮點型數(shù)據(jù)互轉(zhuǎn),ch變量為從串口上接收的一個字符;由于C51數(shù)據(jù)存儲是大端模式[5],而Wjndows是小端模式,因此在轉(zhuǎn)換的時候需要將字符順序反向調(diào)換。
3.3.2 MFC下串口數(shù)據(jù)數(shù)據(jù)庫化處理
MFC下連接數(shù)據(jù)庫主要有ODBC和ADO兩種方式,本文使用ADO的方式,這種方式需要VC++下一個動態(tài)鏈接庫文件支持[6]。本文以連接一個ACCESS數(shù)據(jù)庫為例,步驟如下:
1)在stdafx.h里面包含
#jmport″C:programfj1escommon fj1essystemadomsado15.d11″
no-namespace rename(″EOF″,″adoEOF″)#jnc1ude<jcrsjnt.h>2)定義兩個變量指針
-ConnectjonPtr m-pConnect;-RecordsetPtr m-pRecordset;
3)初始化
在初始化函數(shù)里面添加如下代碼
:CoInjtja1jze(NULL);m-pConnect.CreateInstance(-uujdof (Connectjon));
m-pRecordset.CreateInstance(-uujdof(Recordset));
m-pConnect->Open(″test″,″″,″″,0);//test是在次之前設置好的數(shù)據(jù)源
4)向ACCESS插入數(shù)據(jù)
CStrjng strsq1=″SELECT * FROM com″;//com為數(shù)據(jù)庫中的表
BSTR bstrSQL=strsq1.A11ocSysStrjng();//CStrjng轉(zhuǎn)換為BSTR
m-pRecordset->Open(bstrSQL,(IDjspatch*)m-pConnect,adOpenDynamjc,adLockOptjmjstjc,adCmdText);
m-pRecordset->AddNew();//添加新記錄
m-pRecordset->PutCo11ect(″hum″,-varjant-t(str));//hum是字段名,str是數(shù)據(jù)變量
m-pRecordset->Update();//使插入生效,就是更新
m-pRecordset->C1ose();//關閉
4.1下位機的仿真測試
在Proteus和Kej1分別完成硬件電路設計和軟件設計后,下位機的的仿真如圖5,數(shù)碼管讀取到的數(shù)據(jù)與境預設誤差最高在0.1。當溫濕度數(shù)據(jù)一有變化的時候,立即將數(shù)據(jù)發(fā)送到串口上。另外本設計還加上時鐘功能,在不需要顯示溫度的時候還可以顯示當前時鐘。

圖5 Protues下電路圖及仿真結果
4.2上位機測試
本文在串口調(diào)試助手程序基礎上做的修改如圖6所示,其中對虛擬串口COM3做波特率2 400等設置后再打開,把從下位機Proteus發(fā)送的數(shù)據(jù)可以還原為溫濕度數(shù)據(jù)。對每次讀取到的數(shù)據(jù)寫入到數(shù)據(jù)庫中,再通過Web程序?qū)?shù)據(jù)庫的讀寫即可實現(xiàn)在溫濕度歷史數(shù)據(jù)的展示,如圖6所示。通過對下位機的溫濕度數(shù)據(jù)和變動時間的比對,得出上位機程序準確,實時,可靠。

圖6 MFC程序和Web瀏覽器下SHT11數(shù)據(jù)捕獲結果
本文在整個設計中采用仿真方式,使得軟硬件設計之間結合更緊密,開發(fā)效率更高。下位機使用Proteus和Kej1聯(lián)調(diào)開發(fā)減少了實際中的反復調(diào)試修改過程,虛擬串口軟件VSPD實現(xiàn)了上下位機之間的通信連接。串口消息驅(qū)動的MFC程序?qū)崟r高效,而且加入對傳感器數(shù)據(jù)的數(shù)據(jù)庫的建立,可以開發(fā)更復雜的溫濕度控制功能的Web應用程序。
文中利用仿真實現(xiàn)了軟硬件開發(fā)過程,重點研究了項目關鍵技術部分的開發(fā)調(diào)試和實現(xiàn)。通過仿真測試,系統(tǒng)對SHT11的溫濕度數(shù)據(jù)的采集和發(fā)布過程穩(wěn)定、實時,驗證了此開發(fā)方式的高效性。本文將在現(xiàn)有研究基礎上,一方面繼續(xù)增加環(huán)境傳感器的監(jiān)控開發(fā),另一方面開發(fā)對傳感器數(shù)據(jù)展示的友好界面,使其具有良好的用戶體驗和推廣價值。
參考文獻:
[1]李錫文,楊明金,楊仁全.現(xiàn)代溫室環(huán)境智能控制的發(fā)展現(xiàn)狀及展望[J].農(nóng)機化研究,2008(4):9-13.
[2]何先波,李薇,羅建,等.嵌入式系統(tǒng)軟件開發(fā)技術基礎[M].北京:清華大學出版社,2011(1):10-32.
[3]吳玉康,鄧世建,袁剛強. SHT11數(shù)字式溫濕度傳感器的應用[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、計算機網(wǎng)絡安全。