【摘要】此水溫控制系統以單片機AT89S52為核心控制器,溫度由DS18B20數字溫度傳感器進行采集。為了更精確的測溫,本系統采用三點測溫,并采用PID算法進行水溫控制,使溫度能夠自行調節。
【關鍵詞】AT89S52單片機;DS18B20;可控硅;PID算法控制;LCD1602
1.引言
溫度控制在生產生活中應用都十分廣泛,但其控制過程中存在著很大的時滯性和極強的干擾性,因此,如何很好地控制溫度是評價一個溫度控制系統優劣的關鍵之處。PID控制是按設定值和被控量偏差的比例、積分和微分進行控制的一種控制方法。PID控制在控制理論中占有舉足輕重的地位,由于其結構簡單、穩定性好、工作可靠、調整方便,被廣泛應用于包括溫度控制的各種控制過程中。
本課題是設計一個水溫自動控制系統,設定溫度是80度,從40度對500mL的水加熱,在多種環境下,達到80度的時間不超過5分鐘,溫度最后穩定在80度左右的調整時間不超過4分鐘,超調量不大于5%。
2.總體設計方案
本系統主要由單片機控制模塊、溫度檢測模塊、可控硅控制電路模塊、加熱電路、矩陣鍵盤、液晶顯示模塊等部分組成。其整體設計框圖如圖1所示:
圖1 系統框圖
圖2 控制電路
本系統主要以單片機AT89S52為核心,基于自動控制原理與PID算法,根據不斷掃描測量的溫度值對電爐進行反饋調節,從而對溫度實現精確的調節。
溫度傳感器DS18B20將測得的溫度數據傳輸給單片機AT89S52,單片機來調整PWM波的占空比,通過驅動電路對可控硅進行控制完成對電爐的通斷電控制,從而控制其功率,達到調節水溫的目的。
3.各個模塊電路設計
(1)主控部分:由于本控制系統并不復雜,故選擇Atmel公司的AT89S52單片機作為CPU。
(2)溫度采集部分:本系統選擇使用數字溫度傳感器DS18B20檢測溫度。其溫度測量精度較高,能夠達到0.0625度以上精度。為了更精確測量,采用多點測溫的方法,本系統中選用三點測溫。
(3)鍵盤設置部分:本系統選擇4*4矩陣鍵盤作為輸入部分,用來輸入預設溫度、開啟與關閉加熱、調節時間等。
(4)顯示模塊:本系統用LCD1602顯示設定溫度、當前溫度、時間及加熱部分現在處于加熱還是停止加熱的狀態。
(5)控制加熱部分:由于本系統要控制電熱爐加熱,功率較大,因此需要借助功率電路。設計中我們使用光耦+可控硅,簡化電路的制作。其控制部分電路圖如圖2所示。
4.系統程序設計
(1)主程序流程
圖3 主程序流程圖
(2)PID算法
PID算法原理框圖如圖4所示:
圖4 PID算法原理框圖
PID算法的一般表達式為:
溫度PID調節器有三個可設定參數,即比例放大系數Kp、積分時間常數Ki、微分時間常數Kd。比例調節的作用是使調節過程趨于穩定,但會產生穩態誤差;積分作用可消除被調量的穩態誤差,但可能會使系統振蕩甚至使系統不穩定;微分作用能有效的減小動態偏差。
P1D算法的離散化表達式為:
其中,上式中k表示第k次采樣,r(k)為設定溫度,c(k)為實際水溫,M(k)為電爐功率控制量,誤差為e(k)=r(k)-c(k)。
PID算法的輸出形式為一PWM波,通過PID算法調節PWM波形的占空比,使電爐在一周期內開通的時間可調,這樣就可以調節電熱爐的功率進而控制溫度的變化,使水溫穩定在設定值,從而使精度提高。
(3)PID參數的整定
對一個控制系統而言,控制質量的好壞取決于參數整定是否合理。PID參數整定主要有兩類,理論整定法和工程整定法。理論整定法主要是依據系統的數學模型,經過理論計算確定控制器參數。這種方法所得到的計算數據未必可以直接用,還必須通過工程實際進行調整和修改。工程整定法主要依靠控制經驗,直接在系統運行時進行調整。因此本實驗采用經驗法即試湊法來確定PID的參數。
試湊時,對參數整定實行先比例、后積分,再微分的整定步驟。
首先確定比例部分。將比例參數由小變大,并觀察相應的系統響應,直至得到反應快、超調小的響應曲線。如果系統沒有靜差或靜差已經小到允許范圍內,并且對響應曲線已經滿意,則只需要比例調節器即可。
如果在比例調節的基礎上系統的靜差不能滿足設計要求,則必須加入積分環節。在整定時先將積分時間設定到一個比較大的值,然后將已經調節好的比例系數略微縮小,然后減小積分時間,使得系統在保持良好動態性能的情況下,靜差得到消除。在此過程中,可根據系統的響應曲線的好壞反復改變比例系數和積分時間,以期得到滿意的控制過程和整定參數。
如果在上述調整過程中對系統的動態過程反復調整還不能得到滿意的結果,則可以加入微分環節。首先把微分時間設置為0,在上述基礎上逐漸增加微分時間,同時相應地改變比例系數和積分時間,逐步湊試,直到得到滿意的調節效果。
(4)PID算法程序
本系統PID控制的思路:
在第一次PID調節時記下PID調節器的輸出值uk0(該值為以后PID調節器輸出的最大值),并以該值為參考,以后的輸出uk與uk0做比值,假設uk0表示加熱a,那么輸出uk與uk0比值表示加熱a*uk/uk0時間,以此類推,最后算出每次計算應該加熱的時間作用于可控硅,控制電爐加熱。由于溫度變化緩慢,則設置為5s計算PID一次。
另外本系統的PID采用了開關量計算——積分分離相結合的改進PID算法,具體思路是:
1)當溫差>=15度時,不用PID直接進行加熱。
2)當溫差在0-15度之間時,采用PID計算。
①當溫差>5度時,采用PD控制加快響應速度并減少超調;
②當溫差<5度時,采用PID控制保證系統的穩態精度。
PID程序如下:
void PID(void)
{ float ek,ek1,ek2,ek_sum;
uint a; ek=K-temp; //計算誤差
while(1)
{ if(ON_OFF==1) //溫控開關開
{ if(ek>=15)
{outflag=1;OUT=0;Time_on=100; break;} //溫差大于15度,不用PID調節
else if(ek<0)
{ek=0;outflag=0; OUT=1;Time_on=0;break;} //溫差小于等于0不調節
else
{ if(ek>5)
a=0;
if(ek<5)
a=1;
ek2=ek1;
ek1=ek;
ek_sum+=ek;
uk=kp*ek+ki*ek_sum+kd*(ek1-ek2); //計算PID輸出uk if(start_flag==0)//PID運算標志位
{
uk0=uk; //uk初值,用于參考以后uk加熱時間
start_flag=1;
div=100/uk0;
} //開始PID計算
else if(start_flag==1)
{ //加熱片加熱時間
Time_on=uk*div;
OUT=0;
outflag=1;
}
break;}
} else{outflag=0;OUT=1;break;} //不加熱
}
}
5.實驗數據及結果分析
經過多次測量,確定了測溫過程中的幾個指標:
從起始溫度到設定溫度經歷的時間:t(min);
使其達到設定溫度的調整時間:t*(min);
達到設定溫度的超調量:Δ%。
其測量結果如表1所示。
通過上表的數據分析,各項指標均滿足要求。
6.結束語
本系統設計采用單片機AT89S52為控制中心,利用DS18B20采集溫度,采用PID算法對水溫進行控制系統,具有成本低、控制可靠等優點。經過多次測試,驗證了該水溫控制系統達到了較高的精確度,滿足要求。
參考文獻
[1]黃勤.單片機原理及應用[M].清華大學出版社.
[2]劉金琨.先進PID控制MATLAB仿真(第3版)[M].電子工業出版社.
[3]明鑫,陳可中,王戎丞,等.基于單片機的水溫控制系統[J].現代電子技術,2005(6):1-2.
[4]胡焱,周超,沈家慶,等.基于單片機的水溫控制系統設計[J].通信技術,2007(8):31-33.
作者簡介:
焦晶晶,現就讀于鄭州大學信息工程學院電子信息工程學院。
王飛虎,現就讀于鄭州大學信息工程學院電子信息工程學院。