陳芳,江和
(福州大學,福州 350108)
陳芳(研究生)、江和(副教授),主要研究方向為智能電器及其在線監(jiān)測。
目前,微機與外設之間進行數(shù)據(jù)的串行總線主要有I2C總線、SPI總線和SCI總線。其中,I2C總線以同步串行2線方式進行通信(1條時鐘線和1條數(shù)據(jù)線),SPI總線以同步串行3線方式進行通信(1條時鐘線、1條數(shù)據(jù)輸入線和1條數(shù)據(jù)輸出線),而SCI總線則是以異步方式進行通信的(1條數(shù)據(jù)輸入線和1條數(shù)據(jù)輸出線)。這些總線至少需要2條信號線及地線。Dallas公司推出的單總線技術用單根信號線及地線,既傳輸時鐘又傳輸數(shù)據(jù),而且數(shù)據(jù)的傳輸時雙向的,具有線路簡單、硬件開銷少、成本低、便于總線擴展和維護等優(yōu)點[1]。
DS18B20是典型的單總線數(shù)字式溫度傳感器,工作電壓為3~5 V,測量溫度范圍為-55~+125℃,可根據(jù)實際需要通過軟件設置選擇9~12位分辨率;用戶設置的報警溫度存儲在芯片內部EEPROM中,可掉電保持;每個芯片都有全球唯一的編碼,用戶可以通過其特有的序列號查詢其溫度,因此理論上一條總線上可連接無數(shù)個該測溫元件。單總線通常要求外接一個約4.7 kΩ的上拉電阻,保證總線閑置時其狀態(tài)為高電平。
Pro teus是英國 Labcenter Electronics公司研發(fā)的EDA工具軟件。它是能進行模擬電路、數(shù)字電路、模/數(shù)混合電路、RS232動態(tài)仿真、I2C調試器、SPI調試器、鍵盤和LCD、LED系統(tǒng)的設計與仿真的平臺。Proteus具備原理圖設計、電路分析與仿真、PCB設計功能,可以通過調入程序的編譯結果.hex或.cof文件來調試單片機程序,還可直接嵌入到Microchip公司的單片機調試軟件MPLAB IDE中,進行程序的調試和仿真。
Proteus的特色是能實現(xiàn)單片機與外設的混合電路系統(tǒng)、軟件系統(tǒng)的設計和仿真。在仿真過程中,用戶可以用鼠標單擊開關、鍵盤、電位計、可調電阻等外設設備,使單片機系統(tǒng)根據(jù)輸入信號做出相應的響應,并將響應處理結果根據(jù)所編制的軟件在LCD、LED等顯示器件上顯示,整個過程與硬件仿真器調試過程相似。因此,在缺乏硬件的情況下,這是款非常實用的仿真軟件,其仿真的原理圖經驗證后可直接應用到現(xiàn)實中。Proteus還提供虛擬示波器、邏輯分析儀、信號發(fā)生器和I2C、SPI調試器等多種虛擬終端,方便用戶仿真調試。
目前,國內采用單片機作控制系統(tǒng)中的微處理器時多選擇PIC、51系列或Freescale系列單片機。PIC單片機具有外圍電路簡單、功耗低、外圍資源豐富等優(yōu)點。本系統(tǒng)選用PIC系列單片機PIC16F877A作為控制芯片[2]。
Proteus仿真圖設計的第一步就是拾取仿真所需要的元器件,單擊圖1所示界面預覽窗口下面的P按鈕,彈出Pick Devices(元器件拾取)對話框。然后,在Keywords文本框內分別輸入 DS18B20、LM041L(4行×16字符型LCD)、PIC16F877A、RES(電阻)。在檢索出來的結果中,選中所要的元器件并雙擊,該元器件就會出現(xiàn)在左側預覽窗口中。
圖1 元件拾取圖
元器件拾取完畢后,關閉Pick Devices窗口回到主設計頁面。在左側預覽窗口中,選中元器件放置到合適的位置。然后,在最左側選中圖標(terminals mode),分別選中POWER(電源)和GROUND(地),放置在合適的位置,并進行連接。欲改變元器件的參數(shù),雙擊該元器件,然后在出現(xiàn)的屬性框中直接修改即可。本文所設計的由12個DS18B20組成的測溫網絡如圖2所示。
圖2 仿真設計原理圖
在該測溫系統(tǒng)中,單片機PIC16F877A作為主機,DS18B20溫度傳感器作為從機。由于DS18B20采用的是主從結構,只有主機呼叫從機時,從機才能應答。因此,訪問器件時必須嚴格遵循單總線命令序列,以及初始化、ROM、命令功能的命令。如果序列混亂,則器件不響應主機。從機主機和從機之間的通信通過3個步驟完成:初始化器件;識別器件;交換數(shù)據(jù)。
單總線器件采用嚴格的通信協(xié)議來保證數(shù)據(jù)的完整性。通信協(xié)議包括:復位脈沖、應答脈沖、寫0、寫1、讀0和讀1。所有這些信號都是以先低位、后高位的方式發(fā)送的。
(1)復位脈沖和應答脈沖
復位脈沖和應答脈沖即為初始化過程,所有的通信都是以初始化開始的。首先主機要拉低總線至少480μs,接著釋放總線并持續(xù)15~60μs,然后進入接收狀態(tài),檢測總線DQ的電平。若DQ為低電平,則表示從機已就緒,可以發(fā)送ROM命令。由于C語言簡潔緊湊、靈活方便且可移植性好,因此本文程序采用C語言來完成。相應的初始化程序如下:
其中,變量dq用來判斷DS18B20是否有返回的存在脈沖,為0即有返回脈沖,表明復位成功,可跳出循環(huán);DQ表示總線的電平,當總線為高電平時DQ為1,否則為0;DQ_IO用來表示DQ所連的單片機I/O口的狀態(tài),若該I/O口對單片機是作為輸入使用則DQ_IO為1,作為輸出使用則DQ_IO為0。
(2)寫操作時序
無論是命令還是數(shù)據(jù),所有的寫操作都是以字節(jié)為單位的,全部以先低位、后高位的方式傳輸?shù)?。位寫入過程是這樣的:主機將總線拉低15μs,然后根據(jù)要發(fā)的那位數(shù)據(jù)的電平來決定接下來總線的電平。若數(shù)據(jù)待發(fā)位為低電平,則主機須將DQ置為低電平并保持15~45μs;若數(shù)據(jù)待發(fā)位為高電平,則主機需將DQ置為高電平且保持15~45μs。發(fā)送1位數(shù)據(jù)的時間(從總線拉低開始到發(fā)送結束)必須控制在 60~120μs。位與位之間要有一個大于1μs的高電平時間間隙隔開。一個字節(jié)的數(shù)據(jù)寫入結束后需要將總線釋放,以確保之后操作的正確進行[3]。
(3)讀操作時序
所有數(shù)據(jù)的讀取是以字節(jié)為單位,以先低位、后高位的方式進行傳輸?shù)?。位讀取的過程如下:首先需要主機將總線拉低1~15μs,然后釋放總線,對總線的電平進行判斷。若總線為低電平,說明帶讀取數(shù)據(jù)位為0;若總線為高電平,則表明帶讀取數(shù)據(jù)位為1。讀取1位數(shù)據(jù)的時間(從總線拉低開始到將總線置高準備下一位數(shù)據(jù))必須大于60μs。同樣,位與位之間須有一個大于1μs的高電平時間間隙隔開。一個字節(jié)的數(shù)據(jù)讀取結束后需要將總線釋放,以確保操作的正確進行。由于DS18B20的溫度采用9~12位的分辨率,因此一個溫度數(shù)據(jù)需要讀取2字節(jié)的溫度數(shù)據(jù)。2字節(jié)的數(shù)據(jù)讀取結束后將總線釋放,以便接下來數(shù)據(jù)的正確傳輸[4]。
讀溫度主要使用的命令如表1所列。
表1 主要命令及功能
整個讀取溫度步驟具體如下:
(1)配置寄存器
若還要讀其他芯片的溫度,則從②~⑤開始循環(huán)。其中,reset()為調用初始化子程序;send_com()為機向從機發(fā)送1字節(jié)的子程序;send_num()為主機向從機發(fā)送64位器件序列號的子程序;delay()為延時子程序;check()為主機判斷所有從機的溫度是否全部讀取完畢的子程序。
在Proteus中使用多個DS 18B20時,必須改變器件的屬性,使仿真中每個器件的序列號各不相同。具體作法是:右擊DS18B20,選中 Edit Properties選項,在其中改變ROM Serial Number的值;還可改變Granularity的數(shù)值,即改變每次調整溫度的額度。在Proteus中,可以人為改變3個字節(jié)的器件序列號。要想得到全部8個字節(jié),一個簡單的方法就是每一次總線上只連接一個器件,利用0x33讀器件序列號的命令在程序中得到完整的器件序列號。具體的程序如下所示:
其中,send_com()為主機向從機發(fā)送一個字節(jié)的子程序,read_dat()為主機讀取從機一個字節(jié)的子程序。例如,將器件序列號改為B8C530,在MPLAB IDE中的Watch窗口中可直接觀察到該器件的完整的器件序列號,如圖3所示。
本系統(tǒng)中共使用12個DS18B20,序列號為B8C530~B8C53B。通過上述的方法可得到所有器件的序列號,然后組成一個數(shù)組,在讀取溫度程序中就可直接使用。數(shù)組如下所示:
圖3 Watch窗口中的序列號
在MPLAB IDE中,使用Proteus VSM仿真模式。根據(jù)上述讀取溫度程序的過程,編寫讀取溫度的程序,經編譯、運行,即可得到仿真結果。
經驗證,在Proteus中的仿真結果和實際實驗結果完全一致。這充分說明該軟件仿真結果真實性很高,在缺乏硬件的情況下,這是款非常實用的仿真軟件。其仿真的原理圖和結果經實驗驗證后可直接應用到實際項目中。
單總線數(shù)字式溫度傳感器DS18B20具有體積小、動態(tài)范圍寬、測量精度高等特點,分辨率可根據(jù)實際的需求進行相應的設置。單總線器件連接簡單,且具有很強的擴展性,可以組建多點的溫度檢測網絡,在電子產品各部件特別是半導體器件的溫度測量領域具有良好的應用前景。
編者注:本文為期刊縮略版,全文見本刊網站www.mesnet.com.cn。
[1]單總線(1-Wire Bus)技術及其應用[OL].[2010-03].www.symcukf.com.
[2]李正榮,劉啟中,陳學軍.PIC單片機原理及應用[M].北京:北京航空航天大學出版社,2003.
[3]Maxim.DS18B20 datasheet[OL].[2010-03].www.maximic.com.
[4]1-wire單總線的基本原理[OL].[2010-03].www.symcukf.com.