精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于DS18B20的多點測溫方案詳解

CHANBAEK ? 來源:redeemer奇 ? 作者:redeemer奇 ? 2023-09-15 16:23 ? 次閱讀

1、DS18B20多點測溫方案概述

DS18B20 單線數字溫度傳感器,多個 DS18B20 可以并聯在惟一的單線上,實現多點測溫。具體方案主要是以下步驟:

  1. 寫一個獲取DS18B20的64位序列號的keil工程,獲取需要連接的DS18B20器件的序列號。
uint8_t rom[8];
void read_rom(void)
{
    uint8_t index;

    ds18b20_init();
    ds18b20_write_byte(0x33);

    for (index = 0;index < 8;index++)
    {
        rom[index] = ds18b20_read_byte();
    }
}
  1. 將獲取到的DS18B20器件的序列號通過數組保存起來,再新建一個獲取多點溫度的keil工程,發送匹配64位序列號,獲取溫度即可。
uint8_t rom1[8]={0x28,0x0B,0xAC,0x79,0x97,0x16,0x03,0x39};
uint8_t rom2[8]={0x28,0xF2,0x80,0x79,0x97,0x15,0x03,0x51};
uint8_t rom3[8]={0x28,0xFF,0x64,0x79,0x97,0x16,0x03,0x8B};
uint8_t rom4[8]={0x28,0x6F,0x31,0x79,0x97,0x15,0x03,0x28};
uint8_t rom5[8]={0x28,0x1C,0x5C,0x79,0x97,0x15,0x03,0x14};
uint8_t rom6[8]={0x28,0xED,0xD8,0x79,0x97,0x16,0x03,0xD0};
uint8_t rom7[8]={0x28,0x94,0xB0,0x79,0x97,0x15,0x03,0xA4};
uint8_t rom8[8]={0x28,0xAE,0xD5,0x79,0x97,0x16,0x03,0x10};
uint8_t rom9[8]={0x28,0xC0,0xC2,0x79,0x97,0x16,0x03,0xED};

void DS18B20_Matrom(unsigned char a) 
{
    unsigned char j;  //用于循環
    ds18b20_init();
    ds18b20_write_byte(0x55);    //發送匹配ROM命令
    if(a==1)
    {
        for(j=0;j< 8;j++)
        {
             ds18b20_write_byte(rom1[j]);//發送18B20的序列號,先發送低字節
        }
    }

    if(a==2)
    {
        for(j=0;j< 8;j++)
        {
             ds18b20_write_byte(rom2[j]);//發送18B20的序列號,先發送低字節
        }
    }

    if(a==3)
    {
        for(j=0;j< 8;j++)
        {
             ds18b20_write_byte(rom3[j]);//發送18B20的序列號,先發送低字節
        }
    }

    if(a==4)
    {
        for(j=0;j< 8;j++)
        {
             ds18b20_write_byte(rom4[j]);//發送18B20的序列號,先發送低字節
        }
    }

    if(a==5)
    {
        for(j=0;j< 8;j++)
        {
             ds18b20_write_byte(rom5[j]);//發送18B20的序列號,先發送低字節
        }
    }

    if(a==6)
    {
        for(j=0;j< 8;j++)
        {
             ds18b20_write_byte(rom6[j]);//發送18B20的序列號,先發送低字節
        }
    }

    if(a==7)
    {
        for(j=0;j< 8;j++)
        {
             ds18b20_write_byte(rom7[j]);//發送18B20的序列號,先發送低字節
        }
    }

    if(a==8)
    {
        for(j=0;j< 8;j++)
        {
             ds18b20_write_byte(rom8[j]);//發送18B20的序列號,先發送低字節
        }
    }
    if(a==9)
    {
        for(j=0;j< 8;j++)
        {
             ds18b20_write_byte(rom9[j]);//發送18B20的序列號,先發送低字節
        }
    }
}

int16_t read_temp(uint8_t rom)      //啟動溫度轉換,讀取溫度
{
    u8 tl=0,th=0;
    if(ds18b20_init())
        return 0x7fff;
    ds18b20_write_byte(0xCC);
    ds18b20_write_byte(0x44);//啟動DS18B20進行溫度轉換

    DS18B20_Matrom(rom);//匹配RAM,適用多個點的情況

    ds18b20_write_byte(0xBE);//讀DS18B20內部RAM中9字節的溫度數據
    tl=ds18b20_read_byte();//讀低8位
    th=ds18b20_read_byte();//讀高8位
    return (th< 8)+tl;
}

float get_ntemp(uint8_t rom)
{
    float   temp=0;
    temp = read_temp(rom);
    temp = temp*0.0625;

    return temp;
}

2、DS18B20簡介

