『壹』 基於單片機的熱水器溫度控制系統
東華理工大學畢業設計(論文)
基於單片機的熱水器溫度控制
摘 要
溫度是日常生活中不可缺少的物理量,溫度在各個領域都有積極的意義。很多行業中以及日常生活中都有大量的用電加熱設備,如用於加熱處理的加熱熱水器,用於洗浴的電熱水器及各種不同用途的溫度箱等,採用單片機對它們進行控制具有控制方便、簡單、靈活性大等特點,而且還可以大幅提高被控系統的性能,從而能被大大提高產品的質量。因此,智能化溫度控制技術正被廣泛地應用。
本溫度設計採用現在流行的AT89C51單片機為控制器,用PID控制方法,再配以其他電路對熱水器的水溫進行控制。
關鍵詞:89C51; PID; 溫度控制
I
1/41頁
東華理工大學畢業設計(論文)
ABSTRACT
Temperature is essential physical in daily life ,and in various fields has positive implications.A lot of businesses and daily lives have a lot of electric heating equipment.Such as electric water heater for bathing and variety of different uses of the temperature boxes. MCU to control them with easy to control,simple,flexibility and other characteristics,also can significantly improve the performance of the controlled system,which can be greatly improved proct quality. Therefore,intelligent temperature control technology is being widely used.
The temperature control design uses the now popular AT89C51 MCU controller,with PID control method, which together with
『貳』 基於單片機的溫度控制系統
加熱部件可以在淘寶上買個
usb
5v
加熱片,usb供電的電流不會超過
500ma,
控制可以用單片機腳控制一個
c8050三極體控制加熱片的通斷電。
『叄』 求簡易溫度控制器設計的單片機匯編語言程序
這個程序你可以用來試試。我以前做的。
//溫控系統控製程序
//溫度感測器:DS18B20
//顯示方式:LED
#include<reg51.h>
#defineucharunsignedchar
sbitkeyup=P1^0;
sbitkeydn=P1^1;
sbitkeymd=P1^2;
sbitout=P3^7; //接控制繼電器
sbitDQ=P3^4; //接溫度感測器18B20
uchart[2],number=0,*pt; //溫度值
ucharTempBuffer1[4]={0,0,0,0};
ucharTmax=18,Tmin=8;
uchardistab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff,0xfe,0xf7};
uchardismod=0,xiaodou1=0,xiaodou2=0,currtemp;
bitflag;
voidt0isr()interrupt1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
switch(number)
{
case0:
P2=0x08;
P0=distab[TempBuffer1[0]];
break;
case1:
P2=0x04;
P0=distab[TempBuffer1[1]];
break;
case2:
P2=0x02;
P0=distab[TempBuffer1[2]]&0x7f;
break;
case3:
P2=0x01;
P0=distab[TempBuffer1[3]];
break;
default:
break;
}
number++;
if(number>3)number=0;
}
voiddelay_18B20(unsignedinti)
{
while(i--);
}
/**********ds18b20初始化函數**********************/
voidInit_DS18B20(void)
{
bitx=0;
do{
DQ=1;
delay_18B20(8);
DQ=0;//單片機將DQ拉低
delay_18B20(90);//精確延時大於480us
DQ=1;//拉高匯流排
delay_18B20(14);
x=DQ;//稍做延時後如果x=0則初始化成功x=1則初始化失敗,繼續初始化
}while(x);
delay_18B20(20);
}
/***********ds18b20讀一個位元組**************/
unsignedcharReadOneChar(void)
{
unsignedchari=0;
unsignedchardat=0;
for(i=8;i>0;i--)
{
DQ=0;//給脈沖信號
dat>>=1;
DQ=1;//給脈沖信號
if(DQ)
dat|=0x80;
delay_18B20(4);
}
return(dat);
}
/*************ds18b20寫一個位元組****************/
voidWriteOneChar(unsignedchardat)
{
unsignedchari=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=dat&0x01;
delay_18B20(5);
DQ=1;
dat>>=1;
}
}
/**************讀取ds18b20當前溫度************/
unsignedchar*ReadTemperature(unsignedcharrs)
{
unsignedchartt[2];
delay_18B20(80);
Init_DS18B20();
WriteOneChar(0xCC);//跳過讀序號列號的操作
WriteOneChar(0x44); //啟動溫度轉換
delay_18B20(80);
Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號列號的操作
WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器)前兩個就是溫度
tt[0]=ReadOneChar();//讀取溫度值低位
tt[1]=ReadOneChar();//讀取溫度值高位
return(tt);
}
voidcovert1(void) //將溫度轉換為LED顯示的數據
{
ucharx=0x00,y=0x00;
t[0]=*pt;
pt++;
t[1]=*pt;
if(t[1]&0x080)//判斷正負溫度
{
TempBuffer1[0]=0x0c; //c代表負
t[1]=~t[1]; /*下面幾句把負數的補碼*/
t[0]=~t[0]; /*換算成絕對值*********/
x=t[0]+1;
t[0]=x;
if(x==0x00)t[1]++;
}
elseTempBuffer1[0]=0x0a; //A代表正
t[1]<<=4; //將高位元組左移4位
t[1]=t[1]&0xf0;
x=t[0]; //將t[0]暫存到X,因為取小數部分還要用到它
x>>=4; //右移4位
x=x&0x0f; //和前面兩句就是取出t[0]的高四位
y=t[1]|x; //將高低位元組的有效值的整數部分拼成一個位元組
TempBuffer1[1]=(y%100)/10;
TempBuffer1[2]=(y%100)%10;
t[0]=t[0]&0x0f; //小數部分
TempBuffer1[3]=t[0]*10/16;
//以下程序段消去隨機誤檢查造成的誤判,只有連續12次檢測到溫度超出限制才切換加熱裝置
if(currtemp>Tmin)xiaodou1=0;
if(y<Tmin)
{
xiaodou1++;
currtemp=y;
xiaodou2=0;
}
if(xiaodou1>12)
{
out=0;
flag=1;
xiaodou1=0;
}
if(currtemp<Tmax)xiaodou2=0;
if(y>Tmax)
{
xiaodou2++;
currtemp=y;
xiaodou1=0;
}
if(xiaodou2>12)
{
out=1;
flag=0;
xiaodou2=0;
}
out=flag;
}
voidconvert(chartmp)
{
uchara;
if(tmp<0)
{
TempBuffer1[0]=0x0c;
a=~tmp+1;
}
else
{
TempBuffer1[0]=0x0a;
a=tmp;
}
TempBuffer1[1]=(a%100)/10;
TempBuffer1[2]=(a%100)%10;
}
voidkeyscan()
{
ucharkeyin;
keyin=P1&0x07;
if(keyin==0x07)return;
elseif(keymd==0)
{
dismod++;
dismod%=3;
while(keymd==0);
switch(dismod)
{
case1:
convert(Tmax);
TempBuffer1[3]=0x11;
break;
case2:
convert(Tmin);
TempBuffer1[3]=0x12;
break;
default:
break;
}
}
elseif((keyup==0)&&(dismod==1))
{
Tmax++;
convert(Tmax);
while(keyup==0);
}
elseif((keydn==0)&&(dismod==1))
{
Tmax--;
convert(Tmax);
while(keydn==0);
}
elseif((keyup==0)&&(dismod==2))
{
Tmin++;
convert(Tmin);
while(keyup==0);
}
elseif((keydn==0)&&(dismod==2))
{
Tmin--;
convert(Tmin);
while(keydn==0);
}
xiaodou1=0;
xiaodou2=0;
}
main()
{
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TR0=1;
ET0=1;
EA=1;
out=1;
flag=0;
ReadTemperature(0x3f);
delay_18B20(50000); //延時等待18B20數據穩定
while(1)
{
pt=ReadTemperature(0x7f);//讀取溫度,溫度值存放在一個兩個位元組的數組中
if(dismod==0)covert1();
keyscan();
delay_18B20(30000);
}
}
『肆』 急求:基於MCS-51單片機的溫度控制器匯編語言軟體設計和硬體電路圖
第2章 硬體電路詳細設計
DS18B20的性能特點:1、採用單匯流排專用技術,既可通過串列口線,也可通過其它I/O口線與微機介面,無須經過其它變換電路,直接輸出被測溫度值(9位二進制數,含符號位),2、測溫范圍為-55℃-+125℃,測量解析度為0.0625℃,3、內含64位經過激光修正的只讀存儲器ROM,4、適配各種單片機或系統機,5、用戶可分別設定各路溫度的上、下限,6、內含寄生電源。溫度感測器DS18B20連接方式:在寄生電源供電方式下,DS18B20從單線信號線上汲取能量,在信號線DQ處於高電平期間把能量儲存在內部電容里,在信號線處於低電平期間消耗電容上的電能工作,直到高電平到來再給寄生電源(電容)充電。如圖2.3所示。
2.4 復位電路的設計
本設計採用人工復位,將一個按扭開關並聯於上電自動復位電路按一下開關就在RST端出現一段時間的高電平,即器件復位。
2.5 晶振電路的設計
2.6 DS18B20溫度感測器與單片機的介面電路
DS18B20可以採用兩種方式供電,一種是採用電源供電方式,此時DS18B20的1腳接地,2腳作為信號線,3腳接電源。另一種是寄生電源供電方式,如所示單片機埠接單線匯流排,為保證在有效的DS18B20時鍾周期內提供足夠的電流,可用一個MOSFET管來完成對匯流排的上拉。
當DS18B20處於寫存儲器操作和溫度A/D轉換操作時,匯流排上必須有強的上拉,上拉開啟時間最大為10us。採用寄生電源供電方式時VDD端接地。由於單線制只有一根線,因此發送介面必須是三態的。
2.7 溫度測量系統整體硬體電路
Wei1 BIT P3.0 ;;數碼管第1位
Wei2 BIT P3.1 ;;數碼管第2位
Wei3 BIT P3.2 ;;數碼管第3位
Wei4 BIT P3.3 ;;數碼管第4位
Dian EQU 20H ;;小數點狀態狀態保存位元組
DisData1 EQU 30H ;;第1位顯示數據
DisData2 EQU 31H ;;第2位顯示數據
DisData3 EQU 32H ;;第3位顯示數據
DisData4 EQU 33H ;;第4位顯示數據
DisTime EQU 34H ;;設置顯示幾次後讀取溫度值
;;溫度數據存儲單元標號定義
TempL EQU 35H ;;溫度高位
TempH EQU 36H ;;溫度低位
;;與DS18B20通迅部分存儲單元及標號定義
DS18B20 BIT P1.0 ;;與DS18B20通迅的位地址
RFail BIT 21H.0 ;;復位失敗標記
Var EQU 22H ;;變數位元組,溫度數據處理時用到
Var2 EQU 3FH ;;變數位元組
主程序部分:
ORG 00H
LJMP START
ORG 100H
START: ;;-----初始化
MOV SP,#60H ;;初始化堆棧指針
Set18B20:;;-----DS18B20初始化
;;DS18B20復位
ACALL Reset
JB RFail,LOOP ;;復位失敗則直接跳至顯示部分
;;對DS18B20發出Skip ROM命令
MOV A,#0CCH
ACALL Write
;;對DS18B20發出溫度轉換命令
MOV A,#44H
ACALL Write
SetDisT:MOV DisTime,#3 ;;設置下一個循環體的循環8次
LOOP:
ACALL Display ;;顯示
JB RFail,Set18B20 ;;DS18B20復位失敗時,在顯示完一次後重新復位
DJNZ DisTime,LOOP
JNB DS18B20,$ ;;判斷DS18B20是否已完成溫度轉換
ACALL GetTemp ;;從DS18B20讀出溫度值
ACALL DealTemp ;;溫度值處理
ACALL SendDisDT ;;根據當前系統狀態設置顯示內容
SJMP SetDisT ;;;;;;;
;;根據當前狀態給顯示模塊設置顯示參數
SendDisDT:
MOV Dian,#7FH ;;最高位為0代表顯示小數點
;;傳送溫度值
MOV A,TempH ;;送高位數據
MOV VAR,TempL ;;送低位數據
ACALL TransData
RET
;;A中保存高位值,Var中保存低位值
TransData:
;;取個位值
MOV B,#10
DIV AB
MOV DisData2,B
;;取十位值
JZ HavNot1 ;;判斷商是否為0
MOV B,#10
DIV AB
MOV DisData3,B
JZ HavNot2 ;;判斷商是否為0
MOV DisData4,A
SJMP XiaoShu ;;跳至百位符號處理部分
HavNot1:MOV DisData3,#10 ;;十位開始沒有數字
HavNot2:MOV DisData4,#10 ;;百位開始沒有數字
SignJudge:;;符號處理部分
JNB VAR.7,XiaoShu ;;當為負數顯示符號
MOV A,#10
CJNE A,DisData3,BWSign
MOV DisData3,#11 ;;負號在十位
SJMP XiaoShu
BWSign:MOV DisData4,#11 ;;負號在百位
XiaoShu:;;小數處理部分,用查表法獲取小數值,精確到小數點後1位
MOV A,VAR
ANL A,#0FH
MOV DPTR,#XSTab
MOVC A,@A+DPTR
MOV DisData1,A
RTransTemp:
RET
XSTab: DB 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9
DS18B20通迅模塊組
-------復位模塊
Reset: ;;3微秒高電平
SETB DS18B20
MOV R7,#250
CLR RFail ;;清0復位失敗標記
CLR DS18B20
;;延遲501uS
DJNZ R7,$
SETB DS18B20 ;;釋放匯流排(拉高數據線)
;;等待DS18B20作出復位成功反應,最大等待時間為69uS
MOV R7,#17
Wait:
JNB DS18B20,RReset ;;若DS18B20在作出復位成功反應,不再等待
DJNZ R7,Wait
SETB RFail ;;70uS內DS18B20作出復位成功反應,置1復位失敗標記
RReset:
;;延遲350Us
MOV R7,#174
DJNZ R7,$
SETB DS18B20
RET
/
;;-------向DS18B20寫一個字的模塊,要寫的內容提前裝入ACC中
Write:
MOV R6,#8 ;寫8位
WriteBit:
;;2微秒高電平
SETB DS18B20
MOV R7,#3
;;7微秒低電平
CLR DS18B20
DJNZ R7,$
;;ACC低位送至DS18B20
RRC A
MOV DS18B20,C
;;延遲60Us
MOV R7,#28
DJNZ R7,$
;;是否已寫完8位
DJNZ R6,WriteBit
RWrite:
SETB DS18B20
RET
; /
;;-------從DS18B20讀回一個位元組的內容,讀回的內容裝入ACC中
Read:
MOV R6,#8 ;;讀回8位
MOV A,#0 ;;讀回的內容裝入ACC中
ReadBit:
;;2微秒高電平
SETB DS18B20
MOV R7,#7
;;2微秒低電平
CLR DS18B20
NOP
;;16微秒高電平
SETB DS18B20
DJNZ R7,$
;;讀回一位數據放入ACC中
MOV C,DS18B20
RRC A
;;延遲66Us
MOV R7,#33
DJNZ R7,$
;;是否已讀完8位
DJNZ R6,ReadBit
RRead:
SETB DS18B20
RET
/
;;-------與DS18B20通迅,讀回兩位元組溫度值,並裝入ACC中TempL和TempH中
GetTemp:
ACALL Reset ;;復位
JB RFail,RGetTemp ;;判斷復位是否成功
;;復位成功
;;對DS18B20發出Skip ROM命令
MOV A,#0CCH
ACALL Write
;;對DS18B20發出讀命令
MOV A,#0BEH
ACALL Write
;;從DS18B20讀回低8位溫度值
ACALL Read
MOV TempL,A
;;從DS18B20讀回高8位溫度值
ACALL Read
MOV TempH,A
ACALL Reset ;;復位
JB RFail,RGetTemp ;;判斷復位是否成功
;;對DS18B20發出Skip ROM命令
MOV A,#0CCH
ACALL Write
;;對DS18B20發出溫度轉換命令
MOV A,#44H
ACALL Write
RGetTemp:
RET
溫度數據處理模塊
DealTemp:
;;將整數的二進制數部分移到一個位元組,符號位和小數部分移到一個位元組
MOV R1,#Var
MOV Var,TempH
MOV A,TempL
XCHD A,@R1 ;;符號位、小數部分至VAR(@R1),整數部分至ACC
SWAP A
;;整數部分處理
JNB Var.7,NotNeg ;;判斷是否為負數
CPL A ;;為負數,取反後加1得其絕對值
;;小數部分取反
XRL Var,#1FH ;;
INC Var
NotNeg:
MOV TempH,A
MOV TempL,Var
RET
顯示模塊
-------顯示DisData(30H)從開始的三個位元組保存顯示信息
Display:
MOV DPTR,#Tab
;;**顯示小數部分
MOV A,DisData1
MOVC A,@A+DPTR
MOV P2,A
CLR Wei1
ACALL Delay
SETB Wei1
;;**顯示個位
MOV A,DisData2
MOVC A,@A+DPTR
;;小數點處理
ANL A,Dian
MOV P2,A
CLR Wei2
ACALL Delay
SETB Wei2
;;**顯示十位
MOV A,DisData3
MOVC A,@A+DPTR
MOV P2,A
CLR Wei3
ACALL Delay
SETB Wei3
;;**顯示百位
MOV A,DisData4
MOVC A,@A+DPTR
MOV P2,A
CLR Wei4
ACALL Delay
SETB Wei4
RET
Tab: ;;0~9、空白、負號的編碼
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0BFH
;;延遲
Delay:
MOV R6,#6
DD1:MOV R5,#250
DJNZ R5,$
DJNZ R6,DD1
RET
END
這裡面插不了圖,我有這個的整套課程設計報告,想要找我,[email protected]
『伍』 基於單片機的智能溫度控制器的設計(測溫部分用PT100),誰有做好的或者程序和原
現成電路及程序,有償供應
『陸』 基於單片機的恆溫控制系統
我剛幫別人做了一個,是按這個要求做的,你可以提出任意修改要求。
程序是匯編的,已經調試通過。
ProteUS模擬文件下載地址:
推薦:70電加熱PRE.rar( http://ishare.iask.sina.com.cn/f/7033603.html )
; 設計基於單片計算機的溫度控制器。用於控制電加熱爐的溫度。具體要求如下:
; 1. 溫度連續可調,范圍為30℃~150℃
; 2. 超調量σ%≤20%
; 3. 溫度誤差≤±0.5℃
; 4. 人-機對話方便
; 5. 控制演算法採用PID或改進的PID或其他演算法.
; (我用的是AT89C52的單片機:
; A.電加熱爐經由溫度感測器測量後,
; 通過V/F變換器的模數轉換,
; 將電壓或電流量轉換為數字信號進入單片機內,
; 然後通過移位寄存器和解碼器的信息轉換,
; 通過顯示驅動器來進行LED數碼管的溫度顯示;
; B.單片機也通過雙向可控硅來控制爐內的溫度;
; C.用戶通過按鍵來設置溫度上限、下限值)
『柒』 基於單片機的自動溫控系統的設計.畢業論文開題報告
熱電致冷器件特別適合於小熱量和受空間限制的溫控領域。改變加在器件上的直流電的極性即可變致冷為加熱,而吸熱或放熱率則正比於所加直流電流的大小。Pe1tier 溫控器的設定溫度可以在一個較寬的范圍內任意選擇,可選擇低於或高於環境溫度。
在本系統中我們選用了天津藍天高科電源有限公司生產的半導體致冷器件 TES1-12739,其最大溫差電壓 14.7V,最大溫差電流3.9A最大致冷功率33.7W。
1.5 其它部分
系統採用Samsung(三星)公司生產的真空熒光數碼顯示屏 VFD用來實時顯示當前溫度,以觀察控制效果。鍵盤和串列通信介面用來設定控制溫度和調整PID參數。系統電路原理圖如圖3所示。
2 系統軟體設計
系統開始工作時,首先由單片機控制軟體發出溫度讀取指令,通過數字溫度感測器 DS18B20 采樣被控對象的當前溫度值T1並送顯示屏實時顯示。然後,將該溫度測量值與設定值T比較,其差值送 PID控制器。PID 控制器處理後輸出一定數值的控制量,經DA 轉換為模擬電壓量,該電壓信號再經大電流驅動電路,提高電流驅動能力後載入到半導體致冷器件上,對溫控對象進行加熱或製冷。加熱或製冷取決於致冷器上所加電壓的正負,若溫控對象當前溫度測量值與設定值差值為正,則輸出負電壓信號,致冷器上載入負電壓溫控對象溫度降低;反之,致冷器上載入正向電壓,溫控對象溫度升高。上述過程:溫度采樣-計算溫差-PID調節-信號放大輸出周而復始,最後將溫控對象的溫度控制在設定值附近上下波動,隨著循環次數的增加,波動幅度會逐漸減小到某一很小的量,直至達到控制要求。為了加快控制,在進入PID控制前加入了一段溫差判斷程序。當溫度差值大於設定閾值Δt時,系統進行全功率加熱或製冷,直到溫差小於Δt才進入PID控制環節。圖4為系統工作主程序的軟體流程圖.
3 結論
本文設計的基於單片機數字PID控制的精密溫度控制系統,在實際應用中取得了良好的控制效果,溫度控制精度達到±0.1℃。經48小時連續運行考驗,系統工作穩定,有效地降低了輻亮度標准探測器的溫度系數,使輻亮度標准探測器在溫度變化較大的環境中也能保持其高精度,為實現基於探測器的高精度輻射定標的廣泛應用奠定了基礎。
本文作者創新點:在原來基於PC的PID溫控系統的基礎上,設計了由單片機、數字式溫感測器DS18B20和半導體致冷器組成的精密溫度控制系統。該溫控系統的應用為高精度光輻射測量儀器-輻亮度標准探測器的小型化、智能化提供了有利條件。
『捌』 基於單片機的電烤箱溫度控制系統的流程圖及程序怎麼設計怎麼編啊C語言的
首先:
一·硬體:單片機*1 溫度感測器*1 繼電器 (220V,大電流的)電加熱管(若干) 焊錫絲 烙鐵 導線若干
二·將上面的硬體連接,用溫度感測器測試溫度 ->利用單片機讀取感測器的內部寄存器的值,一般感測器都有介面(spi,i2c等),程序可以從網上找,很多改一下設置就能讀取感測器的數值(比如引腳定義)->根據所測溫度可以設置上限與下限的溫度值,還有加熱的時間。這主要是控制繼電器通斷就可以實現的。程序很簡單。
『玖』 基於MCS-51單片機的精密溫度控制系統的設計與實現
上傳內容
僅供學習與參考
摘要
本檢測系統硬體設計以AT89C51單片機為核心,用溫度感測器DS18B20實現溫度控制,用數碼管顯示實際溫度和預設溫度,製作數字溫度計,並可以實現溫度預警控制。
單片機系統的軟體編程採用單片機匯編進行編程。應用軟體採用KEIL和PROTEUS模擬軟體模擬實現控制過程。
溫度控制系統是基於單片機的計算機檢測技術的軟硬體開發和面向對象的高級可視化程序開發的有機結合。對溫度控制的發展有很大的好處。如果投入生產,不僅會創造良好的經濟效益,還可提高溫控的簡單化。
關鍵詞 單片機;DS18B20;調節;溫度
Abstract
This examination system hardware design take at89C51 monolithic integrated circuit as a core, realizes the temperature control with temperature sensor DS18B20, Demonstrates the actual temperature and the preinstall temperature with the nixie tube,manufactures the simple intelligence temperature control system - - digit thermometer,And may realize the temperature early warning control.
. The monolithic integrated circuit system's software programming uses the monolithic integrated circuit assembly to carry on the programming. The superior machine application software uses KEIL and the PROTEUS simulation software simulation realizes the controlled process.
This article develops the intelligence temperature control system is based on monolithic integrated circuit's computer examination technology software and hardware development and face the object high-level visualization procere development organic synthesis. Has the very big advantage to temperature control's development. If place in operation, not only will create the good economic efficiency, but may also propose the simplification which the high temperature will control.
Keywords microcontroller;DS18B20;measure;temperture
目錄
摘要 I
Abstract II
第1章 緒論 4
1.1 溫度感測器發展概述 4
1.2 單片機技術簡介 4
1.3 溫度檢測技術的發展 5
第2章 溫度感測器的選擇 8
2.1 測溫方法 8
2.2 DS18B20簡介 9
第3章 軟硬體設計 10
3.1 單片機的選擇 10
3.2 溫度感測器的選擇 10
3.3 模擬軟體的選擇 11
3.4 編譯軟體的選擇 11
3.5 PROTEUS 模擬電路圖 12
第4章 匯編語言程序 13
4.1 主程序和溫度值轉換成顯示值子程序的流程圖 13
4.2 DS18B20溫度子程序和顯示子程序的流程圖 14
4.3 匯編語言源程序 14
第1章 緒論
1.1 溫度感測器發展概述(略)
1.2 單片機技術簡介(略)
1.3 溫度檢測技術的發展(略)
第2章 溫度感測器的選擇
2.1 測溫方法
溫度是一個很重要的物理參數,鋼鐵的冶煉、石油的分餾、塑料的合成以
及農作物的生長等等都必須在一定的溫度范圍內進行,各種構件、材料的體積、電阻、強度以及抗腐蝕等物理化學性質,一般也都會隨溫度而變化。人們利用各種能源為人類服務,也往往是使某些介質通過一定的溫度變化來實現的。所以在生產和化學試驗中,人們經常會碰到溫度測量的問題。
溫度感測器是檢測溫度的器件,其種類最多,應用最廣,『發展最快。眾所周知,日常使用的材料及電子元件大部分都隨溫度而變化,資料【5】中介紹了作為實用感測器必須滿足的一些條件:
(1)在使用溫度范圍內溫度特性曲線要求達到的精度能符合要求:為了能
在較寬的溫度范圍內進行檢測,溫度系數不宜過大,過大了就難以使用,但對
於狹窄的溫度范圍或僅僅定點的檢測,其溫度系數越大,檢測電路也能越簡單。
(2)為了將它用於電子線路的檢測裝置,要具有檢測便捷和易於處理的特
性。隨著半導體器件和信號處理技術的進步,對溫度感測器所要求的輸出特性
應能滿足要求。
(3)特性的偏移和蠕變越小越好,互換性要好。
(4)對於溫度以外的物理量不敏感。
(5)體積小,安裝方便:為了能正確地測量溫度,感測器的溫度必須與被
測物體的溫度相等。感測器體積越小,這個條件越能滿足。
(6)要有較好的機械、化學及熱性能。這對於使用在振動和有害氣體的環
境中特別重要。
(7)無毒、安全以及價廉、維修、更換方便等。
溫度測量的方法很多,根據溫度感測器的使用方式,通常分為接觸式測溫
法與非接觸式測溫法兩類。
(1)接觸式測溫法
由熱平衡原理可知,兩個物體接觸後,經過足夠長時間的熱交換達到熱平
衡,則它們的溫度必然相等。如果其中之一為溫度計,就可以用它對另一個物體實現溫度測量,這種測溫方式稱為接觸式測溫法。接觸式測溫的優點顯而易
見,它簡單,可靠,測量精度高,但同時也存在不足:溫度計要與被測物體有
良好的熱接觸,並充分換熱,從而產生了測溫滯後現象;測溫組件可能與被測
物體發生化學反應;由於受到耐高溫材料的限制,接觸式測溫儀表不可能應用
於很高溫度的測量。
(2)非接觸式測溫法
由於測量組件與被測物體不接觸,利用物體的熱輻射能隨溫度變化的原理
測定物體溫度。因而測量范圍原則上不受限制,測溫速度較快,還可以在運動
中測量。這種測溫方式稱為非接觸式測溫法。它的特點是:不與被測物體接觸,也不改變被測物體的溫度分布,熱慣性小。從原理上看,用這種方法測溫無上限。通常用來測定1000℃以上的移動、旋轉或反應迅速的高溫物體的溫度或表面溫度。
2.2 DS18B20簡介
2.2.1技術性能描述
單線介面方式,DS18B20在與微處理器連接時僅需要一條口線即可實現微處理器與DS18B20的雙向通訊。測溫范圍 -55℃~+125℃,固有測溫解析度0.5℃。支持多點組網功能,多個DS18B20可以並聯在唯一的三線上,實現多點測溫。工作電源: 3~5V直流電源。
在使用中不需要任何外圍元件,測量結果以9~12位數字量方式串列傳送。適用於DN15~25, DN40~DN250各種介質工業管道和狹小空間設備測溫。
2.2.2應用范圍
該產品適用於冷凍庫,糧倉,儲罐,電訊機房,電力機房,電纜線槽等測溫和控制領域,軸瓦,缸體,紡機,空調,等狹小空間工業設備測溫和控制。
2.2.3接線說明
特點有一線介面,只需要一條口線通信 多點能力,簡化了分布式溫度感測應用 無需外部元件 可用數據匯流排供電,電壓范圍為3.0 V至5.5 V 無需備用電源 測量溫度范圍為-55 ° C至+125 ℃ 。華氏相當於是-67 ° F到257華氏度 -10 ° C至+85 ° C范圍內精度為±0.5 ° C。
溫度感測器可編程的解析度為9~12位 溫度轉換為12位數字格式最大值為750毫秒 用戶可定義的非易失性溫度報警設置 應用范圍包括恆溫控制,工業系統,消費電子產品溫度計,或任何熱敏感系統描述該DS18B20的數字溫度計提供9至12位(可編程設備溫度讀數。信息被發送到/從DS18B20 通過1線介面,所以中央微處理器與DS18B20隻有一個一條口線連接。為讀寫以及溫度轉換可以從數據線本身獲得能量,不需要外接電源。 因為每一個DS18B20的包含一個獨特的序號,多個DS18B20可以同時存在於一條匯流排。這使得溫度感測器放置在許多不同的地方。它的用途很多,包括空調環境控制,感測建築物內溫設備或機器,並進行過程監測和控制。【6】
第3章 軟硬體設計
3.1 單片機的選擇
單片機系統由單片機AT89C51、74HC245等晶元構成,完成數據採集、處理、通訊以及所有的功能,是整個系統的核心模塊。
單片機是整個系統的核心,對系統起監督、管理、控製作用,並進行復雜的信號處理,產生測試信號及控制整個檢測過程。所以在選擇單片機時,參考了以下標准。
(1)運行速度。單片機運行速度一般和系統匹配即可。
(2)存儲空間。單片機內部存儲器容量,外部可以擴展的存儲器(包括1/0口)空間。
(3)單片機內部資源。單片機內部存儲資源越多,系統外接的部件就越少,這可提高系統的許多技術指標。
(4)可用性。指單片機是否能很容易地開發和利用,具體包括是否有合適的開發工具,是否適合於大批量生產:、性能價格比,是否有充足的資源,是否有現成的技術資源等。
(5)特殊功能。一般指可靠性、功耗、掉電保護、故障監視等。
從硬體角度來看,與MCS-51指令完全兼容的新一一代AT89CXX系列機,比在片外加EPROM才能相當的8031-2單片機抗干擾性能強,與87C51-2單片機性能相當,但功耗小。程序修改直接用+5伏或+12伏電源擦除,更顯方便、而且其工作電壓放寬至2.7伏一6伏,因而受電壓波動的影響更小,而且4K的程序存儲器完全能滿足單片機系統的軟體要求。故AT89C51單片機是構造本檢測系統的更理想的選擇。本系統選用ATMEL生產的AT89C51單片機,其特性如下:
(1) 4K位元組可編程閃速程序存儲器;1000次循環寫/擦
(2)全靜態工作:OHz-24MHz
(3)三級程序存儲器鎖定
(4) 128 X 8位內部數據存儲器,32條可編程1/0線
(5)兩個十六位定時器/計數器,六個中斷源
(6)可編程串列通道,低功耗閑置和掉電模式
該器件採用了ATMEL的高密度非易失性的存儲器工藝,並且可以與工業標準的MCS-51指令集和輸出管腳兼容。由於將多功能8位CPU與閃速式存儲器組合在單個晶元中,AT89C51是一種高效的微控制器,為很多嵌入式系統提供了高靈活性且價廉的方案。
3.2 溫度感測器的選擇
DS18B20是美國達拉斯半導體公司的產品,與其他產品相比較它的性能有如下特點:①採用單匯流排專用技術,既可通過串列口線,也可通過其它I/O口線與微機介面,無須經過其它變換電路,直接輸出被測溫度值(9位二進制數,含符號位),②測溫范圍為-55℃-+125℃,測量解析度為0.0625℃,③內含64位經過激光修正的只讀存儲器ROM,④適配各種單片機或系統機,⑤用戶可分別設定各路溫度的上、下限,⑥內含寄生電源。所以在本設計中,我採用了DS18B20作為溫度感測器。【8】
3.3 模擬軟體的選擇
Proteus 是英國Labcenter公司開發的電路分析與實物模擬軟體。它運行於Windows操作系統上,可以模擬、分析(SPICE)各種模擬器件和集成電路,該軟體的特點是:
①實現了單片機模擬和SPICE電路模擬相結合。具有模擬電路模擬、數字電路模擬、單片機及其外圍電路組成的系統的模擬、RS232動態模擬、I2C調試器、SPI調試器、鍵盤和LCD系統模擬的功能;有各種虛擬儀器,如示波器、邏輯分析儀、信號發生器等。
②支持主流單片機系統的模擬。目前支持的單片機類型有:ARM7(LPC21xx)、 8051/52系列、AVR系列、PIC10/12/16/18系列、HC11系列以及多種外圍晶元。
③提供軟體調試功能。在硬體模擬系統中具有全速、單步、設置斷點等調試功能,同時可以觀察各個變數、寄存器等的當前狀態,因此在該軟體模擬系統中,也必須具有這些功能;同時支持第三方的軟體編譯和調試環境,如Keil C uVision2、MPLAB等軟體。【9】
3.4 編譯軟體的選擇
KEIL C51標准C編譯器為8051微控制器的軟體開發提供了C語言環境,同時保留了匯編代碼高效,快速的特點。C51編譯器的功能不斷增強,使你可以更加貼近CPU本身,及其它的衍生產品。C51已被完全集成到uVision2的集成開發環境中,這個集成開發環境包含:編譯器,匯編 器,實時操作系統,項目管理器,調試器。uVision2 IDE可為它們提供單一而靈活的開發環境。
C51 V7版本是目前最高效、靈活的8051開發平台。它可以支持所有8051的衍生產品,也可以支持所有兼容的模擬器,同時支持其它第三 方開發工具。因此,C51 V7版本無疑是8051開發用戶的最佳選擇。
uVision2集成開發環境具有如下功能:
一、項目管理
工程(project)是由源文件、開發工具選項以及編程說明三部分組成的。
一個單一的uVision2工程能夠產生一個或多個目標程序。產生目標程序的源文件構成「組」。開發工具選項可以對應目標,組或單個文件。
uVision2包含一個器件資料庫(device database),可以自動設置匯編器、編譯器、連接定位器及調試器選項,來滿足用戶充分利用特定 微控制器的要求。此資料庫包含:片上存儲器和外圍設備的信息,擴展數據指針(extra data pointer)或者加速器(math accelerator)的特 性。
uVision2可以為片外存儲器產生必要的連接選項:確定起始地址和規模。
二、集成功能
uVision2的強大功能有助於用戶按期完工。
1.集成源極瀏覽器利用符號資料庫使用戶可以快速瀏覽源文件。用詳細的符號信息來優化用戶變數存儲器。
2.文件尋找功能:在特定文件中執行全局文件搜索。
3.工具菜單:允許在V2集成開發環境下啟動用戶功能。
4.可配置SVCS介面:提供對版本控制系統的入口。
5.PC-LINT介面:對應用程序代碼進行深層語法分析。
6.Infineon的EasyCase介面:集成塊集代碼產生。【10】
3.5 PROTEUS 模擬電路圖
圖1是基於單片機的智能溫度檢測系統電路原理圖。控制加熱熱水器電源電路用LED燈模擬代替,取消無水報警電路。裝上水後接通電源,下方LED數碼管顯示當前水溫。上方LED數碼管顯示預設水溫。操作「個位」鍵和「十位」鍵可預設水溫(如99℃)控制點。該電路具有如下功能:
(1) 測量水溫,精度為1℃,范圍為0~99℃;
(2) 三位數碼管實時顯示水溫;
(3) 可預設水溫(如99℃)控制點,當水加熱到該水溫時自動斷電,當水溫低於該水溫時自動上電加熱;
(4) 無水自動斷電和報警功能(略)。
圖1 基於單片機的智能溫度檢測系統電路原理圖
第4章 匯編語言程序
4.1 主程序和溫度值轉換成顯示值子程序的流程圖
4.2 DS18B20溫度子程序和顯示子程序的流程圖
4.3 匯編語言源程序
ORG 0
LJMP MAIN1
ORG 0003H
LJMP ZINT0
ORG 13H
LJMP ZINT1
TMPH: EQU 28H
FLAG1: EQU 38H
DATAIN: BIT P3.7
MAIN1: SETB IT0
SETB EA
SETB EX0
SETB IT1
SETB EX1
SETB P3.6
SETB P3.2
MOV 74H,#0
MOV 75H,#0
MOV 76H,#0
MOV 77H,#0
MAIN: LCALL GET_TEMPER
LCALL CVTTMP
LCALL DISP1
AJMP MAIN
INIT_1820:
SETB DATAIN
NOP
CLR DATAIN
MOV R1,#3
TSR1: MOV R0,#107 ;保持642ms
DJNZ R0,$
DJNZ R1,TSR1
SETB DATAIN ;釋放DS18B20匯流排
NOP
NOP
NOP
MOV R0,#25H
TSR2: JNB DATAIN,TSR3
DJNZ RO,TSR2
CLR FLAG1
SJMP TSR2
TSR3: SETB FLAG1 ;標志位置1,證明DS18b20存在
CLR P1.7
MOV R0,#117
TSR6: DJNZ R0,$
TSR7: SETB DATAIN
RET ;延時254us
GET_TEMPER:
SETB DATAIN
LCALL INIT_1820
JB FLAG1,TSS2
NOP
RET ;DS18B20檢測程序
TSS2: MOV A,#0CCH ;跳過ROM,使用存儲器
LCALL WRITE_1820
MOV A,#44H ;對RAM操作,開始溫度轉換
LCALL WRITE_1820
ACALL DISP1
LCALL INIT_1820
MOV A,#0CCH
LCALL WRITE_1820
MOV A,#0BEH
LCALL WRITE_1820
LCALL READ_1820;讀暫存器中的溫度數值
RET
WRITE_1820:
MOV R2,#8
CLR C
WR1: CLR DATAIN
MOV R3,#6
DJNZ R3,$
RRC A
MOV DATAIN,C
MOV R3,#23
DJNZ R3,$
SETB DATAIN
NOP
DJNZ R2,WR1
SETB DATAIN
RET
READ_1820:
MOV R4,#2
MOV R1,#29H
RE00: MOV R2,#8
RE01: CLR C
SETB DATAIN
NOP
NOP
CLR DATAIN
NOP
NOP
NOP
SETB DATAIN
MOV R3,#9
RE10: DJNZ R3,RE10
MOV C,DATAIN
MOV R3,#23
RE20: DJNZ R3,RE20
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET
CVTTMP: MOV A,TMPH
ANL A,#80H ;判斷溫度正負,正不變,負則取反加1
JZ TMPC1
CLR C
MOV A,TMP1
CPL A
ADD A,#1
MOV TMP1,A
MOV A,TMPH
CPL A
ADDC A,#0
MOV TMPH,A
MOV 73H,#0BH
SJMP TMPC11
TMPC1: MOV 73H,#0AH
TMPC11: MOV A,TMP1
ANL A,#0FH
MOV DPTR,#TMPTAB
MOVC A,@A+DPTR
MOV 70H,A
MOV A,TMP1
ANL A,#0FH
SWAP A
ORL A,TMPL
B2BCD: MOV B,#100
DIV AB
JZ B2BCD1
MOV 73H,A
B2BCD: MOV A,#10
XCH A,B
DIV AB
MOV 72H,A
MOV 71H,B
TMPC12: NOP
DISBCD: MOV A,73H
ANL A,#0FH
CJNE A,#1,DISBCD0
SJMP DISBCD1
DISBCD0: MOV A,72H
ANL A,#0FH
JNZ DISBCD1
MOV A,73H
MOV 72H,A
MOV 73H,#0AH
DISBCD1: RET
TMPTAB: DB 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9
DISP1: MOV R1,#70H
MOV R0,#74H
MOV R5,#0FEH ;顯示實際溫度
PLAY: MOV P1,#0FFH
MOV A,R5
MOV P2,A
MOV A,@R1
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P1,A
MOV P1,A
MOV A,@R0
MOVC A,@A+DPTR
MOV P0,A
MOV A,R5
JB ACC.1,LOOP1
JB P1.7
CLR P1.7
CLR P0.7 ;顯示小數點
LOOP1: LCALL DL1MS
INC R1
INC R0
MOV A,R5
JNB ACC.3,ENDOUT
RL A
MOV R5,A
MOV A,73H
CJNE A,#1,DD2
SJMP LEDH
DD2: MOV A,72H
CJNE A,72H,DDH
SJMP DD1
DDH: JNE PLAY1
LEDH: CLR P3.6
SJMP PLAY
PLAY1: SETB P3.6
SJMP PLAY
ENDOUT: MOV P1,#0FFH
MOV P2,#0FFH
RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,90H,0FFH,0BFH
DL1MS: MOV R6,#14H
DL1: MOV R7,#100
DJNZ R7,$
DJNZ R6,DL1
RET
ZINT0: PUSH A
INC 75H
MOV A,,75H
CJNE A,#10,ZINT01
MOV 75H,#0
ZINT01: POP A
RETI
ZINTT1: PUSH A
INC 76H
MOV A,76H
CJNE A,#10,ZINT11
MOV 76H,#0
ZINT11: POP A
RETI