久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7043|回復: 1
打印 上一主題 下一主題
收起左側

DS18B20原理與分析與程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:80436 發表于 2015-5-20 18:13 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
DS18B20原理與分析

DS18B20是美國DALLAS半導體公司繼DS1820之后最新推出的一種改進型智能溫度傳感器。與傳統的熱敏電阻相比,他能夠直接讀出被測溫度并且可根據實際要求通過簡單的編程實現9~12位的數字值讀數方式。可以分別在93.75 ms和750 ms內完成9位和12位的數字量,并且從DS18B20讀出的信息或寫入DS18B20的信息僅需要一根口線(單線接口)讀寫,溫度變換功率來源于數據總線,總線本身也可以向所掛接的DS18B20供電,而無需額外電源。因而使用DS18B20可使系統結構更趨簡單,可靠性更高。他在測溫精度、轉換時間、傳輸距離、分辨率等方面較DS1820有了很大的改進,給用戶帶來了更方便的使用和更令人滿意的效果。

1.DS18B20簡介

    (1)獨特的單線接口方式:DS18B20與微處理器連接時僅需要一條口線即可實現微處理器與DS18B20的雙向通訊。

    (2)在使用中不需要任何外圍元件。

    (3)可用數據線供電,電壓范圍:+3.0~ +5.5 V。

    (4)測溫范圍:-55 ~+125 ℃。固有測溫分辨率為0.5 ℃。

    (5)通過編程可實現9~12位的數字讀數方式。

    (6)用戶可自設定非易失性的報警上下限值。

    (7)支持多點組網功能,多個DS18B20可以并聯在惟一的三線上,實現多點測溫。

    (8)負壓特性,電源極性接反時,溫度計不會因發熱而燒毀,但不能正常工作。

DS18B20的測溫原理

    DS18B20的測溫原理如圖2所示,圖中低溫度系數晶振的振蕩頻率受溫度的影響很小〔1〕,用于產生固定頻率的脈沖信號送給減法計數器1,高溫度系數晶振隨溫度變化其震蕩頻率明顯改變,所產生的信號作為減法計數器2的脈沖輸入,圖中還隱含著計數門,當計數門打開時,DS18B20就對低溫度系數振蕩器產生的時鐘脈沖后進行計數,進而完成溫度測量。計數門的開啟時間由高溫度系數振蕩器來決定,每次測量前,首先將-55 ℃所對應的基數分別置入減法計數器1和溫度寄存器中,減法計數器1和溫度寄存器被預置在 -55 ℃ 所對應的一個基數值。減法計數器1對低溫度系數晶振產生的脈沖信號進行減法計數,當減法計數器1的預置值減到0時溫度寄存器的值將加1,減法計數器1的預置將重新被裝入,減法計數器1重新開始對低溫度系數晶振產生的脈沖信號進行計數,如此循環直到減法計數器2計數到0時,停止溫度寄存器值的累加,此時溫度寄存器中的數值即為所測溫度。圖2中的斜率累加器用于補償和修正測溫過程中的非線性,其輸出用于修正減法計數器的預置值,只要計數門仍未關閉就重復上述過程,直至溫度寄存器值達到被測溫度值,這就是DS18B20的測溫原理。

    另外,由于DS18B20單線通信功能是分時完成的,他有嚴格的時隙概念,因此讀寫時序很重要。系統對DS18B20的各種操作必須按協議進行。操作協議為:初始化DS18B20(發復位脈沖)→發ROM功能命令→發存儲器操作命令→處理數據。各種操作的時序圖與DS1820相同,可參看文獻〔2〕。  


DS18B20工作過程及時序

DS18B20內部的低溫度系數振蕩器是一個振蕩頻率隨溫度變化很小的振蕩器,為計數器1提供一頻率穩定的計數脈沖。

高溫度系數振蕩器是一個振蕩頻率對溫度很敏感的振蕩器,為計數器2提供一個頻率隨溫度變化的計數脈沖。

