成人免费无码不卡毛片,亚洲AⅤ无码精品一区二区三区,国产尤物精品视频,久久精品日本亚洲,欧美成人一区三区无码乱码A片,中文字日产幕码一区二区色哟哟,亞洲日韓中文字幕網AV

  • 方案介紹
  • 附件下載
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

DS18B20溫度傳感器完整使用介紹(配合51單片機)

06/05 08:57
608
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

更多詳細資料請聯(lián)系.docx

共1個文件

DS18B20是一款由Maxim Integrated(原Dallas Semiconductor)生產(chǎn)的數(shù)字溫度傳感器,以其高精度、低功耗、靈活的接口方式和易于使用的特性,在各種溫度監(jiān)測應(yīng)用中被廣泛采用。

以下是DS18B20的詳細介紹:

基本特性

  1. 數(shù)字輸出:DS18B20直接輸出數(shù)字信號,與傳統(tǒng)的模擬溫度傳感器相比,它簡化了與微控制器的接口設(shè)計,減少了對模數(shù)轉(zhuǎn)換器ADC)的需求。
  2. 單總線接口:采用獨特的單線(1-Wire)通信協(xié)議,僅需一根數(shù)據(jù)線即可完成與微控制器的雙向通信,降低了硬件成本和復(fù)雜度。此外,多個DS18B20可以通過這條單線總線連接在一起,每個傳感器都有一個唯一的64位序列號,使得系統(tǒng)能夠識別并單獨尋址每個傳感器。
  3. 溫度測量范圍:DS18B20的測量范圍廣泛,從-55°C到+125°C(-67°F至+257°F),滿足了大多數(shù)常規(guī)溫度測量需求。
  4. 高精度與分辨率:在-10°C到+85°C范圍內(nèi),其精度通常可達到±0.5°C;分辨率可在9位至12位之間調(diào)節(jié),默認為12位,對應(yīng)分辨率最高達0.0625°C。
  5. 低功耗:工作電壓范圍為3V至5.5V,靜態(tài)電流極低,非常適合電池供電的應(yīng)用。
  6. 多功能性:DS18B20支持多種工作模式,包括溫度轉(zhuǎn)換模式、讀取溫度模式、配置模式等,用戶可以根據(jù)需要設(shè)置不同的工作參數(shù)。
  7. 封裝形式多樣:DS18B20提供了多種封裝形式,如TO-92、SOP8、DIP8等,適應(yīng)不同的安裝需求,包括管道式、螺紋式、磁鐵吸附式、不銹鋼封裝式等,適用于各種惡劣或狹小環(huán)境的溫度測量。

應(yīng)用場景

DS18B20因其靈活性和可靠性,被廣泛應(yīng)用于多種領(lǐng)域,包括但不限于:

  • 家用電器(如冰箱、空調(diào)溫度監(jiān)控)
  • 工業(yè)自動化(如設(shè)備溫度監(jiān)控、環(huán)境溫度控制)
  • 農(nóng)業(yè)(如溫室大棚溫度管理)
  • 數(shù)據(jù)中心服務(wù)器機房的溫度監(jiān)測
  • 汽車電子(發(fā)動機溫度監(jiān)控)
  • 醫(yī)療設(shè)備溫度監(jiān)控
  • 水族箱和養(yǎng)魚場的水溫控制

使用方法

使用DS18B20通常需要遵循一定的通信協(xié)議,包括初始化、搜索傳感器、讀取或設(shè)置寄存器等步驟。在編程時,開發(fā)者需編寫相應(yīng)的代碼來控制單總線的時序,或者利用已有的庫函數(shù)(如ArduinoRaspberry Pi等平臺上的庫)來簡化操作。通過簡單的函數(shù)調(diào)用,即可讀取到當(dāng)前的溫度值。

原理圖

image-20240531153702317

image-20240531153622926image-20240531153636304

實驗板上的DS18B20模塊接在單片機的P3.7 IO口上,在插入DS18B20芯片時,圓弧朝上插入,具體效果可以看上面圖片。

DS18B20的工作原理介紹

DS18B20的溫度檢測與數(shù)字數(shù)據(jù)輸出全集成于一個芯片之上,從而抗干擾力更強。

它的一個工作周期可分為兩個部分,溫度檢測和數(shù)據(jù)處理。

DS18B20內(nèi)部有三種形態(tài)的存儲器

