国产成人永久免费视频网站-国产精品线在线精品-av一本久道久久波多野结衣-国产成人片无码视频在线观看-99亚洲精品卡2卡三卡4卡2卡

當(dāng)前位置: 首頁 > 產(chǎn)品大全 > 基于DS18B20的測溫實(shí)驗(yàn) 原理、實(shí)現(xiàn)與通信線路詳解

基于DS18B20的測溫實(shí)驗(yàn) 原理、實(shí)現(xiàn)與通信線路詳解

基于DS18B20的測溫實(shí)驗(yàn) 原理、實(shí)現(xiàn)與通信線路詳解

引言

DS18B20是一款由美國DALLAS公司生產(chǎn)的單總線數(shù)字溫度傳感器,以其高精度、微型封裝和獨(dú)特的單總線通信協(xié)議而著稱。它無需外部元件,可直接將溫度值轉(zhuǎn)換為數(shù)字信號,通過一條通信線路與微控制器(如Arduino、STM32等)進(jìn)行數(shù)據(jù)交換,極大地簡化了測溫系統(tǒng)的硬件設(shè)計(jì)與布線。本文旨在詳細(xì)闡述基于DS18B20的測溫實(shí)驗(yàn)工作原理、具體實(shí)現(xiàn)步驟,并深入剖析其核心的通信線路機(jī)制。

一、實(shí)驗(yàn)原理

1. 核心特性

DS18B20的核心是一個經(jīng)過激光修正的硅溫度傳感器和數(shù)字轉(zhuǎn)換模塊。其關(guān)鍵特性包括:

  • 高精度:典型精度為±0.5°C(在-10°C至+85°C范圍內(nèi))。
  • 數(shù)字輸出:直接輸出9至12位的二進(jìn)制溫度數(shù)據(jù),無需A/D轉(zhuǎn)換。
  • 單總線接口:僅需一條數(shù)據(jù)線(DQ)即可完成電源供給和數(shù)據(jù)通信,支持“寄生電源”模式(從數(shù)據(jù)線“竊取”電源)和外部供電模式。
  • 多點(diǎn)組網(wǎng)能力:每個DS18B20都有唯一的64位激光ROM序列號,允許在同一條總線上掛載多個傳感器,實(shí)現(xiàn)多點(diǎn)測溫。

2. 測溫與轉(zhuǎn)換原理

傳感器內(nèi)部的核心是一個對溫度高度敏感的振蕩器,其頻率隨溫度變化。通過一個低溫系數(shù)振蕩器產(chǎn)生的固定頻率脈沖作為基準(zhǔn),對溫度敏感振蕩器的脈沖進(jìn)行計(jì)數(shù),從而將溫度信息轉(zhuǎn)換為數(shù)字值,并存儲在內(nèi)部的溫度寄存器中。轉(zhuǎn)換分辨率可通過配置寄存器設(shè)定(9、10、11或12位),分辨率越高,轉(zhuǎn)換時(shí)間越長。

二、通信線路詳解

通信線路是DS18B20實(shí)驗(yàn)實(shí)現(xiàn)的關(guān)鍵,特指連接微控制器與DS18B20的單總線(1-Wire Bus)。

1. 物理連接

  • 基本電路:DS18B20的DQ引腳(數(shù)據(jù)輸入/輸出)通過一個4.7kΩ的上拉電阻連接到微控制器的某個I/O引腳(如GPIO)和電源VCC(通常為3.3V或5V)。VDD引腳在外部供電模式下接VCC,在寄生電源模式下接地。GND引腳接地。
  • 上拉電阻的作用:單總線協(xié)議是開漏輸出,需要上拉電阻將總線在空閑時(shí)保持在高電平狀態(tài),并為總線提供驅(qū)動能力。
  • 多點(diǎn)組網(wǎng)連接:所有DS18B20的DQ引腳并聯(lián)接至同一條總線上,VCC和GND并聯(lián)。微控制器通過識別每個器件的唯一ROM序列號來分別訪問。

2. 單總線通信協(xié)議

單總線協(xié)議通過精確的時(shí)序來完成數(shù)據(jù)讀寫,所有操作均以微控制器作為主機(jī)(Master),DS18B20作為從機(jī)(Slave)。一次完整的溫度數(shù)據(jù)獲取流程通常包括以下序列:

  1. 初始化(復(fù)位脈沖 + 存在脈沖):主機(jī)拉低總線至少480μs,然后釋放(進(jìn)入接收模式)。DS18B20在檢測到上升沿后,等待15-60μs,然后拉低總線60-240μs作為“存在脈沖”,向主機(jī)表明其在線。
  2. ROM命令(如搜索ROM、匹配ROM):主機(jī)發(fā)送命令,用于在多點(diǎn)系統(tǒng)中尋址特定的DS18B20。對于單點(diǎn)系統(tǒng),通常使用“跳過ROM”命令(0xCC)來忽略地址匹配,直接與總線上的唯一器件通信。
  3. 功能命令:最重要的功能命令是啟動溫度轉(zhuǎn)換(0x44)和讀取暫存器(0xBE)。發(fā)送啟動轉(zhuǎn)換命令后,DS18B20開始進(jìn)行A/D轉(zhuǎn)換,在此期間主機(jī)可以釋放總線執(zhí)行其他任務(wù)(通過“讀時(shí)隙”查詢轉(zhuǎn)換完成狀態(tài),或等待固定的轉(zhuǎn)換時(shí)間,如12位分辨率時(shí)需750ms)。
  4. 數(shù)據(jù)讀寫:所有數(shù)據(jù)以字節(jié)為單位,LSB(最低有效位)在先。每個“時(shí)隙”傳輸1位數(shù)據(jù)。主機(jī)通過控制拉低總線的時(shí)間長短來區(qū)分寫“0”(拉低60-120μs)、寫“1”(拉低1-15μs后釋放)或讀數(shù)據(jù)(主機(jī)拉低總線至少1μs后釋放,然后在15μs內(nèi)采樣總線電平,低電平為0,高電平為1)。