初始時,溫度寄存器被預置成-55℃,每當計數器1從預置數開始減計數到0時,溫度寄存器中寄存的溫度值就增加1℃,這個過程重復進行,直到計數器2計數到0時便停止。

初始時,計數器1預置的是與-55℃相對應的一個預置值。以后計數器1每一個循環的預置數都由斜率累加器提供。為了補償振蕩器溫度特性的非線性性,斜率累加器提供的預置數也隨溫度相應變化。計數器1的預置數也就是在給定溫度處使溫度寄存器寄存值增加1℃計數器所需要的計數個數。

DS18B20內部的比較器以四舍五入的量化方式確定溫度寄存器的最低有效位。在計數器2停止計數后,比較器將計數器1中的計數剩余值轉換為溫度值后與0.25℃進行比較,若低于0.25℃,溫度寄存器的最低位就置0;若高于0.25℃,最低位就置1;若高于0.75℃時,溫度寄存器的最低位就進位然后置0。這樣,經過比較后所得的溫度寄存器的值就是最終讀取的溫度值了,其最后位代表0.5℃,四舍五入最大量化誤差為±1/2LSB,即0.25℃。

溫度寄存器中的溫度值以9位數據格式表示,最高位為符號位,其余8位以二進制補碼形式表示溫度值。測溫結束時,這9位數據轉存到暫存存儲器的前兩個字節中,符號位占用第一字節,8位溫度數據占據第二字節。

DS18B20測量溫度時使用特有的溫度測量技術。DS18B20內部的低溫度系數振蕩器能產生穩定的頻率信號;同樣的,高溫度系數振蕩器則將被測溫度轉換成頻率信號。當計數門打開時,DS18B20進行計數,計數門開通時間由高溫度系數振蕩器決定。芯片內部還有斜率累加器,可對頻率的非線性度加以補償。測量結果存入溫度寄存器中。一般情況下的溫度值應該為9位,但因符號位擴展成高8位,所以最后以16位補碼形式讀出。

DS18B20工作過程一般遵循以下協議:初始化——ROM操作命令——存儲器操作命令——處理數據

① 初始化

單總線上的所有處理均從初始化序列開始。初始化序列包括總線主機發出一復位脈沖,接著由從屬器件送出存在脈沖。存在脈沖讓總線控制器知道DS1820 在總線上且已準備好操作。

② ROM操作命令

一旦總線主機檢測到從屬器件的存在,它便可以發出器件ROM操作命令之一。所有ROM操作命令均為8位長。這些命令列表如下:

Read ROM(讀ROM)[33h]

此命令允許總線主機讀DS18B20的8位產品系列編碼,唯一的48位序列號,以及8位的CRC。此命令只能在總線上僅有一個DS18B20的情況下可以使用。如果總線上存在多于一個的從屬器件,那么當所有從片企圖同時發送時將發生數據沖突的現象(漏極開路會產生線與的結果)。

Match ROM( 符合ROM)[55h]

此命令后繼以64位的ROM數據序列,允許總線主機對多點總線上特定的DS18B20尋址。只有與64位ROM序列嚴格相符的DS18B20才能對后繼的存貯器操作命令作出響應。所有與64位ROM序列不符的從片將等待復位脈沖。此命令在總線上有單個或多個器件的情況下均可使用。

Skip ROM( 跳過ROM )[CCh]

在單點總線系統中,此命令通過允許總線主機不提供64位ROM編碼而訪問存儲器操作來節省時間。如果在總線上存在多于一個的從屬器件而且在Skip ROM命令之后發出讀命令,那么由于多個從片同時發送數據,會在總線上發生數據沖突(漏極開路下拉會產生線與的效果)。

Search ROM( 搜索ROM)[F0h]

當系統開始工作時,總線主機可能不知道單線總線上的器件個數或者不知道其64位ROM編碼。搜索ROM命令允許總線控制器用排除法識別總線上的所有從機的64位編碼。

