<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

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

3天內不再提示

英創信息技術基于DS18B20測溫系統解決思路

英創信息技術 ? 來源:英創信息技術 ? 作者:英創信息技術 ? 2019-11-13 09:38 ? 次閱讀

英創嵌入式主板以其優異的穩定性、獨特的設計及方便使用等優點,在嵌入式領域占有一席之地。在工業現場,經常有監測環境溫度的需求,本方案應用DS18B20為溫度采集芯片,與英創嵌入式主板的GPIO相連,就可以組成完整的測溫系統。由于DS18B20每條總線上可以最多接8個測溫點,那么英創嵌入式主板至少可以接64個測溫點。
DS18B20數字溫度計是DALLAS公司生產的1-Wire即單總線器件,具有線路簡單,體積小的特點。實際應用中不需要外部任何元器件即可實現測溫,測量溫度范圍在-55°C到+125°C之間,數字溫度計的分辨率用戶可以從9位到12位選擇;并且內部有溫度上、下限告警設置,使用非常方便。
TO-92封裝的DS18B20的引腳排列見圖1,其引腳功能描述見表1。

表1 DS18B20詳細引腳功能描述:

序號

名稱

引腳功能描述

1

GND

信號

2

DQ

數據輸入/輸出引腳。開漏單總線接口引腳
當被用著在寄生電源下,也可以向器件提供電

3

VDD

可選的VDD引腳。當工作于寄生電源時,此引腳必須接地

DS18B20的使用方法

由于DS18B20采用的是1-Wire總線協議方式,即在一根數據線實現數據的雙向傳輸,而對嵌入式主板來說,硬件上并不支持單總線協議,因此,我們必須采用GPIO的方法來模擬單總線的協議時序來完成對DS18B20芯片的訪問。在本示例中,只需把管腳2接英創嵌入式主板的GPIO,管腳3接5V電源,管腳1接地,就可以搭建起測試環境,如圖二所示。如果需要測試多點溫度,可以把多個DS18B20并起。

由于DS18B20是在一根I/O線上讀寫數據,因此,對讀寫的數據位有著嚴格的時序要求。DS18B20有嚴格的通信協議來保證各位數據傳輸的正確性和完整性。該協議定義了幾種信號的時序:初始化時序、讀時序、寫時序。所有時序都是將嵌入式主板作為主設備,單總線器件作為從設備。每一次命令和數據的傳輸都是從主機主動啟動寫時序開始,如果要求單總線器件送回數據,在進行寫命令后,主機需要啟動讀時序完成數據接收。數據和命令的傳輸都是低位在先。

下面是18B20的時序圖,根據時序的要求,改變GPIO的電平,可以完成18B20的操作。

DS18B20復位時序

根據以上DS18B20的時序,初始化的函數如下:

Init18b20()

{

char flag;

OutBit(1);

Delayus(1);

OutBit(0);

Delayus(600); // 復位信號480—960us

OutBit(1);

Delayus(60); // 等待15-60us

if(ReadBit()) // 檢查存在電平,如果為低,說明18B20正確復位

{

printf(‘init fail’);

return false; // detect 1820 fail!

}

else

{

Sleep(1);

OutBit(1);

return true; // detect 1820 success!

}

}

DS18B20的數據讀寫時通過時間間隙處理位和命令字來確認信息交換。

DS18B20的寫時間隙

當主機把數據線從邏輯高電平拉到邏輯低電平的時候,寫時間隙開始。有兩種寫時間隙:寫1時間隙和寫0時間隙。所有寫時間隙必須最少持續60us,包括兩個寫周期間至少1us的恢復時間。

I/O線電平變低后,DS18B20在一個15us到60us的窗口內對I/O線采樣。如果線上是高電平,就是寫1,如果線上是低電平,就是寫0。如圖所示。

void DS18B20::WriteByte(uchar wr)

{

uchar i;

OutBit(1);

Delayus(1);

for (i=0;i《8;i++) // 寫8bit

{

OutBit(0) ; // 總線拉低,寫間隙開始

Delayus(10); // 延時 2-12us

OutBit(wr&0x01) ; // 寫數據到總線

Delayus(30); // 在15us-60us之間采用

OutBit(1); // 釋放總線

wr 》》= 1;

Delayus(2);

}

Sleep(1); // 字節之間最好間隔的稍微長一點

}

DS18B20的讀時間隙

當從DS18B20讀取數據時,主機生成讀時間隙。當主機把數據線從高電平拉到低電平時,讀時間隙開始,數據線必須保持至少1us;從DS8B20輸出的數據在讀時間隙的下降沿出現后15us內有效。對于DS18B20的讀時隙是從主機把總線拉低之后,在15微秒之內就得釋放單總線,以讓DS18B20把數據傳輸到單總線上。DS18B20在完成一個讀時序過程,至少要60us才能完成。

