本系統設計採用基於PID算法的單片機控制來實現水溫的調控。單片機控制部分採用AT89C51單片機為核心,採用軟體編程,實現用PID算法來控制PWM波的產生,繼而控制電爐的加熱來實現溫度控制。通過編程對PID各參數的調整,來達到提高加溫速度,減小超調的目的。
設計任務和主要內容
一升水在1kw電爐下加熱,要求水溫在一定範圍內可由人工設定,並能在環境溫度降低時自動調節,以保證設定的溫度基本不變。
系統設計原理
該水溫控制系統主要由AT89S52單片機控制系統、溫度採樣轉換器、溫度控制電路。鍵盤顯示電路等四部分組成,總體框圖如上。
(一)總體方案論證
根據題目的要求,我們提出了以下三種方案:
方案1:採用傳統的二位模擬控制方法,選用模擬電路,用電位器設定給定值,採用上下限比較電路將反饋的溫度值與給定的值比較後,決定加熱或者不加熱。由於採用的模擬控制方式,系統受環境影響較大,不能實現複雜的控制算法使控制精度做得較高,而且不能用於顯示和鍵盤設定。
方案2:採用單片機AT89S52為核心。採用數字溫度傳感器DS18B20採集溫度變化信號,將其轉換成數位訊號並通過單片機處理後去控制溫度,使其達到穩定。使用單片機具有編程靈活,控制簡單的優點,使系統能簡單的實現溫度的控制及顯示,並且通過軟體編程能實現各種控制算法使系統還具有控制精度高的特點。
比較上述兩種方案,方案2明顯改善了方案1的不足,具有控制簡單、控制溫度精度高的特點,因此本設計電路採用方案2。
(二)各部分電路方案論證
1、溫度採樣部分
方案1:採用熱敏電阻,可滿足35℃--95℃的測量範圍,但熱敏電阻精度、重複性和可靠性都比較差,對於檢測精度小於1℃的溫度信號是不適用的。
方案2:採用數字溫度傳感器DS18B20。DS18B20是支持一線總線接口的溫度傳感器,具有抗幹擾性強,體積小,靈活經濟的特點。它的測量溫度範圍為-55℃~+125℃,在-10℃~+85℃範圍內,精度為±0.5℃且有9~12位解析度可調,使用電壓為3~5V無需備用電源。此外DS18B20集合了64位光刻ROM、溫度傳感器、非揮發的溫度報警觸發器TH和TL、配置寄存器,可以直接實現溫度的測量和轉換,無需再另接外部電路。
方案3:採用溫度傳感器AD590。AD590具有體積小、質量輕、線性度好、性能穩定等優點。其測量範圍在-50℃~+150℃,滿刻度範圍誤差為 ±0.3℃,當電源電壓在5~10之間,穩定度為1%時誤差只有±0.01℃,此外,AD590是溫度—電流傳感器,對於提高系統抗幹擾能力有很大幫助。
從系統電路設計的複雜度,性價比等方面考慮,決定選用方案2。
2、控制電路部分
方案1:可以用邏輯電路搭建一個控制器,實現PID控制。但系統還要附加顯示、溫度設定等功能,要附加很多電路,總體的電路設計和製作比較繁瑣。
方案2:採用8031晶片,其內部沒有程序存儲器,需要進行外部拓展,這給電路增加了複雜度。
方案3:本方案的CPU模塊採用2051晶片,其內部有2KB單元的程序存儲器,不需要外部拓展程序存儲器,但由於系統用到較多的I/O口,因此此晶片的資源不夠用。
方案4:採用AT89S52單片機,其內部有8KB單元的程序存儲器,不需要外部擴展程序存儲器,而且其I/O口達32個,完全滿足本次設計需要。
比較這4種方案,綜合的考慮單片機各部分資源,本次設計選用方案4。
3、加熱方案和功率電路的選擇
方案1:加熱的裝置,根據題目,可以使用電熱爐進行加熱,控制電爐的功率豈可控制加熱速度。水溫過高時,一般只能關掉電爐,讓其自然冷卻。為求更好的控制效果,也可以裝置一個小風扇,電爐加熱時風扇關閉,水溫超高時關閉電爐開啟風扇加速散熱。
方案2:可以採用可控矽控制加熱器的工作。通過單片機產生PWM信號來控制可控矽的導通和關斷,控制加熱器的加熱時間,從而控制加熱器的功率。
從加熱的響應速度考慮,採用方案2。因為加熱的功率較大,故電源採用市電220伏。
設計電路圖如圖2所示
DS18B20
ISP下載口
AT89S52主控電路 MOC3041功率電路 LCD液晶顯示
PCB圖如下:
功率電路
主控電路
本設計總體包括四個部分:主機控制部分、溫度採樣轉換部分、溫度控制部分、鍵盤顯示部分。
溫度採樣轉換電路
系統的溫度採樣轉換由DS18B20集成晶片來實現。電路圖如右
DS18B20性能描述
測量範圍在-55℃~+125℃,在-10℃~+85℃範圍內,精度為±0.5℃且有9~12位解析度可調,使用電壓為3~5V,無需備用電源。
DS18B20採用單總線通信技術,通信穩定可靠,且線路簡單,容易實現。
其基本的通信過程如下:
主機拉低單總線產生至少480us的Tx復位脈衝;
然後由主機釋放總線,進入Rx接收模式,主機釋放總線時會產生一個由低電平變為高電平的上升沿;
單總線器件檢測到該上升沿後,延時15~60us;
單總線器件通過拉低總線60~240us來產生應答脈衝;
主機接收到從機的應答信號後,說明有單總線器件在線,然後主機就可以開始對從機進行ROM命令和功能命令操作。
DS18B20直接輸出數字量,可直接與單片機進行通信,讀取測溫數據,電路非常簡單。使用它,主要工作量集中在了單片機編程上。
此部分電路主要由光電耦合器MOC3041和雙向可控矽BTA16組成。以脈寬調製輸出控制電爐與電源的接通和斷開比例,以通斷控制調壓法控制電爐的輸入功率。MOC3041的內部集成了發光二極體、過零檢測電路和一個小功率雙向可控矽。當單片機PWM輸出為1,MOC3041中的發光二極體發光,用於過零檢測電路的同步作用,內部的雙向可控矽在過零後馬上導通,從而使觸發雙向可控矽BTA16導通,負載中有電流通過,反之當單片機PWM輸出為0,雙向可控矽截止,負載中沒有電流通過。光電耦合的耐壓值為400v,它的輸出級由過零觸發的雙向可控矽構成,它控制著主電路雙向可控矽的導通和關閉。
3、單片機控制部分
此部分是該系統的核心,系統的控制採用了單片機AT89S52。單片機AT89S52內部有8KB字節的可編程FLASH存儲器和256位元組的數據存儲器。故系統不必外拓存儲器,這樣大大減少了系統的硬體電路。電路原理圖如下:
4、按鍵及顯示部分
系統僅採用五個按鍵來進行溫度的控制。
在顯示方面,我們採用了LCD1602的液晶顯示模塊,通過軟體編程,可以實現所需要的顯示。此外,液晶模塊的使用也比較簡單,只要連接數據總線,選通埠和命令/數據埠即可。
系統的硬體設計儘量簡單,故工作任務主要在程序的設計上。
PID算法控制PWM輸出:
程圖如下
void timer0() interrupt 1
{
uchar flag;
TH0=0xd8 ; 有
TL0=0xf0 ;
TR1=1 ; 無
P24=1 ; //啟動輸出
CJ++;
if(stemp>Wtemperature) flag=0
{
ei=stemp-Wtemperature; flag=1
E=E+ei;
ex=ej-ei;
ej=ei;
if(ei<6)
{Ui=U0-Kp*(ei+Ti*E-Td*ex);}
else Ui=U0-Kp*ei;
flag=Ui/100;
switch(flag)
{
case 9:{TH1=0xdc;TL1=0xd8;}break;
case 8:{TH1=0xe2;TL1=0xb4;}break;
case 7:{TH1=0xe8;TL1=0x90;}break;
case 6:{TH1=0xec;TL1=0x78;}break;
case 5:{TH1=0xf0;TL1=0x60;}break;
case 4:{TH1=0xf2;TL1=0x54;}break;
case 3:{TH1=0xf4;TL1=0x48;}break;
case 2:{TH1=0xf8;TL1=0x30;}break;
case 1:{TH1=0xfc;TL1=0x18;}break;
case 0:{T
[
1] [
2] [
3] [
4]
推薦閱讀
#include <reg52.h> //調用單片機頭文件#define uchar unsigned char //無符號字符型 宏定義 變量範圍0~255#define uint unsigned int //無符號整型 宏定義 變量範圍0~65535sbit clk = P1^3; 
發表於 2020-12-03
閒暇之餘做了一個簡單的流水燈,設計思路先將LED燈從0-7逐個顯示,然後再從7-0逐個顯示。如果產生外部中斷(即按鈕按下),則8個LED燈全亮,之後又恢復流水燈狀態。#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit K=P3^2;//啟動按鈕,外部中斷uchar led;void delay(uint x) {
發表於 2020-12-03
基於單片機的LED點陣設計基本要求:利用單片機AT89C51設計LED點陣,顯示器能顯示不同的字符、圖形,能夠用獨立鍵控制不同字符的切換效果。創新:顯示效果可以是閃爍;靜止;平移等。任務區分:A——每隔1s閃爍1次B——循環平移,速度自定.單片機源程序如下:#include <reg52.h>sbit ADDR0 = P1^0;sbit ADDR1 = P1^1;sbit ADDR2 = P1^2;sbit ADDR3 = P1^3;sbit KEY = P3^5;unsigned int cnt,m,stage,sec=1000;unsigned char code image
發表於 2020-12-03
為(+10~-10)V。VREF端與D/A內部T形電阻網絡相連。(6)、Vcc :晶片供電電壓,範圍為(+5~ 15)V。(7)、AGND :模擬量地,即模擬電路接地端。(8)、DGND :數字量地。下面是單片機驅動程序:#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit CS = P1^0;sbit CLK = P1^1;sbit DI = P1^2;sbit DO = P1^2;uchar code Tab[]={0x3F,0x06
發表於 2020-12-01
源程序:#include<reg51.h> //定義頭文件#define uint unsigned int //定義字符uint#define uchar unsigned char  
發表於 2020-12-01
顯示結果:圖片及字體取模單片機源程序如下:#include<reg51.h>#include<intrins.h>#include<stdlib.h>#define uchar unsigned char#define uint unsigned int//定義埠sbit A0=P2^0; //定義埠是傳輸命令還是數據,sbit RW=P2^1;//定義埠是讀取還是寫入,sbit LCDEN=P2^2;//晶片使能啟動sbit RST=P2^3;//復位鍵uchar code dis1[]={/*-- 文字: 我 --*//*-- 
發表於 2020-12-01