單總線(xiàn),即一根線(xiàn)進(jìn)行通信,最常用的溫感 DS18B20 采用的就是單總線(xiàn)結(jié)構(gòu)。
一、概述
二、硬件結(jié)構(gòu)
三、單總線(xiàn)的時(shí)序圖
四、實(shí)測(cè)分析時(shí)序
五、DS18B20
一、概述
單總線(xiàn)是美國(guó) DALLAS 公司推出的外圍串行擴(kuò)展總線(xiàn)技術(shù),與 SPI、I2C 串行數(shù)據(jù)通信方式不同,它采用單根信號(hào)線(xiàn),既傳輸時(shí)鐘又傳輸數(shù)據(jù),而且數(shù)據(jù)傳輸是雙向的。
單總線(xiàn)英文名 1-Wire,傳輸速率一般是 15.3Kbit/s,最大可達(dá) 142Kbit/s,通常采用 100Kbit/s 以下的速率傳輸數(shù)據(jù)。
二、硬件結(jié)構(gòu)
1. 單總線(xiàn)典型框圖
單總線(xiàn)適用于單主機(jī)系統(tǒng),能夠控制一個(gè)或多個(gè)從機(jī)設(shè)備。主機(jī)可以是微控制器,從機(jī)可以是單總線(xiàn)器件,它們之間的數(shù)據(jù)交換只通過(guò)一條信號(hào)線(xiàn)。
單總線(xiàn)典型應(yīng)用結(jié)構(gòu)2. 漏極開(kāi)路
單總線(xiàn)主機(jī)或從機(jī)設(shè)備通過(guò)一個(gè)漏極開(kāi)路或三態(tài)端口連接至該數(shù)據(jù)線(xiàn),由于是開(kāi)漏結(jié)構(gòu),需要在數(shù)據(jù)線(xiàn)上加一個(gè)上拉電阻,一般是 4.7K。
為了確??偩€(xiàn)上的某些器件在工作時(shí)(如溫度傳感器進(jìn)行溫度轉(zhuǎn)換、E2PROM 寫(xiě)人數(shù)據(jù)時(shí))有足夠的電流供給,除了上拉電阻之外,還需要在總線(xiàn)上使用 MOSFET 提供強(qiáng)上拉供電,大多數(shù)的應(yīng)用這個(gè)強(qiáng)上拉是不需要的。
主機(jī)或從機(jī)將數(shù)據(jù)線(xiàn)拉低到GND表示數(shù)據(jù)0,將數(shù)據(jù)線(xiàn)釋放為高表示數(shù)據(jù)1。
- 當(dāng) MCU 發(fā)送邏輯 1 時(shí),經(jīng)過(guò)反相器,總線(xiàn)呈現(xiàn)邏輯 0,邏輯 0 經(jīng)過(guò) 1-WIRE 器件的反相器,即會(huì)收到邏輯 1;
- 當(dāng) MCU 發(fā)送邏輯 0 時(shí),經(jīng)過(guò)反向器,總線(xiàn)呈現(xiàn)邏輯 1,邏輯 1 經(jīng)過(guò) 1-WIRE 器件的反相器,即會(huì)收到邏輯 0;
- 當(dāng) 1WIRE 器件發(fā)送邏輯 1 時(shí),Tx 處有 NMOS 會(huì)導(dǎo)通,總線(xiàn)呈現(xiàn)邏輯 0,經(jīng)過(guò) MCU Rx 處的反相器,MCU 會(huì)收到邏輯 1;
- 當(dāng) 1WIRE 器件發(fā)送邏輯 0 時(shí),NMOS 截止,總線(xiàn)呈現(xiàn)邏輯 1,MCU 會(huì)收到邏輯 0;
單總線(xiàn)典型內(nèi)部結(jié)構(gòu)框圖
3. 寄生供電電路
單總線(xiàn)器件內(nèi)部設(shè)置有寄生供電電路(Parasite Power Circuit)。
當(dāng)單總線(xiàn)處于高電平時(shí),一方面通過(guò)二極管向芯片供電,另一方面對(duì)內(nèi)部電容 C(容值約 800pF)充電。當(dāng)單總線(xiàn)處于低電平時(shí),二極管截止,內(nèi)部電容 C 向芯片供電。由于電容 C 的容量有限,因此要求單總線(xiàn)能間隔地提供高電平以能不斷地向內(nèi)部電容 C 充電,維持器件的正常工作,這就是通過(guò)網(wǎng)絡(luò)線(xiàn)路“竊取”電能的“寄生電源”的工作原理。另外需要間斷高電平的原因是如果總線(xiàn)保持低電平超過(guò) 480us,總線(xiàn)上的所有器件將復(fù)位。
DS18B20上的寄生電路4. 64 位 ROM ID
主機(jī)通過(guò) 64 全球唯一的 ROM ID 來(lái)識(shí)別掛在總線(xiàn)網(wǎng)絡(luò)上的從機(jī)。
每個(gè)單總線(xiàn)器件都有一個(gè)全球唯一的 64 位 ROM ID,該注冊(cè)碼保證唯一的身份,并用于多節(jié)點(diǎn) 1-Wire 網(wǎng)絡(luò)中的器件尋址,64 位 ROM 注冊(cè)碼不可更改,ROM ID 由出廠(chǎng)激光刻度在單總線(xiàn)器件內(nèi)部。
64 位 ROM ID 組成:前 8 位是 1-WIRE 家族碼,后 48 位是唯一的序列號(hào)、最后 8 位是由前 56 位 ROM 碼所計(jì)算出的 CRC 校驗(yàn)碼。
64位ROM ID組成
5. 優(yōu)缺點(diǎn)
節(jié)省 I/O 口線(xiàn)、資源結(jié)構(gòu)簡(jiǎn)單、成本低廉、便于總線(xiàn)擴(kuò)展和維護(hù)等諸多優(yōu)點(diǎn)。
由于所有設(shè)備部件均掛在單一總線(xiàn)上,使這種結(jié)構(gòu)只能分時(shí)工作,即同一時(shí)刻只能在兩個(gè)設(shè)備之間傳送數(shù)據(jù),這就使系統(tǒng)總體數(shù)據(jù)傳輸?shù)男屎退俣仁艿较拗?,這是單總線(xiàn)結(jié)構(gòu)的主要缺點(diǎn)。
三、單總線(xiàn)的時(shí)序圖
1. 時(shí)序概述
1-Wire 器件需要嚴(yán)格的協(xié)議來(lái)保證數(shù)據(jù)的完整。
- 該協(xié)議由通過(guò)一條線(xiàn)來(lái)傳送的四種信令組成:包括復(fù)位脈沖和在線(xiàn)應(yīng)答脈沖的復(fù)位序列、寫(xiě) 0 時(shí)隙、寫(xiě) 1 時(shí)隙、讀時(shí)隙。
- 除在線(xiàn)應(yīng)答脈沖以外,所有其它信號(hào)都由總線(xiàn)主機(jī)發(fā)出,并且發(fā)送的所有數(shù)據(jù)和命令都是字節(jié)的低位在前。
- 主機(jī)與從機(jī)的數(shù)據(jù)通信是通過(guò)時(shí)隙完成的,在每個(gè)時(shí)隙只能傳送一位數(shù)據(jù)。通過(guò)寫(xiě)時(shí)隙可把數(shù)據(jù)從主機(jī)傳送給從機(jī),通過(guò)讀時(shí)隙可把數(shù)據(jù)由從器件傳送給主機(jī),將完成一位傳輸?shù)臅r(shí)間稱(chēng)為一個(gè)時(shí)隙。
如下給出了時(shí)序的波形圖,在后面實(shí)測(cè)波形會(huì)詳細(xì)介紹時(shí)序要求。
2. 復(fù)位/應(yīng)答
復(fù)位/應(yīng)答脈沖
3. 寫(xiě)時(shí)隙
寫(xiě)1和寫(xiě)0時(shí)隙
4. 讀時(shí)隙
讀1和讀0時(shí)隙
波形定義
四、實(shí)測(cè)分析時(shí)序
1. 復(fù)位/應(yīng)答脈沖
復(fù)位/應(yīng)答脈沖要求:主機(jī)拉低總線(xiàn) 480~960us 來(lái)產(chǎn)生復(fù)位信號(hào),然后釋放總線(xiàn)進(jìn)入接收模式,接著從機(jī)等待 15-60us(上拉電阻上拉至高電平),從機(jī)再拉低總線(xiàn) 60-240us 來(lái)產(chǎn)生應(yīng)答信號(hào),主機(jī)接收到從機(jī)的應(yīng)答信號(hào)后,表明從機(jī)準(zhǔn)備就緒,初始化過(guò)程完成了。
實(shí)測(cè)復(fù)位應(yīng)答信號(hào)
2. 寫(xiě) 0 時(shí)隙
寫(xiě)0時(shí)隙要求:寫(xiě) 0 時(shí)隙起始于主機(jī)拉低總線(xiàn),主機(jī)拉低總線(xiàn)后,只需在整個(gè)時(shí)隙期間保持總線(xiàn)低電平在 60us 以上,一般是 60~120us 之間。
實(shí)測(cè)寫(xiě)0時(shí)隙
3. 寫(xiě) 1 時(shí)隙
寫(xiě)1時(shí)隙要求:寫(xiě) 1 時(shí)隙和寫(xiě) 0 時(shí)隙一樣,起始于主機(jī)拉低總線(xiàn),在拉低總線(xiàn) 15us 之內(nèi)需要將總線(xiàn)拉高,拉高總線(xiàn)需要維持 60us 以上。
實(shí)測(cè)寫(xiě)1時(shí)隙
4. 讀 0 時(shí)隙讀0時(shí)隙要求:讀 0 時(shí)隙由主機(jī)發(fā)起,且至少拉低總線(xiàn) 1us,此時(shí)從機(jī)才開(kāi)始在總線(xiàn)上發(fā)數(shù)據(jù) 0 或者 1;從機(jī)發(fā)送 1,則保持總線(xiàn)為高電平;從機(jī)發(fā)送 0,則拉低總線(xiàn)。當(dāng)發(fā)送 0 時(shí),從機(jī)在該時(shí)隙結(jié)束后釋放總線(xiàn),由上拉電阻拉至空閑的高電平狀態(tài)。從機(jī)發(fā)出的數(shù)據(jù)在起始時(shí)隙之后,保持有效時(shí)間 15us,因而,主機(jī)在讀時(shí)隙期間必須釋放總線(xiàn)并且在時(shí)隙起始后的 15us 之內(nèi)采樣總線(xiàn)。讀 1 時(shí)隙沒(méi)有在本文中沒(méi)有寫(xiě),要求和寫(xiě) 1 時(shí)隙是一致的。
實(shí)測(cè)讀0時(shí)隙
五、DS18B20
1. 硬件結(jié)構(gòu)
DS18B20 是學(xué)習(xí) 51 單片機(jī)中時(shí),最常用的溫感,采用的就是單總線(xiàn)結(jié)構(gòu)。其供電方式有兩種,一種是總線(xiàn)寄生電源,一種是使用外部電源。
需要注意,使用總線(xiàn)寄生電源時(shí),18B20 的 VDD 管腳需要和 GND 接在一起。
DS18B20采用寄生電源
DS18B20采用外部電源
DS18B20內(nèi)部框圖2. C 語(yǔ)言實(shí)現(xiàn)
利用單片機(jī)從DS18B20 獲取溫度。
分四步:初始化(復(fù)位/應(yīng)答)→ 寫(xiě)字節(jié) → 讀字節(jié) → 計(jì)算溫度。
如下是給出的代碼示例。
今天的文章到這里就結(jié)束了。