PID控制算法的C語(yǔ)言實(shí)現(xiàn)本_第1頁(yè)
PID控制算法的C語(yǔ)言實(shí)現(xiàn)本_第2頁(yè)
PID控制算法的C語(yǔ)言實(shí)現(xiàn)本_第3頁(yè)
已閱讀5頁(yè),還剩39頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

PIDCPID算法原理近來(lái)兩天在考慮一般控制算法的C語(yǔ)言實(shí)現(xiàn)問(wèn)題,發(fā)現(xiàn)網(wǎng)絡(luò)上尚沒(méi)有一套完滿(mǎn)的比較系統(tǒng)的講解。于是總結(jié)了幾天,整理一套思路分享給大家。在工業(yè)應(yīng)用中PID及其衍生算法是應(yīng)用最廣泛的算法之一,是當(dāng)之無(wú)愧的全能算法,若是能夠熟練掌握PID來(lái)講,應(yīng)該是足夠?qū)Ω兑话阊邪l(fā)問(wèn)題了,而難能難得的是,在我所接觸的控制算法PID控制算法又是最簡(jiǎn)單,最能表現(xiàn)反響思想的控制算法,可謂經(jīng)典中的經(jīng)典。經(jīng)典的未必是復(fù)雜的,經(jīng)典的東西常常是簡(jiǎn)單的,而且是最簡(jiǎn)單的,想想牛頓的力學(xué)三大定律吧,想想愛(ài)因斯坦的質(zhì)能方程吧,PID算法的一般形式:PID,而控制器自己就是比率、積分、微分三個(gè)環(huán)節(jié)的加和。這里我們規(guī)定(在 t時(shí)辰):rin(t);rout(t);誤差量為err(t)=rin(t)-rout(t);pid 的控制規(guī)律為理解一下這個(gè)公式,主要從下面幾個(gè)問(wèn)題著手,為了便于理解,把控制環(huán)境詳細(xì)一下:規(guī)定這個(gè)流程是用來(lái)為直流電機(jī)調(diào)速的 ;1輸入量rin(t) 為電機(jī)轉(zhuǎn)速預(yù)定值;輸出量rout(t) 為電機(jī)轉(zhuǎn)速本質(zhì)值;;傳感器為光電碼盤(pán),假設(shè)碼盤(pán)為10;直流電機(jī)采用PWM調(diào)速轉(zhuǎn)速用單位轉(zhuǎn)/min;不難看出以下結(jié)論:rin(t)為電機(jī)轉(zhuǎn)速預(yù)定值(轉(zhuǎn)/min);輸出量rout(t) 為電機(jī)轉(zhuǎn)速本質(zhì)值(轉(zhuǎn)/min);誤差量為預(yù)定值和本質(zhì)值之差(轉(zhuǎn)/min);那么以下幾個(gè)問(wèn)題需要弄清楚:PIDU(t)是什么值呢?控制執(zhí)行器(直流電機(jī))轉(zhuǎn)動(dòng)轉(zhuǎn)速應(yīng)該為電壓值(PWM占空比)。U(t)PWM之間存在怎樣的聯(lián)系呢?/3407/archives/2006/33541.html(1)這篇文章上給出了一種方法,即,每個(gè)電壓對(duì)應(yīng)一個(gè)轉(zhuǎn)速,電壓和轉(zhuǎn)速之間表現(xiàn)線(xiàn)性關(guān)系。但是我考慮這種方法的前提是把直流電機(jī)的特點(diǎn)理解為線(xiàn)性了,而本質(zhì)情況下,直流電機(jī)的特點(diǎn)絕對(duì)不是線(xiàn)性PID調(diào)速有個(gè)范圍的問(wèn)題。詳-,需要現(xiàn)有開(kāi)環(huán)系統(tǒng),測(cè)試電機(jī)和轉(zhuǎn)速之間的特點(diǎn)曲線(xiàn)(也許查閱電機(jī)的資料說(shuō)明),爾后再進(jìn)行閉環(huán)參數(shù)整定。這篇先寫(xiě)到這,下一篇說(shuō)明連續(xù)系統(tǒng)的PIDPIDC實(shí)現(xiàn)過(guò)程。2PID控制算法的C語(yǔ)言實(shí)現(xiàn)二PID算法的失散化PID上一的,基本已能夠PIDPID控制其是誤差的控制程;若是誤差0, 比率不起作用,只有存在誤差,比率才起作用。上就是誤而微分信號(hào)反了誤差信號(hào)的化律,也許是化,依照誤差信號(hào)的來(lái)行超前 ,進(jìn)而增加了系的迅速性。好了,關(guān)于PID的基本明就充到里,下面將PID 系失散化,進(jìn)而方便在器上。下面把狀的公式再一下:假采隔 T,在第KT刻:誤差err(K)=rin(K)-rout(K);分用加和的形式表示,即err(K)+err(K+1)+??;微分用斜率的形式表示,即[err(K)-err(K-1)]/T;進(jìn)而形成以下PID失散表示形式:u(K)可表示成:3Kp、KiKd約時(shí)間,不再詳細(xì)表示了。PIDPIDPIDU上述表達(dá)式能夠輕易獲?。耗敲矗篜ID來(lái)三次的誤差相關(guān),這樣就大大提高了系統(tǒng)的牢固性。需要注意的是最后的輸出結(jié)果應(yīng)該為u(K)+增量調(diào)治值;PIDC而實(shí)現(xiàn)微控制器的控制作用。4PIDCPIDC現(xiàn)PIDPIDCCPID算法的CC語(yǔ)言實(shí)現(xiàn)。第一步:定義PID變量結(jié)構(gòu)體,代碼以下:struct_pid{floatSetSpeed;floatActualSpeed;floaterr;floaterr_last;floatKp,Ki,Kd;floatvoltage;floatintegral;

//定義設(shè)定值//定義本質(zhì)值//定義誤差值//定義上一個(gè)誤差值//定義比率、積分、微分系數(shù)//定義電壓值(控制執(zhí)行器的變量)//定義積分值}pid;控制算法中所需要用到的參數(shù)在一個(gè)結(jié)構(gòu)體中統(tǒng)必然義,方便后邊的使用。第二部:初始化變量,代碼以下:voidPID_init(){printf("PID_initbegin\n");pid.SetSpeed=0.0;pid.ActualSpeed=0.0;pid.err=0.0;pid.err_last=0.0;pid.voltage=0.0;egral=0.0;pid.Kp=0.2;pid.Ki=0.015;pid.Kd=0.2;printf("PID_initend\n");}一致初始化變量,特別是Kp,Ki,Kd三個(gè)參數(shù),調(diào)試過(guò)程中間,關(guān)于要求的控制收效,能夠經(jīng)過(guò)調(diào)治這三個(gè)量直接進(jìn)行調(diào)治。第三步:編寫(xiě)控制算法,代碼以下:5floatPID_realize(floatspeed){pid.SetSpeed=speed;pid.err=pid.SetSpeed-pid.ActualSpeed;egral+=pid.err;-pid.err_last);pid.err_last=pid.err;pid.ActualSpeed=pid.voltage*1.0;returnpid.ActualSpeed;}注意:這里用了最基本的算法實(shí)現(xiàn)形式,沒(méi)有考慮死區(qū)問(wèn)題,沒(méi)有設(shè)定上下限,可是對(duì)公式的一種直接的實(shí)現(xiàn),后邊的介紹中間還會(huì)逐漸的對(duì)此改進(jìn)。到此為止,PID的基本實(shí)現(xiàn)部分就初步完成了。下面是測(cè)試代碼:intmain(){printf("Systembegin\n");PID_init();intcount=0;while(count<1000){floatspeed=PID_realize(200.0);printf("%f\n",speed);count++;}return0;}下面是經(jīng)過(guò)1000次的調(diào)治后輸出的1000個(gè)數(shù)據(jù)(詳細(xì)的參數(shù)整定過(guò)程就不說(shuō)了然,網(wǎng)上這種說(shuō)明特別多):6789PIDCPIDC現(xiàn)上一節(jié)中介紹了最簡(jiǎn)單的地址型PID的實(shí)現(xiàn)手段,這一節(jié)主要講解增量式PID的實(shí)現(xiàn)方法,地址型和增量型PID的數(shù)學(xué)公式請(qǐng)拜會(huì)我的系列文《PIDC語(yǔ)言實(shí)現(xiàn)二》中的講解。實(shí)現(xiàn)過(guò)程依舊是分為定義變量、初始化變量、實(shí)現(xiàn)控制算法函數(shù)、算法測(cè)試四個(gè)部分,詳細(xì)分類(lèi)請(qǐng)參加《 PID控制算法的C言實(shí)現(xiàn)三》中的講解,這里直接給出代碼了。#include<stdio.h>#include<stdlib.h>struct_pid{floatSetSpeed;floatActualSpeed;floaterr;floaterr_next;floaterr_last;floatKp,Ki,Kd;

//定義設(shè)定值//定義本質(zhì)值//定義誤差值//定義上一個(gè)誤差值//定義最上前的誤差值//定義比率、積分、微分系數(shù)}pid;voidPID_init(){pid.SetSpeed=0.0;pid.ActualSpeed=0.0;pid.err=0.0;pid.err_last=0.0;pid.err_next=0.0;pid.Kp=0.2;pid.Ki=0.015;pid.Kd=0.2;}floatPID_realize(floatspeed){pid.SetSpeed=speed;pid.err=pid.SetSpeed-pid.ActualSpeed;floatincrementSpeed=pid.Kp*(pid.err-pid.err_next)+pid.Ki*pid.err+pid.Kd*(pid.err-2*pid.err_next+pid.err_last);pid.ActualSpeed+=incrementSpeed;pid.err_last=pid.err_next;pid.err_next=pid.err;returnpid.ActualSpeed;}10intmain(){PID_init();intcount=0;while(count<1000){}return0;}

floatspeed=PID_realize(200.0);printf("%f\n",speed);count++;運(yùn)行后的1000個(gè)數(shù)據(jù)為:11121314PIDCPIDC語(yǔ)言實(shí)現(xiàn)PID控制算法的最老例的表達(dá)PID精度。但是在啟動(dòng)、結(jié)束或大幅度增減設(shè)準(zhǔn)時(shí),短時(shí)間內(nèi)系統(tǒng)輸出有很大的誤PID圍對(duì)應(yīng)極限控制量,進(jìn)而引起較大的超調(diào),甚至是震蕩,這是絕對(duì)不一樣意的。為了戰(zhàn)勝這一問(wèn)題,引入了積分分其他看法,其基本思路是當(dāng)被控量與設(shè)定值誤差較大時(shí),取消積分作用;當(dāng)被控量湊近給定值時(shí),引入積分控制,以除掉靜差,提高精度。其詳細(xì)實(shí)現(xiàn)代碼以下:pid.Kp=0.2;pid.Ki=0.04;pid.Kd=0.2; // 初始化過(guò)程if(abs(pid.err)>200){index=0;}else{index=1;egral+=pid.err;}pid.voltage=pid.Kp*pid.err+index*pid.Ki*egral+pid.Kd*(pid.err-pid.err_last); // 算法詳細(xì)實(shí)現(xiàn)過(guò)程PIDC10001991/2,系統(tǒng)的迅速性獲取了提高。15161718PIDCPIDC語(yǔ)言實(shí)現(xiàn)所謂的積分飽和現(xiàn)象是指若是系統(tǒng)存在一個(gè)方向的誤差,PID由于積分作用的不斷累加而加大,進(jìn)而以致執(zhí)行機(jī)構(gòu)達(dá)到極限地址,若控制器輸U(kuò)(k)連續(xù)增大,執(zhí)行器開(kāi)度不能能再增大,此時(shí)計(jì)算機(jī)輸出控制量高出了正常運(yùn)行范圍而進(jìn)入飽和區(qū)。一旦系統(tǒng)出現(xiàn)反向誤差,u(k)逐漸從飽和區(qū)退出。進(jìn)入飽和區(qū)越深則退出飽和區(qū)時(shí)間越長(zhǎng)。在這段時(shí)間里,執(zhí)行機(jī)構(gòu)依舊停留在極限地址而不隨誤差反向而立刻做出相應(yīng)的改變,這時(shí)系統(tǒng)就像失控同樣,造成控制性能惡化,這種現(xiàn)象稱(chēng)為積分飽和現(xiàn)象或積分失控現(xiàn)象。防范積分飽和的方法之一就是抗積分飽和法,該方法的思路是在計(jì)算u(k)時(shí),第一判斷上一時(shí)辰的控制量 u(k-1)可否已經(jīng)高出了極限范圍: 若u(k-1)>umax ,則只累加負(fù)誤差; 若是u(k-1)<umin ,則只累加正誤差。進(jìn)而避免控制量長(zhǎng)時(shí)間停留在飽和區(qū)。直接貼出代碼,不懂的看看前面幾節(jié)的介紹。struct_pid{floatSetSpeed;floatActualSpeed;floaterr;floaterr_last;floatKp,Ki,Kd;float voltage;

//定義設(shè)定值//定義本質(zhì)值//定義誤差值//定義上一個(gè)誤差值//定義比率、積分、微分系數(shù)//定義電壓值(控制執(zhí)行器的變量)}pid;

floatintegral;floatumax;floatumin;

//定義積分值voidPID_init(){printf("PID_initbegin\n");pid.SetSpeed=0.0;pid.ActualSpeed=0.0;pid.err=0.0;pid.err_last=0.0;pid.voltage=0.0;egral=0.0;pid.Kp=0.2;pid.Ki=0.1; // 的值pid.Kd=0.2;pid.umax=400;pid.umin=-200;19printf("PID_initend\n");}floatPID_realize(floatspeed){intindex;pid.SetSpeed=speed;pid.err=pid.SetSpeed-pid.ActualSpeed;if(pid.ActualSpeed>pid.umax){

// 灰色底色表示抗積分飽和的實(shí)現(xiàn)if(abs(pid.err)>200){

//藍(lán)色注明為積分分別過(guò)程}else{

index=0;index=1;if(pid.err<0){egral+=pid.err;}}}elseif(pid.ActualSpeed<pid.umin){if(abs(pid.err)>200){

//積分分別過(guò)程}else{

}else{}

index=0;index=1;if(pid.err>0){egral+=pid.err;}//積分分別過(guò)程

if(abs(pid.err)>200){index=0;}else{index=1;egral+=pid.err;}}pid.voltage=pid.Kp*pid.err+index*pid.Ki*egral+pid.Kd*(pid.err-pid.err_last);20pid.err_last=pid.err;pid.ActualSpeed=pid.voltage*1.0;returnpid.ActualSpeed;}最后的測(cè)試程序運(yùn)算結(jié)果以下,能夠顯然的看出系統(tǒng)的穩(wěn)準(zhǔn)時(shí)間相對(duì)前幾次來(lái)講縮短了很多。21222324PIDCPIDC語(yǔ)言實(shí)現(xiàn)先看一下梯形算法的積分環(huán)節(jié)公式作為PID控制律的積分項(xiàng),其作用是除掉余差,為了盡量減小余差,應(yīng)提高積分項(xiàng)運(yùn)算精度,為此能夠?qū)⒕匦畏e分改為梯形積分,詳細(xì)實(shí)現(xiàn)的語(yǔ)句為:r-pid.err_last); // 梯形積分其他函數(shù)請(qǐng)拜會(huì)本系列教程六中的介紹最后運(yùn)算的牢固數(shù)據(jù)為:,較教程六中的199.9999390 而言,精度進(jìn)一步提高。25PIDCPID控制算法C語(yǔ)言實(shí)現(xiàn)PIDPIDki是常數(shù),因此在整個(gè)控制過(guò)程中,積分增量是不變的。但是,系統(tǒng)關(guān)于積分項(xiàng)的要求是,系統(tǒng)誤差大時(shí),積分作用應(yīng)該減弱甚至是全無(wú),而在誤差小時(shí),則應(yīng)該加強(qiáng)。積分系數(shù)取大了會(huì)產(chǎn)生超調(diào),甚至積分飽和,取小了又不能夠短時(shí)間內(nèi)除掉靜差。因此,依照系統(tǒng)的誤差大小改變積分速度是有必要的。PID;誤差越小,積分越快。這里給積分系數(shù)前加上一個(gè)比率值 index當(dāng)abs(err)<180 時(shí),index=1;當(dāng)180<abs(err)<200 時(shí),index=(200-abs(err) )/20;當(dāng)abs(err)>200 時(shí),index=0;最后的比率環(huán)節(jié)的比率系數(shù)值為ki*index;詳細(xì)PID實(shí)現(xiàn)代碼以下:pid.Kp=0.4;pid.Ki=0.2;pid.Kd=0.2;

