日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

DS18B20溫度測(cè)量(1)理論知識(shí)

 ccbupt 2009-04-11
DS18B20溫度測(cè)量(1)理論知識(shí)
 

DS18B20數(shù)字溫度測(cè)量傳感器,網(wǎng)上介紹很多,我就不羅嗦了。見圖

DS18B20與前產(chǎn)品DS1820的不同:

  DS18B20繼承了DS1820的全部?jī)?yōu)點(diǎn),并做了如下改進(jìn) 1.供電范圍擴(kuò)大為3.0--5.5V。2.溫度分辨力可編程。3.轉(zhuǎn)換速率有很大提高.4.內(nèi)部存儲(chǔ)器映射關(guān)系發(fā)生變化。5.具有電源反接保護(hù)電路。5.體積減小一半。 對(duì)我們使用來說最大的不同就是DS18B20可以程序設(shè)定9~12位的分辨率數(shù)字值,而DS1820為固定的9位數(shù)字值,且溫度轉(zhuǎn)換時(shí)的延時(shí)時(shí)間由2s減為750ms。。

電路的接法:
  DS18B20說明書上介紹了幾種電路的接法,但我這里就說最常用的一種接法見圖:

先介紹一下DS18B20內(nèi)部的結(jié)構(gòu):
常規(guī)的內(nèi)部邏輯圖我就不說了,只說說跟我們使用直接相關(guān)的內(nèi)容。
DS18B20的內(nèi)部存儲(chǔ)資源分為8個(gè)字節(jié)的ROM、9個(gè)字節(jié)的RAM、3個(gè)字節(jié)的EEPROM如下圖:

一、ROM:
在DS18B20內(nèi)部光刻了一個(gè)長(zhǎng)度為64bit的ROM,這個(gè)編碼是器件的身份識(shí)別標(biāo)志。如下圖:

  64位光刻ROM的排列是:開始(最低)8位是產(chǎn)品類型標(biāo)號(hào),對(duì)于DS18B20來說就是(28H),接著的48位是該DS18B20自身的序列號(hào),最后8位是前面56位的循環(huán)冗余校驗(yàn)碼(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一個(gè)DS18B20都各不相同,這樣就可以實(shí)現(xiàn)一根總線上掛接多個(gè)DS18B20的目的。

二、RAM:
  高速暫存存儲(chǔ)器(RAM)由9個(gè)字節(jié)組成,包含了8個(gè)連續(xù)字節(jié),前兩個(gè)字節(jié)是測(cè)得的溫度信息,第一個(gè)字節(jié)的內(nèi)容是溫度溫度的低八位,第二個(gè)字節(jié)是溫度的高八位。第三個(gè)和第四個(gè)字節(jié)是溫度高限TH、溫度低限TL暫存區(qū),第五個(gè)字節(jié)是配置寄存器暫存區(qū),第6、7、8字節(jié)是系統(tǒng)保留用,就相當(dāng)于DS18B20的運(yùn)算內(nèi)存,第九個(gè)字節(jié)是冗余檢驗(yàn)字節(jié)。其分配如下表所示。

①、第0和第1字節(jié):
  當(dāng)溫度轉(zhuǎn)換命令發(fā)布后,經(jīng)轉(zhuǎn)換所得的溫度值以二字節(jié)補(bǔ)碼形式存放在高速暫存存儲(chǔ)器的第0和第1個(gè)字節(jié)。單片機(jī)可通過單線接口讀到該數(shù)據(jù),讀取時(shí)低位在前,高位在后。對(duì)應(yīng)的溫度計(jì)算:當(dāng)符號(hào)位S=0時(shí),直接將二進(jìn)制位轉(zhuǎn)換為十進(jìn)制;當(dāng)S=1時(shí),先將補(bǔ)碼變?yōu)樵a,再計(jì)算十進(jìn)制值。

這是12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲(chǔ)在18B20的兩個(gè)8比特的RAM中,二進(jìn)制中的前面5位是符號(hào)位,如果測(cè)得的溫度大于0,這5位為0,只要將測(cè)到的數(shù)值乘于0.0625即可得到實(shí)際溫度;如果溫度小于0,這5位為1,測(cè)到的數(shù)值需要取反加1再乘于0.0625即可得到實(shí)際溫度??聪聢D

