一、中文摘要

本次的專題計畫我打算以PID控制器對倒單擺系統進行控制,這專題分為三個部分,首先是關於PID控制器的介紹,再在來才是課本上倒單擺系統的模擬,最後是結果與討論、感想等等,做完結。

Abstract

    In this project I want to use PID controller to control a inverted pendulum system. I want to distinguish this project in three port .

First of all , I want introduce which is the PID controller . second , I want to use the PID controller and simulate the inverted pendulum system. Finally, I want to discuss my conclusion.

二、緣由

我會選這個題目是因為想學學看控制器的實作,畢竟在課堂中已經學了許多的理論其中甚至有些觀念像是頻率響應、波德圖等等,在電子學中又學了第二次,是故我想說都學了這麼多理論不知道有什麼意思,不如找個實作性的專題,去更深入體會那些我在課堂所學過的理論,所以我打選擇時做一個控制器當作主題。

選擇PID是因為它是一個很早期結構相對簡單的控制器,它發展至今已有70年的歷史算是最早發展成熟的控制策略,也是最廣泛的工業控制器之一,它結構簡單可靠且穩定。尤其適合於當我們要控制一個系統時卻發現我們根本不懂這個系統的數學模型時,我們可以藉由操作Kp、Ki、Kd(分別對應比例增益常數、積分增益常數、微分增益常數)這三參數以控制對象。我想這部算泰男也不算太簡單的題目能讓我學到課堂中比較少提到的實作的部分。

三、此專題目的(之後的實驗會另外有控制目的)

我想藉由這次的專題掌握積分微分參數的調整,如何調整整會最有效率、如何調整會最穩定等概念。當然如果還有時間,我希望可以仿照可本Example3.3所推導出的倒單擺數學模型為例子,模擬出島單擺在PID控制器下的運作模式,以達到上述在報告緣由中所提到的實作的目的。(這個專題因為我沒有一台真正的PID控制器,所以我會採取matlab以及simulink這兩個由mathworks公司所推出的軟體去做模擬。)

簡介PID控制器

首先PID控器如同摘要所說她是有三個參數Kp、Ki、Kd(分別對應比例增益常數、積分增益常數、微分增益常數)所控制,其轉移函數為:

Kp:比例增益常數

Ti:積分時間常數

Td:微分時間常數

其中

故可推導出通式

PI與PD控制器

1.PD控制器

    1.等同於在開迴路加上一個非零零點

    2.這可使根軌跡往左移,改善必迴路系統相對穩定度

    3.由頻率來說他是個高通濾波器

    4.PD也能改善系統的P.O.並適當增加響應杜,但對穩態響應沒幫助

2. PI控制器

      1.等同於在開迴路加上一個非零零點及一個的極點

    2.由頻率來說他是個低通濾波器

    3.在 S=0 加入集點科增加開迴路轉移函數階數一次,固可改善系統穩態誤差

四、此專題的過程

PID控制倒單擺

控制目的:讓移動的車上倒單擺的角度收斂至0。

倒單擺的數學模型推導

水平分量的力

My''(t) + mlθ''(t) - u(t) = 0…(1)

軸點上的力矩

mly''(t) + ml²θ''(t) - mlgθ(t) = 0…(2)

State variable設定

(x1(t), x2(t), x3(t), x4(t)) = (y(t), y'(t) , θ(t), θ'(t))

rewrite

Mx2'(t) + mlx4'(t) - u(t) = 0…(3)

x2'(t) + lx4'(t) - g x3(t) = 0 …(4)

解開(4)的lx4‘(t)替換給(3)

Mx2'(t) + mgx3(t) = u(t)…(5)

M>>m替換(3)的x2‘(t)給(4)

Mx2'(t) + mgx3(T) = u(t)…(6)

之後用Project MAC中的Macsyma小組開發的maxima,因為它的代數運算能力比matlab強大很多。

A:matrix([0,1,0,0],[0,0,m·g/M,0],[0,0,0,1],[0,0,g/l,0]);

(A)                                

 

 -->        B:matrix([0],[1/M],[0],[1/M/l]);

(B)                         

 -->        C:matrix([0, 0,0, 1]);

(C)                                                                 

 -->        I: matrix([1,0,0,0], [0,1,0,0], [0,0,1,0], [0,0,0,1]);

(I)                          

 -->        G:C.invert(s·IA).B;

(G)                                         

設M = 2kg、 m=0.2kg、l=0.6m。

(%i1)       A:matrix([0,1,0,0],[0,0,0.98,0],[0,0,0,1],[0,0,16.33,0]);

(A)               

(%i2)       B:matrix([0],[0.5],[0],[0.833]);

(B)         

其中eig(A)=0、0、4.0415、-4.0415有pole值在右半平面故此系統不穩定

此系統的Transfer function為

 

 

sys5=tf([-0.8333 0],[1 0 -16.333])

step(sys5)

步階響應向無限大發散的步階響應

 

此處用matlab繪圖因為他繪圖的函示庫較多較方便

當然用simulink會有一樣的結果

 

 

故我們要改善倒單擺的體質(這裡使用state feedback的控制目的只是要讓他不在發散而已,PID的kp不管怎麼調都無法震盪,我才用這方法我之前並沒想到statefeedback也可以使角度收斂。)

先設定eig(A)=-1 ± i為改善目標,讓其極點皆位於左半平面

