日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 單片機
[導讀]DS18B20 是美信公司的一款溫度傳感器,單片機可以通過 1-Wire 協(xié)議與 DS18B20 進行通信,最終將溫度讀出。1-Wire 總線的硬件接口很簡單,只需要把 DS18B20 的數(shù)據(jù)引腳和單片機的一個 IO 口接上就可以了。硬件的簡單,

DS18B20 是美信公司的一款溫度傳感器,單片機可以通過 1-Wire 協(xié)議與 DS18B20 進行通信,最終將溫度讀出。1-Wire 總線的硬件接口很簡單,只需要把 DS18B20 的數(shù)據(jù)引腳和單片機的一個 IO 口接上就可以了。硬件的簡單,隨之而來的,就是軟件時序的復雜。1-Wire總線的時序比較復雜,很多同學在這里獨立看時序圖都看不明白,所以這里還要帶著大家來研究 DS18B20 的時序圖。我們先來看一下 DS18B20 的硬件原理圖,如圖16-12所示。

圖16-12 DS18B20 電路原理圖

DS18B20 通過編程,可以實現(xiàn)最高12位的溫度存儲值,在寄存器中,以補碼的格式存儲,如圖16-13所示。

圖16-13 DS18B20 溫度數(shù)據(jù)格式

一共2個字節(jié),LSB 是低字節(jié),MSB 是高字節(jié),其中 MSb 是字節(jié)的高位,LSb 是字節(jié)的低位。大家可以看出來,二進制數(shù)字,每一位代表的溫度的含義,都表示出來了。其中 S表示的是符號位,低11位都是2的冪,用來表示最終的溫度。DS18B20 的溫度測量范圍是從-55度到+125度,而溫度數(shù)據(jù)的表現(xiàn)形式,有正負溫度,寄存器中每個數(shù)字如同卡尺的刻度一樣分布,如圖16-14所示。

圖16-14 DS18B20 溫度值

二進制數(shù)字最低位變化1,代表溫度變化0.0625度的映射關(guān)系。當0度的時候,那就是 0x0000,當溫度125度的時候,對應十六進制是 0x07D0,當溫度是零下55度的時候,對應的數(shù)字是 0xFC90。反過來說,當數(shù)字是 0x0001 的時候,那溫度就是0.0625度了。

首先,我先根據(jù)手冊上 DS18B20 工作協(xié)議過程大概講解一下。

1)初始化和 I2C 的尋址類似,1-Wire 總線開始也需要檢測這條總線上是否存在 DS18B20 這個器件。如果這條總線上存在 DS18B20,總線會根據(jù)時序要求返回一個低電平脈沖,如果不存在的話,也就不會返回脈沖,即總線保持為高電平,所以習慣上稱之為檢測存在脈沖。此外,獲取存在脈沖不僅僅是檢測是否存在 DS18B20,還要通過這個脈沖過程通知 DS18B20 準備好,單片機要對它進行操作了,如圖16-15所示。

圖16-15 檢測存在脈沖

大家注意看圖,實粗線是我們的單片機 IO 口拉低這個引腳,虛粗線是 DS18B20 拉低這個引腳,細線是單片機和 DS18B20 釋放總線后,依靠上拉電阻的作用把 IO 口引腳拉上去。這個我們前邊提到過了,51單片機釋放總線就是給高電平。

存在脈沖檢測過程,首先單片機要拉低這個引腳,持續(xù)大概 480 us 到 960 us 之間的時間即可,我們的程序中持續(xù)了 500 us。然后,單片機釋放總線,就是給高電平,DS18B20 等待大概15到 60 us 后,會主動拉低這個引腳大概是60到 240 us,而后 DS18B20 會主動釋放總線,這樣 IO 口會被上拉電阻自動拉高。

有的同學還是不能夠徹底理解,程序列出來逐句解釋。首先,由于 DS18B20 時序要求非常嚴格,所以在操作時序的時候,為了防止中斷干擾總線時序,先關(guān)閉總中斷。然后第一步,拉低 DS18B20 這個引腳,持續(xù) 500 us;第二步,延時 60 us;第三步,讀取存在脈沖,并且等待存在脈沖結(jié)束。