例如+125℃的數(shù)字輸出為07D0H,十進(jìn)制是2000,乘以0.0625就等于125℃。同樣+25.0625℃的數(shù)字輸出為0191H,十進(jìn)制為401,乘以0.0625就得出25.0625℃了。-55℃的數(shù)字輸出為FC90H,因?yàn)榉?hào)位為1,先將1111110010010000取反,得1101101111,再加一得1101110000,十進(jìn)制為880,乘以0.0625就得55,為負(fù)值,即-55℃。

② 第2第3字節(jié):
  RAM的第2、3、4字節(jié)和EEPROM的三個(gè)字節(jié)是對(duì)應(yīng)的,內(nèi)容是相同的,只是RAM因?yàn)槭菚捍嫫?,失電后?shù)據(jù)就丟失了。而EEPROM是電擦除只讀存儲(chǔ)器,失電后數(shù)據(jù)不會(huì)丟失。在工作時(shí)得到復(fù)位命令后就從EEPROM復(fù)制一份數(shù)據(jù)到RAM的第2、3、4字節(jié)內(nèi),作為我們進(jìn)行報(bào)警搜索、改寫報(bào)警值和改寫器件設(shè)置用,我們從外部只能對(duì)RAM進(jìn)行操作,EEPROM只能從RAM復(fù)制而得到要保存的數(shù)據(jù)。
  第2字節(jié)為報(bào)警值高限TH,第3字節(jié)為報(bào)警值低限。DS18B20完成一次溫度轉(zhuǎn)換后,就拿溫度值和存儲(chǔ)在TH和TL中的值進(jìn)行比較,因?yàn)檫@些寄存器是8位的,所以小數(shù)位被忽略不計(jì)。TH或TL的最高有效位直接對(duì)應(yīng)16位溫度寄存器的符號(hào)位。如果測(cè)得的溫度高于TH或低于TL,器件內(nèi)部就會(huì)置位一個(gè)報(bào)警標(biāo)識(shí)。每進(jìn)行一次測(cè)溫就對(duì)這個(gè)標(biāo)識(shí)進(jìn)行一次更新。當(dāng)報(bào)警標(biāo)識(shí)置位時(shí),DS18B20會(huì)對(duì)報(bào)警搜索命令有反應(yīng)。這樣就允許許多DS18B20并聯(lián)在一起同時(shí)測(cè)溫,如果某個(gè)地方溫度超過了限定值。報(bào)警的器件就會(huì)被立即識(shí)別出來并讀取。而不用讀未報(bào)警的器件。

③ 第4字節(jié) 配置寄存器:
  第4字節(jié)的配置寄存器是用來設(shè)置DS18B20的工作模式和測(cè)量精度的,其內(nèi)容如下圖:

  低五位一直都是"1",TM是測(cè)試模式位,用于設(shè)置DS18B20在工作模式還是在測(cè)試模式。在DS18B20出廠時(shí)該位被設(shè)置為0,用戶不要去改動(dòng)。R1和R0用來設(shè)置分辨率,如下圖所示:(DS18B20出廠時(shí)被設(shè)置為12位)

  我們使用時(shí)可以跟據(jù)實(shí)際需要通過修改RAM第4字節(jié)的R0和R1的值來DS18B20的溫度測(cè)量精度。需要保存這種設(shè)置時(shí),還要用一條復(fù)制命令將RAM內(nèi)的數(shù)據(jù)復(fù)制到EEPROM內(nèi)。

④ 第5、6、7、8字節(jié):
  前面我們已經(jīng)說過。RAM的第5、6、7字節(jié)是器件的保留字節(jié),就相當(dāng)于器件內(nèi)部轉(zhuǎn)換運(yùn)算時(shí)所用的內(nèi)存。第8字節(jié)是循環(huán)冗余校驗(yàn)字節(jié)。它是前面8個(gè)字節(jié)的CRC值。起著對(duì)前面字節(jié)的校驗(yàn)作用。

