Open Source
    Microcontroller
    Automatic Control
    Coding Notes

2014年8月23日 星期六

Arduino〈倒單擺 Inverted Pendulum〉
(5) 數學推導與Processing模擬

晚上10:11 Posted by Unknown , , , No comments
數學推導與模擬是在設計控制器前,了解一個系統必經的過程之一,雖然倒單擺作為一經典教材,其運動方程式幾乎已成陳腔濫調一般,各種變化形式,或者更複雜的倒單擺模型亦是層出不窮,幾乎在網路上都找得到。不過本篇文章還是會先回到最原始的倒單擺數學推導,並搭配Processing軟體模擬其動態,作為專題記錄。 得到倒單擺的運動方程式之後,下一步就是透過電腦模擬分析來作為設計控制器前的準備。學校裡大概都是使用MATLAB來執行這樣的工作,先將方程式寫入m-file,再由主程式呼叫ode45進行求解,然而ode45這個經典的數值分析方法並非MATLAB不可,任何可執行計算的程式語言都可以套用。所以若是已經厭倦每次模擬都只能看到醜醜的響應曲線圖,不妨試用Processing,因為其以繪圖見長,直接把模型的動態顯示出來不是更直觀嗎? 那麼ode45很難寫嗎?...

2014年8月19日 星期二

Arduino〈倒單擺 Inverted Pendulum〉(4) 狀態回授控制

下午6:21 Posted by Unknown , , , No comments
狀態回授(State Feedback)是典型負回授系統中會使用的控制策略,方法非常直觀,就是將量測到的狀態(x)乘上增益(K)後回授,以此為新的控制命令(u),再輸入到控制對象(plant)中,如此反覆迭代,若增益選取得當,系統為穩定,狀態回授值會趨向參考值,此時控制命令趨近於零,而系統輸出(y)進入穩態(Steady State)。 來複習一下課本的小知識... 下面是一個典型的二階線性系統,彈簧(k) ─ 阻尼(c) ─ 質量塊(m)系統及其對應的運動方程式(equation of motion): u為系統的施力,在控制方塊與硬體中,也可對應為控制命令或是馬達轉動所需的電壓。 由運動方程式可推導系統的特徵方程式,其方程式的根就是特徵值(eigenvalues),也是系統的極點(poles),這些抽象的值實際上決定了控制系統表現的行為,極點的實部表示衰減行為,虛部顯示振盪行為,這些皆可由系統參數(m、c、k)推導而得其量值。 考慮施加一控制力u,質量塊會由a點移動到b點,(b...

2014年8月12日 星期二

Arduino〈倒單擺 Inverted Pendulum〉
(3) 互補濾波器

陀螺儀能夠輕易的量測到角速度,但是要量到角度卻要陀螺儀與加速規的配合,而能不能準確的量到角度將是控制倒單擺維持平衡的關鍵。 理論上角度可由兩種方式求得: 1. 利用三軸加速規量測重力加速的大小與方向作為參考值,當加速規隨車體擺動時,重力加速度在加速規三個方向的分量會隨擺動的角度變化,計算其中兩個方向的分量比值再以反正切值(arctangent)推算目前倒單擺與鉛直線的夾角。 2. 利用陀螺儀量測車體擺動的角速度,並對其進行積分得到角度的訊號。 而實際上,感測器各有其限制,當角度快速變化(高頻)時,陀螺儀取其角速度,這時候積分得到的角度比較準確,但這種快速變化會對加速規造成顯著的外力干擾,反而無法透過計算重力加速度的分量來計算角度;另一方面,在角度幾乎靜止(低頻)時,加速規能夠很好的計算角度,但陀螺儀的offset與漂移(drift)的問題,會隨著積分不斷的累積誤差,反而失去量測角度的功能。 互補濾波器(Complementary...

2014年8月3日 星期日

Arduino〈倒單擺 Inverted Pendulum〉(2) 陀螺儀與加速規模組設定

凌晨2:46 Posted by Unknown , , , No comments
為了感測倒單擺傾倒的狀態,基本上陀螺儀與加速規缺一不可。其他像是姿態或是方向感測器幾乎也都是以這兩種感測器為基礎搭配磁力計整合成的n-DOF模組。 本篇要先來認識一下使用的感測器模組,以及如何對其進行設定。 1. 陀螺儀模組 使用的是 Grove-3-Axis Digital Gyro Module, 這在光華商場找得到,其內部感測核心為ITG-3200MEMS陀螺儀晶片,可量測物體三個方向的旋轉角速度與環境溫度,不過在倒單擺中只需要擷取一個方向即可,至於是哪個方向則要看感測器與倒單擺的組裝方式才好了解,而溫度感測器通常是用來校正感測器隨溫度變化所產生的漂移誤差(drift)。除了晶片的物理量測規格,datasheet也會載明感測器支援的通訊格式與晶片上暫存器(Register)的使用功能,從暫存器表格中可以知道感測器將三軸陀螺儀的量測值儲存在0x1D~0x22的位址上,每一軸資料分高低位元組共佔兩個位址,Arduino要讀取的值便是從這裡。 ITG-3200...