<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-07-02

第一篇: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為外部電源。

第四篇:電爐溫度的模糊控制

電阻爐溫度控制系統設計

引言電加熱爐是典型工業過程控制對象,其溫度控制具有升溫單向性,大慣性,純滯后,時變性等特點,很難用數學方法建立精確的模型和確定參數。而PID控制因其成熟,容易實現,并具有可消除穩態誤差的優點,在大多數情況下可以滿足系統性能要求,但其性能取決于參數的整定情況。且快速性和超調量之間存在矛盾,使其不一定滿足快速升溫、超調小的技術要求。模糊控制在快速性和保持較小的超調量方面有著自身的優勢,但其理論并不完善, 引言

電加熱爐是典型工業過程控制對象,其溫度控制具有升溫單向性,大慣性,純滯后,時變性等特點,很難用數學方法建立精確的模型和確定參數。而PID控制因其成熟,容易實現,并具有可消除穩態誤差的優點,在大多數情況下可以滿足系統性能要求,但其性能取決于參數的整定情況。且快速性和超調量之間存在矛盾,使其不一定滿足快速升溫、超調小的技術要求。模糊控制在快速性和保持較小的超調量方面有著自身的優勢,但其理論并不完善,算法復雜,控制過程會存在穩態誤差。

將模糊控制算法引入傳統的加熱爐控制系統構成智能模糊控制系統,利用模糊控制規則自適應在線修改PID參數,構成模糊自整定:PID控制系統,借此提高其控制效果。 基于PID控制算法,以ADuC845單片機為主體,構成一個能處理較復雜數據和控制功能的智能控制器,使其既可作為獨立的單片機控制系統,又可與微機配合構成兩級控制系統。該控制器控制精度高,具有較高的靈活性和可靠性。

2 溫度控制系統硬件設計

該系統設計的硬件設計主要由單片機主控、前向通道、后向通道、人機接口和接口擴展等模塊組成,如圖l所示。由圖1可見,以內含C52兼容單片機的ADuC845為控制核心.配有640 KB的非易失RAM數據存儲器、外擴鍵盤輸人、320x240點陣的圖形液晶顯示器進行漢字、圖形、曲線和數據顯示,超溫報警裝置等外圍電路;預留微型打印機接口,可以現場打印輸出結果;預留RS232接口,能和PC機聯機,將現場檢測的數據傳輸至PC機來進一步處理、顯示、打印和存檔。

電阻爐的溫度先由熱電偶溫度傳感器檢測并轉換成微弱的電壓信號,溫度變送器將此弱信號進行非線性校正及電壓放大后,由單片機內部A/D轉換器將其轉換成數字量。此數字量經數字濾波、誤差校正、標度變換、線性擬合、查表等處理后。一方面將爐窯溫度經人機面板上的LCD顯示:另一方面將該溫度值與被控制值(由鍵盤輸入的設定溫度值)比較,根據其偏差值的大小,提供給控制算法進行運算,最后輸出移相控制脈沖,放大后觸發可控硅導通(即控制電阻爐平均功率)。達到控制電爐溫度的目的。如果實際測得的溫度值超過了該系統所要求的溫度范圍,單片機就向報警裝置發出指令,系統進行報警。

2.1 系統主控模塊

系統主控模塊電路如圖2所示,它主要由CPU及數據存儲器,晶體振蕩器、復位電路、圖形液晶顯示器(LCD)及控制電路、微型打印機接口控制電路、實時日歷時鐘,熱電偶信號處理電路等構成。這里,該系統設計可測量3點溫度。傳感器選擇K型(鎳鉻-鎳硅)熱電偶,可用于從室溫到1 200°C的溫度測量,測量范圍寬,精度高。在溫度測量范圍內K型熱電偶的輸出熱電勢只有0~45.119 mV,為了和ADuC845的A/D轉換器相匹配,采用ACl226和1B51作為信號調理電路,由AC12

26、1B51構成熱電偶冷端溫度補償及信號調理器電路。當熱端距測溫儀表較遠時,需利用熱電偶匹配導線將冷端延長。CD4051為多路模擬開關,由ABC控制接通,當5~3接通時,輸入接地,UO輸出UOmin,用于零點校準;當4~3接通時,單片機1.25 V穩定參考電壓Uref,再經電阻R

1、R2分壓,得到毫伏級參考輸入電壓,UO輸出UOmax,用于增益校準;當2~

3、1~

