溫度控制系統及控制方案_第1頁
溫度控制系統及控制方案_第2頁
溫度控制系統及控制方案_第3頁
溫度控制系統及控制方案_第4頁
溫度控制系統及控制方案_第5頁
已閱讀5頁,還剩23頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

溫度掌握系統及掌握方案0808378094【摘要51單片機與pc機相結合,使用ADC0809數據使用中位值平均濾波法進展濾波,然后使用專家模糊PID掌握算法對加熱爐進展掌握,加熱。【關鍵字:PC機51單片機爐溫掌握專家模糊PID掌握 濾波一、 概述溫度是工業生產中常見的工藝參數之一關,因此溫度掌握是生產自動化的重要任務。對于不同生產狀況和工藝要求下的溫度掌握,所承受的加熱方式,燃料,掌握方式也各不一樣。系統用溫度傳感器將檢測到的實際爐溫A/D轉換,51單片機把所得值與設定值進展比較,使用專家模糊PID算法進展修正,求得對應的掌握量掌握可控硅驅動器,調整電爐的加熱功率,從而實現對爐溫的掌握。因此采集的爐溫數據精度至關重要。利用51單片機實現溫度智能掌握,能自動完成數據采集、處理、緩沖、轉換、并進展PID實施掌握,包括各參數數值的修正,并把數據傳輸給PC機進展動態直觀顯示,同時也可以通過PC機設定參數。但在掌握過程中應當留意,采樣周期不能太短,否則使調整過于頻繁,不但執行機構不能反響,而且計算機的利用率大為降低。采樣周期太長,硬件實施手段及系統特點。二、 溫度掌握系統的硬件組成框圖與其具體功能介紹PC51T-t輸參數,而在曲線跟蹤過程中也是通過pc51機:接收adc采樣得到的數值,并進展濾波處理,依據所得到的數值進展專家模糊PIDPWM同時傳輸相關的數據給PCPC繼電器盒:承受51機的通斷信號,弱電掌握強電,對加熱棒及風扇進展掌握。分為手動和自動兩種方式加熱棒:對溫控箱加熱,可通過轉變通斷的占空比來調整加熱的速率風扇:對溫控箱降熱,通過轉變通斷的占空比來調整降熱的速率加熱箱:被控對象,特點:延時大,溫度在肯定范圍內是線性變化的。硬件電路三、 掌握流程〔一〕程序設計512開始開始系統初始化串口中斷設定溫度值定時中斷采樣數據濾波專家PID算法給PC機發送參數輸出PWMPC3開開始系統初始化曲線跟蹤畫出所要跟蹤的曲線51傳輸的參數傳輸溫度設定值顯示1、MSComm通信方式PC51機之間承受RS-232CVisualBasic6.0編寫掌握軟件。MSCommMSCommWindowsActiveXMSComm件供給了兩種通信方式:大事驅動和查詢。大事驅動是串口交互通信中的一種格外有效的方法。當串口接收緩沖區中收到數據,或者串口發送完畢之類的大事發生時,系統將大事轉換為消息,在MSComm控件中表達為CommEventMSComm控件的OnComm消息,從而實現串口通信的編程。查詢實質上還是屬于大事驅動的范圍,由于查詢是通過每隔一段時間就查詢一次MSComm控件的CommEvent屬性的值來查詢發生的大事和消滅的錯誤。一旦CommEvent的值發生變化,說明有通信大事或者錯誤發生。MSCommA.MSComm對MSComm串口的初始化一般要完成以下的設置:設定端口號CommPor輸協議Setting、設定其他參數、翻開通信端口。捕獲串口大事在窗體設計中,雙擊窗體中的MSComm空間,會自動彈出代碼窗口,系統會自動生成OnComm子程序并定位光標在OnComm子程序。我們可以在里邊編程設定發生OnComm串口數據的讀取在MSComm進制形式。對于文本形式來說,需要在初始化時設置InputMode屬性為comInputModeText,讀取時可以直接將接收緩沖區賦值給一個String字符串變量。MSDNInput過一個VariantVariant收,承受后的變量作為二進制數組使用,也可直接用二進制數組接收。串口數據的寫入。在MSComm控件中,發送數據同樣有兩種方式。一種是文本方式,另一種是二進制方式。對于文本方式,直接將一個字符串變量傳遞給Output2、溫度曲線的繪制畫圖框首先建立一個PictureBox畫圖框picture1,全部的曲線繪制工作都在這個畫圖框AutoRedrawFalse,當程序窗口被遮蓋時,再切換回程序,之前繪制的圖形中被擋住的局部會被擦去;設置為True后,切換回程序,系統會自動重繪制被擦去的局部。確定繪圖點的位置VB〔X向下為Y方向。為畫圖便利,系統設定picture1的大小為0,0〔1200,10,而時1s,所以picture1120min,而縱坐標即溫度值。但實010030-80,Y值也需由式子Y=〔T-30〕*2得到。繪圖方法Pset〔點、Line〔線、Circle〔圓〕〔二〕系統的算法與根本原理1、數據采集與濾波1s10采集數據的特點選擇了中位值平均濾波法〔又稱防脈沖干擾平均濾波法〕連續采樣N個數據,去掉一個最大值和一個最小值,然后計算N-2個數據的算術平均值。但是單單該算二次濾波,即依據所得的結果與上次的結果進展比較,假設偏差大于2.5度則認定為壞點,同時把上次的結果賦給這次的結果。2、掌握算法對于爐溫掌握,其方框圖為:RR+eG(s)cU(s)G(s)cY(s)-系統框圖PIDPID〔E〔〕為誤差:U(t)k

