單級PID算法總結及代碼程序應用

從6月份開始因爲電賽開始接觸PID算法,到現在也算是有了一些經驗和收穫,馬上要電賽了,對單級PID做一個總結。再就是總結一下PID的調節的經驗。
我就不說高大上的定義,談談我對PID算法的理解吧。PID顧名思義,由P算法,I算法,D算法構成,即比例算法,積分算法,微分算法。
我先談P算法即比例算法,如果我們不知道PID,我們實現一個系統通過執行部件使控制對象達到一個目標值,我們會想如果沒有到達目標值的時候,執行部件應該正作用,到達目標值應該不作用,超過目標值時執行部件應該反作用。其實我們最初的想法就是PID算法的中的P算法(是不是很神奇),因此引出P算法的公式:
Ek=Sv-X
Pout=Kp*Ek

Sv是目標值,X是當前值(需傳感器採集),Ek是當前偏差值,Kp是P算法的係數,Pout是P算法的輸出。
但是一個系統只有P算法就足夠了嗎,現實中大部分系統是不夠的,因爲系統存在慣性,簡單說就是你想讓它停的時候,它因爲慣性並不會停下來,就會出現控制對象在目標值附近震盪,始終無法穩定。
這個時候就要請出我們的D算法了,它的作用就是來消除這種震盪的,直接公式
DEk=Ek-Ek_1
Dout=Kd
DEk
*
Ek_1是上次採樣的偏差值,DEk兩次偏差之差,Kd是D算法的係數,Dout是D算法的輸出。它的作用就是當歷代Ek有增大的趨勢,就增大輸出,反之則減小輸出。
還有就是我們有采樣週期(計算週期),PWM週期。簡單說採樣週期就是我們多久傳感器採集一次數據,PID算法計算一次,並改變一次PWM佔空比的時間。PWM週期不用講,我們大部分的執行部件的作用大部分是通過改變PWM佔空比來實現。
採樣週期越小越好,越小我們的作用曲線儘可能平滑,但是絕對不能小於PWM週期,最好是PWM週期的兩倍,但同時不要小於我們傳感器的最小採樣時間,如果小於可能會兩次採樣數據相同,白白的增加計算負擔。
PWM週期則不能小到執行部件(各種電機,舵機等等)識別不了。那就無法起作用,比如說舵機限制死了你的PWM週期只能是20ms。
確定了採樣週期,pwm週期,因爲 一些系統通過P和D的配合就可以達到平衡,所以我們只需要改變Kp和Kd的大小就可以調節系統達到平衡。貼一下口訣(雖然我也不大懂)
參數整定找最佳,從小到大順序查, 先是比例後積分,最後再把微分加, 曲線振盪很頻繁,比例度盤要放大, 曲線漂浮繞大灣,比例度盤往小扳, 曲線偏離回覆慢,積分時間往下降, 曲線波動週期長,積分時間再加長, 曲線振盪頻率快,先把微分降下來, 動差大來波動慢,微分時間應加長, 理想曲線兩個波,前高後低4比1。
我理解了好久也沒理解,不過經過我不斷的嘗試,有了一些經驗跟大家分享一下(_)
首先Kd爲0,只調節Kp,讓控制對象在目標值附近震盪,且上下震盪負擔基本差不多,加入Kd,直接取Kp的20倍左右( 完全是經驗沒有根據),看是否還是在目標值上下震盪,如果達不到目標值的震盪,就減小Kd,如果和原來一樣只是振幅變小了,那就適當增加Kd。同時適當調節KP大小。直到達到穩態
不過只是參考,PID的調節我覺得還是看經驗,多調多思考多總結,看緣分。哈哈哈哈哈
最後來說I算法,當你PD調節到穩態,但你發現並不是穩在目標值上,我們就需要I算法了,它的作用就是來消除靜態誤差滴,上公式
SEk+=Ek
Iout=Ki*SEk

你們應該知道各項都代表什麼意思,直接說它的原理,它考慮的是它的歷史上所有偏差。這個算法很猛,要慎用,不要一開始就讓它起作用,原則就是讓系統通過PD穩定之後在讓其起作用(也就是要有一個作用範圍),否則會出現過沖。還有就是因爲它很猛,所以Ki要小,我基本上就讓Ki在1左右浮動。
最後就是總公式
OUT=Pout+Iout+Dout
OUT最小0,最大不要超過PWM滿值。PID算法調節還是多看多想多調,慢慢來總會有收穫滴,加油!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章