PID控制器的數學模型
在標準的控制類書籍上PID算法是這么定義的:
這個公式是連續系統用的,我們單片機的控制是用不了的,我們的單片機使用的是離散的控制模型也叫0階保持器的離散系統,就是需要把上面的公式離散化,而這個離散化的過程我們使用的是后項差分法。首先把上面的積分傳遞函數轉化為連續的s域模型:
使用后向差分法可以得到s域到z域的映射關系:
于是可以得到:
這里特地給出了Kp Ki Kd這三個參數,這三個參數就是大家最??吹降哪莻€離散的PID公式,也就是說你在這里既可以使用Kp Ti Td的參數來建模也可以使用Kp Ki Kd的參數來建模,到這里就總算是可以把我們的傳遞函數放在系統中用自控原理的相應工具來分析了。分析之前要先聲明一個事情,有人發現(比如在MWC和其他許多飛控中)用陀螺儀的輸出來當做PID中的微分項,會取得比標準PID更好的控制效果,乍一看這么做與用前后兩次歐拉角作差沒有區別(因為角速度整好就是角度的微分),控制效果不一樣就說不通了。
其實是這個樣子的,如果我們在程序中做了非常好的線程安全的處理并且控制頻率和姿態解算讀陀螺的頻率是一樣的的情況下二者確實是沒有任何差別的,但是大家的飛控都寫的非常簡單,姿態解算頻率都高于控制頻率,于是讀到的陀螺儀的數據并不是‘當前使用的姿態前一時刻’的數據而是‘后一時刻’的數據,這時候PID控制的微分部分就不再是‘后項差分’而是‘前向差分’了(這就是我前面要強調使用后項差分法的原因),那這個時候就尷尬了,我們不能全部使用前向差分模型來建模(因為積分還是使用的后向模型)兩邊分開用又會出現模型階次不匹配的問題,所以這時候是無法使用PID模型來考慮接下來的問題的,你使用的其實是兩個獨立的控制器并聯,一個是角度的PI控制器,而另一個是角速度的P控制器,二者采樣時間不一樣,于是得當做兩個獨立的控制回路調整參數,這是使用這種控制器時的參數調整方法。也就道出了為什么部分情況下使用角度微分和角速度控制效果不一樣的問題,這種方法固然是很好的(可以有效的降低振動),當然前提是你按照二者獨立控制的思路來設計參數。但是很不幸,大家都沒有這么做,依然是把整體作為PID控制器來考慮,那么,我只能說這是個近似的PID控制器了,手調固然可以(萬能的實驗調參啊)但是通過建模的方式算出優化的參數就不可能了。我們接下來看會怎樣:
從系統的零極點圖理解PID控制的原理
有了上面的PID傳遞函數的離散系統模型我們就可以開始下一步了,將上面的分式上下做因式分解可以得到系統的零極點,在自控原理中我們知道,系統的極點確定系統的穩定性情況,零點不影響系統穩定性,零點和極點共同決定系統的響應。這里說的有些模糊,在現代控制理論中會提到一種控制器叫零極點配置控制器,能更好的闡述零點的作用:系統中的零點可以用來與系統中的不穩定(或者不想要)的極點對消來設計出理想的控制器(數學上),工程中我們考慮的是讓零點與我們不想要的極點盡可能的靠近,就能削弱這個不想要的極點對系統的影響。下面我們用極點配置的方法來設計PID控制器,這里提前聲明我們使用的并不是最標準的閉環極點配置方法,因為我們的PID控制器只有兩個零點可以配置(如果使用PI控制器的話就只有一個零點可以自由配置了)而且還多了一個臨界穩定的極點,反饋又使用的是單位負反饋……極大的限制了極點配置的自由度,于是我們為了簡單起見僅從開環部分進行極點配置,這么做有許多不嚴謹的地方,但是會簡化許多工程上的應用(在做自適應PID控制器的時候會用到完整的極點配置方法,到那里就會發現是多么復雜的一件事兒了……)。
上圖是PID控制器開環部分(就是上面推導的數學模型)常見的零極點分布情況,有兩個固定在(0,0)和(1,0)位置的極點,兩個對稱分布的零點(手調參數時很難出現兩個零點都在實軸上的情況而且我們也不希望那樣),這兩個零點的位置是可調的,微分時間常數Td主管零點位置的左右移(注意是‘主管’,也就是說對虛軸的位置還是有影響的),常數越大越靠右(也就是說臨界穩定極點的影響越弱,抗噪聲性能越好但到達0誤差的穩態也就越困難,因為這個臨界穩定的極點是在閉環系統中讓系統到達穩態0誤差的關鍵但很影響穩定性),積分常數Ti越大零點越靠近實軸,Ti在實際控制中的作用不好說明,留在后面再說,但是到這里大家也就看出我為什么要使用標準的Kp Ti Td參數而不是Kp Ki Kd參數了,因為使用這種參數時Kp對開環系統的穩定性(注意僅指開環系統)沒有影響,我們就可以降低系統對這個參數的敏感性而主要考慮另外兩個參數就好。大家在手調參數的看到的圖形和這個都應該沒有多少區別
接下來我們看一下我們被控系統的數學模型:
被控系統的小范圍線性化模型
正如我前面所述,想要分析PID的控制性能必須得得到被控系統的線性近似模型(非線性系統下的分析工具沒個正經能用的),這里大家可以通過動力學建模得到系統的非線性模型(像幾乎所有的碩士博士論文那樣)再泰勒展開,但是這樣做往往得到的模型跟實際情況差異太大以至于沒有參考價值,這里我推薦使用系統辨識的方法來得到系統的線性模型,因為這么做如果能做到正確的辨識的話還能得到系統的誤差模型,于是現在在控制界很流行,只是實際用的時候就發現難度頗高,盡管有許多現成的工具但是依然特別難掌握,也難怪很多熱會把這個當做是看家本領,作者在這方面也算是連皮毛都沒摸全,不敢亂講,這里就為了解釋PID方便直接把我的大四軸辨識出來的Pitch軸模型拿出來當做例子來講了:
畫出來的系統階躍響應是這個樣子的:
檢驗系統建模的相似程度就靠這個了,給我的飛機一個階躍信號反映出來的情況和這個確實差不多。關鍵是下面,它的零極點分布情況:
可以看到辨識出來的結果又兩個很靠近不穩定邊界的主導極點(氣泡框那里)表現明顯的零點又和這幾個極點8桿子打不著,如果我們消滅那兩個主導極點,我們的四軸理論上就可以控制的非常完美了,眾所周知,主導極點越靠近0則系統穩定性越好,那么按照極點配置的方法(當然我這里指的還是開環的極點配置),那么我們接下來開始看用這種建模的方法怎么實現PID參數的配置:
用極點配置PID實現對系統的控制
那么按照上面的介紹我們來嘗試消除這兩個主導極點,前面說過,PID模型中兩個對稱零點的位置是可以任意調整的,不用計算,直接手試出如下的參數:
那么得到的開環零極點圖是這樣的:
那么閉環響應是這個樣子的:
看著很漂亮啊,我們加大Kp到4試試,其他參數都不變
喲,完美嘛,0.5s即可到達穩態,0穩態誤差,超調量也不過10%而已,相當的理想,而且從這里可以看出使用Kp Ti Td參數的優勢:隨意調整Kp,可以提高系統性能而且對閉環穩定性幾乎沒有影響,甚至對開環系統的穩定性完全沒有影響,我想,這也就是MWC飛控用Kp(角速度的)作為動態參數的原因。那么好吧,令人沮喪的部分終于要來了,把這個參數燒到飛控里面,運行,哇塞,不錯哦,不動搖桿它平衡的很好,那我們遙控下……我擦,越抖越大,控制不住了,翻了,打到人了,鮮血汩汩而出……………………
評論
查看更多