智能化水温控制系統
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
水温控制系統
摘要
現如今,人們的生活越來越強調智能化以及低碳化,無論是智能化還是低碳化,生活在人們都希望自己的電器越來越智能,即能按照人們的意願,低功耗的實現功能。水温控制作為人們生活以及工業的重要組成部分,能否實現智能化以及低功耗化十分重要。水温控制系統以STC89C51作為核心的温度控制系統,將DS18B20作為温度感應器,可直接反饋數字量的温度信息並可以調節精度;以繼電器以及螺旋加熱管作為加熱模塊;以發光二級管以及蜂鳴器作為聲光告警裝置;以數碼管作為温度顯示模塊。程序上利用PID調節算法,多次調節其中參數,使得温度控制更加精確。該系統具有簡單、成本低、質量安全可靠的特點。相信無論是在生活還是生產中都會有不錯的應用前景。
關鍵詞 智能化 温度控制 STC89C51 DS18B20 PID調節算法
一.任務以及要求
設計並製作一個水温自動控制系統,水温可以在一定範圍內由人工設定,可以實現自動報警功能。
1.基本內容如下:
(1)温度設定範圍為:40~90℃,最小區分度為 1℃,標定温度≤1℃。
(2)環境温度降低時温度控制的靜態誤差≤1℃。
(3)用10進制數碼管顯示水的實際温度。
2.發揮要求:
(1)温度控制範圍擴大,最小區分度減小。
(2)温度控制的靜態誤差≤0.2℃。
(3)特色與創新。
二.方案設計及其論證
水温的控制,必須先精確地獲取温度,所以温度傳感器的選擇就非常重要。通常,温度所測量的是模擬量,模擬量的轉換涉及到A/D的轉換。温度傳感器把温度傳送給處理器核心,處理器核心經過分析,判斷是否滿足處理的條件,進行相關的處理。可實現的動作包括以下幾項:達到設定温度,進行聲光報警;温度低,進行加熱處理。其中温度的設定就要利用到鍵盤。聲光報警就需要用到發光二級管以及蜂鳴器。經以上分析,可以將温度控制系統分為以下幾個模塊:
1.温度傳感器
温度傳感器應具有精度足夠高、處理速度足夠快、體積小等特點。採用DS18B20温度傳感器。DS18B20是DALLAS公司生產的一線式數字温度傳感器,具有3引腳TO-92小體積封裝形式;温度測量範圍為-55℃~+125℃,可編程為9位~12位A/D轉換精度,測温分辨率可達0.0625℃,被測温度用符號擴展的16位數字量方式串行輸出遠端引入。此器件具有體積小、質量輕、線形度好、性能穩定等優點其各方面特性都滿足此係統的設計要求。 更重要的是採用該温度傳感器後不用採用A/D轉換。節省了大量的工作量。
2.鍵盤顯示
按鍵主要涉及到温度的調節以及模式的轉換。顯示部分主要涉及到水温的實時顯示,以及功能模式的顯示。按任務功能需求採用獨立鍵盤,並且利用MCU對鍵盤進行掃描。這種方案既能很好的控制鍵盤及顯示,又為MCU大大的減少了程序的複雜性,而且具有體積小,簡單易做的特點。顯示部分按照任務要求採用4位數碼管設計,來顯示水温以及工作模式等。也具有簡單、可靠的特點。
核心
CPU主要控制水温以及其他模塊的協調工作。是該水温控制系統的核心。根據對方案的分析,採用簡單易用的STC89C52單片機,其內部有4KB單元的程序存儲器,不需外部擴展程序存儲器,而且它的I/O口也足夠本次設計的要求。具有簡單方便、成本低以及可靠的特點。
經以上分析,只要合理設計電路以及正確編寫程序,以上幾個模塊在MCU以及程序的調節下能協調工作,共同完成水温的控制,從而達到任務要求。
三.理論分析與計算
各個模塊要在MCU的調節下合理有序的工作,那麼系統必須採用合理高效的控制系統。這就要涉及到過程控制,過程控制指對生產過程的某一或某些物理參數進行的自動控制。過程控制可分為:模擬控制系統、微機過程控制系統以及數字控制系統DDC。模擬控制系統中被控量的值由傳感器或變送器來檢測,這個值與給定值進行比較,得到偏差,模擬調節器依一定控制規律使操作變量變化,以使偏差趨近於零,其輸出通過執行器作用於過程。微機過程控制系統以微型計算機作為控制器。控制規律的實現,是通過軟件來完成的。改變控制規律,只要改變相應的程序即可。
現如今在生產以及實踐中運用最多的是DDC(Direct Digital Congtrol)系統:
圖3-1 DDC系統構成框圖
DDC(Direct Digital Congtrol)系統是計算機用於過程控制的最典型的一種系統。微型計算機通過過程輸入通道對一個或多個物理量進行檢測,並根據確定的控制規律(算法)進行計算,通過輸出通道直接去控制執行機構,使各被控量達到預定的要求。由於計算機的決策直接作用於過程,故稱為直接數字控制。
其中控制規律即為PID調節,本系統中為軟件實現。涉及到的理論計算如下:
1.模擬PID控制規律的離散化
表一.模擬PID控制規律的數字化公式
模擬形式 | 離散化形式 |
2.數字PID控制器的差分方程
式中 為比例項
為積分項
為微分項
四.系統設計方案
1.工作模式
本着智能化以及按照題目要求,將系統設計有以下兩個個工作模式:A.測定水温以及顯示水温;B.設定水温並保温;其中A為默認工作狀態,即開機工作狀態,工作內容為實時測量水温並在數碼管上顯示。B為設定温度並保温。由用户設定一定的温度,系統自動工作,加熱到設定温度後聲光報警,聲光報警裝置可獨立開關,如果不切斷電源或切換模式,系統將自動竟然保温模式。其中温度的設定有鍵盤控制。不管在那種工作模式,一旦復位鍵按下,將回到默認工作模式。在B工作模式下並且顯示實際水温時,按下加鍵可以顯示用户設定温度。根據以上的分析總結如下:
2.電路設計
根據以上的分析,可以將整個系統分為以下幾個部分:單片機最小系統,測温電路,功率電路,交流過零檢測電路,顯示電路,系統框圖如下:
(1)89C52最小系統
最小系統採用將C52MCU以及獨立鍵盤、數碼管集成在一塊板上的工作方式。 其中P0口接數碼管。其他包括復位電路、獨立鍵盤、晶振電路。其電路如下圖5-1所示:
圖5-1 最小系統
(2)18B20測温電路
測温電路是使用DS18b20數字式温度傳感器,它無需其他的外加電路,直接輸出數字量,可直接與單片機通信,讀取測温數據,電路十分簡單。它能夠達到0.5℃的固有分辨率,使用讀取温度的暫存寄存器的方法還能達到0.2℃以上的精度。DS18B20温度傳感器只有三根外引線:單線數據傳輸總線端口DQ ,外供電源線VDD,共用地線GND。外部供電方式(VDD接+5V,且數據傳輸總線接4.7k的上拉電阻,其接口電路如圖5-2所示:
圖5-2 控制電路
(3)功率電路
功率電路主要是繼電器模塊,包括三極管以及電阻組成控制部分,與MCU進行通信。PNP管的導通控制着繼電器的常閉觸點的接通與否。繼電器常閉觸點連接着外部加熱電路。其中繼電器的電感部分連接着二極管,起着引流保護PNP管的作用。其電路如下圖6-1:
圖6-1 功率電路
(4)聲光報警電路
聲光報警電路採用蜂鳴器以及二極管串聯的形式,通過PNP三極管控制電路通斷。利用P3.7來與MCU通信。如下圖6-2:
圖6-2 聲光報警電路
(5)紅外接收裝置
該部分為創新部分,採用紅外接收裝置來接受紅外遙控器的信號,這樣就可以通過無線方式進行信息的傳遞。通過遙控器可以設定温度,切換工作模式等。工作原理為紅外遙控器產生紅外信號,紅外接收頭接收到紅外信號後,其內部電路把信號送到放大器和限幅器,限幅器把脈衝幅度控制在一定的水平,而不論紅外發射器和接收器的距離遠近。交流信號進入帶通濾波器,帶通濾波器可以通過30khz到60khz的負載波,通過解調電路和積分電路進入比較器,比較器輸出高低電平,還原出發射端的信號波形。最終將數字信號傳輸到MCU,MCU做出相應的反應。其電路如下圖7-1:
圖7-1 紅外接收裝置
五.軟件設計説明
(1)總流程
本系統是採用查詢方式來顯示和控制温度的。其中加入了紅外以及鍵盤等的其他控制器件語句。總流程圖如下圖7-2:
圖 7-2 總流程圖
(2)工作時序
工作時序由初始化模塊、測温、顯示等模塊組成。具體工作時序如下圖8-1:
圖 8-1 工作時序
(3)主要程序
1.主函數如下:
#include
#include
unsigned char choice;
unsigned char key_down;
#include"DS18B20.H"
#include"PID.H"
#include"XIANSHI.H"
#include"KEYSCAN.H"
#include"INFRARED.H"
void main()
{
unsigned int tmp;
unsigned char counter=0;
P2 |= 0x07; //初始化按鍵
PIDBEGIN(); //初始化PID
init_infrared(); //初始化紅外
ReadTemperature(); //預讀一次温度
hello(); //顯示HELLO,屏蔽85°C
while(1)//檢測紅外線
{
if(IrOK==1&&Im[0]==0x00)
proc_infrared();
if(counter-- == 0)
{
tmp = ReadTemperature();
counter = 20;
}
key_scan();//掃描鍵盤
proc_key();//刷新顯示緩存
if(choice==0)
update_disbuf(tmp);
else
update_disbuf(set_tmpbuf);
if(pid_on)
compare_temper();
else
{
high_time=0;
low_time=100;
}
}
}
2. PID算法温度控制程序
#ifndef _PID_H__
#define _PID_H__
#include
#include
#include
struct PID {
unsigned int SetPoint; // 設定目標 Desired Value
unsigned int Proportion; // 比例常數 Proportional Const
unsigned int Integral; // 積分常數 Integral Const
unsigned int Derivative; // 微分常數 Derivative Const
unsigned int LastError; // Error[-1]
unsigned int PrevError; // Error[-2]
unsigned int SumError; // Sums of Errors
}
struct PID spid; // PID Control Structure
unsigned int rout; // PID Response (Output)
unsigned int rin; // PID Feedback (Input)
sbit output=P3^4;
unsigned char high_time,low_time,count=0;//佔空比調節參數
unsigned char set_temper=33;
void PIDInit (struct PID *pp)
{
memset ( pp,0,sizeof(struct PID));
}
unsigned int PIDCalc( struct PID *pp, unsigned int NextPoint )
{
unsigned int dError,Error;
Error = pp->SetPoint - NextPoint; // 偏差
pp->SumError += Error; // 積分
dError = pp->LastError - pp->PrevError; // 當前微分
pp->PrevError = pp->LastError;
pp->LastError = Error;
return (pp->Proportion * Error//比例
+ pp->Integral * pp->SumError //積分項
+ pp->Derivative * dError); // 微分項
}
/***********************************************************
温度比較處理子程序
***********************************************************/
compare_temper()
{
unsigned char i; //EA=0;
if(set_temper>temper)
{
if(set_temper-temper>2)
{
high_time=100;
low_time=0;
}
else
{
for(i=0;i<10;i++)
{ get_temper();
rin = s; // Read Input
rout = PIDCalc ( &spid,rin ); // Perform PID Interation }
if (high_time<=100)
high_time=(unsigned char)(rout/1600);
else
high_time=100;
low_time= (100-high_time);
} }
else if(set_temper<=temper)
{
if(temper-set_temper>0)
{
high_time=0;
low_time=100;
}
else
{
for(i=0;i<10;i++)
{ get_temper();
rin = s; // Read Input
rout = PIDCalc ( &spid,rin ); // Perform PID Interation }
if (high_time<100)
high_time=(unsigned char)(rout/20000);
else
high_time=0;
low_time= (100-high_time);
//EA=1;
} } }
/*****************************************************
T0中斷服務子程序,用於控制電平的翻轉 ,40us*100=4ms週期
******************************************************/
void serve_T0() interrupt 1 using 1
{
if(++count<=(high_time))
output=1;
else if(count<=100)
{
output=0;
}
else
count=0;
TH0=0x2f;
TL0=0xe0;
}
void PIDBEGIN()
{
TMOD=0x01;
TH0=0x2f;
TL0=0x40;
EA=1;
ET0=1;
TR0=1;
high_time=50;
low_time=50;
PIDInit ( &spid ); // Initialize Structure
ortion = 10; // Set PID Coefficients
gral = 8;
vative =6;
oint = 100; // Set PID Setpoint
}
#endif
18B20子程序
#ifndef __DS18B20_H__
#define __DS18B20_H__
sbit DQ = P3^5; //定義通信端口
unsigned int s;
unsigned char temper;
//晶振22MHz
void delay_18B20(unsigned int i)
{
while(i--);
}
//初始化函數
Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1; //DQ復位
delay_18B20(4); //稍做延時
DQ = 0; //單片機將DQ拉低
delay_18B20(100); //精確延時 大於 480us
DQ = 1; //拉高總線
delay_18B20(40);
}
//讀一個字節
ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // 給脈衝信號
dat>>=1;
DQ = 1; // 給脈衝信號
if(DQ)
dat|=0x80;
delay_18B20(10);
}
return(dat);
}
WriteOneChar(unsigned char dat)//寫一個字節
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
delay_18B20(10);
DQ = 1;
dat>>=1;
}
}
ReadTemperature(void)//讀取温度
{
unsigned char a=0;
unsigned char b=0;
unsigned int t=0;
//EA = 0;
Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號列號的操作
WriteOneChar(0xBE); //讀取温度寄存器等(共可讀9個寄存器) 前兩個就是温度
a=ReadOneChar();
b=ReadOneChar();
Init_DS18B20();//啟動下一次温度轉換
WriteOneChar(0xCC); // 跳過讀序號列號的操作
WriteOneChar(0x44); // 啟動温度轉換
t=(b*256+a)*25;
b=(b<<4)&0x7f;
s=(unsigned int)(a&0x1f);
s=(s*100)/16;
a=a>>4;
temper=a|b;
return(t>>2);
}
#endif
六.測試方法與數據
測量方式:接上系統的加熱裝置,裝入25.06攝氏度室温的水,通過鍵盤或者紅外遙控器設定控温温度。記錄調節時間、超調温度、穩態温度波動幅度等。
測量條件:環境温度26.5℃(附:加熱電爐功率600W)。
測量結果:如表二所示。在此僅以數值的方式給出測量結果。調節時間按温度進入設定温度±0.5℃範圍時計算。
表二 測量結果數據
設定温度/℃ | 35 | 45 | 65 | 75 |
調節時間/min | 1.15 | 1.12 | 1.58 | 1.06 |
超調温度/℃ | 35.06 | 45.12 | 64.87 | 74.87 |
穩態誤差/℃ | 0.06 | 0.12 | 0.13 | 0.13 |
六.測試結果分析
由測試結果和上表數據得出:
(1)温度設定範圍為30~95℃(在40~90範圍內),最小區分度達到0. 01℃(小於1℃)以上,標定温度值也符合設計要求。
(2)由於採用了PID控制,在環境温度降低時温度控制的靜態誤差小於0.5℃(精度高於設計要求)。
(3)用數碼管來顯示水的實際温度和設定温度值,顯示很穩定。
(4 )採用了PID控制,當設定温度突變(由40℃提高到60℃)時,經過多次調試知道,當P=10;I=8;D=6時系統具有最小的調節時間和超調量。
(5)當温度穩定時,温度控制的靜態誤差≤0.5℃。
(6)創新部分為添加了紅外遙控裝置。可代替鍵盤部分功能,且能更方便的調節温度等。
(7)經過多次測試和改進,該系統各方面參數都達到和超過設計參數,完成了既定目標。
參考文獻:
[1] 李楨、趙宏權,《PID調節概念及基本原理》[J],《科技信息(科學教研)》,07,29期
[2]郭天祥,《51單片機C語言教程》[M],北京:電子工業出版社,2009
-
數學小論文參考(新版多篇)
數學小論文範文參考篇一這學期我們要換一位數學教師,是夏教師。據我對他的瞭解我覺得這是一位嚴厲的好教師。這位教師給我們上過兩次課,一次數學公開展示課和一次心理課,僅僅這兩次接觸,我對他產生的第一印象就是嚴厲,他長得高高的,瘦瘦的,不像別的教師臉上總是掛着笑...
-
護理論文多篇通用多篇
護士論文篇一這次有幸參加了護理見習,深入到護士的日常工作中,親身體會了做護士的酸甜苦辣,這才發現做護士並沒想像的那麼容易。做護士的確很辛苦,一會兒是輸液、抽血,一會兒是打針給藥。病人若有不適首先會想到護士,病人如有問題找的還是護士,病人要換藥、換液有是得...
-
電機學課程論文【精品多篇】
電機論文篇一一、引言建滔集團共有生產用電機10000餘台,遍及集團公司生產裝置的各個角落,在生產過程中發揮着極其重要的作用。但由於大部分電機使用年限較長,且不少電機長年累月運行在較惡劣的環境中,電機燒燬的事故常有發生,而且呈上升趨勢,嚴重影響着生產的安全、...
-
碩士論文致謝格式【多篇】
碩士論文致謝篇一在本文完成之際,首先感謝導師周嶽君教授三年來對我學習上認真嚴格的教誨,科研上熱情耐心的指導,生活上無微不至的關懷。感謝我的父母,特別是我的母親這二十多年來對我辛勤地培養,無私地付出。感謝國家級名中醫、博士生導師常青教授、童舜華博士和石...