三、EEPROM:
  EEPROM只有三個(gè)字節(jié),和RAM的第2、3、4字節(jié)的內(nèi)容相對(duì)應(yīng),它的作用就是存儲(chǔ)RAM第2、3、4字節(jié)的內(nèi)容,以使這些數(shù)據(jù)在掉電后不丟失。可能通過幾條命令將RAM的該3個(gè)字節(jié)內(nèi)容復(fù)制到EEPROM或從EEPROM將該3個(gè)字節(jié)內(nèi)容復(fù)制到RAM的第2、3、4字節(jié)去。因?yàn)槲覀儚耐獠肯敫膶憟?bào)警值和器件的設(shè)置都是只對(duì)RAM進(jìn)行操作的。要保存這些設(shè)置后的數(shù)據(jù)就還要用相應(yīng)的命令將RAM的數(shù)據(jù)復(fù)制到EEPROM去。

好了,下面說說對(duì)DS18B20的操作都有哪些命令:
  對(duì)DS18B20的操作分為對(duì)ROM的操作和對(duì)RAM的操作。列表見下圖:

實(shí)際操作的具體實(shí)現(xiàn):
  DS18B20是單總線器件,通訊協(xié)議包括幾種單線信號(hào)類型:復(fù)位脈沖、存在脈沖、寫0、寫1、讀0、讀1。所有這些信號(hào),除存在脈沖外,其余都是由總線控制器(單片機(jī))發(fā)出的。根據(jù)DS18B20的通訊協(xié)議,主機(jī)(單片機(jī))控制DS18B20完成一次操作經(jīng)過三個(gè)步驟:①要對(duì)DS18B20進(jìn)行復(fù)位操作,②復(fù)位成功后發(fā)送一條ROM指令,③最后發(fā)送RAM指令,這樣才能對(duì)DS18B20進(jìn)行預(yù)定的操作。

  ① 對(duì)DS18B20復(fù)位操作:
   主機(jī)(單片機(jī))和DS18B20間的任何通訊都需要以初始化序列開始,初始化序列就是主機(jī)發(fā)出一個(gè)復(fù)位脈沖跟著檢測(cè)一個(gè)DS18B20的存在脈沖,表明DS18B20已經(jīng)準(zhǔn)備好發(fā)送和接收數(shù)據(jù)。初始化序列見下圖:

  主機(jī)首先發(fā)出一個(gè)480-960微秒的低電平脈沖,然后釋放總線變?yōu)楦唠娖?,并在隨后的480微秒時(shí)間內(nèi)對(duì)總線進(jìn)行檢測(cè),如果有低電平出現(xiàn)說明總線上有器件已做出應(yīng)答。若無低電平出現(xiàn)一直都是高電平說明總線上無器件應(yīng)答。
  做為從器件的DS18B20在一上電后就一直在檢測(cè)總線上是否有480-960微秒的低電平出現(xiàn),如果有,在總線轉(zhuǎn)為高電平后等待15-60微秒后將總線電平拉低60-240微秒做出響應(yīng)存在脈沖,告訴主機(jī)本器件已做好準(zhǔn)備。若沒有檢測(cè)到就一直在檢測(cè)等待。