繼續用maxima進行代數用算

(%i7)       K:matrix([k1,k2,k3,k4]);

(K)               

 

(%i9)       A1:AB.K;

(A1)        

(%i14)      I:matrix([λ,0,0,0], [0,λ,0,0], [0,0,λ,0], [0,0,0,λ]);

(I)                

 -->       

(%i16)      q:IA1;

(q)              

(%i19)      determinant(q);

(%o19)      

 (%i22)     ratsimp(%o19);

(%o22)       

設k1,k2=0,因為他們分別是λ一次和二次的係數,而我要使其等於0只留下另為兩個特徵值。

對照係數λ^2+2*λ+2後算出k3=-22.0048,k4=-2.40096

 (%i8)      k1:0;

(k1)         

(%i9)       k2:0;

(k2)     

(%i42)      k4:2.40096;

(k4)                     

(%i43)      k3:22.0048;

(k3)                    

(%i44)      A1: matrix(

           [0,1,0,0],

           [0.5·k1,0.5·k2,0.5·k30.98,0.5·k4],

           [0,0,0,1],

           [0.833·k1,0.833·k2,0.833·k3+16.33,0.833·k4]

           );

(A1)           

 

(%i45)      determinant(IA1);

(%o45)                    

(%i46)     ratsimp(determinant(IA1));  

(%o46)     

(%i47)      solve([%], [λ]);

(%o47)                      

可算出符合設定λ^2+2*λ+2的解

 

之後將數值扔給matlab繪圖,因為它的函式庫比較多,比較方便

k=[0 0 -22.0048 -2.40096];

>> A1=A-B*k;

>> eig(A1)

ans =

   0.0000 + 0.0000i

   0.0000 + 0.0000i

  -1.0004 + 1.0016i

  -1.0004 - 1.0016i

大致符合特徵值等於-1 + i、-1 – i,當然這樣還是有兩個pole在極點,故在根軌跡上還是會又有一段不穩定。

>> TF1=ss(A1,B,C,0)

TF1 =

 

  A =

           x1      x2      x3      x4

   x1       0       1       0       0

   x2       0       0   10.02     1.2

   x3       0       0       0       1

   x4       0       0  -2.004  -2.001

 

 

    B = 
            u1
   x1        0
   x2      0.5
   x3        0
   x4  -0.8333

  C =

       x1  x2  x3  x4

   y1   0   0   1   0

 

  D =

       u1

 

>> step(sys1)

由圖可看出已不在發散,符合初始控制目的(註:此處更好的情況是指用stste feedback 就讓其收斂至0,但我還沒找到這樣的k值)

 

 
之後將修正後的K值加入PID控制器進一步使其收斂至0
但由於直接讓simulink直接回授一個-K值會格式不符

 


此處提供兩個解法

1直接修改state variable的A值為A1就不做-K得回授,

 

 

 

2.拆解state variable的block如下圖

調整參數用奇怪的數學模型搭配倒單擺的數

學模型搭配終值定理去計算平率響應使否歸零去

 

奇怪的數學模型

上面這個是matlab一般形式的PID公式:

下面這個是一般形式的PID公式:

 

可以發現比例項和積分項都相同,而微分項,matlab中用D*N*s/(s+N)代替了純微分項s。

這時因為純微分項物理是不可實現的,所有的傳函分母的階次必須要大於等於分子的階次才行。

而從原運算式可以看出,當N比較大時,分母中的1可以忽略,這時系統就會變成常規的PID了。

matlab是考慮到了PID單獨各個環節的物理實現,所以才對原有的公式進行了改進。

最後,經過我計算的結果此系統加了I值會發散調,故此PID控制器實際上已變成PD控制器,又經過多次的測試後,終於讓倒單擺的速度x3(t)收斂於0,達成控制目的。

(現代控制)


換成頻域的模型也一樣(古典控制)

 

之後測試角速度x4(t)也一樣收斂於0,可得知已達成控制目的倒單擺已趨於穩定

討論

這篇報告中,美中不足的是我為了要把角度和角速度收斂到0而忽略了現實中的距離問題,所以這種情況下這倒單擺系統大概只能在在類似大型強子對撞機這整表面切線跟直線差不多的環形空間跑,如果我這學期還有時間的話我大概會往這方面去想,去思考如利用state feedback的K值或是PID參數去調整距離和速度的收斂。

再來我在這次的報告無意間用同時用了兩個控制器在同一系統上,這是一件浪費的事,如果之後還有機會,我覺得這報告可以去探討到底使用state feedback比較好還是PID比較好,兩者同時用的效果如何等等問題。

 

感想與心得

1.經過這次的專題,我得知PID參數調整是需要大量經驗的,憑運氣亂調湊圖形只是浪費時間。

2.所以沒經驗就應該要照著數學模型推倒穩態解,雖然PID控制器最大的優勢是在不知道受控體數學模型時去測試它。

3.這次是一個很好的經驗讓我同時熟練,matlab、Simulink、maxima。

五、參考資料

1.控制系統與模擬使用MATLAB/SIMULINK[第八版](2003出版)

2.Dorf, R. C. and Bishop, R. H. (2017).  Modern Control Systems, 13th ed., England, UK: Pearson Education Limited.

 

創作者介紹
創作者 dodo的部落格 的頭像
dodo

dodo的部落格

dodo 發表在 痞客邦 留言(0) 人氣( 3210 )