Open Source
    Microcontroller
    Automatic Control
    Coding Notes

2014年7月31日 星期四

Arduino〈倒單擺 Inverted Pendulum〉(1) 硬體架構

上午11:46 Posted by Unknown , , , , 1 comment
倒單擺,顧名思義就是倒立的單擺。要讓單擺維持穩定的倒立狀態,一直都是自動控制中經典的工程議題,其應用可說是相當廣泛且深遠。 現今可以找到各式各樣奧妙的控制手段,從數學的層面來對付這種系統,讓單擺幾乎沒有倒下的可能。然而一旦要透過硬體來實現整個控制方塊,情況似乎就會變得有些難以預料了,已經不會像在 MATLAB 與 SIMULINK 中來得那樣單純。

最簡單的倒單擺模型為一組台車,台車上有一支可自由擺動的單擺,在重力的作用下,單擺勢必下墜。實際的模型中,台車可對應到一對並列的車輪,而與車輪以軸承銜接的馬達和整組車體則可看作單擺的集合。無控制介入時,車體無法平衡,必會倒下。

簡單的倒單擺系統實作


馬達的作用是當單擺倒下的瞬間迅速的前/後轉動,使車體能夠向後/前擺動以維持自身的平衡。使用帶有減速齒輪箱的直流馬達應可滿足控制的需求,並搭配像是L298N這樣的H-bridge驅動模組來控制馬達的正反轉。稍微進階的馬達會帶有轉速表(tachometer)或是編碼器(encoder),這些可以用來感測馬達當前的轉速或是角度,作進一步倒單擺的位置控制或是改善控制表現,不過這些並非絕對必要。

L298N H-bridge 模組

馬達搭配車輪這樣的零件組合,在光華商場或是模型店很容易找到,以5v驅動居多,雖然可以透過改變電壓(PWM)來控制馬達的轉速,然而無論是馬達本身、齒輪組或是輪胎,都會有摩擦力的存在,加上車體的重量負載,這些都是馬達轉動的阻力,因此在一定的電壓之下,馬達是沒有辦法轉動的,換言之,驅動電壓有最小值,可能會在額定電壓的1/3到1/2。另一方面,不同的馬達多少有些差異,在同一驅動電壓下,兩組馬達轉速可能不一致,台車原來的直線運動可能會變成左右旋轉,亦會影響控制表現,這些也要在軟體中盡量修正與補償。


車體結構的製作也許是最不重要卻也是最麻煩的部分吧!結構上需要足夠的空間,能將所有的零件固定並配置妥當,包含馬達、驅動器電路、感測器模組、單晶片、電池還有一些必要的螺絲孔。可以利用一些免費的CAD軟體作2D平面結構的設計,像是LibreCAD或是DraftSight軟體都很方便,製圖完成接著輸出給提供雷射切割服務的廠商幫忙加工,或是尋求各地自造者空間的加工服務,像是Fablab Taipei便設置了各種加工機台,如3D列印、雷切或是木工機具等,可以加入會員或是在免費的開放時段使用。再不然就是到美術材料行與五金行找尋自己需要的材料,手動繪圖、手動加工也行。

利用CAD軟體規劃車體平面結構


馬達需要多少控制電壓是由感測器量測倒單擺當前的狀態進一步計算而決定,簡單來說,這裡的狀態指的是倒單擺與鉛直線的夾角與其倒下的速度,也就是角速度,可以使用陀螺儀與加速規來達成感測這些狀態的工作,也可以購買如MPU-6050這種內部整合加速規與陀螺儀的6-DOF模組,接線上會比較方便,不過本專題使用的是兩組獨立的感測器,型號分別是ADXL345(GY-291)與ITG3200,這些在光華商場也都很好找,其運作方式稍後再介紹。


三軸加速規(左)與三軸陀螺儀(右)

最後,硬體架構需要一組控制核心作為系統的大腦,接受感測器的訊號,執行邏輯運算並輸出命令以控制馬達的轉動,Arduino UNO與其搭載的AVR單晶片-ATmega328,方便、迅速,由於目前非常流行,就不多作介紹了。
Arduino UNO

下一篇會接著探討感測器的工作。