[e(t)kte(t)dtT

de(t)]p i0

d dt經數字離散化,掌握器〔其中T3S〕為:Tk TU(k)k

p

Tii0

E(i)

d[E(k)E(k1)]}TkE(k)

KpT

KTE(i) pd

[E(k)E(k1)]p Ti經化簡有:kT

Ti0KTPkp

,I pTi

pd, ①TU(k)PE(k)Iki0

E(i)D[E(k)E(k1)] ②經PID掌握器輸出〔,作為占空比的掌握。積分分別PID雖然PID易于實現,但當輸入的偏差太大時,簡潔產生因積分溢出引起振蕩。積分分別PID數字化后的掌握器為:U(k)PE(k)Iki0

E(i)D[E(k)E(k1)],0或1前饋校正加PIDG (s)C2-R(s)+eGG (s)C2-R(s)+eG(s)+cU(s)G(s)cY(s)-前饋掌握框圖即是對于輸入的現在斜率變化,和一段時間后的斜率變化作比照,消滅一個差值,PID〔三〕試驗過程用計算機掌握一個工業生產過程時,必需先將過程中表達因與果、量與量之間的關系用數學形式描述出來,編好程序存入計算機,才能實現掌握有關的生產過程。對數學模型的建立有階躍響應法、脈沖響應法、相關函數法等多種方法。1PID承受階躍響應方法,對爐子的數學模型K1+T1τ〕可得以下參數:爐子時間常數T=5~8min,K=0.6~1.2,延遲時間τ=0.5~2.5min由已得參數,承受Matlab數,為試驗做好預備。Simulink得到等幅振蕩響應:臨界比例系數Ku=10,振蕩周期Tu大約為200s在實際試驗當中,用臨界比例系數法得Tu=220S根本相符。依據閱歷PIDKu,TuKp=10/1.67=6Ti=0.5*Tu=100STd=0.125*Tu=25代入①式,有:P=6,I=0.18〔0.2〕,D=5045)按此作為PID掌握器初步參數。2定溫算法試驗中試驗了該PID算法,但由于所用的爐子功率太小,導致消滅超調之后溫度很難降下來,也使爐溫消滅長時間的震蕩,所用試驗承受了讓風扇全開,通過掌握加熱棒是爐子穩定到所需的溫度。依據爐子的溫度曲線走向趨勢,承受了專家PID算法,即編程使爐子的曲線按自己想要的方向進展。通過不斷的修改算法與試驗,最終得到的算法或許如下:先讓爐子全速升溫,在爐子溫度上升到設定溫度10度誤差范圍內時承受帶PID重量分別開來作為推斷依據。依據D溫還是在降溫,在升溫過程消滅負偏差時,馬上關掉加熱棒,而在降溫過程中負偏差大于兩度時才關閉加熱棒。其他時候都是依據PI算法得出的結果掌握加熱棒的開關占空比。積分值設了一個上限,但誤差積分超過該上限則積分值為該上限值,假設積分值連續增大的另一個上限則把積分值設為0,重累計誤差。而上限值的選取在不同溫度時可選不同的值,在調整過程中可以設的大一點,而在穩態時可以設小一點,從而使爐溫更加穩定。該算法得出的結果如以下圖:由圖可見除去一兩個壞點〔是由于變送器引起的,雖然經過二次濾波后數值減小了,但照舊可以看到,爐子溫度穩定在65度左右,誤差1度。跟蹤曲線算法該算法基于定溫算法,再依據實際曲線的趨勢進展調整。首先參加了模糊掌握量,由于溫度變化范圍比較大,在不同的溫度范圍內需對P進展調整。其次D的作用更加的明顯。基于定溫算法,在升溫過程曲線是趨于穩定狀態的,即D重量會有等0〔由于溫度是個緩慢變化的量,在2s趨D重量也根本為0故D的采樣時間增大到10s假設消滅該狀況則應加大爐子的使爐子有升溫的趨勢,即強制升溫。其次在穩定在65度然后升溫時會消滅滯后,此時需加超前處理算法,即在接近拐點處就給爐子肯定的PWM加熱,使其到達拐點時剛好處于升溫趨勢。以下是試驗過程的一些截圖:Dkp增加D推斷的結果,在拐點處的滯后使得后一段曲線不能很好的跟蹤,而且可看出后一段的強制升溫值設小了偏離曲線后無法跟上去。最終的結果,即加了D推斷和超前處理,同時加大了后一段強制升溫值,由圖可見跟蹤的很好。四、 設計總結與擴展〔一〕1試驗中,由51機的P1口對溫控箱的開關爐進展掌握,更微小的說,是對溫控箱里的繼電器進展掌握,當P1口輸出一個高電尋常,給繼電器一個驅動電流,讓繼電器吸合,即開P1P1512〔實際系統的采樣周期〕的固定問題對于數字系統,其采樣周期是很有講究的,關系到掌握效果和系統的穩定。對于一個溫10幾秒范圍。經過屢次試驗,1PWM2s,這樣的選擇使其穩定性,收斂性,抗干擾性都會好很多,避開過于頻繁的開關操作,既能保護繼電器,又能使得系統的反響在預期之內。310個采樣點作為一次PID重代價,包括引發振蕩,跳出限幅范圍,甚至引起發散。的壞點又進展了二次濾波。4較豐富的實踐閱歷則很可能使連接起來的系統不能如期的工作成為垃圾。由于單片機與PC機通信方面以前沒做過,所以使得試驗過程滯后了,但這不影一段時間才能看到結果……不過當消滅的結果最終到達想要的時容了。pcvb程序〔包括串行通信,數據接收等,跟蹤曲線等等〕DimXinterval,YintervalAsInteger”Xintervaxy軸多少個單位DimX,YpreX,PreYAsDouble當前坐標和前一個坐標DimiAsIntegerDimtemp_setAsDoubleDimMinX,MaxX,MaxY,MinYAsIntegerPrivateSubForm_LoadMSComm1mPort=1MSComm1.Settings=“1200,N,8,1“MSComm1.InputLen=0MSComm1.InBufferSize=1024MSComm1.OutBufferSize=512MSComm1.SThreshold=0MSComm1.RThreshold=3MSComm1.InBufferCount=0MSComm1.OutBufferCount=0MSComm1.InputMode=comInputModeBinaryMinX=0MaxX=20*60MinY=0MaxY=100Yinterval=1Xinterval=1Picture1.Scale(MinX,MaxY)-(MaxX,MinY)Timer1.Enabled=FalseTimer2.Enabled=FalseTimer3.Enabled=FalseEndSubPrivateSubDrawCurvepreX=XPreY=YX=X+XintervalY=(Val(NowTemp.Text)-30)*2Picture1.PSet(X,Y)”Picture1.Line(preX,PreY)-(X,Y),2EndSubPrivateSubPicture1_ClickEndSubPrivateSubstart_ClickIfMSComm1.PortOpen=FalseThenMSComm1.PortOpen=TrueTimer1.Enabled=TruedarwbacklineForm_XYEndSubPrivateSubStop_ClickIfMSComm1.PortOpen=TrueThenMSComm1.PortOpen=FalseTimer1.Enabled=FalseTimer2.Enabled=FalseTimer3.Enabled=FalseEndSubPrivateSubRedarw_ClickPicture1.ClsdarwbacklineX=0Y=0EndSubPrivateSubSet_temp_ClickDimout_data(0)AsByteIfMSComm1.PortOpen=FalseThenMSComm1.PortOpen=Trueout_data(0)=Val(Settemp.Text)MSComm1.Output=out_data正在傳數...“EndSubPrivateSubMSComm1_OnCommDimdatinAsBytedatin=MSComm1.InputY=datin(0)pwm.Text=CStr(datin(1))wanttemp.Text=CStr((datin(2)-5)/2)Set_P.Text=CStr(datin(3))Get_AD.Text=CStr(Y)Com_State.Text正在接收數據...“NowTemp.Text=CStr((Y-5)/2)EndSubPrivateSubTimer1_TimerDrawCurveEndSubPrivateSubForm_XYDimX!,Y!,i%Form1.Scale(-9,9)-(9,-9)CurrentX7:CurrentY-7.2:Print時間〔min〕“CurrentX-8.5:CurrentY4.5:Print溫度〔C〕“Fori=0To20 ”X軸坐標Line(i*7/10-7,-7.2)-(i*7/10-7,-7)CurrentX=i*7/10-7-0.2CurrentY=-7.5PrintiNextiFori=0To5 ”Y軸坐標Line(-7.2,i*11/5-7)-(-7,i*11/5-7)CurrentX=-8CurrentY=i*11/5-7+0.1Printi*10+30NextiEndSubPrivateSubdarwbacklineDimX!,Y!,i%ForX=0To1200IfXMod60=0ThenFori=1To200Y=i/2Picture1.PSet(X,Y),RGB(0,200,0)NextiElseFori=1To50Y=i*2Picture1.PSet(X,Y),RGB(0,200,0)NextiEndIfX=X+2NextXEndSubPrivateSubfollow_lineIfi<=300ThenSettemp.Text=CStr(55+i/30)ElseIfi<=480ThenSettemp.Text=CStr(65)ElseIfi<=780ThenSettemp.Text=CStr(65+(i-480)/30)ElseIfi<=900ThenSettemp.Text=CStr(75)ElseSettemp.Text=CStr(75-(i-900)/30)EndIfEndIfEndIfIfEndSubPrivateSubfollowline_ClickPicture1.Clsdarwbacklinei=0Timer2.Enabled=TruedarwlineEndSubPrivateSubdarwlineDimX!,Y!ForX=0To1200IfX<=300ThenY=55+X/30Y=(Y-30)*2Picture1.PSet(X,Y),RGB(0,0,255)ElseIfX<=480ThenY=65Y=(Y-30)*2Picture1.PSet(X,Y),RGB(0,0,255)ElseIfX<=780ThenY=65+(X-480)/30Y=(Y-30)*2Picture1.PSet(X,Y),RGB(0,0,255)ElseIfX<=900ThenY=75Y=(Y-30)*2Picture1.PSet(X,Y),RGB(0,0,255)ElseY=75-(X-900)/30Y=(Y-30)*2Picture1.PSet(X,Y),RGB(0,0,255)EndIfEndIfEndIfIfX=X+2NextXEndSubPrivateSubTimer2_TimerDimout_data(0)AsByteIfMSComm1.PortOpen=FalseThenMSComm1.PortOpen=Truei=i+1follow_lineout_data(0)=Val(Settemp.Text)MSComm1.Output=out_dataEndSubPrivateSubfollow_line2Settemp.Text=CStr(65+10*Sin(2*3.1415926*i/1200))EndSubPrivateSubdarwline2DimX!,Y!ForX=0To1200Y=65+10*Sin(2*3.1415926*X/1200)Y=(Y-30)*2Picture1.PSet(X,Y),RGB(0,0,255)X=X+2NextXEndSubPrivateSubfollowline2_ClickPicture1.Clsdarwbacklinei=0Timer3.Enabled=Truedarwline2EndSubPrivateSubTimer3_TimerDimout_data(0)AsByteIfMSComm1.PortOpen=FalseThenMSComm1.PortOpen=Truei=i+1follow_line2out_data(0)=Val(Settemp.Text)MSComm1.Output=out_dataEndSub單片機定溫程序〔主要是專家PID算法,AD溫度承受,數據輸出〕#include<reg52.h>#include<stdio.h>#defineuintunsignedint#defineucharunsignedcharunsignedcharxdata*ad=0xcfa8;ucharTEMP_MAX=200;ucharTEMP_DEADLINE=1;ucharTEMP_KP=11;ucharTEMP_KI=20;ucharTEMP_KD=3;uintcount1,count2,count3,count4;uchartemp[10]=0;uintaverage_temp1;ucharaverage_temp;ucharlast_average_temp;uchartemp_pwm;sbitstover=P3^4;sbitfan=P3^5;sbitad_eoc=P3^3;ucharreceive_buf[4];uchartemp_Ref;inttemp_PreError;inttemp_PreDerror;inttemp_PreU1;inttemp_PreU;uchartemp_kp1;uchartemp_ki1;uchartemp_kd1;ucharTEMP_MIN;uchartemp_kp2;uchartemp_ki2;uchartemp_kd2;ucharKI;interror_count;interror_count2;interror_count3;ucharde_flag=0;ucharlast_temp;ucharflag1=0;charI_max=15;charI_min=-15;voidtemp_PIDInit{temp_Ref=0;average_temp=0;temp_PreError=0;temp_PreDerror=0;temp_PreU=0;temp_kp1=TEMP_KP;temp_ki1=TEMP_KI;temp_kd1=TEMP_KD;temp_kp2=temp_kp1;}uchartemp_PIDCalc{int if(temp_kp1!=temp_kp2){temp_kp1=temp_kp2;temp_PreError=0;temp_PreDerror=0;temp_PreU=0;}if(average_temp>2)TEMP_MIN=0;elseTEMP_MIN=TEMP_MAX;error=temp_Ref-average_temp;temp_PreError=error;temp_PreDerror=d_error;count4++;error_count+=error;error_count2+=error;if(count4>=10){if((last_temp-average_temp)<0){de_flag=1;}else{de_flag=0;}d_error=last_temp-average_temp;temp_PreDerror=d_error;last_temp=average_temp;error_count2=0;count4=0;}if(error_count>I_max){error_count3=I_max;if(error_count>I_max+10||error_count2<0){KI=0;error_count=0;}}elseif(error_count<=I_min){error_count3=I_min;if(error_count<I_min-10||error_count2>0){KI=0;error_count=0;}}else{error_count3=error_count;KI=1;}if(error>=20)temp_PreU=200;elseif(error<0)temp_PreU=0;else{temp_PreU1=temp_kp1*(temp_Ref-5)+KI*temp_ki1*error_count3;temp_PreU=temp_PreU1/20-2;}if(error<0&&error>-4&&de_flag==1){temp_PreU1=temp_kp1*(temp_Ref-5)+KI*temp_ki1*error_count3;temp_PreU=temp_PreU1/20-2;}if(error<0&&error>-2&&de_flag==0){temp_PreU1=temp_kp1*(temp_Ref-5)+KI*temp_ki1*error_count3;temp_PreU=temp_PreU1/20-2;}if(error==0&&d_error==0){if(flag1==0){error_count3=0;flag1=1;}I_max=10;I_min=-10;}else{flag1=0;}if(temp_PreU>=TEMP_MAX)temp_PreU=TEMP_MAX;elseif(temp_PreU<=TEMP_MIN)temp_PreU=TEMP_MIN;return(temp_PreU);}voidsystem_int{TMOD=0x21;TL1=0xf3;TH1=0xf3;PCON=0x00;TR1=1;SCON=0x50;TH0=(65536-10000)/256;TL0=(65536-10000)%256;TR0=1;EA=1;ET0=1;ES=1;fan=1;temp_PIDInit;temp_Ref=65;temp_Ref=65*2+5;}voidto_certern_temp{temp_pwm=temp_PIDCalc;}voiddata_process{uchartemp_temp,i,j;for(j=0;j<=8;j++){for(i=j+1;i<=9;i++){if(temp[j]>=temp[i]){}else{temp_temp=temp[j];temp[j]=temp[i];temp[i]=temp_temp;}}}average_temp1=temp[1]+temp[2]+temp[3]+temp[4]+temp[5]+temp[6]+temp[7]+temp[8]+average_temp*8;average_temp=average_temp1/16;if(last_temp-average_temp<=10&&last_temp-average_temp>=-10){if(average_temp-last_average_temp>5||average_temp-last_average_temp<-5){average_temp=last_average_temp;}}last_average_temp=average_temp;}voidmain{system_int;while(1){}}voidtimer0interrupt1{TH0=(65536-5000)/256;TL0=(65536-5000)%256;count1++;count3++;if(count3>=200){count3=0;}if(temp_pwm<=count3){}else{}