Alarm Search(告警搜索)[ECh]

此命令的流程與搜索ROM命令相同。但是,僅在最近一次溫度測量出現告警的情況下,DS18B20才對此命令作出響應。告警的條件定義為溫度高于TH 或低于TL。只要DS18B20一上電,告警條件就保持在設置狀態,直到另一次溫度測量顯示出非告警值或者改變TH或TL的設置,使得測量值再一次位于允許的范圍之內。貯存在EEPROM內的觸發器值用于告警。

③ 存儲器操作命令

Write Scratchpad(寫暫存存儲器)[4Eh]

這個命令向DS18B20的暫存器中寫入數據,開始位置在地址2。接下來寫入的兩個字節將被存到暫存器中的地址位置2和3。可以在任何時刻發出復位命令來中止寫入。

Read Scratchpad(讀暫存存儲器)[BEh]

這個命令讀取暫存器的內容。讀取將從字節0開始,一直進行下去,直到第9(字節8,CRC)字節讀完。如果不想讀完所有字節,控制器可以在任何時間發出復位命令來中止讀取。

Copy Scratchpad(復制暫存存儲器)[48h]

這條命令把暫存器的內容拷貝到DS18B20的E2存儲器里,即把溫度報警觸發字節存入非易失性存儲器里。如果總線控制器在這條命令之后跟著發出讀時間隙,而DS18B20又正在忙于把暫存器拷貝到E2存儲器,DS18B20就會輸出一個“0”,如果拷貝結束的話,DS18B20 則輸出“1”。如果使用寄生電源,總線控制器必須在這條命令發出后立即起動強上拉并最少保持10ms。

Convert T(溫度變換)[44h]

這條命令啟動一次溫度轉換而無需其他數據。溫度轉換命令被執行,而后DS18B20保持等待狀態。如果總線控制器在這條命令之后跟著發出讀時間隙,而DS18B20又忙于做時間轉換的話,DS18B20將在總線上輸出“0”,若溫度轉換完成,則輸出“1”。如果使用寄生電源,總線控制器必須在發出這條命令后立即起動強上拉,并保持500ms。

Recall E2(重新調整E2)[B8h]

這條命令把貯存在E2中溫度觸發器的值重新調至暫存存儲器。這種重新調出的操作在對DS18B20上電時也自動發生,因此只要器件一上電,暫存存儲器內就有了有效的數據。在這條命令發出之后,對于所發出的第一個讀數據時間片,器件會輸出溫度轉換忙的標識:“0”=忙,“1”=準備就緒。

Read Power Supply(讀電源)[B4h]

對于在此命令發送至DS18B20之后所發出的第一讀數據的時間片,器件都會給出其電源方式的信號:“0”=寄生電源供電,“1”=外部電源供電。

④ 處理數據

DS18B20的高速暫存存儲器由9個字節組成,其分配如圖3所示。當溫度轉換命令發布后,經轉換所得的溫度值以二字節補碼形式存放在高速暫存存儲器的第0和第1個字節。單片機可通過單線接口讀到該數據,讀取時低位在前,高位在后。

  DS18B20溫度數據表

上表是DS18B20溫度采集轉化后得到的12位數據,存儲在DS18B20的兩個8比特的RAM中,二進制中的前面5位是符號位,如果測得的溫度大于或等于0,這5位為0,只要將測到的數值乘于0.0625即可得到實際溫度;如果溫度小于0,這5位為1,測到的數值需要取反加1再乘于0.0625即可得到實際溫度。

溫度轉換計算方法舉例:

例如當DS18B20采集到+125℃的實際溫度后,輸出為07D0H,則:

實際溫度=07D0H╳0.0625=2000╳0.0625=125C。

例如當DS18B20采集到-55℃的實際溫度后,輸出為FC90H,則應先將11位數據位取反加1得370H(符號位不變,也不作為計算),則:

實際溫度=370H╳0.0625=880╳0.0625=550C。

       #include <reg51.h>