(1) ROM只讀存儲器:用于存放 DS18B20ID 編碼,其前 8 位是單線系列編碼(DS18B20 的編碼是19H),后面 48 位是芯片唯一的序列號,最后8位是以上56的位的 CRC 碼(冗余校驗),數(shù)據(jù)在芯片出廠時設(shè)置不可由用戶更改。DS18B20 共 64 位 ROM(8+48+8)。

(2) RAM數(shù)據(jù)暫存器:用于內(nèi)部計算和數(shù)據(jù)存取,數(shù)據(jù)在掉電后丟失,DS18B20 共 9 個字節(jié) RAM,每個字節(jié)為 8 位。第 1、 2 個字節(jié)是溫度轉(zhuǎn)換后的數(shù)據(jù)值信息,第 3、 4 個字節(jié)是用戶 EEPROM(常用于溫度報警值儲存)的鏡像。在上電復(fù)位時其值將被刷新。第 5 個字節(jié)則是用戶第 3 個 EEPROM的鏡像。第 6、 7、 8 個字節(jié)為計數(shù)寄存器,是為了讓用戶得到更高的溫度分辨率而設(shè)計的,同樣也是內(nèi)部溫度轉(zhuǎn)換、計算的暫存單元。第 9 個字節(jié)為前 8 個字節(jié)的 CRC 碼。

(3) EEPROM非易失性記憶體:用于存放長期需要保存的數(shù)據(jù)。比如: 上下限溫度報警值和校驗數(shù)據(jù),DS18B20共有3個字節(jié)的EEPROM,并在 RAM 都存在鏡像,以方便用戶操作。

DS18B20默認工作在12位分辨率模式,轉(zhuǎn)換后得到的12位數(shù)據(jù),存儲在DS18B20的兩個8比特的RAM中(最前面的兩個字節(jié)),二進制中的前面5位是符號位,如果測得的溫度大于0,這5位為0,只要將測到的數(shù)值乘于0.0625即可得到實際溫度;如果溫度小于0,這5位為1,測到的數(shù)值需要取反加1再乘于0.0625即可得到實際溫度。

數(shù)據(jù)提取也可以使用位運算,讀取出來的數(shù)據(jù)是2個字節(jié)一共16位(H和L),最低4位是小數(shù)位,剩下的是整數(shù)位。如果讀取的數(shù)據(jù)是負數(shù),需要-1再取反即可得到真實數(shù)據(jù)。

例如:

int temp=0;
temp=DS18B20_ReadTemp(); //讀取一次DS18B20采集的溫度(返回H+L位)
if(temp<0) //如果溫度是負數(shù)
{
    temp=temp-1;
    temp=~temp;
    printf("DS18b20=-%d.%drn",temp>>4,temp&0xF);
}
else
{
printf("DS18b20=%d.%drn",temp>>4,temp&0xF);
}

讀取DS18B20溫度示例代碼(單只DS18B20情景)

下面代碼演示了循環(huán)讀取DS18B20溫度的過程,在主函數(shù)里1秒的間隔讀取一次溫度。

在編寫DS18B20時序代碼時,要注意時間的把控。

當(dāng)前實驗板的環(huán)境:采用STC90C516RD單片機,晶振是12MHZ,工作在12T模式下,代碼中執(zhí)行一條i++語句大概消耗的時間是12us。 程序中的延時時間,都是通過該時間推算的,如果程序要移植到其他單片機上,要注意時間的問題。

(硬件平臺說明:CPU是STC90C516RD、晶振頻率12MHZ 、工作在12T模式下、一個機器周期為1us時間)

示例代碼:

