飛思卡爾光電組原理圖包括:CCD傳感器、按鍵電路、LCD液晶屏顯示電路、電源部分、電機驅(qū)動、速度檢測、控制器等。
見截圖:
*********************************************************************************************/
** 電機PWM調(diào)速頻率為10KHZ。
** 舵機角度控制精確到1.5度是合適的。
** 舵機控制一般采用PD控制。(非線性設(shè)計)
*************************************位置型PD控制 ********************************************
位置型PD控制
perror[2]=(width[2]-width[4])/2;
out_p=Kp*perror[2]/20 //計算比例項,20為控制周期
out_d[2]=Kd*(perror[2]-perror[1])/20 //計算微分項
out[2]=out_p+out_d[2]+center_conter; //由于舵機轉(zhuǎn)角受限,所以注意輸出量的限制
perror[1]=perror[2]; //保存上次的誤差
out_d[1]=out_d[2]; //保存上次微分環(huán)節(jié)的值
其中Kp是比例系數(shù);out[2]是舵機的調(diào)節(jié)量;Kd是微分系數(shù);peeror[2]是本次信號采集計算出的誤差;perror[1]是上次信號采集計算出的誤差;center_conter是舵機的中心位置的計數(shù)值。
非線性PD算法
其中out_p為比例項輸出;當-20<perror[2]<20時作為死區(qū),不進行調(diào)節(jié);當-100<perror[2]<-20或者20<perror[2]<100時,比例系數(shù)Kp1=0.5;當perror[2]<-100或者perror[2]>100時,比例系數(shù)Kp2=1.33。這樣即實現(xiàn)了系統(tǒng)在小偏差時緩慢的調(diào)節(jié),也可以保證當遇到彎道,產(chǎn)生較大的偏差時,舵機能夠迅速動作。具體的軟件實現(xiàn)如下:
if(perror[2]>-20&&perror[2]<20) out_p = 0;
else
{
if(perror[2]>20&&perror[2]<100) out_p = perror[2]/2-10;
if(perror[2]>-100&&perror[2]<-20) out_p = perror[2]/2+10;
if(perror[2]>=100) out_p = perror[2]*4/3-100;
if(perror[2]<=-100) out_p = perror[2]*4/3+100;
}
微分部分的非線性由類似方法實現(xiàn)。
***********************************************PID調(diào)節(jié)經(jīng)驗************************************
(1) 確定比例系數(shù)Kp
確定比例系數(shù)Kp 時,首先去掉PID 的積分項和微分項,可以令Ti=0、Td=0,使之成為
純比例調(diào)節(jié)。輸入設(shè)定為系統(tǒng)允許輸出最大值的60%~70%,比例系數(shù)Kp 由0 開始逐漸增
大,直至系統(tǒng)出現(xiàn)振蕩;再反過來,從此時的比例系數(shù)Kp 逐漸減小,直至系統(tǒng)振蕩消失。
記錄此時的比例系數(shù)Kp,設(shè)定PID 的比例系數(shù)Kp 為當前值的60%~70%。
(2) 確定積分時間常數(shù)Ti
比例系數(shù)Kp 確定之后,設(shè)定一個較大的積分時間常數(shù)Ti,然后逐漸減小Ti,直至系統(tǒng)出現(xiàn)
振蕩,然后再反過來,逐漸增大Ti,直至系統(tǒng)振蕩消失。記錄此時的Ti,設(shè)定PID 的積分
時間常數(shù)Ti 為當前值的150%~180%。
(3) 確定微分時間常數(shù)Td
微分時間常數(shù)Td 一般不用設(shè)定,為0 即可,此時PID 調(diào)節(jié)轉(zhuǎn)換為PI 調(diào)節(jié)。如果需要設(shè)定,
則與確定Kp 的方法相同,取不振蕩時其值的30%。
(4) 系統(tǒng)空載、帶載聯(lián)調(diào)
對 PID 參數(shù)進行微調(diào),直到滿足性能要求。