3、12~3分別分時接通時,依次輸入3個熱電偶正常測溫所得變換電壓,UO從而輸出3個溫度點所對應的電壓UOA,UOB,UOC。在HI端與+UISO端之間串上一只220 MΩ上拉電阻,一旦熱電偶開路,HI端即被偏置為+UISO,迫使1B51的輸出電壓超量程,由此判定熱電偶已開路。多路模擬開關和測量數據采集過程在單片機協調下工作,每次數據采集都進行自動判斷和校準閣。

2.2 控制輸出驅動電路

對溫度的控制是通過可控硅調功器電路實現,如圖3所示。雙向可控硅管和硅碳棒串接在交流220 V、50 Hz交流市電回路中,圖3中只給出了A相。移相觸發脈沖由ADuC845用軟件在P1.3引腳上產生的,零同步脈沖同步后,經光耦合管和驅動器輸出送到可控硅的控制極。過零同步脈沖由過零觸發電路產生,利用同步變壓器和電壓比較器LM311組成正弦交流電的正半波過零檢測電路,它在交流電每一個正半周的起始零點處產生上升沿.并在正半周回零處產生一個下降沿,電壓比較器LM311用于把50 Hz正弦交流電壓變成方波。方波的正邊沿和負邊沿分別作為兩個單穩態觸發器的輸入觸發信號,單穩態觸發器輸出的2個窄脈沖經二極管或門混合后通過可重復觸發集成單穩態觸發器MC14528,單穩態輸出的兩路窄脈沖再疊加,就可得到對應于交流市電的100 Hz過零同步脈沖。脈沖寬度可由MC14528的外接電阻R4和外接電容C

1、C2調節。此脈沖加到ADUC845的TO作為計數脈沖和INT1中斷口觸發INT1中斷??煽毓璧倪^流、過壓保護采用一般阻容保護電路。R5是觸發器輸出限流電阻,R3用以消除漏電流,防止KP150的誤觸發。

3 溫度控制系統軟件設計 3.1 主程序及其功能

軟件設計采用模塊化設計原則??刂瞥绦蛑饕蓽y量采樣操作,溫度參數設置界面的顯示,操作按鍵的管理,測量過程,數據算法處理,輸出控制的處理及測量結果顯示等模塊組成。主模塊是為其他模塊構建整體框架及初始化工作。調用運算和顯示構成一個無限循環圈,溫控的所有功能都在該循環圈中周而復始有選擇執行。除非掉電或復位,否則系統程序不會跳出該循環圈。因浮點數運算占用時間較多,應將其作為單獨模塊??刂扑惴K包括:PID運算模塊和PID參數自整定模塊兩部分,主要是相應控制算法的初始化及運算程序。數學運算模塊主要包括諸如帶符號浮點數求補運算、帶符號浮點數乘法、無符號浮點數除法以及浮點數加減法等運算子程序,供其他模塊根據算法的需要隨時調用。顯示設定和操作界面由菜單顯示,用INTO中斷完成。界面中用線框框起來的符號和漢字表示當前起作用的按鍵,用“上下左右”按鍵移動光標和改變數據,按下確認鍵后選中有效,開始執行所選功能,按下返回鍵就回到上一級界面(菜單)。數據的采集及預處理模塊由TO計數定時產生中斷,包括數字濾波、標度變換、顯示刷新等部分,完成數據預處理及人機交互功能。過零同步由交流過零觸發產生INT1中斷,并確定移相順序,觸發T1定時,產生移相脈沖,控制輸出。一旦中斷,首先判斷具體的中斷源。若是定時中斷,則調用相應的模塊完成定時服務;若是人機面板的按鍵中斷,則在識別按鍵后,進入散轉程序,隨之調用相應的鍵盤處理服務模塊。無論是哪一個中斷源產生中斷,執行完相應的程序后均返回主模塊,必要時修改顯示內容,并開始下一輪循環。圖4所示為系統軟件主程序流程。

第五篇:PLC控制的加熱爐溫度控制系統

1 傳統的加熱爐電氣控制系統普遍采用繼電器控制技術,由于采用固定接線的硬件實現邏輯控制,使控制系統的體積增大,耗電多,效率不高且易出故障,不能 保證正常的工業生產。隨著計算機控制技術的發展,傳統繼電器控制技術必然被基于計算機技術而產生的PLC控制技術所取代。而PLC本身優異的性能使基于 PLC控制的溫度控制系統變的經濟高效穩定且維護方便。這種溫度控制系統對改造傳統的繼電器控制系統有普遍性意義。

2 加熱爐溫度控制系統基本構成

加熱爐溫度控制系統基本構成入圖1所示,它由PLC主控系統、移相觸發模塊整、流器SCR、加熱爐、傳感器等5個部分組成。該加熱爐溫度希望穩定在100℃工作(其它工作溫度同樣可以照此方法設計)。

