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