// 增加了積分系數(shù)floatPID_realize(floatspeed){floatindex;pid.SetSpeed=speed;pid.err=pid.SetSpeed-pid.ActualSpeed;if(abs(pid.err)>200){index=0.0;}elseif(abs(pid.err)<180){index=1.0;egral+=pid.err;}else{

//變積分過(guò)程26index=(200-abs(pid.err))/20;egral+=pid.err;}pid.voltage=pid.Kp*pid.err+index*pid.Ki*egral+pid.Kd*(pid.err-pid.err_last);pid.err_last=pid.err;pid.ActualSpeed=pid.voltage*1.0;returnpid.ActualSpeed;}最后結(jié)果能夠看出,系統(tǒng)的牢固速度特別快27

(測(cè)試程序拜會(huì)本系列教程

3):282930PIDCPIDPID的C語(yǔ)言實(shí)現(xiàn)PIDC8PID的實(shí)現(xiàn)到深入的過(guò)程進(jìn)行了一個(gè)簡(jiǎn)要的講解,從前面的講解中不難看PID的控制思想特別簡(jiǎn)單,其主要問(wèn)題點(diǎn)和難點(diǎn)在于比率、積分、微分環(huán)節(jié)上的方法進(jìn)行實(shí)驗(yàn)型的整定。但是,在本質(zhì)的控制系統(tǒng)中,線(xiàn)性系統(tǒng)畢竟是少許,大多數(shù)的系統(tǒng)屬于非PIDPID就是為滿(mǎn)足這方面的需求而設(shè)計(jì)的。專(zhuān)家算法和模糊算法都?xì)w屬于智能算法的范圍,智能算法最大的優(yōu)點(diǎn)就是在控制模型未知的情況下,能夠?qū)δP瓦M(jìn)行控制。這里需要注意的是,專(zhuān)家PID也PIDPID控制算法的簡(jiǎn)單加和,他PIDPID進(jìn)行參數(shù)整定的手段。其實(shí)在前面幾節(jié)的表達(dá)中,已經(jīng)用到了專(zhuān)家PID的一些特例行為了,從第五節(jié)到第八節(jié)都是專(zhuān)家系一致些特列化的算法,對(duì)某些條件進(jìn)行了局部的判斷,比方若是誤差太大的話(huà),就去除積分項(xiàng),這自己就是含有經(jīng)驗(yàn)的專(zhuān)家系統(tǒng)。專(zhuān)家系統(tǒng)、模糊算法,需要參數(shù)整定就必然要有整定的依照,也就是說(shuō)什么情況下整定什么值是要有依照的,這個(gè)依照是一些邏輯的組合,只要找出其中PIDCPID系數(shù)自己提及。KpKp大,系統(tǒng)的響應(yīng)速度越快,系統(tǒng)的調(diào)治精度越高,但是簡(jiǎn)單產(chǎn)生超調(diào),甚至?xí)瓜礙p取值過(guò)小,則會(huì)降低調(diào)治精度,使響應(yīng)速度緩慢,進(jìn)而延長(zhǎng)調(diào)治時(shí)間,是系統(tǒng)靜態(tài)、動(dòng)向特點(diǎn)變差;KiKiKi過(guò)大,在響應(yīng)過(guò)程的初期會(huì)產(chǎn)生積分飽和的現(xiàn)象,從而引起響應(yīng)過(guò)程的較大超調(diào)。若Ki過(guò)小,將使系統(tǒng)靜態(tài)誤差難以除掉,影響系統(tǒng)的調(diào)治精度;Kdkd過(guò)大,會(huì)使響應(yīng)過(guò)程提前制動(dòng),進(jìn)而延長(zhǎng)調(diào)治時(shí)間,而且會(huì)降低系統(tǒng)的抗攪亂性。31反響系統(tǒng)性能的兩個(gè)參數(shù)是系統(tǒng)誤差e和誤差變化律ec,這點(diǎn)還是好理解的:MmaxMmidMmin;abs(e)>Mmax時(shí),說(shuō)明誤差的絕對(duì)值已經(jīng)很大了,不論誤差變化趨勢(shì)怎樣,都應(yīng)該考慮控制器的輸入應(yīng)按最大(或最?。┑氖招?,使誤差絕對(duì)值以最大的速度減小。此時(shí),相當(dāng)于推行開(kāi)環(huán)控制。e*ec>0時(shí),說(shuō)明誤差在朝向誤差絕對(duì)值增大的方向變化,此時(shí),若是abs(e)>Mmid,說(shuō)明誤差也較大,可考慮由控制器推行較強(qiáng)的控制作用,以達(dá)到扭轉(zhuǎn)誤差絕對(duì)值向減小的方向變化,并迅速減小誤差的絕對(duì)值。此時(shí)若是abs(e)<Mmid,說(shuō)明盡管誤差是向絕對(duì)值增大的方向變化,但是誤差絕對(duì)值自己其使其向誤差絕對(duì)值減小的方向變化即可。e*err<0e*err(k-1)>0e=0化,也許已經(jīng)達(dá)到平衡狀態(tài),此時(shí)保持控制器輸出不變即可。e*err<0e*err(k-1)<0Mmin,能夠考慮推行較強(qiáng)控制作用。若是此時(shí)誤差絕對(duì)值較小,能夠考慮推行較弱控制作用。當(dāng)abs(e)<Mmin 時(shí),說(shuō)明誤差絕對(duì)值很小,此時(shí)加入積分,減小靜態(tài)誤差。上面的邏輯判斷過(guò)程,本質(zhì)上就是關(guān)于控制系統(tǒng)的一個(gè)專(zhuān)家判斷過(guò)程。(未完待續(xù))32PIDC語(yǔ)言實(shí)現(xiàn)十模糊算法簡(jiǎn)介PIDCPID的本質(zhì)做了一個(gè)簡(jiǎn)要PIDC語(yǔ)言基礎(chǔ)的朋友能夠經(jīng)過(guò)這些介紹性的文字自行實(shí)現(xiàn)。這篇文章主要說(shuō)明一下模糊算法的含義和原理。本質(zhì)上模糊算法屬于智能算法,智能算法也能夠叫非模型算法,也就是說(shuō),當(dāng)我們關(guān)于系統(tǒng)的模型認(rèn)識(shí)不是很深刻,也許說(shuō)客觀(guān)的原因以致我們無(wú)法對(duì)系統(tǒng)的控制模型進(jìn)行深入研究的時(shí)候,智能算法常常能夠起到不小的作用。這點(diǎn)是方便理解的,若是一個(gè)系統(tǒng)的模型能夠輕易的獲取,那么便能夠依照系統(tǒng)的模型進(jìn)行模型解析,設(shè)計(jì)出適合系統(tǒng)模型的控制器。但是現(xiàn)實(shí)世界中,能夠說(shuō)所有的系統(tǒng)都是非線(xiàn)性的,是不能展望的。但這其實(shí)不是說(shuō)我們就無(wú)從建立控制器,由于,大多數(shù)的系統(tǒng)在必然的條件和范圍內(nèi)是能夠抽象成為線(xiàn)性系統(tǒng)的。問(wèn)題的要點(diǎn)是,當(dāng)我們系統(tǒng)設(shè)計(jì)的范圍高出了線(xiàn)性的范圍,我們又該怎樣辦理。顯然,智能算法是一條很不錯(cuò)的路子。智能算法包含了專(zhuān)家系統(tǒng)、模糊算法、遺傳算法、神經(jīng)網(wǎng)絡(luò)算法等。其實(shí)這其中的任何一種算法都能夠跟PID鍵在于,辦理的實(shí)時(shí)性能不能夠獲取滿(mǎn)足。 當(dāng)我們辦理的速度足夠迅速時(shí), 我們能夠選擇更加復(fù)雜的、精度更加高的算法。但是,控制器的辦理速度限制了我們51單DSPPIDPIDPIDPID的一些基本知識(shí)。模糊算法其實(shí)其實(shí)不模糊。模糊算法其實(shí)也是逐次求精的過(guò)程。這里舉個(gè)例子說(shuō)明。我們?cè)O(shè)計(jì)一個(gè)倒立擺系統(tǒng),若是擺針誤差<5°,我們說(shuō)它的誤差比較“小”;擺針誤差在5°和10°之間,我們說(shuō)它的誤差處于“中”的狀態(tài);當(dāng)擺針誤差>10°的時(shí)候,我們說(shuō)它的誤差有點(diǎn)兒“大”了。關(guān)于“小”、“中”、“大”這樣的詞匯來(lái)講,他們是精確的表述,可問(wèn)題是若是擺針誤差是 3°呢那么這是一種什么樣的狀態(tài)呢。我們能夠用“很小”來(lái)表述它。若是是7°呢,能夠說(shuō)它是“中”偏“小”。那么若是到了80°呢,它的誤差能夠說(shuō)“特別大”。而我們調(diào)治的過(guò)程本質(zhì)上就是讓系統(tǒng)的誤差由特別“大”逐漸向特別“小”過(guò)分的過(guò)程。自然,我們系統(tǒng)這個(gè)調(diào)治過(guò)程是迅速牢固的。經(jīng)過(guò)上面的說(shuō)明,能夠認(rèn)識(shí)到,其實(shí)關(guān)于每一種狀態(tài)都能夠劃分到大、中、小三個(gè)狀態(tài)中間去,只但是他們隸屬的程度不太同樣,比方6°隸屬于小的程度可能是0.3,隸屬于中的程度是0確定?這就要求我們?nèi)ピO(shè)計(jì)一個(gè)隸屬函數(shù)。詳細(xì)內(nèi)容能夠查閱相關(guān)的資料,這里沒(méi)有方法那么詳細(xì)的說(shuō)了然。 /150383.htm (見(jiàn)附錄3)這里面多大的速度和方向轉(zhuǎn)動(dòng)了,自然,最后的控制量必然要落實(shí)在控制電壓上。這點(diǎn)1的狀態(tài)1的狀態(tài)。當(dāng)隸屬大多一些的時(shí)候,我們就33加速調(diào)治的速度,當(dāng)隸屬小多一些的時(shí)候,我們就減慢調(diào)治的速度,進(jìn)行微調(diào)??蓡?wèn)題是,大、中、小的狀態(tài)是漢字,怎么用數(shù)字表示,進(jìn)而用程序代碼表示呢?其實(shí)我們能夠給大、中、小三個(gè)狀態(tài)設(shè)定三個(gè)數(shù)字來(lái)表示,比方大表示用3表示,中2表示,小用1表示。那么我們完滿(mǎn)能夠用1*0.3+2*0.7+3*0.0=1.7 來(lái)表示它,自然這個(gè)公式也不用然是這樣的,這個(gè)公式的設(shè)計(jì)是系統(tǒng)模糊化和精確化的一個(gè)過(guò)程,讀者也可拜會(huì)相關(guān)文件理解。但就1.7這個(gè)數(shù)字而言,能夠說(shuō)明,目6°的角度誤差處于小和中之間,但是更偏向于中。我們便能夠依照這個(gè)數(shù)字來(lái)調(diào)治電機(jī)的轉(zhuǎn)動(dòng)速度和時(shí)間了。自然,這個(gè)數(shù)字與電機(jī)轉(zhuǎn)速的對(duì)應(yīng)關(guān)系,也需要依照本質(zhì)情況進(jìn)行設(shè)計(jì)和調(diào)治。系統(tǒng)的限制因素常常不是一個(gè)。上面的例子中,只有誤差角度成為了系統(tǒng)調(diào)治的PID系統(tǒng),我們需要調(diào)治的是比率、積分、微分三個(gè)環(huán)節(jié),那么這三個(gè)環(huán)節(jié)的作用就需要我們認(rèn)清,也就是說(shuō),我們需要依照超調(diào)量、調(diào)治時(shí)間、震蕩情況等信息來(lái)考慮對(duì)這三個(gè)環(huán)節(jié)調(diào)治的比重,輸入量和輸出量都不是單一的,但是其中必然有某種內(nèi)在的邏輯聯(lián)系。因此這種邏輯聯(lián)系就成為PID三個(gè)變量和系統(tǒng)性能參數(shù)之間的聯(lián)系。PIDc語(yǔ)言實(shí)現(xiàn)十一(PID系列結(jié)束篇PID的參數(shù)整定這幾天素來(lái)在考慮怎樣能夠把這一節(jié)的內(nèi)容討情楚,關(guān)于PID而言應(yīng)用并沒(méi)有多大難度,依照基本的算法設(shè)計(jì)思路和成熟的參數(shù)整定方法,就算是沒(méi)有經(jīng)過(guò)PIDPID算法,進(jìn)而能夠依照本質(zhì)的情況設(shè)計(jì)出優(yōu)秀的算法呢。經(jīng)過(guò)表達(dá)公式和基根源理必然是最能說(shuō)明問(wèn)題的,但是這樣的話(huà)怕是犯了“專(zhuān)PID系列文章的最后一篇。PIDPID設(shè)計(jì)的要點(diǎn),至于更深入的研究,就交給有需要的讀者去做。上一節(jié)中大體表達(dá)了一下模糊算法。本質(zhì)上模糊算法的好多看法在上一節(jié)34若是模糊規(guī)則擬定的優(yōu)秀,那么模糊算法的控制效率就高。其實(shí)這是智能算法的一般特點(diǎn),規(guī)則是系統(tǒng)判斷和辦理的前提。那么就說(shuō)說(shuō) PID的規(guī)則該怎么擬定。PID的三個(gè)參數(shù)進(jìn)行智能調(diào)治。那么第一要PID實(shí)中間有好多整定方法。但是我們需要從根本上認(rèn)識(shí)為什么這么整定,才能知道該怎樣建立數(shù)學(xué)模型進(jìn)行解析。那么要回答怎樣整定參數(shù)的問(wèn)題,就需要先明白PID參數(shù)的作用都是什么?對(duì)系統(tǒng)有什么影響?我們從作用和副作用兩個(gè)方面說(shuō)明參數(shù)對(duì)系統(tǒng)的影響。Kp;Ki,作用是除掉穩(wěn)態(tài)誤差,副作用是以致積分飽和現(xiàn)象;Kd,作用是改進(jìn)系統(tǒng)的動(dòng)向性能,副作用是延長(zhǎng)系統(tǒng)的調(diào)治時(shí)間。理解了上述問(wèn)題,那么便能夠“辯證施治,因材施教”了。比方說(shuō),若是系Kp的取值,若是超調(diào)量過(guò)大我們就減小Kp饋系統(tǒng)的本質(zhì)就是系統(tǒng)的輸出量作為反響量與系統(tǒng)的輸入量進(jìn)行作差,進(jìn)而獲取ee便能夠反響當(dāng)前系統(tǒng)所處的狀態(tài)。誤差e能夠表明當(dāng)前系統(tǒng)的輸出狀態(tài)終究偏離要求多少。而誤差eec,表示誤差變化的速度。這樣,我們能夠依照這兩個(gè)量的狀態(tài)來(lái)解析三個(gè)參數(shù)此時(shí)應(yīng)該怎樣取eec進(jìn)而加速調(diào)治速度,而積分環(huán)節(jié)要小一些,甚至不加積分環(huán)節(jié),進(jìn)而防范負(fù)方向上出現(xiàn)飽和積分的現(xiàn)象。微分環(huán)節(jié)能夠略加一些,在不影響調(diào)治時(shí)間的情況下,起到改進(jìn)系統(tǒng)動(dòng)向性能的作用。35附錄1UKPWM和輸出控制電壓對(duì)應(yīng)。(PWMPWM要經(jīng)過(guò)濾波整形再輸出控制。)前提條件:輸出電壓控制電壓范圍是0-10V。給定、反響、輸出電壓采樣輸入電壓范圍是 0-5V(經(jīng)過(guò)運(yùn)放)使用單片機(jī)AD為10位AD芯片。10AD芯片電壓采集獲取的數(shù)據(jù)范圍就是0-1024。PWM800255100%12750%的方波。1V。(KP,KI,KDPID現(xiàn)我在前文中有論述怎樣實(shí)現(xiàn))。那么經(jīng)過(guò)AD采樣12.5V5122、反響1V對(duì)應(yīng)為205PIDUK400也就意味著輸出電壓應(yīng)該為(400*(UPWM峰值電壓))/1024那么UK對(duì)應(yīng)的PWM占空比是多少呢?UK=1024100PWM255知,PWM=UK/4;那么400就應(yīng)該對(duì)應(yīng)系數(shù)400/4=100 也就是輸出電壓PWM望值不是那么線(xiàn)性,因此,我在項(xiàng)目?jī)?nèi)加入了輸出電壓采樣的控制。AD0-5V,因此,關(guān)于輸出0-10V有一個(gè)減小的比率。輸出10V則采樣值對(duì)應(yīng)為255輸出5V則采樣之對(duì)應(yīng)127363.9VAD97采樣輸出電壓值,能夠針對(duì)性的調(diào)整一下占空比輸出,進(jìn)而獲取誤差贊同范圍內(nèi)的一個(gè)控制輸出電壓。同時(shí),經(jīng)過(guò)一些加速控制的手段。能夠比較迅速的達(dá)到控制的目的。下文中的UK控制方法是針對(duì)增量式PID控制而來(lái)做的。/****************************************************/void PWMProcess(void){uint16idatatemp;uint16idataUKTemp;temp=0;UKTemp=0;if(Pwm.ChangeFlag_Uint8!=0) // 判斷可否需要改變占空比{//可否需要改變占空比和你的被控系統(tǒng)特點(diǎn)相關(guān)Pwm.ChangeFlag_Uint8=0;UKTemp=PID.Uk_Uint16+SwIn.AddValue_Uint16;// UK控制量// 加在控制量上的一個(gè)變量。if(UKTemp>999){UKTemp=999;}//9991024PWM12V致。while(1)//Delta在誤差以?xún)?nèi){ADChPro(UPWMADCH); //

測(cè)量輸出電壓37if(ADPool.Value_Uint16[UPWMADCH]==UKTemp){return;}if(ADPool.Value_Uint16[UPWMADCH]>UKTemp)// 壓,減小占空比{if((ADPool.Value_Uint16[UPWMADCH]-UKTemp)>UDELTA){temp=ADPool.Value_Uint16[UPWMADCH]-UKTemp;//temp=temp/2; // 下降能夠加速下降,因此下降參數(shù)加倍if(Pwm.DutyCycle_Uint8>temp){Pwm.DutyCycle_Uint8=Pwm.DutyCycle_Uint8-temp;}else{Pwm.DutyCycle_Uint8=0;}}else{return;}}else{

// 若是當(dāng)前電壓小于輸出電壓38if((UKTemp-ADPool.Value_Uint16[UPWMADCH])>UDELTA){temp=UKTemp-ADPool.Value_Uint16[UPWMADCH];temp=temp/4;// +if(Pwm.DutyCycle_Uint8)>temp){Pwm.DutyCycle_Uint8+=(temp/2);}else{Pwm.DutyCycle_Uint8=255;}}else{return;}}DisPlayVoltage();PWMChangeDuty(Pwm.DutyCycle_Uint8);// 改變占空比Delay(10,10);}}}/*****************************************************/39附錄2直流電機(jī)PWM調(diào)速系統(tǒng)中控制電壓非線(xiàn)性研究序言由于線(xiàn)性放大驅(qū)動(dòng)方式效率和散熱問(wèn)題嚴(yán)重,當(dāng)前絕大多數(shù)直流電動(dòng)機(jī)采用開(kāi)關(guān)驅(qū)動(dòng)方式。開(kāi)關(guān)驅(qū)動(dòng)方式是半導(dǎo)體功率器件工作在開(kāi)關(guān)狀態(tài),經(jīng)過(guò)脈寬調(diào)制PWM控制電動(dòng)機(jī)電樞電壓,實(shí)現(xiàn)調(diào)速。當(dāng)前已有好多文件介紹直流電機(jī)調(diào)速宋衛(wèi)國(guó)等用89C51單片機(jī)實(shí)現(xiàn)了直流電機(jī)閉環(huán)調(diào)速;張立勛等用AVR單片機(jī)實(shí)現(xiàn)了直流電機(jī)PWM調(diào)速;郭崇軍等用C8051實(shí)現(xiàn)了無(wú)刷直流電機(jī)控制;張紅娟等用PIC單片機(jī)實(shí)現(xiàn)了直流電機(jī)PWM調(diào)速;王晨陽(yáng)等用DSP實(shí)現(xiàn)了無(wú)刷直流電機(jī)控制。上述文件對(duì)實(shí)現(xiàn)調(diào)速的硬件電路和軟件流程的設(shè)計(jì)有較詳細(xì)的描述, 但沒(méi)有說(shuō)明詳細(xì)的調(diào)壓調(diào)速方法,也沒(méi)有提及占空比與電機(jī)端電壓平均值之間的關(guān)系。 在李維軍等基于單片機(jī)用軟件實(shí)現(xiàn)直流電機(jī) PWM調(diào)速系統(tǒng)中提到平均速度與占空比其實(shí)不是嚴(yán)格的線(xiàn)性關(guān)系,在一般的應(yīng)用中,能夠?qū)⑵浣频乜醋骶€(xiàn)性關(guān)系。但有做深入的研究。本文經(jīng)過(guò)實(shí)驗(yàn)考據(jù),在不帶電機(jī)情況下, PWM波占空比與控制輸出端電壓平均值之間呈線(xiàn)性關(guān)系;在帶電機(jī)情況下,占空比與電機(jī)端電壓平均值滿(mǎn)足拋物線(xiàn)方程,能獲取精確的控制。本文的電機(jī)閉環(huán)調(diào)速是運(yùn)用 Matlab合的關(guān)系式經(jīng)過(guò)PID控制算法實(shí)現(xiàn)。系統(tǒng)硬件設(shè)計(jì)TX-1CAT89C521AT89C52555L298MAX232電平變換電路等組成。1閉環(huán)控制系統(tǒng)表示圖系統(tǒng)軟件設(shè)計(jì)系統(tǒng)采用模塊化設(shè)計(jì),軟件由13其中斷子程序,即外面中010PID算方法程序,測(cè)速子程序及發(fā)送數(shù)據(jù)到20PWM10用于對(duì)PID模塊調(diào)整轉(zhuǎn)速T法測(cè)速,它是同時(shí)測(cè)量檢測(cè)時(shí)間和在此檢測(cè)時(shí)間內(nèi)霍爾傳感器所產(chǎn)生的轉(zhuǎn)速脈沖信號(hào)的個(gè)數(shù)來(lái)確定轉(zhuǎn)速。 由外面中斷1對(duì)霍爾傳感器脈沖計(jì)數(shù),同時(shí)起動(dòng)準(zhǔn)時(shí)器 0,當(dāng)計(jì)數(shù)個(gè)數(shù)到預(yù)定值2000后,關(guān)準(zhǔn)時(shí)0,可獲取計(jì)2000個(gè)脈沖的計(jì)數(shù)時(shí)間,由式計(jì)算出轉(zhuǎn)速:40n=60f/K=60N/(KT)(1)nKfNT為采樣周期。2主程序流程圖實(shí)驗(yàn)結(jié)果及原因解析3.1端電壓平均值與轉(zhuǎn)速關(guān)系實(shí)驗(yàn)結(jié)果實(shí)驗(yàn)用的是永磁穩(wěn)速直流電機(jī),型號(hào)是EG-530YD-2BH,額定轉(zhuǎn)速20004000r/min,額定電壓12V。電機(jī)在空載的情況下,測(cè)得的數(shù)據(jù)用 Matlab做一次線(xiàn)性擬合,擬合的端電壓平均值與轉(zhuǎn)速關(guān)系曲線(xiàn)如圖 3(a)所示。相關(guān)系數(shù)R-square :0.9521。擬合曲線(xiàn)方程為:y=0.001852x+0.2963(2)由式(2)可知,端電壓平均值與轉(zhuǎn)速可近似為線(xiàn)性關(guān)系,根椐此關(guān)系式,在已測(cè)得的轉(zhuǎn)速的情況下能夠計(jì)算出當(dāng)前電壓。為了比較解析,同樣用 做二次線(xiàn)性擬合,擬合的端電壓平均值與轉(zhuǎn)速關(guān)系曲線(xiàn)如圖 3(b)所示。相關(guān)系數(shù)R-square :0.9867。413端電壓平均值與轉(zhuǎn)速關(guān)系曲線(xiàn)圖原因解析3(a)可知,當(dāng)轉(zhuǎn)速在0~1500r/min4000000r/min,3(b)所示,擬合相關(guān)系數(shù)較3(a)01.3V。這是由于而增加,最大值發(fā)生在運(yùn)動(dòng)前的剎時(shí)。電磁轉(zhuǎn)矩為負(fù)載制動(dòng)轉(zhuǎn)矩和空載制動(dòng)轉(zhuǎn)矩之間此時(shí)是非線(xiàn)性的。電磁轉(zhuǎn)矩與電流成正比,電流又與電壓成正比,因此此時(shí)電壓與轉(zhuǎn)速之間是非線(xiàn)性的。當(dāng)轉(zhuǎn)速在2000~4000r/min線(xiàn)性關(guān)系較好,占空比的渺小改變帶來(lái)的轉(zhuǎn)速改變較大,因此擁有較好的調(diào)速性能。這是由于隨著運(yùn)動(dòng)速度的增加,摩擦力成線(xiàn)性的增加,此時(shí)的摩擦力為粘性摩擦力。粘性摩擦是線(xiàn)性的,與速度成正比,空載制動(dòng)轉(zhuǎn)矩與速度成正比,也即電磁轉(zhuǎn)矩與電流成正比,電流又與電壓成正比,因此此時(shí)電壓與轉(zhuǎn)速之間是線(xiàn)性的。當(dāng)轉(zhuǎn)速大于4000r /min。由于高了額定轉(zhuǎn)速因此線(xiàn)性度較差且調(diào)速性能較差。此時(shí)用二次曲線(xiàn)擬合結(jié)果較好,由于當(dāng)電機(jī)高速旋轉(zhuǎn)時(shí),摩擦阻力小到能夠忽略,此時(shí)主要受電機(jī)風(fēng)阻

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論