<noframes id="ixm7d"><noframes id="ixm7d"><rt id="ixm7d"><delect id="ixm7d"></delect></rt><noframes id="ixm7d"><rt id="ixm7d"><rt id="ixm7d"></rt></rt><rt id="ixm7d"></rt> <noframes id="ixm7d"><rt id="ixm7d"><delect id="ixm7d"></delect></rt><delect id="ixm7d"></delect><bdo id="ixm7d"></bdo><rt id="ixm7d"></rt><bdo id="ixm7d"></bdo><noframes id="ixm7d"><rt id="ixm7d"><rt id="ixm7d"></rt></rt><rt id="ixm7d"><rt id="ixm7d"></rt></rt><noframes id="ixm7d"><rt id="ixm7d"></rt><noframes id="ixm7d"><rt id="ixm7d"></rt> <noframes id="ixm7d"><rt id="ixm7d"></rt><noframes id="ixm7d"><noframes id="ixm7d"><noframes id="ixm7d"><rt id="ixm7d"></rt><noframes id="ixm7d"><noframes id="ixm7d"><noframes id="ixm7d"><rt id="ixm7d"></rt><noframes id="ixm7d"><rt id="ixm7d"></rt><noframes id="ixm7d"><rt id="ixm7d"></rt><noframes id="ixm7d">

ds18b20溫度控制器

2023-06-28

第一篇:ds18b20溫度控制器

數字溫度傳感器DS18B20控制接口設計

摘 要: DS18B20是一款經典的單總線數字溫度傳感器芯片,較傳統的溫度傳感器具有結構簡單、體積小、功耗小、抗干擾能力強、使用簡單、可組網實現多點溫度測量等優點。本設計簡要介紹了數字溫度傳感器DS18B20 的特性及工作原理,著重論述了用FPGA實現對此傳感器的控制,并將測到的溫度在LED數碼管上顯示出來。

關鍵詞:DS18B20;溫度傳感器;FPGA;LED數碼管

Abstract: DS18B20 is a classic single-bus digital temperature sensor chip, the more traditional temperature sensor has a simple structure, small size, low power consumption, and anti-interference ability, easy to use networking to achieve multi-point temperature measurement. The design brief describes the features and working principle of the digital temperature sensor DS18B20, focuses on the control of this sensor using FPGA, and the measured temperature is displayed on the LED digital tube. Keywords: DS18B20; temperature sensor; FPGA; LED digital tube

1 引言

傳統的溫度傳感器系統大都采用放大、調理、A/ D 轉換, 轉換后的數字信號送入計算機處理, 處理電路復雜、可靠性相對較差, 占用計算機的資源較多。DS18B20 是一線制數字溫度傳感器, 它可將溫度信號直接轉換成串行數字信號送給微處理器, 電路簡單, 成本低, 每一只DS18B20 內部的ROM 存儲器都有唯一的64位系列號, 在1 根地址/ 信號線上可以掛接多個DS18B20, 易于擴展, 便于 組網和多點測量。

隨著科技的發展 ,溫度的實時顯示系統應用越來越廣泛 ,比如空調遙控器上當前室溫的顯示、熱水器溫度的顯示等等。實現溫度的實時采集與顯示系統有很多種解決方案 ,本文使用全數字溫度傳感器DS18B20來實現溫度的實時采集FPGA作為控制中心與數據橋梁;LED數碼管作為溫度實時顯示器件。其中DS18B20作為FPGA的外部信號源,把所采集到的溫度轉換為數字信號,通過接口 (113腳)傳給FPGA,FPGA啟動ROM內的控制程序驅動LED數碼管,通過IO口和數據線把數據傳送給LED數碼管,將采集到的溫度實時顯示出來。該設計結構簡單、測溫準確,成本低,工作穩定可靠,具有一定的實際應用價值。

2 DS18B20數字溫度傳感器介紹

DS18B20溫度傳感器是美國DALLAS半導體公司最新推出的一種改進型智能溫度傳感器,與傳統的熱敏電阻等測溫元件相比,它能直接讀出被測溫度,并且可根據實際要求通過簡單的編程實現9~12位的數字值讀數方式。DS18B20的性能特點如下:

2.1 DS18B20的性能特點

1獨特的單線接口僅需要一個端口引腳進行通信; ○2多個DS18B20可以并聯在惟一的三線上,實現多點組網功能; ○3無須外部器件; ○4可通過數據線供電,電壓范圍為3.0~5.5V; ○5零待機功耗; ○6溫度以9或12位數字; ○7用戶可定義報警設置; ○8報警搜索命令識別并標志超過程序限定溫度(溫度報警條件)的器件; ○9負電壓特性,電源極性接反時,溫度計不會因發熱而燒毀,但不能正常工作;○ 2.2 DS18B20的內部結構圖

DS18B20采用3腳PR-35封裝或8腳SOIC封裝,其內部結構框圖如圖2-1所示。

圖2-1 DS18B20內部結構框圖 圖2-2 DS18B20字節定義

64位ROM的結構開始8位是產品類型的編號,接著是每個器件的惟一的序號,共有48位,最后8位是前面56位的CRC檢驗碼,這也是多個DS18B20可以采用一線進行通信的原因。溫度報警觸發器TH和TL,可通過軟件寫入戶報警上下限。DS18B20溫度傳感器的內部存儲器還包括一個高速暫存RAM和一個非易失性的可電擦除的EERAM。高速暫存RAM的結構為8字節的存儲器,結構如圖2-2所示。頭2個字節包含測得的溫度信息,第3和第4字節TH和TL的拷貝,是易失的,每次上電復位時被刷新。第5個字節,為配置寄存器,它的內容用于確定溫度值的數字轉換分辨率。DS18B20工作時寄存器中的分辨率轉換為相應精度的溫度數值。該字節各位的定義如圖3-4所示。低5位一直為1,TM是工作模式位,用于設置DS18B20在工作模式還是在測試模式,DS18B20出廠時該位被設置為0,用戶要去改動,R1和R0決定溫度轉換的精度位數,來設置分率。 2.3 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位補碼形式讀出。 2.4 DS18B20供電方式

DS18B20有兩種供電方式,一種是寄生電源強上拉供電方式,一種是外部供電方式,如下圖:

圖2-3 寄生電源強上拉供電方式電路圖

在寄生電源供電方式下,DS18B20 從單線信號線上汲取能量:在信號線 DQ 處于高電平期間把能量儲存在內部電容里,在信號線處于低電平期間消耗電容上的電能工作,直到高電平到來再給寄生電源(電容)充電。為了使 DS18B20 在動態轉換周期中獲得足夠的電流供應,當進行溫度轉換或拷貝到 E2 存儲器操作時,用 MOSFET 把 I/O 線直接拉到 VCC 就可提供足夠的電流,在發出任何涉及到拷貝到 E2 存儲器或啟動溫度轉換的指令后,必須在最多 10μS 內把 I/O 線轉換到強上拉狀態。在強上拉方式下可以解決電流供應不走的問題,因此也適合于多點測溫應用,缺點就是要多占用一根 I/O 口線進行強上拉切換。

圖2-4 外部電源供電方式電路圖

在外部電源供電方式下,DS18B20 工作電源由 VDD 引腳接入,此時 I/O 線不需要強上拉,不存在電源電流不足的問題,可以保證轉換精度,同時在總線上理論可以掛接任意多個 DS18B20 傳感器,組成多點測溫系統。在外部供電的方式下,DS18B20的GND引腳不能懸空,否則不能轉換溫度,讀取的溫度總是 85℃。 3 設計需求

1溫度測量范圍:-55℃~+125℃ ○2可編程為9位~12位A/D轉換精度 ○3測溫分辨率可達0.0625℃ ○4 LED數碼管直讀顯示 ○4 設計方案

4.1 硬件設計

將[DF2C8]FPGA 核心板和[EB-F2]基礎實驗板連接在一起,同時使能DS18B20 模塊和數碼管模塊:數碼管使能:用“短路帽”將實驗板上的JP4和JP5全部短接。DS18B20 溫度傳感器使能跳線JP10 全部短接,元件安裝示意如下圖4-1和4-2(注意方向,半圓形的一邊朝板子內部,平面朝外,和板上的圖示一致)。