#define uchar  unsigned char

#define uint unsigned int

sbit DQ = P3^7 ;

sbit led = P3^2;

uchar duan[10] ={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

uchar temp;


uchar read_byte(void);

void write_byte(uchar dat);

uchar readtemperature(void);



void delay(uint a)

{

        uchar j;

        uint i;

        for(i=0; i<a; i++)

         for(j=0;j<110;j++);

}

void delayx(uchar t)

{

        while(t--);

}

uchar init_ds18b20(void)                 //初始化DS18B20

{

        uchar i;

        DQ = 1;         

        delayx(8);

        DQ = 0;

        delayx(90);

        DQ = 1;

    delayx(8);

        i = DQ;

        delayx(90);                                                                                            

        return i;

}

void write_byte(uchar dat)                 //寫一個字節給DS18B20

{

          uchar i;

          for(i=0;i<8;i++)

          {

                   DQ = 0;

                 DQ = dat&0x01;

                 delayx(5)                                                                                                                                      ;

                 DQ = 1;

                 dat = dat >> 1;

          }

}

uchar read_byte(void)                   //從DS18B20讀一個字節

{

        uchar dat,i;

        for(i=0;i<8;i++)

        {

                DQ = 0;

                dat>>=1;

                DQ = 1;

                if(DQ)

                dat|=0x80;

                delayx(8);

        }

        return dat;

}

uchar readtemperature(void)                //讀取DS18B20中的溫度

{

        uchar a,b,c;

    c = init_ds18b20();                //查看DS18B20是否忙碌

        if(c==0)

        {

                led = 0;                            //不忙碌就顯示燈亮

        }


        write_byte(0xcc);               // 跳過ROM的匹配

        write_byte(0x44);                    //開始將溫度轉換

        delayx(300);


        init_ds18b20();                       //初始化DS18B20

        write_byte(0xcc);

        write_byte(0xbe);                    //讀取DS18B20所有的寄存器


        a = read_byte();                // 讀取低字節的溫度

        b = read_byte();                   //  讀取高字節的溫度

        b<<=4;                                           //   移位

        a = a&0xf0;                                   //        將溫度的小數位清零

        a>>=4;                                          

        b = b+a;                                   //  整合為一個數

        return b;


}

void show(void)

{

        P1 = 0xfe;

        P2 = duan[temp%10];

        delayx(90);

        P1 = 0xfd;

        P2 = duan[temp/10];

}


void main()

{                                          

        while(1)

        {

                temp = readtemperature();

                show();

        }       

}




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:277014 發表于 2018-1-17 21:01 | 只看該作者
求樓主給個仿真圖,
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一级免费看 | 国产精品自产av一区二区三区 | av在线一区二区 | 91精品国产91久久综合桃花 | 欧美久久久久久 | 伊人久久综合 | 性做久久久久久免费观看欧美 | 国产精品不卡一区 | www.成人久久 | 九色国产 | 久久久久久国产 | 在线中文字幕av | 精品欧美乱码久久久久久1区2区 | av中文字幕在线 | 久久国产精品99久久久久久丝袜 | 免费午夜视频在线观看 | 国产精品色哟哟网站 | 91久久综合亚洲鲁鲁五月天 | 免费一区二区三区 | 亚洲一区在线日韩在线深爱 | 色橹橹欧美在线观看视频高清 | 欧美自拍第一页 | 北条麻妃视频在线观看 | 污污的网站在线观看 | 欧美精品在线观看 | 久久999| 精品国产一区二区三区免费 | 伊久在线 | 特级特黄特色的免费大片 | 美女视频黄的免费 | 久久综合婷婷 | 成人激情视频在线播放 | 欧美成人精品在线 | 日韩精品在线看 | 亚洲一区二区久久 | 美人の美乳で授乳プレイ | 日韩精品 | 天堂一区 | aaa在线观看| 日韩欧美中文字幕在线观看 | 特级特黄特色的免费大片 |