趙建勛
(西安文理學院信息工程學院,陜西西安710065)
?
Proteus下SHT11數據監測系統的研究與設計
趙建勛
(西安文理學院信息工程學院,陜西西安710065)
摘要:針對傳統嵌入式系統開發模式在環境監測系統中的不足,本文在虛擬仿真軟件基礎上設計實現了環境中溫濕度監測系統。系統用Proteus與VSPD實現下位機的硬件仿真,用Kej1和Proteus聯調完成下位機的軟件設計,上位機部分用MFC實現對串口SHT11的數據解析和記錄。文章解決了SHT11數據的修正處理,Proteus與串口通訊,串口消息在MFC中的實時處理、數據庫記錄過程等關鍵問題。經測試,系統運行穩定高效,可以為后期實體系統應用和其他環境傳感器數據監測開發提供基礎。
關鍵詞:SHT11;Proteus;VSPD;溫濕度測量
現代農業中特別重視作物生長的環境監測,其中溫度、濕度等數據監測是農業高產的基本前提[1]??v觀現在大多數溫室大棚的監控系統開發過程,其采用嵌入式系統軟硬件協同開發流程:“需求分析—硬件設計—電路板設計—硬件集成—軟件設計—軟硬件集成測試”[2]。這種方式中系統體系結構確定以后,軟硬件設計幾乎就獨立平行進行,這往往使得后期軟硬件集成測試的時候軟件和硬件設計的不協調,就不得不再次重復以上設計流程,不僅造成時間和器件的浪費,而且開發效率較低。
文中通過Proteus硬件仿真和Kej1聯合調試開發下位機,結合VSPD開發串口數據捕獲的上位機,使得軟硬件設計緊密結合在一起,直到最后完成仿真集成測試成功后再應用實體硬件實現,減少了資源浪費并提高了開發效率。
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轉換器以及串行接口電路實現無縫連接,具有品質卓越、響應迅速、抗干擾能力強、性價比高等優點。
系統按軟硬件設計層次可分為上位機和下位機,如圖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.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.1下位機的仿真測試
在Proteus和Kej1分別完成硬件電路設計和軟件設計后,下位機的的仿真如圖5,數碼管讀取到的數據與境預設誤差最高在0.1。當溫濕度數據一有變化的時候,立即將數據發送到串口上。另外本設計還加上時鐘功能,在不需要顯示溫度的時候還可以顯示當前時鐘。

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

圖6 MFC程序和Web瀏覽器下SHT11數據捕獲結果
本文在整個設計中采用仿真方式,使得軟硬件設計之間結合更緊密,開發效率更高。下位機使用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、計算機網絡安全。