圖 4-1:數碼管使能圖示 圖 4-2:溫度傳感器安裝和使能圖示

4.1.1 溫度傳感器 DS18B20 電路

基礎實驗板上提供了一個由DS18B20構成的溫度測量模塊,其原理如圖4-3所示。該電路選擇外部供電方式。外部電源供電方式工作穩定可靠, 抗干擾能力強。

圖4-3 單線制溫度傳感器 DS18B20 電路圖

DS18B20與[DF2C8]FPGA核心板的連接關系如表4-1所示

表 4-1:DS18B20與[DF2C8]FPGA核心板連接時的管腳對應關系

4.1.2 數碼管顯示電路

基礎實驗板上具有2個共陽極的位七段數碼管,構成8位構,其電路如圖4-4 所示。

圖 4-4:七段數碼管顯示電路圖

數碼管的控制引腳由兩個跳線JP4和JP5使能(如圖4-1所示) R10~R17是段碼上的限流電阻,位碼由于電流較大,采用了PNP三極管驅動。當位碼驅動信號為低電平(0)時,對應的數碼管才能操作;當段碼驅動信號為低電平(0)時,對應的段碼點亮。數碼管不核心板連接時的管腳對應如表4-2所示:

表 4-2:數碼管與[DF2C8]FPGA核心板連接時的管腳對應關系

4.2 HDL編碼 4.2.1 時序

(1)復位: 使用DS18B20 時, 首先需將其復位, 然后才能執行其它命令。復位時, 主機將數據線拉為低電平并保持480Ls~ 960Ls, 然后釋放數據線, 再由上拉電阻將數據線拉高15~ 60Ls, 等待DS18B20 發出存在脈沖, 存在脈沖有效時間為60~ 240Ls, 這樣, 就完成了復位操作。其復位時序如圖4-5所示。

圖4-5:初始化時序

圖4-6:寫時序

(2)寫時隙: 在主機對DS18B20 寫數據時, 先將數據線置為高電平, 再變為低電平, 該低電平應大于1us。在數據線變為低電平后15us 內, 根據寫“1”或寫“0” 使數據線變高或繼續為低。DS18B20 將在數據線變成低電平后15us~ 60us 內對數據線進行采樣。要求寫入DS18B20 的數據持續時間應大于60us 而小于120us, 兩次寫數據之間的時間間隔應大于1us。寫時隙的時序如圖4-6 所示

(3)讀時隙 :當主機從DS18B20 讀數據時, 主機先將數據線置為高電平, 再變為低電平, 該低電平應大于1us, 然后釋放數據線, 使其變為高電平。DS18B20 在數據線從高電平變為低電平的15us 內將數據送到數據線上。主機可在15us 后讀取數據線。讀時隙的時序如圖4-7 所示。

圖4-7 :讀時隙

4.2.2 DS18B20 的操作命令

主機可通過一線端口對DS18B20 進行操作, 其步驟為: 復位( 初始化命令) -> ROM 功能命令-> 存儲器功能命令-> 執行/ 數據, DS18B20 的ROM 命令有5個( 見表1) , 存儲器命令有6個( 見表2) 。命令的執行都是由復位、多個讀時隙和寫時隙基本時序單元組成。因此, 只要將復位、讀時隙、寫時隙的時序了解清楚, 使用DS18B20 就比較容易了, 時序如上文所述。

表4-3: 存儲器命令操作表 表4-4:ROM命令功能操作表

4.2.3 Verilog HDL編碼

詳細Verilog HDL代碼參見工程文件:DF2C8_13_DS18B20 工程文件中含有三個v 文件,LED_CTL.v 是數碼管顯示功能模塊,DS18B20_CTL.v 是溫度傳感器的控制模塊,TEMP.v 為頂層模塊,實例化了前面兩個模塊,并將采集的溫度值送至數碼管中進行顯示。其中最主要的溫度傳感器的控制模塊,DS18B20_CTL.v。該程序對DS18B20 進行控制, 不僅可以簡化程序, 還可以縮短1 次溫度轉換所需的時間. 這樣的話, 1 次溫度轉換和數字溫度值輸出循環所涉及到的控制命令、數據交換和所需時隙如圖4-8所示。

