DS18B20 通過(guò) 單總線(1-Wire)協(xié)議 與微控制器通信,其溫度讀取過(guò)程可分為 初始化、發(fā)送指令、溫度轉(zhuǎn)換、數(shù)據(jù)讀取 等步驟。以下是詳細(xì)的工作原理:
一. 硬件工作原理
- 溫度傳感核心
DS18B20 內(nèi)部包含一個(gè) 高精度溫敏振蕩器,通過(guò)測(cè)量與溫度相關(guān)的脈沖頻率來(lái)量化溫度值。
- 溫度變化 → 晶體振蕩頻率變化 → 計(jì)數(shù)器記錄脈沖數(shù) → 轉(zhuǎn)換為數(shù)字信號(hào)。
- 內(nèi)部結(jié)構(gòu)
- 64位ROM:存儲(chǔ)全球唯一地址(用于多設(shè)備識(shí)別)。
- 溫度傳感器:核心測(cè)量單元。
- 配置寄存器:設(shè)置分辨率(9~12位)。
- 暫存器(Scratchpad):臨時(shí)存儲(chǔ)溫度數(shù)據(jù)和控制參數(shù)。
二. 溫度讀取流程
步驟1:總線初始化(復(fù)位脈沖)
- 微控制器發(fā)送 480~960μs的低電平脈沖,釋放總線后等待DS18B20的 存在脈沖(60~240μs低電平),確認(rèn)設(shè)備在線。
步驟2:發(fā)送ROM指令
- 若總線上有多個(gè)DS18B20,需通過(guò)ROM指令選擇目標(biāo)設(shè)備:
- `0x55`:匹配特定ROM地址(單設(shè)備操作可跳過(guò))。
- `0xCC`:跳過(guò)ROM地址檢測(cè)(適用于單設(shè)備場(chǎng)景)。
步驟3:發(fā)送功能指令
- 啟動(dòng)溫度轉(zhuǎn)換:發(fā)送指令 `0x44`,DS18B20開始測(cè)量溫度。
- 轉(zhuǎn)換時(shí)間取決于分辨率(9位約93ms,12位約750ms)。
- 在此期間,微控制器可輪詢總線狀態(tài)或延時(shí)等待。
步驟4:讀取溫度數(shù)據(jù)
1. 重新初始化總線,發(fā)送 `0xBE` 指令讀取暫存器數(shù)據(jù)。
2. 連續(xù)讀取9字節(jié)(包括溫度值、配置參數(shù)等,通常只需前2字節(jié))。
3. 溫度數(shù)據(jù)以 16位二進(jìn)制補(bǔ)碼 格式存儲(chǔ),需轉(zhuǎn)換為實(shí)際溫度值。
三. 數(shù)據(jù)格式與溫度計(jì)算
- 示例:若讀取的16位數(shù)據(jù)為 `0x0191`(二進(jìn)制 `0000 0001 1001 0001`):
- 高字節(jié) `0000 0001` → 正溫度(最高位為0)。
- 低字節(jié) `1001 0001` → 小數(shù)部分。
- 計(jì)算:
- 整數(shù)部分:`0000 0001` → 1 × 16 = 16(高4位為整數(shù)高位)。
- 小數(shù)部分:`0001` → 1 × 0.0625 = 0.0625(低4位為小數(shù),12位分辨率時(shí)每單位0.0625°C)。
- 實(shí)際溫度:16 + 0.0625 = 16.0625°C。
- 負(fù)溫度處理:
若高字節(jié)最高位為1(如 `0xFF8F`),需取補(bǔ)碼后計(jì)算:
```c
temp = (讀取值 & 0xFFF8) * (-1) + (16 - (讀取值 & 0x000F) * 0.0625);
```
四. 關(guān)鍵時(shí)序與信號(hào)
- 單總線協(xié)議時(shí)序:
- 寫“0”:保持低電平 >60μs。
- 寫“1”:拉低總線1μs后釋放。
- 讀數(shù)據(jù):微控制器拉低總線1μs后采樣。
- 寄生供電模式注意事項(xiàng):
- 溫度轉(zhuǎn)換期間需通過(guò) 強(qiáng)上拉電阻 保持總線高電平供電,否則可能導(dǎo)致轉(zhuǎn)換失敗。
五. 常見問題與解決
1. 讀取值為85°C
- 原因:未等待溫度轉(zhuǎn)換完成或初始化失敗。
- 解決:增加延時(shí)(如 `delay(750)`)或檢查總線連接。
2. 數(shù)據(jù)不穩(wěn)定
- 原因:總線干擾或電源不穩(wěn)。
- 解決:縮短導(dǎo)線長(zhǎng)度,增加濾波電容(0.1μF靠近DS18B20的VDD和GND)。
3. 多設(shè)備沖突
- 原因:未正確匹配ROM地址。
- 解決:遍歷總線設(shè)備并單獨(dú)操作(使用 `search()` 函數(shù)獲取ROM地址)。
通過(guò)理解上述原理,可更高效地集成DS18B20到項(xiàng)目中,避免常見時(shí)序和硬件設(shè)計(jì)錯(cuò)誤。