當前位置:文範網 >

論文模板 >論文模板精選 >

智慧化水溫控制系統

智慧化水溫控制系統

<?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

  • 文章版權屬於文章作者所有,轉載請註明 https://wenfanwang.com/zh-tw/muban/jingxuan/8jeoj.html
專題