




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
PID89C51DS18B20測得的實際值做比較,然后驅動制冷或keilCPID的控制。//PIDC2008-08-17structPID{unsignedintSetPoint;//DesiredunsignedintProportion;//ProportionalConstunsignedintIntegral;//積分常數IntegralConstunsignedintDerivative;//微分常數DerivativeConstunsignedintLastError;//Error[-1]unsignedintPrevError;//Error[-2]unsignedintSumError;//SumsofErrorsstructPIDspid;//PIDControlStructureunsignedintrout;//PIDResponse(Output)unsignedintrin;//PIDFeedback(Input)sbitdata1=P1^0;sbitclk=P1^1;sbitplus=P2^0;sbitsubs=P2^1;sbitstop=P2^2;sbitoutput=P3^4;sbitDQ=P3^3;unsignedcharunsignedcharhigh_time,low_time,count=0;//占空比調節參數unsignedcharset_temper=35;unsignedchartemper;unsignedchari;unsignedcharj=0;unsignedints;延時子程序,12M晶振為準,voiddelay(unsignedchartime)unsignedcharvoidwrite_bit(unsignedcharbitval)DQ=0;/*DQ以開始一個寫時序DQ=1;/*1,則將總線置高delay(5);/*90usDA18B20采樣*/DQ=1;/*DQ總線*/voidwrite_byte(unsignedcharval)unsignedchari;unsignedchartemp; /*關中斷for(i=0;i<8;i++)/*寫一字節數據,一次寫一位temp=val>>i;/*移位操作,將本次要寫的位移到最低位*/write_bit(temp);/*向總線寫該位delay(7);/*120us后//EA=1;/*開中斷unsignedcharread_bit()unsignedchari,value_bit;DQ=0;/*DQ,開始讀時序DQ=1;/*釋放總線*/unsignedcharread_byte()unsignedchari,value=0;if(read_bit())/*讀一字節數據,一個時序中讀一次,并作移位處理*/delay(4);/*80us以完成此次都時序,之后再讀下一數據unsignedcharreset()unsignedcharDQ=0;/*DQ總線開始復位delay(30);/*480us*/DQ=1;/*釋放總線*/presence=DQ;/*獲取應答信號delay(28);/*延時以完成整個時序*/return(presence);/*0,voidget_temper()unsignedchari,j;i=reset/*復位}while(i!=0);/*1為無反饋信號*/i=0xcc;/*發送設備定位命令*/i=0x44;*發送開始轉換命令*/delay(180);/*延時i=reset/*復位i=0xcc/*設備定位*/i=0xbe;*讀出緩沖區內容s=(unsignedint)(j&0x0f);temper=i|j;/*temper中InitializePIDvoidPIDInit(structPIDmemset(pp,0,sizeof(structPIDunsignedintPIDCalc(structPID*pp,unsignedintNextPointunsignedintErrorpp->SetPointNextPoint;//pp->SumError+=Error;//dErrorpp->LastErrorpp->PrevError;//pp->PrevError=pp->LastError;pp->LastError=Error;return(pp->Proportion*Error//pp->Integral*pp //pp->Derivative*dError); unsignedchari;{rin=s;//Readrout=PIDCalc(&spid,rin);//PerformPIDif(high_time<=100)high_time=(unsignedchar)(rout/800);low_time=(100-else{rin=s;//Readrout=PIDCalc(&spid,rin);//PerformPIDif(high_time<100)high_time=(unsignedchar)(rout/10000);low_time=(100-////T0,40us*100=4msvoidserve_T0()interrupt1using1elsevoidserve_sio()interrupt4using2/*EA=0;elseEA=1;voiddisp_1(unsignedcharunsignedcharn,a,m;//k=disp_num1[n];voiddisplay()unsignedcharcodenumber[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};unsignedchardisp_num[6];unsignedintk,k1;unsignedcharunsignedcharunsignedcharphil[]={2,0xce,0x6e,0x60,0x1c,2};PIDInit(&spid);//InitializeStructurespid.Proportion=10;//SetPIDCoefficientsspid.Integral=8;spid.Derivativespid.SetPoint=100;//SetPIDSetpointelseelse////DS18b20#includesbit //typedefunsignedchar typedefunsigned voiddelay(wordfor(;useconds>0;useconds--
////bytebyte //DQ //DQ // //presence信號 //0允許,1//從1- 總線上讀取一個字bytebytebytevalue=0;for(i=8;i>0;i--)//1-wirevoidwrite_byte(char for(i=8;i>0;i ////charbytec[2];intx; PIDPIDPID模糊控制技術,Pvar、Ivar、Dvar(比例、積分、微分)PIDΔUn=Kp[(en-en-1)+(T/Ti)en+(Td/T)(en-2*en-1+en-式中,en、en-1、en-2n次、n-1n-2次的偏差值,Kp、Ti、Td分別為比例系數、積分系數和微分系數,TTPIDPWM方波的占空比,后續加PWM方波的占空比決定加熱功率。現場溫度與目標溫度的偏差大則占空比大,加熱電路的加熱功率大,使溫度的實測值與設定值PIDPIDPID調節器參數整定的各種方℃P對系統性能的影響:比例系數加大,使系統的動作靈敏,速度加快,穩態誤差減小;P偏大,振蕩次數加多,調節時間加長P的符號就一定要取反。D合適,才能使超調量較小,減短調節時間。溫底控制PID(ProportionalIntegralDerivative)控制是控制工程中技術成熟、應用廣泛的一種控制策略,經過長期的工程實踐,已形成了一套完整的控象值(以下簡稱被控參數)PID控制器的輸入端,并與其給定值(SP得到偏差值(e值),從而使現場控制對象值發生改變,并趨向于給定值(SP值)1PID的實質就是對偏差(e值)進PIDD續-時間控制系統(PID控制系統)中,PID控制器應用得非常廣泛。其設計技術成熟,長期以來形成了典型的結構,參數整定方便PIDPID控制。PID控制算法(1所示),所以必須將控制模型離散化,離散化的方采樣周期,k為采樣序號,用求和的形式代替積分,用增量的形式(求差)PID計算公式離散:(3)(4)PIDPIDPIDPID4PIDΔμ的大小,而Δμk=μk-μk-14做自減變換有:制PIDfOutfOutPIDPID的結構體數據類型,該數據類型P、I、D系數,以及設定值,歷史誤差的累加和等信息:structtPoint;//設定目標DesiredValueoportion;//比例系數ProportionalConsttegral;//積分系數IntegralConsterivative;//微分系數DerivativeConstError;//上次偏差Error;//ID;//stPIDPIDPIDfOut,fOut的值決定是否加熱,加熱時間是多少。C實現代碼:DCalc(PID*pp,intNextPointpp->SetPoint*10-NextPoint;//mError+=Error;//=Error-pp->LastError;//vError=pp->LastError;//tError=ntegral*pp->SumError//erivative*dError//項)PD控制PD控制的實現過程:DCalc(PID*pp,intNextPointpp->SetPoint*10-NextPoint;//=Error-pp->LastError;//vError=pp->LastError;//tError=pp->Proportion*Error//erivative*dError//PIDfOutoportion=2;//PID比例值tegral=0;//PID積分值erivative=5;//PID微分值PIDCalc(&stPID,(int)(fT*10));//PID_Buffer&=0xff7f;//_Buffer|=0x0080;//TimerBPIDCalcfOut參數,如果該參數大于“0”,則開啟加熱器。IRQ2_TMIRQ2_TMB中斷,fOut1fOut=0PIDCalc計算結果比較大說明離目標溫度相基于PID算法和89C52單片機的溫度2009-12-2217:36:09[][評基于PID算法和89C520PIDPIDPIDPID調節。PID控制器以其結構簡單、穩定性好、工作可靠、調整方便而成為工業控制的主要技術之一。當被控PID數、積分時問和微分時間的大小。PID控制器參數整定的方法概括起來有兩大類:一是理論計算整定法。PID一般算式及模擬控制規律如式(1)式中:u(t)為控制器的輸出;e(t)為偏差,即設定值與反饋值之差;KC為控制器的放大系數,即比例增益;TI為控制器的積分常數;TD為控制器的微分時間常數。PIDKC,TI,TD將式(2)和式(3)代入式(1)PID樣時的偏差值;E(K-1)K-1次采樣時的偏差值;P(K)K次采樣是調節器的輸出。A/D采樣輸入、單片機控制、人機交互、控制信號輸出四部分組成,其中溫度傳感部12PCRS232PID1kW1L清水進行加熱。觀測設定值和實測值之間的誤差(當水溫達到穩定時的值)1。50℃30s225minPID算法的單片機溫度控制系統具有較高的精確回復數:5,PID【樓主位】MEGA16PID30%等級:152006-02-↑↑編輯刪除【1樓】qq等級:2009-04-↑↑編輯刪除【2樓】PIDLZ等級:2255100%1PIDPIDPID3PID02009-04-↑↑編輯刪除【3樓】【2學習了等級:2009-04-↑↑編輯刪除【4lengqi2009-04-↑↑編輯刪除【5樓】2009-10-↑↑AT89S51單片機為核心的溫度控制器的設計,在該設計中采用高精度的溫度傳感AD590對電熱鍋爐的溫度進行實時精確測量,OP07將溫度-電壓信號進行放大,12AD574AAD轉換,從而實現自動檢測,PID算法,PWM控制輸出參數,控制可控硅的通斷時間,最終實現對爐溫的高精度控制。PID方案一8031作為控制核心,ADC0809作模數轉換,控制上使用對電阻絲加電,器件的價格便宜,8031內部沒有程序存儲器,需要擴展,增加了電路的復雜性,ADC08098位的模數轉換,不能滿足本題目的精度要求。方案二AT89S51作為電路的控制核心,12AD574A轉換,PWM控制可控硅的通斷以實行對鍋爐溫度的連續控制,此方案電路簡單并且可以綜上分析,1控制器設計溫度控制設定波動范圍小于±1%,測量精度小于±1%,控制精度小于±2%,超調整量小于實現控制可以升溫也可以降溫實時顯示當前溫度值按鍵控制:設置復位鍵、運行鍵、功能轉換鍵、加一鍵、減一鍵二硬件1主機電路的2I/0通道的硬件電路的分送去顯示;另一部分與設定值進行比較,PID算法得到控制量并經由單片機輸出去控制電熱鍋爐加熱數據采集電路的數據采集電路AD590,0P07,74LS373,AD574A0.1度,而考慮到測量干擾和數據處理誤差,AD轉化器的精度應更高才能保證控制精度的實現,這個精度可處粗略0.10.1度;AD轉換器,40-90度,0.1度作AD區分度要求,AD需要區分(90-40)/0.1=500個數字量,10AD轉換器。為此,12AD574A。℃精度.)0P07將溫度一電壓信號進行放大,A/D進行轉換,以提高溫度采集電路的可靠性。模擬電路2。2溫度電壓轉換電控制執行電路的由輸出來控制電爐,行隔離處理,TLP521在控制部分進行光電隔離,此外采用變壓器隔離實現弱強電的電源PWM0時,光耦元件導通,從而使三極管形成有效偏置而導通,通過整流橋的電壓經過集電極電阻以及射集反向偏壓,7V左右的電壓加在雙向可控硅控制端,從而使可控硅導通,交流通路形成,電阻爐工作;反之單片機0時,光耦元件不能導通,三極管不能形成有效偏置而截止,可控硅控制端3控制執行部分3鍵盤及顯示的鍵盤采用軟件查詢和外部中斷相結合的方法來設計,3AN1,AN2,AN3,AN4,1AN3P3.2相連,采用外部中斷方式,并且優先級定為最高;AN5AN4P1.7P1.6相連,采用軟件查詢的方式;AN1則為硬件復位鍵,R、C構成復位電路。1按鍵按下(D1亮)時,設定值;按鍵升起(D1不亮)時,3位靜態顯示。數字電路硬件部分見圖:4數字硬件電路三系統軟件級,以便能實時響應鍵盤處理;T05秒定時,5秒響應一次,以用來采ORGAJMPORGAJMPORGAJMPORGAJMP5A/D轉換子程序、中斷處理子程序、鍵盤處T0該中斷是單片機5s定時中斷,優先級設為最低,但卻是最重要的子程序。在該中斷響應中,單片機要完A/D數據采集轉換、數字濾波、判斷是否越限、標度轉換處理、繼續顯示當前溫度、與設定值進行比較,PID算法子程序并輸出控制信號等功能。2.3T1T1T中斷之中,T中斷,PID算法子程序提供,T1間用于輸出可控硅(電爐)運算控制模塊涉及標度轉換、PID式中,Ax:實際測量的溫度值;NxA/D轉換的溫度量Am=90;Ao=40;Nm=FEH;單片機運算采用定點數運算,并且在高溫區和低溫區分別用程序作矯正處理,LED顯示見7。PID有效地克服了積分飽和的影響,使控制精度大大提高。PID8。78PID9中,26C。實現思想:Ui(k)k次采樣溫度值,Ure(k)≥εPD算法e(k)<εPID9四源程序五結果分析論述本文針對電熱鍋爐溫度控制系統模型,AT89S51PID算T1的定時常數,PWM輸出控制可控硅的通斷,79可以看出:本設計的控制器工作穩定,控制精度高,PID算法超調量大大降低;軟件采用模塊化結構,提PIDPID控制那塊C程序啊18B20為
2#2009-5-2319:13只看該作者#include#istruct_pidintpv;/*integerthatcontainstheprocessvalue*/intsp;/*integerthatcontainsthesetpoint*/floatintegral;floatpgain;floatigain;floatdgain;
intdeadband;intstruct_pidintprocess_point,floatp_gain,i_gain,d_gain,/*DESCRIPTIONThisfunctioninitializesthepointersinthe_pidstructuretotheprocessvariableandthesetpoint.*pvand*spareintegervoidpid_init(struct_pid*warm,intprocess_point,intstruct_pidpid=pid->pv=process_point;pid->sp=set_point;/*DESCRIPTIONSetstheproportionalgain(p_gain),integralgain(i_gain),derivitivegain(d_gain),andthedeadband(dead_band)ofapidcontrolstructurevoidpid_tune(struct_pid*pid,floatp_gain,floati_gain,floatd_gain,pid->pgain=p_gain;pid->igain=i_gain;pid->dgain=pid->deadband=dead_band;pid->integral=integral_val;/*DESCRIPTIONSetanewvaluefortheintegraltermofthepidThisisusefulforsettingtheinitialoutputofthepidcontrolleratstartup.voidpid_setinteg(struct_pid*pid,floatpid->integral=new_integ;pid->last_error=0;/*DESCRIPTIONBumplesstransferalgorithim.Whensuddenlychangingsetpoints,orwhenrestartingthePIDequationafteranextendedpause,thederivativeoftheequationcancauseabumpinthecontrolleroutput.Thisfunctionwillhelpsmoothoutthatbump.Theprocessvaluein*pvshouldbetheupdatedjustbeforethisfunctionisused.voidpid_bumpless(struct_pidpid->last_error=(pid->sp)-(pid-/*DESCRIPTIONPerformsPIDcalculationsforthe_pidstructure*a.Thisfunctionusesthepositionalformofthepidequation,andincorporatesanintegralwinduppreventionalgorithim.Rectangularintegrationisused,sothisfunctionmustberepeatedonaconsistenttimebasisforaccurateRETURNVALUEThenewoutputvalueforthepidUSAGE#includefloatpid_calc(struct_pidintfloatpterm,dterm,result,err=(pid->sp)-(pid->pv);if(abs(err)>pid-ferror=(float)err;/*dointegertofloatconversiononlyonce*/pterm=pid->pgain*ferror;if(pterm>100||pterm<-pid->integral=pid->integral+=pid->igain*ferror;if(pid->integral>100.0)pid->integral=elseif(pid->integral<0.0)pid->integral=dterm=((float)(err-pid->last_error))*pid->dgain;result=pterm+pid->integral+dterm;elseresult=pid->integral;pid->last_error=err;return(result);voidfloatdisplay_value;intcount=0;pid=//printf("EnterthevaluesofProcesspoint,Setpoint,Pgain,Igain,D//scanf("%d%d%f%f%f",&process_point,&set_point,&p_gain,process_point=set_point=40;p_gain=(float)(5.2);i_gain=(float)(0.77);d_gain=dead_band=integral_valprintf("ThevaluesofProcesspoint,Setpoint,Pgain,Igain,Dgain\n");printf("%6d%6d%4f%4f%4f\n",process_point,set_point,p_gain,i_gain,printf("EnterthevaluesofProcesspid_init(&warm,process_point,set_point);pid_tune(&warm,p_gain,i_gain,d_gain,dead_band);pid_setinteg(&warm,0.0);//Getinputvalueforprocesspoint//howtodisplayoutputdisplay_value=pid_calc(&warm);printf("%f\n",display_value);3#大中小發表于2009-5-2319:49蔣輝
4#2009-5-2319:49只看該作者QQ TEL
5#2009-6-1618:26只看該作者SHAC#include#include<vector> //定義vector數組#include<string> usingnamespaceconstintNUM=8; //一個字由32比特(或者8個16進制數)constintBIT=512; //消息認證碼要以512比特一組//stringH0="67452301";stringH1="EFCDAB89";stringH2="98BADCFE";stringH3="10325476";stringH4="C3D2E1F0";classSHA1//vector數組vector<int>hex_into_dec(stringword);//vectorstring字符串形式stringnum_into_message(vector<int>A);//XY的邏輯"和vector<int>word_AND(vector<int>A,vector<int>//XY的邏輯"或vector<int>word_OR(vector<int>A,vector<int>//XY的邏輯"異或vector<int>word_XOR(vector<int>A,vector<int>//XY的邏輯"補vector<int>word_COMPLEMENT(vector<int>//XY2^32vector<int>word_ADD(vector<int>A,vector<int>//Xs個位置vector<int>ROTL(vector<int>A,ints);//SHA-1的填充方案,msgASCIIvector<vector<int>>SHA_1_PAD(string//SHA-1vector<vector<vector<int>>>compress(vector<vector<int>>//ftftB,C,D三個字作為輸入,并產生一個字作vector<int>Ft(intt,vector<int>B,vector<int>C,vector<int>//Kvector<int>K(intt);//SHA-1(Hash算法)的加密vector<vector<int>>SHA_1(stringmsg);//vectorstringstringSHA1::num_into_message(vector<int>intstringmsg=for(i=0;i<if(A[i]>=0&&A[i]<=9)msg+='0'+A[i];elseif(A[i]>=10&&A[i]<=15)msg+='A'+(A[i]-10);return//vector數組vector<int>SHA1::hex_into_dec(stringintvector<int>result(NUM,0);for(i=0;i<NUM;i++)if(word[i]>='0'&&word[i]<=result[i]=word[i]-elseif(word[i]>='A'&&word[i]<=result[i]=10+word[i]-return//XY的邏輯"和vector<int>SHA1::word_AND(vector<int>A,vector<int>vector<int>result(NUM,0);inti;for(i=0;i<result[i]=A[i]&return//XY的邏輯"或vector<int>SHA1::word_OR(vector<int>A,vector<int>vector<int>result(NUM,0);inti;for(i=0;i<result[i]=A[i]|return//XY的邏輯"異或vector<int>SHA1::word_XOR(vector<int>A,vector<int>vector<int>result(NUM,0);inti;for(i=0;i<result[i]=A[i]^return//XY的邏輯"補vector<int>SHA1::word_COMPLEMENT(vector<int>vector<int>result(NUM,0);inti;for(i=0;i<result[i]=15-return//XY2^32vector<int>SHA1::word_ADD(vector<int>A,vector<int>vector<int>result(NUM,0);inti;for(i=NUM-1;i>=0;i--result[i]=A[i]+B[i];if(i!=0)inttemp=result[i]/16;result[i-1]+=temp;result[i]%=return//Xsvector<int>SHA1::ROTL(vector<int>A,intvector<int>result=A;vector<int>temp(NUM,0);inti,j;for(i=0;i<for(j=NUM-1;j>=0;j--if(result[j]/8>=temp[j]=result[j]<<=result[j]%=16;if(j<NUM-result[j]+=temp[j+elseif(result[j]/8==temp[j]=result[j]<<=result[j]%=result[NUM-1]+=return//SHA-1的填充方案,msgASCII碼組成vector<vector<int>SHA1::SHA_1_PAD(stringintlen=msg.length();intbit_num=len*8;inti,j;intnum,lest=bit_num%if(lest!= //512512num=bit_num/512+num=bit_num///8vector里面,51264位元素vector<vector<int>result;for(i=0;i<for(i=0;i<for(j=0;j<64&&i*64+j<result[i][j]=msg[i*64+//512if(lest!=intx=num-1,last_len=lest/8;result[x][last_len]=128; for(i=last_len+1;i<56;i++)result[x][i]=intlast_l=lest;j=63;while(j>=result[x][j]=last_l%128;last_l/=128;j--return//SHA-1壓成以字為單位(三維數組有點復雜)vector<vector<vector<int>SHA1::compress(vector<vector<int>result)vector<vector<int>>rr;intfor(i=0;i<for(i=0;i<for(j=0;j<rr[i][2*j]=result[i][j]/rr[i][2*j+1]=result[i][j]%vector<vector<vector<int>>>rrr;for(i=0;i<for(i=0;i<for(j=0;j<for(i=0;i<for(j=0;j<rrr[i][j/8][j%8]=return//ftftB,C,D三個字作為輸入,并產生一個字作為輸vector<int>SHA1::Ft(intt,vector<int>B,vector<int>C,vector<int>vector<int>result;if(t>=0&&t<=19)vector<int>a1=vector<int>a2=word_AND(word_COMPLEMENT(B),D);result=word_OR(a1,a2);elseif((t>=20&&t<=39)||(t>=60&&t<=vector<int>a1=word_XOR(B,C);result=word_XOR(a1,D);elseif(t>=40&&t<=vector<int>a1=word_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 東坡成就介紹課件
- 上海市奉賢區2025屆高三下學期二模試題 歷史 含解析
- 專業職業課件
- 合伙合同與終止合同
- 遼寧省沈陽市五校協作體2024-2025學年高考模擬試卷(1)語文試題含解析
- 山東理工大學《數據結構中俄》2023-2024學年第一學期期末試卷
- 山東省青島市第十六中學2025年重慶一中初三4月月考物理試題含解析
- 銷售合同書范文
- 店鋪租賃合同模板
- 云南省德宏市重點中學2025屆初三5月模擬考試自選試題含解析
- 考古發掘中文物的采集與保存課件
- 小學四年級地方課程安全教育教案泰山出版社
- 化學性及藥物性頜骨骨髓炎
- 神奇的植物王國課件
- 員工崗位技能考核評定表
- 項目部安全生產事故應急預案
- 垂體瘤-PPT課件
- 鉆井井控裝置
- 贛美版(江西)小學四年級美術下全冊教案
- 12隊淘汰賽_對陣表
- 我國城市馬拉松賽事發展現狀分析
評論
0/150
提交評論