.

圖4-8:1次溫度轉換的控制命令和時隙

5 仿真測試結果

5.1 仿真波形

溫度測量模塊仿真結果如圖6-1所示:

圖5-1:仿真波形

5.2 結果顯示

下載配置文件后,可在數碼管上觀察到帶一位小數的溫度數值。如果用手捏住傳感器,會發現顯示的溫度在升高。如下圖:

圖5-2 測溫效果圖示

參考文獻:

[1] 沙占友 集成傳感器的應用[M]. 中國電力出版社. [2] 羅鈞,童景琳. 智能傳感器數據采集與信號處理[M]. 化學工業出版社

[3] 周月霞,孫傳友. DS18B20硬件連接及軟件編程[J]. 傳感器世界,2001,12. [4] 王曉娟,張海燕,梁延興.基于DS18B20的溫度實時采集與顯示系統的設計與實現[J]. , 2007:38-41. [5] 黨 峰, 王敬農, 高國旺. 基于DS18B20 的數字式溫度計的實現[ J] . 山西電子技術, 2007( 3) [6] 金偉正. 單線數字溫度傳感器的原理與應用[ J] . 儀表技術與傳感器, 2000( 7) : 42- 43. [7]DS18B20 Datasheet [ EB/ OL] . Dalla s: Dallas Semico nductor Cor po r atio n, 2005.

第二篇:DS18B20學習總結

及其高精度溫度測量的實現

1.1 DS18B20簡介

DS18B20是美國DALLAS半導體公司生產的可組網數字式溫度傳感器. 主要由三個數據部件組成:64的激光ROM,溫度靈敏原件,非易失性溫度告警觸發器TH和TL。 封裝如圖一:

圖一 1.

2DS18B20的特點:

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

2. DS18B20支持多點組網功能,多個DS18B20可以并聯在唯一的三線上,實現多點測溫。 3. DS18B20在使用中不需要任何外圍元件。

4. 測溫范圍-55℃~+125℃,固有測溫分辨率0.5℃。 5. 測量結果以9位數字量方式串行傳送。

內部結構框圖如圖二所示。

圖二

2.1 訪問溫度計的協議:

(一)初始化

(二)ROM操作命令

(三)存貯器操作命令

(四)處理/數據

由熱敏原件中晶振特性計算出所測的溫度。 注意:復位操作如下圖三

圖三 必需要給DS18B20輸入脈沖激活其復位功能。

DS18B20的驅動程序:

/*************************此部分為18B20的驅動程序*************************************/

#include #include sbit D18B20=P3^7; sbit error=P3^4; #define NOP() _nop_() /* 定義空指令 */ #define _Nop() _nop_() /*定義空指令*/ void TempDelay (unsigned char idata us); void Init18b20 (void); void WriteByte (unsigned char idata wr); //單字節寫入 void read_bytes (unsigned char idata j); unsigned char CRC (unsigned char j); void GemTemp (void); void Config18b20 (void); void ReadID (void); void TemperatuerResult(void); bit flag; unsigned int idata Temperature; unsigned char idata temp_buff[9]; //存儲讀取的字節,read scratchpad為9字節,read rom ID為8字節 unsigned char idata id_buff[8];

unsigned char idata crc_data; unsigned char code CrcTable [256]={ 0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65, 157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220, 35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98, 190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255, 70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7, 219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154, 101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36, 248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185, 140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205, 17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80, 175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238, 50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115, 202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139, 87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22, 233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168, 116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53};