2.1、DS18B20特點

  1. 采用單總線的接口方式
  2. 測量溫度范圍寬,測量精度高 DS18B20 的測量范圍為 -55 ℃ + 125 ℃ ; 在 -10 +85°C范圍內,精度為 ± 0.5°C 。
  3. 供電方式靈活 DS18B20可以通過內部寄生電路從數據線上獲取電源。因此,當數據線上的時序滿足一定的要求時,可以不接外部電源,從而使系統結構更趨簡單,可靠性更高。
  4. 測量參數可配置 DS18B20 的測量分辨率可通過程序設定 9~12 位。
  5. 負壓特性電源極性接反時,溫度計不會因發熱而燒毀,但不能正常工作。
  6. 掉電保護功能 DS18B20 內部含有 EEPROM,在系統掉電以后,它仍可保存分辨率及報警溫度的設定值。
  7. DS18B20具有體積更小、適用電壓更寬、更經濟、可選更小的封裝方式,更寬的電壓適用范圍,適合于構建自己的經濟的測溫系統,因此也就被設計者們所青睞。

2.2、總線掛接多個DS18B20的具體原因

DS18B20主要由4部分組成:

  1. 64 位ROM
  2. 溫度傳感器
  3. 非揮發的溫度報警觸發器TH和TL
  4. 配置寄存器

ROM中的64位序列號是出廠前被光刻好的,它可以看作是該DS18B20的地址序列碼,每個DS18B20的64位序列號均不相同。64位ROM的排的循環冗余校驗碼(CRC=X^8+X^5+X^4+1)。

圖片
ROM

ROM的作用是使每一個DS18B20都各不相同,這樣就可以實現一根總線上掛接多個DS18B20的目的。

2.3、多個DS18B20的供電方式

在DS18B20溫度轉換期間通過寄生電源供電

圖片
寄生電源供電

用外部電源對DS18B20供電
圖片
外部電源供電

3、DS18B20工作時序詳解

主要以下四個方面:

  1. 初始化時序
  2. 寫時序
  3. 讀時序
  4. 獲取溫度

詳細解析如下。

3.1、初始化時序

圖片
初始化時序

主機首先發出一個480-960微秒的低電平脈沖,然后釋放總線變為高電平,并在隨后的480微秒時間內對總線進行檢測,如果有低電平出現說明總線上有器件已做出應答。若無低電平出現一直都是高電平說明總線上無器件應答。

uint8_t ds18b20_init(void)
{
    uint8_t ack=1;
    DS18B20_DQ_OUT();
    DQ_L();
    delay_us(500);
    DQ_H();
    delay_us(60);
    DS18B20_DQ_IN();
    ack=DQ_Read();
    delay_us(180);
    DQ_H();
    return ack;
}

做為從器件的DS18B20在一上電后就一直在檢測總線上是否有480-960微秒的低電平出現,如果有,在總線轉為高電平后等待15-60微秒后將總線電平拉低60-240微秒做出響應存在脈沖,告訴主機本器件已做好準備。若沒有檢測到就一直在檢測等待。

3.2、讀/寫時序

圖片
讀寫時序

寫周期最少為60微秒,最長不超過120微秒。寫周期一開始做為主機先把總線拉低1微秒表示寫周期開始。隨后若主機想寫0,則繼續拉低電平最少60微秒直至寫周期結束,然后釋放總線為高電平。若主機想寫1,在一開始拉低總線電平1微秒后就釋放總線為高電平,一直到寫周期結束。而做為從機的DS18B20則在檢測到總線被拉底后等待15微秒然后從15us到45us開始對總線采樣,在采樣期內總線為高電平則為1,若采樣期內總線為低電平則為0。

static void ds18b20_write_byte(uint8_t byte)
{
    uint8_t i;
    DS18B20_DQ_OUT();
    for(i=0 ; i< 8 ; i++)
    {
        if (byte&0x01) 
        {
                DQ_L();// Write 1
                delay_us(2);                            
                DQ_H();
                delay_us(60);             
        }
        else 
        {
                DQ_L();// Write 0
                delay_us(60);             
                DQ_H();
                delay_us(2);                          
        }
        byte=byte >>1;
    }
}

對于讀數據操作時序也分為讀0時序和讀1時序兩個過程。讀時隙是從主機把單總線拉低之后,在1微秒之后就得釋放單總線為高電平,以讓DS18B20把數據傳輸到單總線上。DS18B20在檢測到總線被拉低1微秒后,便開始送出數據,若是要送出0就把總線拉為低電平直到讀周期結束。若要送出1則釋放總線為高電平。主機在一開始拉低總線1微秒后釋放總線,然后在包括前面的拉低總線電平1微秒在內的15微秒時間內完成對總線進行采樣檢測,采樣期內總線為低電平則確認為0。采樣期內總線為高電平則確認為1。完成一個讀時序過程,至少需要60us才能完成

static uint8_t ds18b20_read_byte()
{
    uint8_t i;
    uint8_t byte;                //byte為要接收到的數據
    for(i=0 ; i< 8 ; i++)
    {
        DS18B20_DQ_OUT();
        DQ_L(); 
        delay_us(2);
        DQ_H();
        DS18B20_DQ_IN();
        delay_us(12);
        byte > >= 1;    
        if(DQ_Read())
            byte |= 0x80;
        delay_us(50);           

    }
    return byte;
}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 傳感器
    +關注

    關注

    2548

    文章

    50740

    瀏覽量

    752138
  • DS18B20
    +關注

    關注

    10

    文章

    778

    瀏覽量

    80716
  • 數字溫度傳感器

    關注

    0

    文章

    184

    瀏覽量

    15444
  • 多點測溫
    +關注

    關注

    0

    文章

    7

    瀏覽量

    6315