bitGet18B20Ack(){bitack;EA=0;//禁止總中斷IO_18B20=0;//產(chǎn)生500us復位脈沖DelayX10us(50);IO_18B20=1;DelayX10us(6);//延時60usack=IO_18B20;//讀取存在脈沖while(!IO_18B20);//等待存在脈沖結(jié)束EA=1;//重新使能總中斷returnack;}

很多同學對第二步不理解,時序圖上明明是 DS18B20 等待 15 us 到 60 us,為什么要延時60 us 呢?舉個例子,媽媽在做飯,告訴你大概5分鐘到10分鐘飯就可以吃了,那么我們什么時候去吃,能夠絕對保證吃上飯呢?很明顯,10分鐘以后去吃肯定可以吃上飯。同樣的道理,DS18B20 等待大概是 15 us 到 60 us,我們要保證讀到這個存在脈沖,那么 60 us 以后去讀肯定可以讀到。當然,不能延時太久,太久,超過 75 us,就可能讀不到了,為什么是 75 us,大家自己思考一下。

2)ROM 操作指令我們學 I2C 總線的時候就了解到,總線上可以掛多個器件,通過不同的器件地址來訪問不同的器件。同樣,1-Wire 總線也可以掛多個器件,但是它只有一條線,如何區(qū)分不同的器件呢?

在每個 DS18B20 內(nèi)部都有一個唯一的64位長的序列號,這個序列號值就存在 DS18B20 內(nèi)部的 ROM 中。開始的8位是產(chǎn)品類型編碼(DS18B20 是 0x10),接著的48位是每個器件唯一的序號,最后的8位是 CRC 校驗碼。DS18B20 可以引出去很長的線,最長可以到幾十米,測不同位置的溫度。單片機可以通過和 DS18B20 之間的通信,獲取每個傳感器所采集到的溫度信息,也可以同時給所有的 DS18B20 發(fā)送一些指令。這些指令相對來說比較復雜,而且應用很少,所以這里大家有興趣的話就自己去查手冊完成吧,我們這里只講一條總線上只接一個器件的指令和程序。

Skip ROM(跳過 ROM):0xCC。當總線上只有一個器件的時候,可以跳過 ROM,不進行 ROM 檢測。

3)RAM 存儲器操作指令RAM 讀取指令,只講2條,其它的大家有需要可以隨時去查資料。 Read Scratchpad(讀暫存寄存器):0xBE

這里要注意的是,DS18B20 的溫度數(shù)據(jù)是2個字節(jié),我們讀取數(shù)據(jù)的時候,先讀取到的是低字節(jié)的低位,讀完了第一個字節(jié)后,再讀高字節(jié)的低位,直到兩個字節(jié)全部讀取完畢。

Convert Temperature(啟動溫度轉(zhuǎn)換):0x44

當我們發(fā)送一個啟動溫度轉(zhuǎn)換的指令后,DS18B20 開始進行轉(zhuǎn)換。從轉(zhuǎn)換開始到獲取溫度,DS18B20 是需要時間的,而這個時間長短取決于 DS18B20 的精度。前邊說 DS18B20 最高可以用12位來存儲溫度,但是也可以用11位,10位和9位一共四種格式。位數(shù)越高,精度越高,9位模式最低位變化1個數(shù)字溫度變化0.5度,同時轉(zhuǎn)換速度也要快一些,如圖16-16所示。

圖16-16 DS18B20 溫度轉(zhuǎn)換時間

其中寄存器 R1 和 R0 決定了轉(zhuǎn)換的位數(shù),出廠默認值就11,也就是12位表示溫度,最大的轉(zhuǎn)換時間是 750 ms。當啟動轉(zhuǎn)換后,至少要再等 750 ms 之后才能讀取溫度,否則讀到的溫度有可能是錯誤的值。這就是為什么很多同學讀 DS18B20 的時候,第一次讀出來的是85度,這個值要么是沒有啟動轉(zhuǎn)換,要么是啟動轉(zhuǎn)換了,但還沒有等待一次轉(zhuǎn)換徹底完成,讀到的是一個錯誤的數(shù)據(jù)。

4)DS18B20 的位讀寫時序DS18B20 的時序圖不是很好理解,大家對照時序圖,結(jié)合我的解釋,一定要把它學明白。寫時序圖如圖16-17所示。

圖16-17 DS18B20 位寫入時序

當要給 DS18B20 寫入0的時候,單片機直接將引腳拉低,持續(xù)時間大于 60 us 小于 120 us就可以了。圖上顯示的意思是,單片機先拉低 15 us 之后,DS18B20 會在從 15 us 到 60 us 之間的時間來讀取這一位,DS18B20 最早會在 15 us 的時刻讀取,典型值是在 30 us 的時刻讀取,最多不會超過 60us,DS18B20 必然讀取完畢,所以持續(xù)時間超過 60 us 即可。