#include <reg51.h>
/*DS18B20硬件接口: P3.7*/
sbit DS18B20_GPIO=P3^7;
int DS18B20_ReadTemp(void);
/*
說明: 在12MHZ晶振下,12T模式下,i++消耗的時間差不多是12us
*/
/*
函數(shù)名稱:u8 DS18B20_Init(void)
函數(shù)功能:向DS18B20發(fā)送復(fù)位脈沖,并檢測應(yīng)答信號
返 回 值:1表示失敗,0表示成功
說明: 51單片機IO口默認輸出高電平
*/
u8 DS18B20_ResetSignal(void)
{
    u8 i=0;
    //1. 發(fā)送復(fù)位信號
    DS18B20_GPIO=0;//將總線拉低480us
    i=50;   
    while(i--){}   //延時600us ,最少480us
    i=0;
    DS18B20_GPIO=1;//然后釋放(拉高)總線,如果DS18B20做出反應(yīng)會將在15us~60us后總線拉低
    //2. 等待DS18B20拉低總線
    while(DS18B20_GPIO)
    {
        i++;
        if(i>10)return 1;//失敗 ,大概120us
    }
    //3. 等待DS18B20釋放總線
    i=0;
    while(DS18B20_GPIO==0) //60us~240us
    {
        i++;
        if(i>20)return 1;//失敗,大概240us
    }
    return 0;//初始化成功
}
/*
函數(shù)名稱:u8 DS18B20_WriteByte(void)
函數(shù)功能:向DS18B20寫入一個字節(jié)的數(shù)據(jù)
函數(shù)形參:寫入的字節(jié)數(shù)據(jù)
*/
void DS18B20_WriteByte(u8 byte)
{
    u16 i=0,j=0;
    for(j=0;j<8;j++)
    {
        DS18B20_GPIO=0;//每寫入一位數(shù)據(jù)之前先把總線拉低1us
        i++; //+1消耗的時間是12us
        DS18B20_GPIO=byte&0x01;//然后寫入一個數(shù)據(jù),從最低位開始
        i=6;
        while(i--){}//持續(xù)時間最少60us,這里大概72us
        DS18B20_GPIO=1;//然后釋放總線
        byte>>=1;//繼續(xù)發(fā)送
    }
}
/*
函數(shù)名稱:u8 DS18B20_ReadByte(void)
函數(shù)功能:從DS18B20讀取一個字節(jié)的數(shù)據(jù)
返 回 值:讀到的數(shù)據(jù)
*/
u8 DS18B20_ReadByte(void)
{
    u8 byte=0;
    u16 i=0,j=0;    
    for(j=0;j<8;j++)
    {
        DS18B20_GPIO=0;//先將總線拉低1us
        i++;//+1消耗的時間是12us
        DS18B20_GPIO=1;//然后釋放總線
        i++; 
        i++;//至少等待15us的時間,在讀取數(shù)據(jù)
        byte>>=1; //先從低位開始接收數(shù)據(jù)
        if(DS18B20_GPIO)byte|=0x80;                   
        i=4; //讀取完之后等待48us再接著讀取下一個數(shù)據(jù)
        while(i--){}
    }               
    return byte;
}
/*
函數(shù)名稱:u16 DS18B20_ReadTemp(void)
函數(shù)功能:讀取一次DS18B20的溫度數(shù)據(jù)
返 回 值:讀取的溫度值
注意: 返回值要使用有符號的數(shù)據(jù)類型,因為溫度可以返回負數(shù)。
*/
int DS18B20_ReadTemp(void)
{
    int temp=0;//存放溫度數(shù)據(jù)
    u8 TH,TL;
    //第一步: 啟動溫度轉(zhuǎn)換
    DS18B20_ResetSignal(); //發(fā)送復(fù)位脈沖并檢測應(yīng)答信號
    DS18B20_WriteByte(0xcc);//跳過ROM操作命令      
    DS18B20_WriteByte(0x44);//溫度轉(zhuǎn)換命令
    
    //第二步: 讀取溫度
    DS18B20_ResetSignal();//發(fā)送復(fù)位脈沖并檢測應(yīng)答信號
    DS18B20_WriteByte(0xcc);//跳過ROM操作命令
    DS18B20_WriteByte(0xbe);//發(fā)送讀取溫度命令
    TL=DS18B20_ReadByte();//讀取溫度值共16位,先讀低字節(jié)
    TH=DS18B20_ReadByte();//再讀高字節(jié)
    temp=TH<<8|TL; //合并成16位
    return temp;
}
int main()
{
    int temp=0;
    UART_Init();        //初始化串口波特率為4800
    while(1)
    {
        temp=DS18B20_ReadTemp();
        if(temp<0) //如果溫度是負數(shù)
        {
            temp=temp-1;
            temp=~temp;
            printf("DS18b20=-%d.%drn",temp>>4,temp&0xF);
        }
        else
        {
            printf("DS18b20=%d.%drn",temp>>4,temp&0xF);
        }
        DelayMs(1000);
}
}
  • 更多詳細資料請聯(lián)系.docx
    下載

相關(guān)推薦