收藏 人收藏

    評論

    相關推薦

    基于DS18B20和LabVIEW的多點溫度測量系統

    今天我們一起完成一個比較完整的作品,基于DS18B20和LabVIEW的多點溫度測量系統。我重點介紹實現多點DS18B20溫度驅動模塊的思路,具體實現大家可以閱讀源碼。驅動源碼參考了不
    發表于 09-26 10:28 ?1731次閱讀

    DS18B20測溫系統設計

    誰那有DS18B20測溫系統設計幫忙發過來吧,時間緊迫,老師催著交,最好有原理圖和仿真的原件
    發表于 12-04 13:14

    我用PROTUS仿真ds18b20多點測溫,但是LCD1602沒有顯示,是怎么回事啊?

    我用PROTUS仿真ds18b20多點測溫,但是LCD1602沒有顯示,是怎么回事啊?程序在附件里面,大神幫幫忙
    發表于 06-14 11:06

    DS18B20實現多點測溫

    本帖最后由 小白鼠5509 于 2016-7-31 21:34 編輯 用DS18B20實現串口多點測溫,讀出溫度傳感器的序列碼!大概的要求如下!求大神發一下電路原理圖,和protues的仿真程序!謝謝啦!大概一樣就行
    發表于 07-31 21:30

    DS18B20多點測溫方法探討

    摘要:多點測溫廣泛應用于工業自動化控制、農業生產溫度測量等領域。本文介紹了智能集成數字溫度傳感器DS18B20 的特點和工作原理,對基于DS18B20
    發表于 11-02 16:10

    DS18B20的特點是什么

    范圍為 -55 ℃ ~+ 125 ℃ ; 在 -10~+ 85°C 范圍內,精度為 ± 0.5°C 。(3)持多點組網功能 多個 DS18B20 可以并聯在惟一的單線上,實現多點測溫
    發表于 01-10 06:25

    一種新型多點測溫系統的設計(基于DS18B20設計的多點測溫

    一種新型多點測溫系統的設計(基于DS18B20設計的多點測溫系統) 介紹DS18B20的基本特
    發表于 10-15 23:50 ?1975次閱讀
    一種新型<b class='flag-5'>多點</b><b class='flag-5'>測溫</b>系統的設計(基于<b class='flag-5'>DS18B20</b>設計的<b class='flag-5'>多點</b><b class='flag-5'>測溫</b>

    基于DS18B20測溫系統設計

    針對單線總線數字溫度傳感器 DS18B20 的工作特性,本文對基于DS18B20測溫系統進行了硬件和軟件的設計。仿真實驗結果表明,該測溫系統具有電路結構簡單,測試精度高的優點,適用于
    發表于 07-22 16:13 ?552次下載
    基于<b class='flag-5'>DS18B20</b><b class='flag-5'>測溫</b>系統設計

    DS18B20原理圖

    DS18B20溫度傳感器原理圖,電路圖詳解
    發表于 05-11 13:49 ?55次下載

    DS18B20構成測溫系統

    學習單片機電路圖的很好的資料——DS18B20 構成測溫系統
    發表于 11-03 15:15 ?0次下載

    ds18b20測溫程序詳解

    DS18B20是一種單總線數字溫度傳感器,測試溫度范圍-55℃-125℃,具有體積小,硬件開銷低,抗干擾能力強,精度高的特點。網上關于DS18B20的資料很多,但是光有程序,沒有講解,導致身邊很多同學即使拿到源碼也無從下手,下面就來看一下
    發表于 10-18 11:33 ?4.1w次閱讀
    <b class='flag-5'>ds18b20</b><b class='flag-5'>測溫</b>程序<b class='flag-5'>詳解</b>

    DS18B20讀寫操作程序詳解

    DS18B20的初始化、讀寫操作以及程序詳解
    發表于 11-06 18:04 ?2.6w次閱讀

    ds18b20測溫電路圖詳解

    對于DS18B20的電路連接,除了上面所說的傳統的外部電源供電時的電路連接圖,DS18B20也可以工作在“寄生電源模式”,而下圖則表示了DS18B20工作在“寄生電源模式”下的電路連接圖。沒錯,這樣就可以使
    發表于 11-07 10:16 ?8.9w次閱讀

    dht11和ds18b20區別_dht11與ds18b20哪個測溫度更精確

    本文開始介紹介紹了DHT11特性、DHT11技術參數,其次介紹了DS18B20工作原理與DS18B20技術性能,最后介紹了DS18B20&DHT11區別,詳細解答了dht11與ds18b20
    發表于 01-26 12:19 ?8.8w次閱讀

    基于DS18B20多點測溫源碼

    DS18B20 單線數字溫度傳感器,多個 DS18B20 可以并聯在惟一的單線上,實現多點測溫。里面包含源碼和文章詳解。致力于開源項目的分享
    發表于 01-05 16:28 ?23次下載