三、實(shí)驗(yàn)實(shí)現(xiàn)步驟(以Arduino為例)

1. 硬件連接

  • DS18B20的VDD引腳接Arduino的5V引腳。
  • GND引腳接Arduino的GND引腳。
  • DQ引腳接Arduino的數(shù)字引腳(如Pin 2),并通過一個4.7kΩ電阻上拉到5V。

2. 軟件實(shí)現(xiàn)

1. 庫支持:在Arduino IDE中安裝OneWireDallasTemperature庫,它們封裝了復(fù)雜的單總線協(xié)議時(shí)序。
2. 代碼流程
`cpp
#include

#include

#define ONEWIREBUS 2 // 數(shù)據(jù)線連接引腳

OneWire oneWire(ONEWIREBUS); // 初始化OneWire實(shí)例
DallasTemperature sensors(&oneWire); // 將OneWire實(shí)例傳遞給DallasTemperature

void setup() {
Serial.begin(9600);
sensors.begin(); // 啟動傳感器總線
}

void loop() {
sensors.requestTemperatures(); // 發(fā)送轉(zhuǎn)換命令(廣播,無需地址)
float tempC = sensors.getTempCByIndex(0); // 讀取索引0(第一個)傳感器的攝氏溫度值
Serial.print("Temperature: ");
Serial.print(tempC);
Serial.println(" °C");
delay(1000); // 延時(shí)1秒
}
`

  1. 工作過程sensors.requestTemperatures()函數(shù)內(nèi)部完成了初始化、跳過ROM、發(fā)送啟動轉(zhuǎn)換命令(0x44)并等待轉(zhuǎn)換完成。sensors.getTempCByIndex(0)函數(shù)則再次初始化、跳過ROM、發(fā)送讀暫存器命令(0xBE),并從總線讀取9字節(jié)數(shù)據(jù)(包含2字節(jié)的溫度值),將其轉(zhuǎn)換為浮點(diǎn)數(shù)。

四、與注意事項(xiàng)

基于DS18B20的測溫實(shí)驗(yàn)成功地將高精度測溫與極簡的硬件設(shè)計(jì)相結(jié)合。其實(shí)驗(yàn)的核心在于理解并正確實(shí)現(xiàn)單總線通信協(xié)議。在實(shí)現(xiàn)過程中需注意:

  1. 上拉電阻必不可少,否則總線無法被正確拉高,通信會失敗。
  2. 時(shí)序要求嚴(yán)格,尤其是當(dāng)不使用現(xiàn)成庫而直接操作GPIO時(shí),必須嚴(yán)格按照數(shù)據(jù)手冊的時(shí)序圖編寫代碼,并考慮微控制器指令執(zhí)行時(shí)間的影響。
  3. 總線長度限制,單總線長度一般不宜超過100米,在干擾較強(qiáng)的環(huán)境中應(yīng)適當(dāng)縮短,并考慮使用屏蔽線。
  4. 電源模式選擇,寄生電源模式布線更簡單,但在進(jìn)行溫度轉(zhuǎn)換和EEPROM寫入時(shí),總線必須保持強(qiáng)上拉(提供足夠電流),否則可能出錯。外部供電模式更穩(wěn)定可靠。

通過掌握其通信原理,開發(fā)者可以靈活地將DS18B20應(yīng)用于各種嵌入式測溫場景,從簡單的環(huán)境監(jiān)測到復(fù)雜的工業(yè)多點(diǎn)測溫系統(tǒng)。

如若轉(zhuǎn)載,請注明出處:http://m.ycutop.com/product/64.html

更新時(shí)間:2026-05-02 13:04:00

主站蜘蛛池模板: 万宁市| 阜阳市| 鹤岗市| 朝阳市| 沂源县| 锡林浩特市| 莆田市| 五峰| 荆门市| 涿州市| 南阳市| 沧源| 都昌县| 伽师县| 邳州市| 大港区| 华亭县| 永仁县| 青川县| 齐齐哈尔市| 天津市| 南安市| 始兴县| 来宾市| 资中县| 巫溪县| 普定县| 宜君县| 祥云县| 德钦县| 大方县| 兴业县| 江北区| 炎陵县| 罗山县| 浦城县| 图们市| 河津市| 乌鲁木齐市| 页游| 天水市|