圖1 加熱爐溫度控制系統基本組成

加熱爐溫度控制實現過程是:首先傳感器將加熱爐的溫度轉化為電壓信號,PLC主控系統內部的A/D將送進來的電壓信號轉化為PLC可識別的數字量,然后 PLC將系統給定的溫度值與反饋回來的溫度值進行處理,給移相觸發模塊,再給三相整流電路(SCR)一個觸發脈沖(既控制脈沖),這樣通過SCR的輸出我 們控制了加熱爐電阻絲兩端的電壓,也既加熱爐溫度控制得到實現。其中PLC主控系統為加熱爐溫度控制系統的核心部分起重要作用。

3 PLC控制系統 3.1 PLC控制系統的硬件配置

在 加熱爐溫度控制系統中PLC采用日本三菱公司FX2N,其硬件采用模塊化設計,配合了多種特殊功能模塊及功能擴展模塊,可實現模擬量控制、位置控制等功 能。該系列PLC可靠性高,抗干擾強、配置靈活、性價比高。本溫度控制系統中PLC我們選擇FX2N-48MR-001型,它與外部設備的連接如圖

2、表 1所示。

圖2 PLCI/O接線圖 表1 PLC I/O地址分配表

3.2 流程設計

根據加熱爐溫度控制要求,本系統控制流程圖如圖3所示。

圖3 加熱爐控制流程圖

3.3 控制算法

由于溫度控制本身有一定的滯后性和慣性,這使系統控制出現動態誤差。為了減小誤差提高系統控制精度,采用PID控制算法,另外考慮到系統的控制對象,采用增量型PID算法。 △V(n)=U(n)-U(n-1)

+[e(n)-2e(n-1)+e(n-2)>}=KP{△e(n)+e(n)+[△e(n)-△e(n-1)>} 式中e(n)、e(n-1)、e(n-2)為PID連續三次的偏差輸入?!鱡(n)、△e(n-1)為系統連續兩次執行的誤差。KP為比例放大系數T、TI、TD分別為采樣周期、積分時間、微分時間。

當 加熱爐剛啟動加熱時,由于測到的爐溫為常溫,sp-pv=△U為正值且較大,△U為PID調節器的輸入,此時PID調節器中P起主要作用,使SCR為最大 電壓給加熱爐加熱。當加熱爐溫度達到100℃以上時,sp-pv=△U為負值,經PID調節,使SCR輸出電壓減小,加熱爐溫度降低。當溫度正好達到 100℃時,△U為零PID不調節,此時SCR輸出的電壓正好平衡加熱爐消耗的熱量,系統達到動態平衡。 3.4 K型熱電偶分度電壓擬合

(1)根據具體問題,確定擬合多項式的次數為n。 (2)由公式 Sk=tr= yi(k=0,1,2, ……2n) (r=0,1,2, ……n)

計數出Sk與Tr (3)寫出正規方程

(4)解正規方程組 求出a0,a1,…,an (5)寫出擬合公式多項式Pn(X)=

一 次多項式也叫作線性擬合。由上述方法可擬合出K分度電壓隨溫度變化公式為:V=0.04T(其中V為電壓,T為溫度)。此擬合公式是在溫度從0℃到 120℃之間變化的近似公式,因此正規方程只用到S0、S

1、S2擬合的多項式次數為n=1,電壓隨溫度的變化可近似為線性變化。如果溫度變化范圍比較 大,則電壓隨溫度變化為非線性變化,上述電壓隨溫度變公式需要重新擬合,擬合多項式的次數也必然大于2。 3.5 系統調試

系統調試分為兩大步驟,一是系統軟件調試;二是系統硬件調試。

(1)系統軟件調試。系統軟件調試是在PC機上進行,我們將PLC控制程序輸入PC機后,根據運行要求,設定若干數字開關量,模擬量,對系統的每一個功能進行檢測測試并在此基礎上不斷完善程序以達到系統要求。

(2)系統硬件調試。相應的系統硬件也是在實驗室里進行,用一個設備來摸儀控制對象。首先檢查設備的諸個單元是否合乎要求,其次將軟件和硬件結合起來進行測試。并不斷完善PLC軟硬件的配置以達到最優的結果。

4 結束語

加熱爐溫度控制系統采用成熟的PLC技術和電力電子技術,采用軟硬件結合,較好的解決了傳統加熱爐溫控系統中出現的問題。針對我國大部分的加熱爐用戶來說本系統將是一個比較理想的溫控系統。

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

上一篇:oracle安裝及連接文檔下一篇:讀書心得體會1000字

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