當要給 DS18B20 寫入1的時候,單片機先將這個引腳拉低,拉低時間大于 1 us,然后馬上釋放總線,即拉高引腳,并且持續(xù)時間也要大于 60 us。和寫0類似的是,DS18B20 會在 15 us 到 60 us 之間來讀取這個1。

可以看出來,DS18B20 的時序比較嚴格,寫的過程中最好不要有中斷打斷,但是在兩個“位”之間的間隔,是大于1小于無窮的,那在這個時間段,我們是可以開中斷來處理其它程序的。發(fā)送即寫入一個字節(jié)的數(shù)據(jù)程序如下。

voidWrite18B20(unsignedchardat){unsignedcharmask;EA=0;//禁止總中斷for(mask=0x01;mask!=0;mask<<=1){//低位在先,依次移出8個bitIO_18B20=0;//產(chǎn)生2us低電平脈沖_nop_();_nop_();if((mask&dat)==0){//輸出該bit值IO_18B20=0;}else{IO_18B20=1;}DelayX10us(6);//延時60usIO_18B20=1;//拉高通信引腳}EA=1;//重新使能總中斷}

讀時序圖如圖16-18所示。

圖16-18 DS18B20 位讀取時序

當要讀取 DS18B20 的數(shù)據(jù)的時候,我們的單片機首先要拉低這個引腳,并且至少保持 1 us 的時間,然后釋放引腳,釋放完畢后要盡快讀取。從拉低這個引腳到讀取引腳狀態(tài),不能超過 15 us。大家從圖16-18可以看出來,主機采樣時間,也就是 MASTER SAMPLES,是在 15 us 之內(nèi)必須完成的,讀取一個字節(jié)數(shù)據(jù)的程序如下。

unsignedcharRead18B20({unsignedchardat;unsignedcharmask;EA=0;//禁止總中斷for(mask=0x01;mask!=0;mask<<=1){//低位在先,依次采集8個bitIO_18B20=0;//產(chǎn)生2us低電平脈沖_nop_();_nop_();IO_18B20=1;//結(jié)束低電平脈沖,等待18B20輸出數(shù)據(jù)_nop_();//延時2us_nop_();if(!IO_18B20){//讀取通信引腳上的值dat&=~mask;}else{dat"=mask;}DelayX10us(6);//再延時60us}EA=1;//重新使能總中斷returndat;}

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

在嵌入式系統(tǒng)開發(fā)中,STM32系列微控制器的內(nèi)部溫度傳感器因其低成本、高集成度特性,廣泛應用于設備自檢、環(huán)境監(jiān)測等場景。然而,受芯片工藝差異和電源噪聲影響,其原始數(shù)據(jù)存在±1.5℃的固有誤差。本文從硬件配置、校準算法、軟...

關(guān)鍵字: STM32 溫度傳感器

中國 上海,2025年7月18日——全球領(lǐng)先的智能傳感和發(fā)射器解決方案供應商艾邁斯歐司朗(SIX:AMS)今日宣布,推出的一款緊湊型溫度傳感器——AS6211,可監(jiān)測奶牛體內(nèi)狀況,揭示外部無法觀測的信息。該傳感器內(nèi)置于s...

關(guān)鍵字: 溫度傳感器 AS6221

本文討論如何為特定應用選擇合適的溫度傳感器。我們將介紹不同類型的溫度傳感器及其優(yōu)缺點。最后,我們將探討遠程和本地檢測技術(shù)的最新進展如何推動科技進步,從而創(chuàng)造出更多更先進的溫度傳感器。

關(guān)鍵字: 溫度傳感器 CPU FPGA

如果您愿意,您甚至可以使用I2Ctools在總線上讀寫。這可以使用命令sudo i2cget 3 0x3f 0x01來實現(xiàn)。這是從I2C總線3中獲得的,在設備地址0x3F處,寄存器0x01的內(nèi)容,這是溫度傳感器上的who...

關(guān)鍵字: ZUBoard 無刷直流電機 溫度傳感器

TDK株式會社(東京證券交易所代碼:6762)隆重推出新系列溫度傳感器的首款產(chǎn)品—B58101A0851A000。該新元件專為電動車 (EV) 的動力系統(tǒng)冷卻應用而設計,是一款靈敏度高的全密封型NTC熱敏電阻,可實現(xiàn)快速...

關(guān)鍵字: 電動車 溫度傳感器 電驅(qū)系統(tǒng)
關(guān)閉