void GetTemp() {

if(TIM==100)

{ TIM=0;

TemperatuerResult();

每隔 1000ms 讀取溫度。

void TemperatuerResult(void) {

p = id_buff;

ReadID();

//先確定是第幾個DS18B20

Config18b20(); //配置DS18B20的報警溫度和分辨度

Init18b20 ();

//復位)

WriteByte(0xcc);

//skip rom

WriteByte(0x44);

//Temperature convert

Init18b20 ();

//復位)

WriteByte(0xcc);

//skip rom

WriteByte(0xbe);

//read Temperature

p = temp_buff;

GemTemp(); //讀取溫度

}

void GemTemp (void) {

read_bytes (9);

if (CRC(9)==0) //校驗正確

{

Temperature = temp_buff[1]*0x100 + temp_buff[0]; //

Temperature *= 0.0625;

Temperature /= 16;

TempDelay(1);

} } *Function:CRC校驗 *parameter: *Return: *Modify: *************************************************************/ unsigned char CRC (unsigned char j) {

unsigned char idata i,crc_data=0;

for(i=0;i

crc_data = CrcTable[crc_data^temp_buff[i]];

return (crc_data); }

/************************************************************ *Function:向18B20寫入一個字節 *parameter: *Return: *Modify:

void WriteByte (unsigned char idata wr) //單字節寫入 {

unsigned char idata i;

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

{

D18B20 = 0;

_nop_();

D18B20=wr&0x01;

TempDelay(3);

//delay 45 uS //

5 _nop_();

_nop_();

D18B20=1;

wr >>= 1;

} }

/************************************************************ *Function:讀18B20的一個字節 *parameter: *Return: *Modify: *************************************************************/ unsigned char ReadByte (void)

//讀取單字節

unsigned char idata i,u=0;

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

{

D18B20 = 0;

u >>= 1;

D18B20 = 1;

if(D18B20==1)

u |= 0x80;

TempDelay (2);

_nop_();

}

return(u); } /************************************************************ *Function:讀18B20 *parameter: *Return: *Modify: *************************************************************/ void read_bytes (unsigned char idata j) {

unsigned char idata i;

for(i=0;i

{

*p = ReadByte();

p++;

} } /************************************************************ *Function:延時處理 *parameter: *Return: *Modify: *************************************************************/ void TempDelay (unsigned char idata us) {

while(us--); } /************************************************************ *Function:18B20初始化 *parameter: *Return: *Modify: *************************************************************/ void Init18b20 (void) {

D18B20=1;

_nop_();

D18B20=0;

TempDelay(80);

//delay 530 uS//80

_nop_();

D18B20=1;

TempDelay(14);

//delay 100 uS//14

_nop_();

_nop_();

_nop_();

if(D18B20==0)

{flag = 1; error=0; }

//detect 1820 success!

else

{flag = 0; error=1; }

//detect 1820 fail!

TempDelay(20);

//20

_nop_();

_nop_();

D18B20 = 1; }

/************************************************************

向18B20寫入一個字節 *parameter: *Return: *Modify: *************************************************************/ void WriteByte (unsigned char idata wr) //單字節寫入 {

unsigned char idata i;

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

{

D18B20 = 0;

_nop_();

D18B20=wr&0x01;

TempDelay(3);

//delay 45 uS //5

_nop_();

_nop_();

D18B20=1;

wr >>= 1;

} }

/************************************************************

讀18B20的一個字節

*/ unsigned char ReadByte (void)

//讀取單字節 {

unsigned char idata i,u=0;

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

{

D18B20 = 0;

u >>= 1;

D18B20 = 1;

if(D18B20==1)

u |= 0x80;

TempDelay (2);

_nop_();

}

return(u); }

/************************************************************ 3.1.2

SPI數據線配置。

/*************************此部分為74HC595的驅動程序使用SPI總線連接*************************************/

#include #include

#define NOP()

_nop_()

/* 定義空指令 */ #define _Nop() _nop_()

/*?定義空指令*/ void HC595SendData(unsigned int SendVal);

//SPI IO sbit

MOSIO =P1^5; sbit

R_CLK =P1^6; sbit

S_CLK =P1^7; sbit

IN_PL =P3^4;

//74HC165 shift load

把數據加載到鎖存器中 sbit

IN_Dat=P3^5;

//74HC165 output

數據移出 sbit

OE

=P3^6;

/********************************************************************************************************* ** 函數名稱: HC595SendData ** 功能描述: 向SPI總線發送數據

*********************************************************************************************************/ void HC595SendData(unsigned int SendVal) {

unsigned char i;

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

{

if((SendVal<

else MOSIO=0;

S_CLK=0;

NOP();

NOP();

S_CLK=1;

}

R_CLK=0; //set dataline low

NOP();

NOP();

R_CLK=1; //片選

OE=0; }

3.1.

3試驗數碼管上顯示溫度

#include extern GetTemp();

//聲明引用外部函數 extern unsigned int idata Temperature;

// 聲明引用外部變量 void delay(unsigned int i);

sbit

LS138A=P2^2;

//管腳定義 sbit

LS138B=P2^3; sbit

LS138C=P2^4;

//此表為 LED 的字模, 共陰數碼管 0-9 -

unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; unsigned long LedOut[5],LedNumVal; void system_Ini() {

TMOD|= 0x11;

TH1 = 0xD8;

//10

TL1 = 0xF0;

IE = 0x8A;

TR1 = 1 main() { unsigned char i;

system_Ini();

while(1)

{

GetTemp();

/********以下將讀18b20的數據送到LED數碼管顯示*************/

LedNumVal=Temperature;

//把實際溫度送到LedNumVal變量中

LedOut[0]=Disp_Tab[LedNumVal%10000/1000];

LedOut[1]=Disp_Tab[LedNumVal%1000/100];

LedOut[2]=Disp_Tab[LedNumVal%100/10]; //十位

LedOut[3]=Disp_Tab[LedNumVal%10];

//個位

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

{

P0 = LedOut[i] ;

switch(i)

{

//138譯碼

case 0:LS138A=0; LS138B=0; LS138C=0; break;

case 1:LS138A=1; LS138B=0; LS138C=0; break;

case 2:LS138A=0; LS138B=1; LS138C=0; break;

case 3:LS138A=1; LS138B=1; LS138C=0; break;

}

delay(100);

}

P0 = 0;

} }

//延時程序

void delay(unsigned int i) {

char j;

for(i; i > 0; i--)

for(j = 200; j > 0; j--); } 4.1 討論DS18B20的自動報警功能實現。

DS18B20只是一個測溫元件,所謂的報警功能要通過程序由單片機來實現。

DS18B20溫度傳感器的內部存儲器包括一個高速暫存RAM和一個非易失性的可電擦除的EERAM。高速暫存RAM的結構為8字節的存儲器,頭2個字節包含測得的溫度信息,第3和第4字節TH(報警溫度上限)和TL(報警溫度下限)的拷貝。第5個字節,為配置寄存器,它的內容用于確定溫度值的數字轉換分辨率。第

6、

7、8字節保留未用。要實現報警,完成溫度轉換后,就把測得的溫度值與RAM中的TH、TL字節內容作比較(當然要自己編程序)。若T>TH或T

第三篇:DS18B20的各個ROM命令

1、 Read ROM[33H]

2、 Match ROM[55H]

這個是匹配ROM命令,后跟64位ROM序列,讓總線控制器在多點總線上定位一只特定的DS18B20。只有和64位ROM序列完全匹配的DS18B20才能響應隨后的存儲器操作。所有和64位ROM序列不匹配的從機都將等待復位脈沖。這條命令在總線上有單個或多個器件時都可以使用。

3、Skip ROM[0CCH]

這條命令允許總線控制器不用提供64位ROM編碼就使用存儲器操作命令,在單點總線情況下,可以節省時間。如果總線上不止一個從機,在Skip ROM命令之后跟著發一條讀命令,由于多個從機同時傳送信號,總線上就會發生數據沖突(漏極開路下拉效果相當于相“與”)

4、Search ROM[0F0H]

當一個系統初次啟動時,總線控制器可能并不知道單線總線上有多個器件或它們的64位編碼,搜索ROM命令允許總線控制器用排除法識別總線上的所有從機的64位編碼。

5、Alarm Search[0ECH]

這條命令的流程和Search ROM相同。然而,只有在最近一次測溫后遇到符合報警條件的情況,DS18B20才會響應這條命令。報警條件定義為溫度高于TH或低于TL。只要DS18B20不掉電,報警狀態將一直保持,知道再一次測得的溫度值達不到報警條件。

6、Write Scratchpad[4EH]

這個命令向DS18B20的暫存器TH和TL中寫入數據??梢栽谌魏螘r刻發出復位命令來中止寫入。

7、Read Scratchpad[0BEH]

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

8、Copy Scratchpad[48H]

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

9、Convert T[44H]

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

10、Recall E2

這條命令把報警觸發器里的值拷貝回暫存器。這種拷貝操作在DS18B20上電時自動執行,這樣器件一上電,暫存器里馬上就存在有效的數據了。若在這條命令發出之后發出讀數據隙,器件會輸出溫度轉換忙的標識:0為忙,1為完成。

11、Read Power Supply[0B4H]

若把這條命令發給DS18B20后發出讀時間隙,器件會返回它的電源模式:0為寄生電源,1為外部電源。

第四篇:《溫度控制器》實訓報告

第周,星期,第節課學生姓名學號

一、實訓目的:

檢測溫度控制器的好壞。

二、實訓器材:

電冰箱1臺、萬用表1塊、溫度計1支、溫度控制器1只、加工后的鱷 魚夾子2只。

三、實訓要求:

必須掌握溫度控制器的安裝位置和它的環溫度。

四、實訓過程:

1、把溫度控制器設定在某一位置,連接好試驗電路,放入冷凍室內。

2、開啟冰箱,隨著冷凍室內溫度的降低,當萬用表指示為∞時,說明溫度控制器的觸點已經斷開,打開冰箱門,讀出溫度計指示為2℃,并做好記錄。停開冰箱,冷凍室內溫度逐漸上升,當萬用表指示復為0Ω時,再讀出溫度計指示為10℃,并做好記錄。

五、實訓總結:

從上述實訓中得知,該溫度控制器能在2℃時關斷電路,10℃時接通電路,完全符合冰箱溫度控制的要求。

六、實訓結果:

該溫度控制器正常。

指導教師評語:

實訓報告等級:指導教師簽字:

年月日

第五篇:DZ系列智能溫度控制器使用說明書

DZ系列智能溫控器是一種高性能、高可靠性、抗干擾能力強,采用多項先進技術研發的新一代智能型自動控制儀表,可廣泛應用于冶金、紡織、塑料機械、烤箱、化工等行業的溫度測量及高精度控制。是老式撥碼指針式溫控器的理想替代產品。當你首次使用我公司產品時務必參閱相應說明書,以免因操作失誤。

特點:● 人工智能PID運算。

● 熱電偶、熱電阻通用輸入。 ● 二路報警,多種報警方式。 ● 繼電器或固態繼電器輸出。 ● 具備加熱控制自整定功能。 ● 具有顯示及控制功能。

● 采用數字濾波技術,大大提高儀表抗干擾性能。

一、 儀表型號及含義

報警輸出類型 0:無報警1:一路報警2:二路報警 輸出類型 0:繼電器輸出1:無觸點電壓輸出 外形:1:48×484:48×96

7:72×729:96×9

6、 DZ系列智能溫控器

二、 型號及技術參數

為了達到理想的控制精度建議啟動自整定輸入開關,在啟動自整定前首先確定接線是否無誤;按住“SET”鍵3秒鐘不放,進入一般數據設定,按“SET”鍵調到“AT”(自整定開關),設定為“1”,再按住“SET”鍵退出回到測控狀態。這時“AT”燈亮表示自整定已開始。

使用注意事項:

1、 儀表接線時應按照線圖為準,注意電源電壓跟儀表規定電壓要一致。傳感器和儀表輸入信號要一致,否則會導致儀表

無法正常工作。儀表輸入端及其傳感器要盡量遠離電源及干擾源(盡可能采用屏蔽線)。特別要防止信號輸入端誤接入電源。導致燒毀儀表。

2、 當負載電流大于儀表輸出額定電流時,必須配置中間繼電器,否則導致儀表內部燒毀。

肇慶大洲儀表有限公司

http//:

地址:廣東省肇慶市端州區黃崗鎮景安北路 電話:0758-2158306傳真:0758-6181910

本文來自 99學術網(www.gaojutz.com),轉載請保留網址和出處

上一篇:1978年屬馬人全年運勢下一篇:10月22日國旗下講話稿

91尤物免费视频-97这里有精品视频-99久久婷婷国产综合亚洲-国产91精品老熟女泄火