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