stover=0;stover=1;if(count1>=10){count2++;*ad=0;ad_eoc=1;while(ad_eoc!=1);ad_eoc=0;temp[0]=*ad;temp[1]=temp[0];temp[2]=temp[1];temp[3]=temp[2];temp[4]=temp[3];temp[5]=temp[4];temp[6]=temp[5];temp[7]=temp[6];temp[8]=temp[7];temp[9]=temp[8];if(count2>=10&temp[9]!=0){data_process;to_certern_temp;SBUF=average_temp;while(!TI);TI=0;SBUF=temp_pwm;while(!TI);TI=0;SBUF=temp_Ref;while(!TI);TI=0;count2=0;}count1=0;}TF0=0;}voidssio(void)interrupt4{uchari;ES=0;while(RI==0);RI=0;receive_buf[0]=SBUF;temp_Ref=receive_buf[0];temp_Ref=temp_Ref*2+5;ES=1;}曲線跟蹤時的算法局部如下:uchartemp_PIDCalc{if(temp_Ref<58)temp_kp1=9;elseif(temp_Ref<63)temp_kp1=10;elseif(temp_Ref<69)temp_kp1==11;elsetemp_kp1=12;error=temp_Ref-average_temp;temp_PreError=error;temp_PreDerror=d_error;count4++;error_count+=error;error_count2+=error;if(count4>=10){if({}else{}

temp_Ref==135)count5++;if(count5>=13){turn_flag1=1;}count5=0;turn_flag1=0;if({}else{

temp_Ref==155)count6++;if(count6>=12){

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論