?、凇?duì)DS18B20的寫和讀操作:
  接下來就是主機(jī)發(fā)出各種操作命令,但各種操作命令都是向DS18B20寫0和寫1組成的命令字節(jié),接收數(shù)據(jù)時(shí)也是從DS18B20讀取0或1的過程。因此首先要搞清主機(jī)是如何進(jìn)行寫0、寫1、讀0和讀1的。
  寫周期最少為60微秒,最長(zhǎng)不超過120微秒。寫周期一開始做為主機(jī)先把總線拉低1微秒表示寫周期開始。隨后若主機(jī)想寫0,則繼續(xù)拉低電平最少60微秒直至寫周期結(jié)束,然后釋放總線為高電平。若主機(jī)想寫1,在一開始拉低總線電平1微秒后就釋放總線為高電平,一直到寫周期結(jié)束。而做為從機(jī)的DS18B20則在檢測(cè)到總線被拉底后等待15微秒然后從15us45us開始對(duì)總線采樣,在采樣期內(nèi)總線為高電平則為1,若采樣期內(nèi)總線為低電平則為0。
  

  對(duì)于讀數(shù)據(jù)操作時(shí)序也分為讀0時(shí)序和讀1時(shí)序兩個(gè)過程。讀時(shí)隙是從主機(jī)把單總線拉低之后,在1微秒之后就得釋放單總線為高電平,以讓DS18B20把數(shù)據(jù)傳輸?shù)絾慰偩€上。DS18B20在檢測(cè)到總線被拉低1微秒后,便開始送出數(shù)據(jù),若是要送出0就把總線拉為低電平直到讀周期結(jié)束。若要送出1則釋放總線為高電平。主機(jī)在一開始拉低總線1微秒后釋放總線,然后在包括前面的拉低總線電平1微秒在內(nèi)的15微秒時(shí)間內(nèi)完成對(duì)總線進(jìn)行采樣檢測(cè),采樣期內(nèi)總線為低電平則確認(rèn)為0。采樣期內(nèi)總線為高電平則確認(rèn)為1。完成一個(gè)讀時(shí)序過程,至少需要60us才能完成。(為什么不可以像寫時(shí)序那樣將采樣時(shí)間放在讀周期開始后的第15微秒到45微秒之間呢。雖然目前這樣也不是不可以,但總覺得不安全。有點(diǎn)懸?。。?br>  DS18B20的說明書上也說,由于主機(jī)拉低總線電平時(shí)間Tint、釋放總線時(shí)的恢復(fù)時(shí)間TRC與采樣時(shí)間Tsample之和必須小于15微秒。如下圖13。為了使讀出數(shù)據(jù)更可靠,說明書上建議Tint和TRC保持時(shí)間盡可能小,把控制器采樣時(shí)間放到15微秒周期的最后。如下圖14。
  (要是像寫周期那樣不就從容了,何必搞得緊緊張張的,唉?。?/p>

好!弄清了如何復(fù)位,如何寫1寫0和讀1讀0,我們現(xiàn)在就要看看在總線上如何進(jìn)行實(shí)際的運(yùn)用。
例如,我們做兩個(gè)操作,第一個(gè)是讓DS18B20進(jìn)行一次溫度的轉(zhuǎn)換。第二是讀取RAM內(nèi)的溫度。
 ?、佟∽孌S18B20進(jìn)行一次溫度的轉(zhuǎn)換。前面已經(jīng)講過每一個(gè)對(duì)DS18B20的操作都要有三個(gè)步驟。一是復(fù)位操作。二是對(duì)ROM的操作。三是對(duì)RAM的操作?,F(xiàn)在我們要做的是讓DS18B20進(jìn)行一次溫度的轉(zhuǎn)換,那具體的操作就是:1、主機(jī)先作個(gè)復(fù)位操作,2、主機(jī)再寫跳過ROM的操作(CCH)命令,3、然后主機(jī)接著寫個(gè)轉(zhuǎn)換溫度的操作命令,后面釋放總線至少一秒,讓DS18B20完成轉(zhuǎn)換的操作。在這里要注意的是每個(gè)命令字節(jié)在寫的時(shí)候都是低字節(jié)先寫,例如CCH的二進(jìn)制為11001100,在寫到總線上時(shí)要從低位開始寫,寫的順序是“零、零、壹、壹、零、零、壹、壹”。整個(gè)操作的總線狀態(tài)如下圖。

 ?、凇∽x取RAM內(nèi)的溫度數(shù)據(jù)。同樣,這個(gè)操作也要接照三個(gè)步驟。1、主機(jī)發(fā)出復(fù)位操作并接收DS18B20的應(yīng)答(存在)脈沖。2、主機(jī)發(fā)出跳過對(duì)ROM操作的命令(CCH)。3、主機(jī)發(fā)出讀取RAM的命令(BEH),隨后主機(jī)依次讀取DS18B20發(fā)出的從第0一第8,共九個(gè)字節(jié)的數(shù)據(jù)。如果只想讀取溫度數(shù)據(jù),那在讀完第0和第1個(gè)數(shù)據(jù)后就不再理會(huì)后面DS18B20發(fā)出的數(shù)據(jù)即可。同樣讀取數(shù)據(jù)也是低位在前的。整個(gè)操作的總線狀態(tài)如下圖:

在這里得說明一下,第二步跳過對(duì)ROM操作的命令是在總線上只有一個(gè)器件時(shí),為節(jié)省時(shí)間而簡(jiǎn)化的操作,若總線上不止一個(gè)器件,那么跳過ROM操作命令將會(huì)使幾器件同時(shí)響應(yīng),這樣就會(huì)出現(xiàn)數(shù)據(jù)沖突。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多