




已閱讀5頁,還剩74頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
本設計使用stc89c52單片機作為主控制模塊,利用簡單的外圍電路來驅(qū)動1-wire總線,利用1-wire總線協(xié)議,實現(xiàn)了多點溫度和濕度的精確測量。利用stc89c52單片機本身強大的功能和內(nèi)部ram資源,可以很方便的實現(xiàn)單片機與pc機間的數(shù)據(jù)傳輸,并能利用軟件方便的邏輯判斷實現(xiàn)了1-wire總線的rom搜索,實現(xiàn)了測溫器件18b20的枚舉,實現(xiàn)了無人干預的測溫點的動態(tài)裁剪,所以本設計具有很強的現(xiàn)實應用性。另外,本系統(tǒng)的濕度檢測沒有完成。本文從1-wire總線的原理入手,詳細闡述了1-wire總線的rom搜索過程,以及硬件電路的設計、計算和軟件的算法。關(guān)鍵詞:ds18b20;單片機mcu;串行傳輸serial data transfer;單總線1-wire interface 第1章 緒 論1.1選題背景防潮、防霉、防腐、防爆是糧庫日常工作的重要內(nèi)容,是衡量糧庫管理質(zhì)量的重要指標。它直接影響到儲備物資的壽命和工作可靠性。為保證日常工作的順利進行,首要問題是加強倉庫內(nèi)溫度的監(jiān)測工作,因為溫度的升高,就意味著糧庫內(nèi)的有氧呼吸的加強,就意味著馬上就要發(fā)生腐爛霉變。因此我們需要一種造價低廉、使用方便且測量準確的溫度測量儀。在我們的印象中,溫度的測量不外乎由傳感器、放大器、數(shù)碼顯示、報警器等單元組成。但是通過實際的考察,現(xiàn)實的系統(tǒng)根本不是這個樣子:由于糧食要定期的通過熏蒸來除蟲、防鼠,熏蒸藥劑具有高毒性,高腐蝕性,人員根本不能隨意接觸到倉內(nèi)設備,更不要說通過數(shù)碼管的顯示和報警器來及時發(fā)現(xiàn)溫度的異常變化,同時出于防爆的要求,在倉庫內(nèi)部的系統(tǒng),是完全密封的,并被充入低氧高氮的氣體,平時人員根本不能及時進入。因此現(xiàn)在的監(jiān)控系統(tǒng)都是由計算機監(jiān)控,采用專用組態(tài)軟件、單片機及數(shù)字傳感器組成的,具有500-1000個測溫點的,網(wǎng)絡化的數(shù)字式溫度檢測的系統(tǒng)。下圖展示了一種可能的結(jié)構(gòu)圖1.1現(xiàn)場采集站通過一線牽采集模塊,對糧倉的溫度進行測量采集,每個糧倉約有200點模擬量輸入(溫度)并根據(jù)糧食的情況對現(xiàn)場進行濕度檢測?,F(xiàn)場控制站現(xiàn)場控制站可用西門子plc控制現(xiàn)場輸送機、提升機、電動閘門、通風機的啟動運行,以及報警等功能的反饋信號,實現(xiàn)自動化控制。上位機上位機運行組態(tài)通用工業(yè)過程監(jiān)控軟件,對現(xiàn)場的設備進行監(jiān)控、并對倉庫溫濕度進行巡回檢測。并生成動態(tài)畫面、報表、報警、曲線等數(shù)據(jù)管理功能。 這就要求我們必須設計一種高可靠,高一致性,基本免維護,可自由增減測溫點,并具有和計算機聯(lián)網(wǎng)交換數(shù)據(jù)的能力的測溫組件。1.2設計過程及工藝要求根據(jù)實際的需求,我們提出了測溫組件的基本功能,需要說明的是,在這里你看不到傳統(tǒng)的溫度顯示功能,因為實際上工作人員根本不可能到現(xiàn)場去記錄溫度的顯示。同時增加了組件的測溫點免維護自由增減功能,以適應系統(tǒng)的規(guī)模的自由裁剪。1.2.1基本功能檢測溫度測溫點免維護自由增減過限指示與計算機通訊1.2.2主要技術(shù)參數(shù) 溫度檢測范圍 : -40-+60測量精度: 0.5報警方式:閃動的led指示燈通訊方式:rs232 9600,n,8,1第2章 系統(tǒng)總體設計本設計是以stc89c52為基本系統(tǒng)核心的一套檢測系統(tǒng),其中包括、單片機、復位電路、溫度檢測、過限指示、通訊接口、系統(tǒng)軟件等部分的設計。圖2.1 系統(tǒng)總體框圖2.1溫度傳感器的選擇方案一:采用熱電阻溫度傳感器。熱電阻是利用導體的電阻隨溫度變化的特性制成的測溫元件。現(xiàn)應用較多的有鉑、銅、鎳等熱電阻。其主要的特點為精度高、測量范圍大、便于遠距離測量。鉑的物理、化學性能極穩(wěn)定,耐氧化能力強,易提純,復制性好,工業(yè)性好,電阻率較高,因此,鉑電阻用于工業(yè)檢測中高精密測溫和溫度標準。缺點是價格貴,溫度系數(shù)小,受到磁場影響大,在還原介質(zhì)中易被玷污變脆。按iec標準測溫范圍-200650,百度電阻比w(100)=1.3850時,r0為100和10,其允許的測量誤差a級為(0.15+0.002 |t|),b級為(0.3+0.005 |t|)。銅電阻的溫度系數(shù)比鉑電阻大,價格低,也易于提純和加工;但其電阻率小,在腐蝕性介質(zhì)中使用穩(wěn)定性差。在工業(yè)中用于-50180測溫。方案二:采用ad590。采用ad590,它的測溫范圍在-55+150之間,而且精度高。m檔在測溫范圍內(nèi)非線形誤差為0.3。ad590可以承受44v正向電壓和20v反向電壓,因而器件反接也不會損壞。使用可靠。它只需直流電源就能工作,而且,無需進行線性校正,所以使用也非常方便,接口也很簡單。作為電流輸出型傳感器的一個特點是,和電壓輸出型相比,它有很強的抗外界干擾能力。ad590的測量信號可遠傳百余米。綜合比較方案一與方案二,方案二更為適合于本設計系統(tǒng)對于溫度傳感器的選擇。方案三:采用ds18b20。ds18b20 數(shù)字溫度傳感器,測溫范圍 55125,固有測溫分辨率0.5。具有獨特的單線接口方式,ds18b20在與微處理器連接時僅需要一條口線即可實現(xiàn)微處理器與ds18b20的雙向通訊。支持多點組網(wǎng)功能,多個ds18b20可以并聯(lián)在唯一的三線上,實現(xiàn)多點測溫。工作電源: 35v/dc。在使用中不需要任何外圍元件;測量結(jié)果以912位數(shù)字量方式串行傳送。綜合比較方案二與方案三,方案三更為適合于本設計系統(tǒng)對于溫度傳感器的選擇。2.2信號采集2.2.1 ds18b20基本知識 ds18b20數(shù)字溫度計是dallas公司生產(chǎn)的1wire,即單總線器件,具有線路簡單,體積小的特點。因此用它來組成一個測溫系統(tǒng),具有線路簡單,在一根通信線上可以掛很多這樣的數(shù)字溫度計,十分方便。 2.2.2 ds18b20產(chǎn)品的特點 (1)、只要求一個端口即可實現(xiàn)通信。 (2)、在ds18b20中的每個器件上都有獨一無二的序列號。 (3)、實際應用中不需要外部任何元器件即可實現(xiàn)測溫。 (4)、測量溫度范圍在55。c到125。c之間。 (5)、數(shù)字溫度計的分辨率用戶可以從9位到12位選擇。 (6)、內(nèi)部有溫度上、下限告警設置。 2.2.3 ds18b20的引腳介紹 to92封裝的ds18b20引腳排列見圖2.2,其引腳功能描述見表2.1。 圖2.2 ds18b20引腳(底視圖)表2.1ds18b20詳細引腳功能描述序號名稱引腳功能描述1gnd地信號2dq數(shù)據(jù)輸入/輸出引腳。開漏單總線接口引腳。既可以用在寄生電源下,也可以向器件提供電源。3vdd可選擇的vdd引腳。當工作于寄生電源時,此引腳必須接地。2.3信號分析與處理由于ds18b20采用的是1wire總線協(xié)議方式,即在一根數(shù)據(jù)線實現(xiàn)數(shù)據(jù)的雙向傳輸,而對stc89c52單片機來說,硬件上并不支持單總線協(xié)議,因此,我們必須采用軟件的方法來模擬單總線的協(xié)議時序來完成對ds18b20芯片的訪問。 由于ds18b20是在一根i/o線上讀寫數(shù)據(jù),因此,對讀寫的數(shù)據(jù)位有著嚴格的時序要求。ds18b20有嚴格的通信協(xié)議來保證各位數(shù)據(jù)傳輸?shù)恼_性和完整性。該協(xié)議定義了幾種信號的時序:初始化時序、讀時序、寫時序。所有時序都是將主機作為主設備,單總線器件作為從設備。而每一次命令和數(shù)據(jù)的傳輸都是從主機主動啟動寫時序開始,如果要求單總線器件回送數(shù)據(jù),在進行寫命令后,主機需啟動讀時序完成數(shù)據(jù)接收。數(shù)據(jù)和命令的傳輸都是低位在先。2.3.1單總線的實現(xiàn)(1)ds18b20的復位時序 圖2.3 ds18b20的復位時序 ds18b20的讀時序?qū)τ赿s18b20的讀時序分為讀0時序和讀1時序兩個過程。 ds18b20的讀時序是從主機把單總線拉低之后,在15秒之內(nèi)就得釋放單總線,以讓ds18b20把數(shù)據(jù)傳輸?shù)絾慰偩€上。ds18b20在完成一個讀時序過程,至少需要60us才能完成。 圖2.4 ds18b20的讀時序(2)ds18b20的寫時序 對于ds18b20的寫時序仍然分為寫0時序和寫1時序兩個過程。 對于ds18b20寫0時序和寫1時序的要求不同,當要寫0時序時,單總線要被拉低至少60us,保證ds18b20能夠在15us到45us之間能夠正確采樣io總線上的“0”電平,當要寫1時序時,單總線被拉低之后,在15us之內(nèi)就得釋放單總線。 圖2.5 ds18b20的寫時序2.3.2 ds18b20的使用 ds18b20內(nèi)部結(jié)構(gòu)圖2.6 ds18b20內(nèi)部結(jié)構(gòu)ds18b20測溫原理如圖2.7所示。圖中低溫度系數(shù)晶振的振蕩頻率受溫度影響很小,用于產(chǎn)生固定頻率的脈沖信號送給計數(shù)器1。高溫度系數(shù)晶振隨溫度變化其振蕩率明顯改變,所產(chǎn)生的信號作為計數(shù)器2的脈沖輸入。計數(shù)器1和溫度寄存器被預置在55所對應的一個基數(shù)值。計數(shù)器1對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進行減法計數(shù),當計數(shù)器1的預置值減到0時,溫度寄存器的值將加1,計數(shù)器1的預置將重新被裝入,計數(shù)器1重新開始對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進行計數(shù),如此循環(huán)直到計數(shù)器2計數(shù)到0時,停止溫度寄存器值的累加,此時溫度寄存器中的數(shù)值即為所測溫度。圖2.7中的斜率累加器用于補償和修正測溫過程中的非線性,其輸出用于修正計數(shù)器1的預置值。圖2.7 ds18b20的測溫原理ds18b20有4個主要的數(shù)據(jù)部件:(1)光刻rom中的64位序列號是出廠前被光刻好的,它可以看作是該ds18b20的地址序列碼。64位光刻rom的排列是:開始8位(28h)是產(chǎn)品類型標號,接著的48位是該ds18b20自身的序列號,最后8位是前面56位的循環(huán)冗余校驗碼(crc=x8+x5+x4+1)。光刻rom的作用是使每一個ds18b20都各不相同,這樣就可以實現(xiàn)一根總線上掛接多個ds18b20的目的。(2)ds18b20中的溫度傳感器可完成對溫度的測量,以12位轉(zhuǎn)化為例:用16位符號擴展的二進制補碼讀數(shù)形式提供,以0.0625/lsb形式表達,其中s為符號位。圖2.8 ds18b20溫度值格式這是12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲在18b20的兩個8比特的ram中,二進制中的前面5位是符號位,如果測得的溫度大于0,這5位為0,只要將測到的數(shù)值乘于0.0625即可得到實際溫度;如果溫度小于0,這5位為1,測到的數(shù)值需要取反加1再乘于0.0625即可得到實際溫度。例如+125的數(shù)字輸出為07d0h,+25.0625的數(shù)字輸出為0191h,-25.0625的數(shù)字輸出為ff6fh,-55的數(shù)字輸出為fc90h。(3)ds18b20溫度傳感器的存儲器ds18b20溫度傳感器的內(nèi)部存儲器包括一個高速暫存ram和一個非易失性的可電擦除的eepram,后者存放高溫度和低溫度觸發(fā)器th、tl和結(jié)構(gòu)寄存器。(4)配置寄存器該字節(jié)各位的意義如下:圖2.9 配置寄存器 低五位一直都是1,tm是測試模式位,用于設置ds18b20在工作模式還是在測試模式。在ds18b20出廠時該位被設置為0,用戶不要去改動。r1和r0用來設置分辨率,如下表所示:(ds18b20出廠時被設置為12位)圖2.10 溫度分辨率設置表(5)高速暫存存儲器高速暫存存儲器由9個字節(jié)組成,其分配如表5所示。當溫度轉(zhuǎn)換命令發(fā)布后,經(jīng)轉(zhuǎn)換所得的溫度值以二字節(jié)補碼形式存放在高速暫存存儲器的第0和第1個字節(jié)。單片機可通過單線接口讀到該數(shù)據(jù),讀取時低位在前,高位在后,數(shù)據(jù)格式如圖2.9所示。對應的溫度計算:當符號位s=0時,直接將二進制位轉(zhuǎn)換為十進制;當s=1時,先將補碼變?yōu)樵a,再計算十進制值。圖2.10是對應的一部分溫度值。圖2.11 ds18b20暫存存儲器分布根據(jù)ds18b20的通訊協(xié)議,主機(單片機)控制ds18b20完成溫度轉(zhuǎn)換必須經(jīng)過三個步驟:每一次讀寫之前都要對ds18b20進行復位操作,復位成功后發(fā)送一條rom指令,最后發(fā)送ram指令,這樣才能對ds18b20進行預定的操作。復位要求主cpu將數(shù)據(jù)線下拉500微秒,然后釋放,當ds18b20收到信號后等待1660微秒左右,后發(fā)出60240微秒的存在低脈沖,主cpu收到此信號表示復位成功。rom、ram指令如下圖所示:圖2.12 rom、ram指令表2.3.3 ds18b20的應用電路 ds18b20測溫系統(tǒng)具有測溫系統(tǒng)簡單、測溫精度高、連接方便、占用口線少等優(yōu)點。下面就是ds18b20幾個不同應用方式下的測溫電路圖:(1)ds18b20寄生電源供電方式電路圖如下面圖9所示,在寄生電源供電方式下,ds18b20從單線信號線上汲取能量:在信號線dq處于高電平期間把能量儲存在內(nèi)部電容里,在信號線處于低電平期間消耗電容上的電能工作,直到高電平到來再給寄生電源(電容)充電。獨特的寄生電源方式有三個好處:1)進行遠距離測溫時,無需本地電源。2)可以在沒有常規(guī)電源的條件下讀取rom。3)電路更加簡潔,僅用一根i/o口實現(xiàn)測溫。 要想使ds18b20進行精確的溫度轉(zhuǎn)換,i/o線必須保證在溫度轉(zhuǎn)換期間提供足夠的能量,由于每個ds18b20在溫度轉(zhuǎn)換期間工作電流達到1ma,當幾個溫度傳感器掛在同一根i/o線上進行多點測溫時,只靠4.7k上拉電阻就無法提供足夠的能量,會造成無法轉(zhuǎn)換溫度或溫度誤差極大。因此,圖9電路只適應于單一溫度傳感器測溫情況下使用,不適宜采用電池供電系統(tǒng)中。并且工作電源vcc必須保證在5v,當電源電壓下降時,寄生電源能夠汲取的能量也降低,會使溫度誤差變大。在制作中曾經(jīng)就此電路做過實驗,在實驗中,降低電源電壓vcc,當?shù)陀?.5v時,測出的溫度值比實際的溫度高,誤差較大。當電源電壓降為4v時,溫度誤差有3之多,這就應該是因為寄生電源汲取能量不夠造成的吧,因此,在開發(fā)實際測溫系統(tǒng)時不使用此電路。圖2.13 ds18b20寄生電源供電方式電路圖(2)ds18b20寄生電源強上拉供電方式電路圖改進的寄生電源供電方式如下面圖10所示,為了使ds18b20在動態(tài)轉(zhuǎn)換周期中獲得足夠的電流供應,當進行溫度轉(zhuǎn)換或拷貝到e2存儲器操作時,用mosfet把i/o線直接拉到vcc就可提供足夠的電流,在發(fā)出任何涉及到拷貝到e2存儲器或啟動溫度轉(zhuǎn)換的指令后,必須在最多10s內(nèi)把i/o線轉(zhuǎn)換到強上拉狀態(tài)。在強上拉方式下可以解決電流供應不走的問題,因此也適合于多點測溫應用,缺點就是要多占用一根i/o口線進行強上拉切換。圖2.14 ds18b20寄生電源強上拉供電方式電路圖注意:在圖2.13和圖2.14寄生電源供電方式中,ds18b20的vdd引腳必須接地(3)ds18b20的外部電源供電方式 在外部電源供電方式下,ds18b20工作電源由vdd引腳接入,此時i/o線不需要強上拉,不存在電源電流不足的問題,可以保證轉(zhuǎn)換精度,同時在總線上理論可以掛接任意多個ds18b20傳感器,組成多點測溫系統(tǒng)。注意:在外部供電的方式下,ds18b20的gnd引腳不能懸空,否則不能轉(zhuǎn)換溫度,讀取的溫度總是85。圖2.15 外部電源供電方式圖2.16 外部供電方式的多點測溫電路圖外部電源供電方式是ds18b20最佳的工作方式,工作穩(wěn)定可靠,抗干擾能力強,而且電路也比較簡單,可以開發(fā)出穩(wěn)定可靠的多點溫度監(jiān)控系統(tǒng)。因此,在實際的設計開發(fā)中,我們使用外部電源供電方式。在外接電源方式下,可以充分發(fā)揮ds18b20寬電源電壓范圍的優(yōu)點,即使電源電壓vcc降到3v時,依然能夠保證溫度量精度。2.3.4單片機89c52 單片機的結(jié)構(gòu)有兩種類型,一種是程序存儲器和數(shù)據(jù)存儲器分開的形式,即哈佛(harvard)結(jié)構(gòu),另一種是采用通用計算機廣泛使用的程序存儲器與數(shù)據(jù)存儲器合二為一的結(jié)構(gòu),即普林斯頓(princeton)結(jié)構(gòu)。intel的mcs-51系列單片機采用的是哈佛結(jié)構(gòu)的形式,而后續(xù)產(chǎn)品16位的mcs-96系列單片機則采用普林斯頓結(jié)構(gòu)。為了設計此系統(tǒng),采用了mcs-51兼容單片機stc89c52單片機作為控制芯片1. stc89c52的片內(nèi)結(jié)構(gòu)下圖是stc89c52的內(nèi)部結(jié)構(gòu)示意圖。圖2.16 stc89c52的內(nèi)部結(jié)構(gòu)示意圖stc89c52單片機包含中央處理器、程序存儲器(rom)、數(shù)據(jù)存儲器(ram)、定時/計數(shù)器、并行接口、串行接口和中斷系統(tǒng)等幾大單元及數(shù)據(jù)總線、地址總線和控制總線等三大總線,現(xiàn)在我們分別加以說明:(1)中央處理器:中央處理器(cpu)是整個單片機的核心部件,是8位數(shù)據(jù)寬度的處理器,能處理8位二進制數(shù)據(jù)或代碼,cpu負責控制、指揮和調(diào)度整個單元系統(tǒng)協(xié)調(diào)的工作,完成運算和控制輸入輸出功能等操作。(2)數(shù)據(jù)存儲器(ram)stc89c52內(nèi)部有256個8位用戶數(shù)據(jù)存儲單元和128個專用寄存器單元,它們是統(tǒng)一編址的,專用寄存器只能用于存放控制指令數(shù)據(jù),用戶只能訪問,而不能用于存放用戶數(shù)據(jù),所以,用戶能使用的ram只有256個,可存放讀寫的數(shù)據(jù),運算的中間結(jié)果或用戶定義的字型表。(3)程序存儲器(rom):stc89c52共有8192個8位flash rom,用于存放用戶程序,原始數(shù)據(jù)或表格。(4)定時/計數(shù)器:stc89c52有兩個16位的可編程定時/計數(shù)器,以實現(xiàn)定時或計數(shù),其中中斷用于控制程序轉(zhuǎn)向。(5)并行輸入輸出(i/o)口:stc89c52共有4組8位i/o口(p0、 p1、p2或p3),用于對外部數(shù)據(jù)的傳輸。(6)全雙工串行口:stc89c52內(nèi)置一個全雙工串行通信口,用于與其它設備間的串行數(shù)據(jù)傳送,該串行口既可以用作異步通信收發(fā)器,也可以當同步移位器使用。(7)中斷系統(tǒng):stc89c52具備較完善的中斷功能,有兩個外中斷、兩個定時/計數(shù)器中斷和一個串行中斷,可滿足不同的控制要求,并具有2級的優(yōu)先級別選擇。(8)時鐘電路:stc89c52內(nèi)置最高頻率達90mhz的時鐘電路,用于產(chǎn)生整個單片機運行的脈沖時序,但stc89c52單片機需外置振蕩電容。圖2.17 stc89c52的時鐘電路2. stc89c52的引腳stc89c52采用40pin封裝的雙列直接dip結(jié)構(gòu),右圖是它們的引腳配置,40個引腳中,正電源和地線兩根,外置石英振蕩器的時鐘線兩根,4組8位共32個i/o口,中斷口線與p3口線復用?,F(xiàn)在我們對這些引腳的功能加以說明:如圖2.18圖2.18 stc89c52 的引腳pin9:reset/vpd復位信號復用腳,當stc89c52通電,時鐘電路開始工作,在reset引腳上出現(xiàn)24個時鐘周期以上的高電平,系統(tǒng)即初始復位。初始化后,程序計數(shù)器pc指向0000h,p0-p3輸出口全部為高電平,堆棧指針寫入07h,其它專用寄存器被清“0”。reset由高電平下降為低電平后,系統(tǒng)即從0000h地址開始執(zhí)行程序。然而,初始復位不改變ram(包括工作寄存器r0-r7)的狀態(tài)。stc89c52的復位方式可以是自動復位,也可以是手動復位,見下圖2.19。此外,reset/vpd還是一復用腳,vcc掉電其間,此腳可接上備用電源,以保證單片機內(nèi)部ram的數(shù)據(jù)不丟失。圖2.19 復位pin30:ale/當訪問外部程序器時,ale(地址鎖存)的輸出用于鎖存地址的低位字節(jié)。而訪問內(nèi)部程序存儲器時,ale端將有一個1/6時鐘頻率的正脈沖信號,這個信號可以用于識別單片機是否工作,也可以當作一個時鐘向外輸出。更有一個特點,當訪問外部程序存儲器,ale會跳過一個脈沖。如果單片機是eprom,在編程其間,將用于輸入編程脈沖。pin29:當訪問外部程序存儲器時,此腳輸出負脈沖選通信號,pc的16位地址數(shù)據(jù)將出現(xiàn)在p0和p2口上,外部程序存儲器則把指令數(shù)據(jù)放到p0口上,由cpu讀入并執(zhí)行。pin31:ea/vpp程序存儲器的內(nèi)外部選通線,stc89c52單片機,內(nèi)置有8kb的程序存儲器,當ea為高電平并且程序地址小于8kb時,讀取內(nèi)部程序存儲器指令數(shù)據(jù),而超過8kb地址則讀取外部指令數(shù)據(jù)。如ea為低電平,則不管地址大小,一律讀取外部程序存儲器指令。3. 通訊接口本設計采用rs-232c串行通信方式。rs-232c是由美國電子工業(yè)協(xié)會(eia)正式公布的,在異步串行通信中應用最廣泛的標準總線?,F(xiàn)在,計算機上的串行通信端口(rs-232c)是標準配置端口,已經(jīng)得到廣泛應用,計算機上一般都有12個標準rs-232c串口,即通道com1和com2。rs-232c規(guī)定最大的負載電容為2500pf,這個電容限制了傳輸距離和傳輸速率,由于rs-232c的發(fā)送器和接收器之間具有公共信號地(gnd),屬于非平衡電壓型傳輸電路,不使用差分信號傳輸,因此不具備抗共模干擾的能力,共模噪聲會耦合到信號中。在不使用調(diào)制解調(diào)器(modem)時,rs-232c能夠可靠進行數(shù)據(jù)傳輸?shù)淖畲笸ㄐ啪嚯x為15米。因此不適合做遠距離通信,但是對于條屏,通信15米的通信距離已經(jīng)足夠。rs-232c規(guī)定的邏輯電平與一般微處理器、單片機的邏輯電平是不同的,邏輯1(mark) -3v-15v,邏輯0(space) 315v。因此,單片機系統(tǒng)要和電腦的rs-232c接口進行通信,就必須把單片機的信號電平(ttl電平)轉(zhuǎn)換成計算機的rs-232c電平,或者把計算機的rs-232c電平轉(zhuǎn)換成單片機的ttl電平,通信時候必須對兩種電平進行轉(zhuǎn)換。實現(xiàn)這種轉(zhuǎn)換的方法可以使用分立元件,也可以使用專用rs-232c電平轉(zhuǎn)換芯片。目前較為廣泛地使用專用電平轉(zhuǎn)換芯片,如max232、mc1488、mc1489等。2.3.5 max232電平轉(zhuǎn)換芯片特點本設計就是利用maxim公司的單電源芯片max232來完成單片機ttl到rs-232c電平的轉(zhuǎn)換。max232是單電源雙rs-232c發(fā)送/接收芯片。它符合所有的rs-232c技術(shù)規(guī)范,只要單一 +5v電源供電;片載電荷泵,具有升壓、電壓極性反轉(zhuǎn)能力,能夠產(chǎn)生 +10v 和 -10v電壓v+、v- ;低功耗,典型供電電流5ma;內(nèi)部集成2個rs-232c驅(qū)動器,內(nèi)部集成2個rs-232c接收器。采用單一 +5v電源供電,外接只需4個電容,便可以構(gòu)成標準的rs-232c通信接口,硬件接口簡單,所以被廣泛運用。max232的引腳排列及功能描述見表2.2(摘錄自max232官方數(shù)據(jù)手冊)表2.2 max232的引腳功能腳號引腳名稱引腳功能描述腳號引腳名稱引腳功能描述1c1+泵電容1正極9r2out第二組ttl/cmos電平輸出2v+正電源濾波10t2in第二組ttl/cmos電平輸入3c1-泵電容1負極11t1in第一組ttl/cmos電平輸入4c2+泵電容2正極12r1out第一組ttl/cmos電平輸出5c2-泵電容2負極13r1in第一組rs-232電平輸入6v-負電源濾波14t1out第一組rs-232電平輸出7t2out第二組rs-232電平輸出15gnd地8r2in第二組rs-232電平輸入16vcc電源+5v圖2.20 max232引腳排列2.3.6單片機與pc間通信接口電路設計根據(jù)設計的需要,設計單片機與pc間通信接口電路如圖17示。圖2.21 max232通信接口電路2.3.7過限指示由于在本設計中, 過限指示不是關(guān)鍵設計,故采用led加限流電阻的方式簡單實現(xiàn)。led指示燈如下圖所示。圖2.22 led 指示燈第3章 軟件設計整個軟件包括溫度采集和數(shù)據(jù)傳輸兩個主要部分組成。其中溫度采集又是由單總線協(xié)議和注冊碼組成的,因此,軟件設計主要任務是實現(xiàn)1-wire總線協(xié)議。3.1 1-wire總線協(xié)議處理經(jīng)過單線接口訪問ds1820 的協(xié)議protocol 如下初始化-rom 操作命令-存貯器操作命令-處理數(shù)據(jù) 初始化單線總線上的所有處理均從初始化序列開始初始化序列包括總線主機發(fā)出一復位脈沖接著由從屬器件送出存在脈沖。完成這個功能的代碼如下:/*function:18b20初始化*parameter:*return:*modify:*/void init18b20 (void) dq=1; _nop_(); dq=0; tempdelay(86); /delay 530 us 主機發(fā)出復位脈沖 _nop_(); dq=1; tempdelay(14); /delay 100 us _nop_(); _nop_(); _nop_();if(dq=0) /檢測從屬器件送出存在脈沖 flag = 1; /detect 1820 success! else flag = 0; /detect 1820 fail! tempdelay(20); /20 _nop_(); _nop_(); dq = 1;rom 操作命令一旦總線主機檢測到從屬器件的存在它便可以發(fā)出器件rom 操作命令之一所有rom 操作命令均為8 位長,rom操作命令由1-wire的單字節(jié)讀寫命令完成。/*function:向18b20寫入一個字節(jié)*parameter:*return:*modify:*/void writebyte (uchar wr) /*單字節(jié)寫入*/ uchar i; for (i=0;i= 1; /*function:讀18b20的一個字節(jié)*parameter:*return:*modify:*/uchar readbyte (void) /*讀取單字節(jié)*/ uchar i,u=0; for(i=0;i= 1; dq = 1; if(dq=1) u |= 0x80; tempdelay (4); _nop_(); return(u);有了上面的基本函數(shù),我們可以完成具體的rom操作了舉例總線主機產(chǎn)生溫度變換命令然后讀出溫度,如下表所示:表 3.1 讀溫度主機方式數(shù)據(jù)lsb 在先注 釋txreset(復位)復位脈沖480_960usrxpresence(存在)存在脈沖tx 55h 符合rom 命令tx 64位rom代碼發(fā)出ds1820 地址tx44h 溫度變換命令txi/o 線高電平總線主機使i/o 線至少保持2 秒鐘的高電平以便完成變換txreset 復位復位脈沖rxpresence 存在存在脈沖tx55h 符合rom 命令tx64 位rom 代碼發(fā)出ds1820 地址txbeh讀暫存存貯器命令rx9 個數(shù)據(jù)字節(jié)讀整個暫存存儲器以及crc 主機現(xiàn)在重新計算機從暫存存儲器接收來的8 位數(shù)據(jù)字節(jié)的crc 并把計算得到的crc 與讀出的crc 比較如果二者相符主機繼續(xù)操作如果不符重復此讀操作txreset復位復位脈沖rxpresence存在存在脈沖操作完成完成這部分功能的代碼如下/*function:crc校驗*parameter:*return:*modify:*/uchar crc (uchar j) uchar i,crc_data=0; for(i=0;ij;i+) crc_data = crctablecrc_datatemp_buffi; return (crc_data);/*function:讀取溫度*parameter:*return:*modify:*/void gemtemp (void) read_bytes (9); if (crc(9)=0) /*校驗正確*/ temperature = temp_buff1*0x100 + temp_buff0;/ temperature *= 0.0625; temperature *= 10; temperature /= 16; tempdelay(1); /*function:讀18b20id*parameter:*return:*modify:*/void readid (void)/*讀取器件 id*/ init18b20(); writebyte(0x33); /read rom read_bytes(8);/*function:18b20id全處理*parameter:*return:*modify:*/void temperatuerresult(void) p = id_buff; readid(); init18b20 (); writebyte(0xcc); /skip rom writebyte(0x44); /temperature convert init18b20 (); writebyte(0xcc); /skip rom writebyte(0xbe); /read temperature p = temp_buff; gemtemp();這里要說明的是: 1-wire協(xié)議提供了一種檢測數(shù)據(jù)是否存在著傳輸錯誤的手段,就是crc校驗。3.2 1-wire crc 校驗處理ds1820有一包括64位rom 的最高有效字節(jié)內(nèi)的8位crc,總線上的主機可以根據(jù)64位rom的前56位計算crc的值并把它與存貯在ds1820內(nèi)的值進行比較以決定rom的數(shù)據(jù)是否已被主機正確地接收,crc的等效多項式函數(shù)為 crc=x8+x5+x4+1。ds1820在傳遞數(shù)據(jù)時也利用與上述相同的多項式函數(shù)產(chǎn)生一個8位crc值,并把此值提供給主機以確認數(shù)據(jù)字節(jié)的傳送,在使用crc來確認數(shù)據(jù)傳送的每一種情況中,總線主機必須使用上面給出的多項式函數(shù)計算crc的值,并把計算所得的值或者與存貯在ds1820 的64 位rom 部分中的8 位crc 值,或者與ds1820 中計算得到的8 位crc值(在讀暫存存貯器中時它作為第九個字節(jié)被讀出)進行比較??偩€crc可以使用如圖3.1 所示由一個移位寄存器和異或xor 門組成的多項式產(chǎn)生器來產(chǎn)生。圖3.1 移位寄存器和異或xor門移位寄存器的所有位被初始化為零然,后從產(chǎn)品系列編碼的最低有效位開始,每次移入一位。當產(chǎn)品系列編碼的8 位移入以后,接著移入序列號,在序列號的第48 位進入之后,移位寄存器便包含了crc 值,移入crc 的8 位應該使移位寄存器返回至全零。完成crc校驗的代碼如下:uchar crc_data;uchar code crctable 256=0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65,157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220,35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98,190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255,70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7,219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154,101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36,248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185,140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205,17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80,175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238,50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115,202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139,87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22,233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168,116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53;uchar crc (uchar j) uchar i,crc_data=0; for(i=0;ij;i+) crc_data = crctablecrc_datatemp_buffi; return (crc_data);3.3 1-wire 器件的rom搜索從上面的讀出溫度的過程我們看到,ds18b20是依靠64位注冊碼來作為地址,來區(qū)分每個器件的,我們要完成在一條1-wire總線上的多點測量必須知道每一個器件的注冊碼,當線路上只有一個器件的時候,這個問題處理起來很簡單,只要發(fā)出0x33命令就行,但是實際上我們看到,現(xiàn)場使用的測溫電纜已經(jīng)把多個18b20密封在一條電纜中了,我們不可能單獨來測量每一個18b20的注冊碼了,這樣問題就復雜了,各種參考文獻和網(wǎng)絡上的例程都沒有對這種情況的介紹,不解決這個問題,溫度檢測系統(tǒng)就沒有使用價值!通過對參考文獻ds1820 programmable resolution 1-wire digital thermometer 的仔細研究,發(fā)現(xiàn)1-wire 器件支持一種叫rom搜索的操作,通過rom搜索可以枚舉1-wire總線上的所有器件,通過rom搜索完美的實現(xiàn)了測溫點的自由增減。rom搜索是針對對器件的64位注冊碼進行的,每個1-wire器件的注冊碼都是唯一的。圖3.2 64位rom注冊碼搜索算法搜索算法采用的是二叉樹型結(jié)構(gòu),搜索過程沿各分節(jié)點進行,直到找到器件的rom 碼即葉子為止;后續(xù)的搜索操作沿著節(jié)點上的其它路徑進行,按照同樣的方式直到找到總線上的所有器件代碼。搜索算法首先通過復位(reset)和在線應答脈沖(presence pulse)時隙將1-wire 總線上的所有器件復位;成功地執(zhí)行該操作后發(fā)送1 個字節(jié)的搜索命令,搜索命令使1-wire 器件準備就緒、開始進行搜索操作。搜索命令分為兩類:標準搜索命令(0fh)用來搜索連接到網(wǎng)絡中所有器件;報警或有條件搜索命令(ech)只用來搜索那些處于報警狀態(tài)下的器件,這種方式縮小了搜索范圍可以快速查找到所需要注意的器件。搜索命令發(fā)出之后,開始實際的搜索過程。首先總線上的所有從機器件同時發(fā)送rom 碼(也叫注冊碼)中的第一位最低有效位。與所有的1-wire 通信一樣,無論是讀取數(shù)據(jù)還是向從機器件寫數(shù)據(jù),都由1-wire 主機啟動每一位操作。按照1-wire 的特性,當所有從機器件同時應答主機時,結(jié)果相當于全部發(fā)送數(shù)據(jù)位的邏輯and;從機發(fā)送其rom 碼的第一位后,主機啟動下一位操作,接著從機發(fā)送第一位數(shù)據(jù)的補碼;從兩次讀到的數(shù)據(jù)位可以對rom 碼的第一位做出幾種判斷:圖3.3 第一位的情況判斷按照搜索算法的要求,1-wire 主機必須向總線上的從機發(fā)回一個指定位;如果從機器件中rom碼的當前位的值與該數(shù)據(jù)位匹配,則繼續(xù)參與搜索過程;若從機器件的當前位與之不匹配,則該器件轉(zhuǎn)換到等待狀態(tài),并保持等待狀態(tài)直到下一個1-wire 復位信號到來。其余63 位rom 碼的搜索依然按照這種“讀兩位”、“寫一位”的模式進行重復操作。按照這種搜索算法進行下去,最終除了一個從機器件外所有從機將進入等待狀態(tài),經(jīng)過最后一輪檢測就可得到最后保留(未進入等待狀態(tài))器件的rom 碼。在后續(xù)搜索過程中,選用不同的路徑(或分支)來查找其它器件的rom 碼。需要注意的是本文rom 碼的數(shù)據(jù)位用第1位(最低有效位)到第64位(最高有效位)表示而不是我們常用的那種第0位到第63位的模式;這樣設置允許將差異位置記數(shù)器初始值置為0,為以后的比較提供了方便。圖3.4 判斷過程從圖3.4可以看出:如果所有總線上的器件在當前位具有相同值,那么只有一條分支路徑可選;總線上沒有器件響應的情況是一種異常狀態(tài),可能是要查找的器件在搜尋過程中與1-wire 總線脫。離如果當前位既有0 也有1,這種情況稱為位值差異,它對在后續(xù)搜索過程中查找器件起關(guān)鍵作用。搜索算法指定在第一輪查詢中若出現(xiàn)差異(數(shù)據(jù)位/補碼 = 0/0),則選用0路徑。注意:這一點是由本文檔中介紹的特定算法決定的,其它算法中或許首先選用1路徑。記錄最后一次值差異的位置以供下一次搜索使用,圖3.5列出了出現(xiàn)值差異時路徑的選取情況。圖3.5 分支選取圖3.6列出了對一個從器件進行搜索的流程圖;右側(cè)注釋欄對在流程圖中出現(xiàn)的符號進行了說明;在本文檔的源代碼附錄中也將用到這些專用符號。圖3.6 搜索流程圖圖3.7 搜索流程圖圖3.8 搜索流程圖對應以上流程
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025全面合同租賃手冊
- 水彩花草樹木教學課件
- 2025職員借用合同協(xié)議書
- 2025屆廣東省深圳市高三二模歷史試題(含答案)
- 2025年合同法疑難點睛:常見合同法律問題解析
- 2025年的上海合同范本
- 2025中介服務合同書
- 2025小學道德與法治教師課標考試模擬試卷附參考答案 (兩套)
- 文學概論(高等教育出版社版)
- 2025資產(chǎn)抵押借款合同標準范本
- 仁愛版初中英語單詞表(默寫版)
- 企業(yè)防滲漏標準做法案例庫圖文豐富
- Unit 2 Listening and talking -高中英語人教版(2019)必修第一冊
- 醫(yī)院分娩記錄單
- GB/T 17872-1999江海直達貨船船型系列
- GB/T 12027-2004塑料薄膜和薄片加熱尺寸變化率試驗方法
- 中醫(yī)手診培訓資料課件
- 消防主機運行記錄表(標準范本)
- 應急處置措施交底
- Q∕GDW 12154-2021 電力安全工器具試驗檢測中心建設規(guī)范
- 第四章 金融監(jiān)管(商業(yè)銀行管理-復旦大學)
評論
0/150
提交評論