根據以上的讀時序圖,讀字節函數如下:

UCHAR DS18B20::ReadByte()

{

uchar i,u=0;

OutBit(1);

Delayus(1);

for(i=0;i《8;i++) // 讀一字節

{

OutBit(0) ; // 總線拉低,讀間隙開始

Delayus(2);

OutBit(1) ; // 拉高總線

Delayus(4); // 在1-14us之內讀取總線數據

u 》》= 1;

if(ReadBit()==1) u |= 0x80;

Delayus(60); // 讀取數據周期至少60us

OutBit(1) ;

}

return(u);

}

在讀溫度之前,要先啟動溫度轉換,如果采用寄生電源供電,溫度轉換的時間應該大于500毫秒。對于一條總線的多個18B20來說,啟動轉換不需要匹配18B20的ROM地址。

void DS18B20::StartConvert()

{

Init18b20 ();

WriteByte(0xcc); // 跳過ROM

WriteByte(0x44); // 啟動轉換命令

}

在讀指定的18B20時,就要先發匹配命令,再發ROM序列號,具體請參考下面的程序:

void DS18B20::TemperatuerResult(char id)

{

uchar i;

Init18b20 ();

WriteByte(0x55); // 匹配ROM地址

for(i=0;i《8;i++) // 發18B20地址碼

{

WriteByte(b20rom[id][i]);

}

WriteByte(0xbe); // 發讀溫度命令

read_bytes(2); // 前2個字節為溫度值

temp=temp_buff[1]&0x0f; // 去掉符號位

temp=temp《《8;

temp=temp+temp_buff[0];

Temperature=temp*0.0625; // 得到溫度值

}


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

    關注

    7

    文章

    6064

    瀏覽量

    34623
收藏 人收藏

    評論

    相關推薦

    基于LPC2292 和DS18B20測溫節點設計The Des ign of Temperature measure node B

    設計方案和軟件的設計思路, 給出了主要驅動程序代碼。測溫節點的實現方法具有一定的通用性。關鍵詞:LPC2292; DS18B20; 測溫Abstract:The paper intro
    發表于 10-19 14:52

    測試測量技術社區-- 基于CC2430和DS18B20的無線測溫系統設計 ...

    測試測量技術社區-- 基于CC2430和DS18B20的無線測溫系統設計 -通用測量
    發表于 08-12 23:12

    測試測量技術社區-- 基于CC2430和DS18B20的無線測溫系統設計 ...

    測試測量技術社區-- 基于CC2430和DS18B20的無線測溫系統設計 -通用測量
    發表于 08-12 23:13

    DS18B20測溫系統設計

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

    DS18B20多點測溫方法探討

    、功耗低、性能高、抗干擾能力強、使用簡單等優點。其獨特的單總線技術使用戶可輕松地組建傳感器網絡,特別適合于構成多點溫度測控系統。每個DS18B20 都有一個唯一的64 位ROM 序列號,通過查詢此序列號
    發表于 11-02 16:10

    DS18B20在溫度檢測系統中的應用

      摘要:該論文結合實際使用經驗,完成了DS18B20數字溫度傳感器在基于單片機的溫度檢測系統中的應用。本設計有效的提高了控制系統的實時性改善了溫度測量的自動化程度,具有較高的實用價值。該系統
    發表于 11-06 15:09

    基于單總線數字溫度傳感器DS18B20測溫系統方案

      摘要:設計了一種基于單總線數字溫度傳感器DS18B20測溫系統,給出了DS18B20傳感器特性和控制命令及時序,在Proteus環境下進行了
    發表于 11-06 15:18

    DS18B20的相關資料分享

    測溫元件相比,它是一種新型的體積小、適用電壓寬、與微處理器接口簡單的數字化溫度傳感器。特點1、適應電壓范圍更寬,電壓范圍:3.0~5.5V,在寄生電源方式下可由數據線供電。2、獨特的單線接口方式,DS18B20 在與微處理器連接時僅需要一條口線即可實現微處理器與
    發表于 11-18 06:31

    DS18B20的特點是什么

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

    DS18B20模塊說明

    、DS18B20模塊說明:1DS18B20是由 DALLAS 半導體公司推出的一種的“單總線”接口的溫度傳感器。與傳統的熱敏電阻等測溫元件相比,它是一
    發表于 01-17 08:48

    請問DS18B20測溫C程序怎么寫?

    DS18B20測溫C程序怎么寫?
    發表于 11-07 07:20

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

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

    DS18B20 構成測溫系統

    用一片 DS18B20 構成測溫系統,測量的溫度精度達到 0.1 度,測量的溫度的范圍在-20度到+50度之間,用4位數碼管顯示出來。
    發表于 10-12 11:46 ?0次下載

    DS18B20構成測溫系統

    學習單片機電路圖的很好的資料——DS18B20 構成測溫系統
    發表于 11-03 15:15 ?0次下載
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>