在某些場合下,如果我們把乙個突變的資料直接加到乙個已經穩定的系統中,那麼這個系統可能會很難再次達到穩定,這個時候就需要對突變的資料進行平滑處理,逐漸的加大。可能這樣說不太容易理解,舉個例子,最近在做乙個機械人專案,機械人的行動靠的是乙個大型的兩輪平衡車,平衡車除錯時,在直立環穩定後需要增加速度環對其行走速度進行控制,關於直立環和速度環,目前我所了解的就是三種結合方式:
第一:採用雙閉環控制策略,內環為速度環,外環為直立環。這種方法沒試過,據說是平穩行進沒問題,但是抗干擾能力太差。反正我是不怎麼認同這種控制策略。
第二:仍然採用雙閉環控制策略,內環為直立環,外環為速度環。個人感覺這種方案還是可以一試的,首先在直立環調好以後,改變乙個給定的角度,平衡車為了達到給定的角度,由於 pid 調節的作用,必然會打破當前的機械平衡狀態,當達到給定角度時,由於車體的重心變了,由於慣性,平衡車必然向乙個方向行進,至於行進的速度就得看我們給定角度的大小了。知道了這一
點,將外環速度環的輸出作為直立環的給定,然後在速度環上給定乙個速度,然後通過速度 pid 調節和直立 pid 調節最終控制小車前進。
第三,採用平衡控制策略。即將直立環的 pid 輸出與速度環的 pid 輸出求和作為最終的 pwm 輸出,這種方案也可行,大部分做平衡車的人也在使用。不過之前看過乙個文件,裡面說使用這種策略實際上就是第二種串級 pid 的拆解,他將串級 pid 拆解成了乙個負反饋的直立環,乙個正反饋的速度環。我也沒試過,不過經過推導,理論上說的過去。
扯遠了,再回到資料平滑,當平衡車直立環調好以後,無論使用哪種策略,接下來都是增加速度環,而速度環的輸出如果不夠平滑,那麼直接加在直立環上會對其造成影響,平滑方法就是將輸出值分成若干份,每次在上次一的基礎上增加一點點,這樣輸出就會平滑很多。不多說,直接上演算法:
void speedcontroloutput(void) //速度平滑輸出函式
這個函式就是平滑演算法,其中 g_fspeedcontroloutnew 為最新一次速度環控制的 pid 輸出, g_fspeedcontroloutold 為上一次速度環 pid 控制輸出值,fvalue 為兩者之間差值,求出此次 pid 輸出值較上一次變化了多少,然後按比例將變化的 fvalue 值逐漸加到上一次 pid 輸出值,從而得到最新的當前 pid 輸出值。這裡面的引數設定尤為重要,我要分多少份加,多長時間加完等等。首先來看多長時間內加完,這取決於控制週期,一定要小於等於控制週期才可以。比如說我當前的速度環控制週期為 100ms,那麼我就要必須在 100ms 內將之前的 pid 輸出值加到最新的 pid 輸出值,所以我這裡將 fvalue 值分成 100 份,每
1ms 執行一次平滑函式,每執行一次平滑函式都在之前的基礎上增加 1%,這樣fvalue 值全部加完剛好是 100ms,當然要想形成每 ms 增加 1%,g_nspeedcontrolperiod 這個引數也要在 1ms 中斷中不斷++,直到 100ms 時間到執行速度環控制函式時將其清零。以下為 1ms 中斷服務函式。
void tim5_irqhandler(void) //定時器 1ms 中斷服務函式
else if(g_eventcount==1) //5ms 裡的第 1ms 控制一次直立環
else if(g_eventcount==2) //5ms 裡的第 2 個 1ms}}
}以上為 pid 輸出資料平滑的方法。而要想達到乙個效果,比如說平衡車開機緩慢的由當前角度達到給定角度,如果說突加乙個給定,可能很難調回來,故對給定值進行資料平滑,平滑演算法與上類似。
if(speedchangeok == false) //這個標誌位初始設為 false,當加到給定值
後設為 true
}}else}}
}這段**是在 5ms 控制一次的直立環中,g_speedangle 為給定的角度值,speedangletmp 為最終參與 pid 運算的給定值,它的值初始是為零的,當有給定值時,判斷為正給定還是負給定,然後對應著做不同的處理。**不難就不一一解釋了。
以上的兩種演算法雖然是出自於平衡車,但是我感覺它的用處不單單是平衡車,比如說某些突變的資料會對系統造成影響,這時就需要每次微量的改變,需要資料平滑。以上僅是個人的一些見解,如有錯誤之處歡迎批評指正、共同討論。
我的平衡車
大家應該都知道平衡車吧!平衡車是一種不用手扶就能跑的車,平衡車有兩個輪胎,而且騎的時候會發光,它還會連線手機上的藍芽聽歌哦。二十九號這天中午,爸爸把我日思夜想的平衡車買回來了。吃過午飯,我和姐姐就開始學習騎車了,忙了一中午,也沒有午睡。如果騎不好沒掌握好平衡就會翻車的,所以開始的時候要慢慢的站上去,...
智慧型車 直立電磁組 前期的一些總結
關於車的前瞻 需要一定的前瞻保證提前檢測到道路前方的資訊,在入彎時需要減速,出彎時需要加速,而加減速需要一定的距離,所以前瞻理論上應該至少等於感測器採集資料週期內車子前進的距離 加速或減速需要的距離。目前看來前瞻的作用更多體現在提前轉彎,在速度快時,提前轉彎顯得尤為重要。而且前瞻越大以後過小s彎時車...
STM32平衡小車 平衡小車的PID環體會心得
2018年12月11日17 47 56更新 平衡環 p可增加響應速度 p過小,響應太慢,不能達到直立。p過大,會出現大幅度的低頻抖動。d可消除p大了之後產生的大幅低頻抖動。d過大,會出現高頻抖動。速度環 p可增加速度的響應,i和p有比例關係i p 200.p過小,響應慢,出現的現象是加速減速慢,遲鈍...