常用四軸的兩種PID算法
這里主要講解的PID算法屬于一種線性控制器,這種控制器被廣泛應(yīng)用于四軸上。要控制四軸,顯而易見的是控制它的角度,那么最簡單,同時(shí)也是最容易想到的一種控制策略就是角度單環(huán)PID控制器,系統(tǒng)框圖如圖所示:
上述角度單環(huán)PID控制算法僅僅考慮了飛行器的角度信息,如果想增加飛行器的穩(wěn)定性(增加阻尼)并提高它的控制品質(zhì),我們可以進(jìn)一步的控制它的角速度,于是角度/角速度-串級(jí)PID控制算法應(yīng)運(yùn)而生。在這里,相信大多數(shù)朋友已經(jīng)初步了解了角度單環(huán)PID的原理,但是依舊無法理解串級(jí)PID究竟有什么不同。其實(shí)很簡單:它就是兩個(gè)PID控制算法,只不過把他們串起來了(更精確的說是套起來)。那這么做有什么用?答案是,它增強(qiáng)了系統(tǒng)的抗干擾性(也就是增強(qiáng)穩(wěn)定性),因?yàn)橛袃蓚€(gè)控制器控制飛行器,它會(huì)比單個(gè)控制器控制更多的變量,使得飛行器的適應(yīng)能力更強(qiáng)。為了更為清晰的講解串級(jí)PID,這里筆者依舊畫出串級(jí)PID的原理框圖,如圖所示:
同樣,為了幫助一些朋友編程實(shí)現(xiàn),給出串級(jí)PID偽代碼:
四軸專用PID參數(shù)整定方法及原理
使用PID的四軸會(huì)在飛行中震蕩,告訴大家為什么光使用PID并不能實(shí)現(xiàn)對(duì)四軸姿態(tài)‘足夠好’的控制。文章中還是涉及了不少自控原理和其他控制相關(guān)的姿勢(shì),沒有一點(diǎn)底子的話確實(shí)會(huì)看著很困惑(不然那么些人花好幾年學(xué)控制還有什么意義?)。如果你只想知道結(jié)論的話,直接看文章開頭和結(jié)尾部分就好了
PID控制器是什么?
我想每一個(gè)看到這里的人都對(duì)PID的概念有了足夠的了解,我一遍遍嘰歪比例積分微分沒有任何意義。這里我只想說一些大家提的較少的‘重點(diǎn)’內(nèi)容:
PID控制器是一個(gè)線性的控制器!從這里開始我們進(jìn)入正題了,雖然若干年來PID已然成為了世界上使用最普遍的控制方法,也逐漸被人們神話到幾乎可以控制一切………………但是,從理論上來說,只有‘線性的,符合要求的’被控系統(tǒng)才能在PID控制下實(shí)現(xiàn)良好的控制效果。
所以說,我們首先第一步,要保證我們的被控系統(tǒng)在被PID控制的區(qū)域‘表現(xiàn)為’一個(gè)線性系統(tǒng)才行。于是這里有人會(huì)說了,現(xiàn)實(shí)中沒有哪個(gè)系統(tǒng)是線性的,自然,我們的四軸飛行器在大范圍內(nèi)是一個(gè)非常典型的非線性系統(tǒng)(隨便按照理論推推模型就會(huì)出現(xiàn)漫天的三角函數(shù)),也就是說,我們‘僅’使用標(biāo)準(zhǔn)PID控制的話是不可能讓四軸從各個(gè)姿態(tài)回到目標(biāo)狀態(tài)的過程都能保持穩(wěn)定。于是這里出現(xiàn)我們使用PID時(shí)要注意的第一個(gè)問題:
我們的PID控制只能工作在四軸角度偏移不大的一個(gè)近似線性的區(qū)域內(nèi)。這個(gè)區(qū)域沒有定論,不過你要是飛機(jī)偏了90°的話想用PID調(diào)回到水平狀態(tài)指定是非常危險(xiǎn)的事情。PID的模型相關(guān)問題非常重要也比較費(fèi)口舌,我們等下認(rèn)真討論,現(xiàn)在要先說另一個(gè)非常重要的非線性問題:
要保證我的控制通道與電機(jī)的輸出力矩是線性的。如果我們的控制通道與電機(jī)輸出力矩都不是線性的的話,我們的PID控制就很難起作用了,節(jié)省時(shí)間不舉例子了,不明白的自行補(bǔ)腦吧,于是我這里要提醒大家的事情是:我們的航模電調(diào)調(diào)整的都是力矩而不是轉(zhuǎn)速(雖然它叫做電子調(diào)速器),這是我們的福音,因?yàn)榇蠹抑?,螺旋槳產(chǎn)生的升力與轉(zhuǎn)速的平方成正比,而角加速度與力矩成正比,正是因?yàn)槲覀兊碾娬{(diào)讓電機(jī)產(chǎn)生的升力與我們輸出的油門量成正比了我們才能使用PID控制器對(duì)四軸的姿態(tài)進(jìn)行控制。這里可以看下我的四軸使用的四合一電調(diào)輸出的升力與油門的對(duì)應(yīng)曲線:
圖中橫坐標(biāo)是輸出油門的百分比,縱坐標(biāo)是四個(gè)電機(jī)產(chǎn)生的總拉力(單位暫定kg),可以看到,具有非常好的線性關(guān)系,所以我們可以使用PID對(duì)大四軸實(shí)現(xiàn)比較好的控制。于是我們首先發(fā)現(xiàn)了第一個(gè)問題,有人反映小四軸不好調(diào)參數(shù),因?yàn)樾∷妮S沒有專用的電子調(diào)速器,所以油門與輸出力矩并不是嚴(yán)格線性的(這里我沒有實(shí)踐過,請(qǐng)大家隨意批評(píng)指正),這時(shí)使用PID控制性能就會(huì)明顯下降,當(dāng)你的電機(jī)輸出力矩與你的控制信號(hào)不是線性關(guān)系的時(shí)候,請(qǐng)先使用軟件補(bǔ)償?shù)姆椒▽?duì)油門做一下分段的線性仿射變化,再設(shè)計(jì)PID控制器。
不過對(duì)于大四軸而言貌似就不用那么麻煩了,那我們直接進(jìn)入PID的控制模型環(huán)節(jié)。
PID控制器的數(shù)學(xué)模型
在標(biāo)準(zhǔn)的控制類書籍上PID算法是這么定義的:
這個(gè)公式是連續(xù)系統(tǒng)用的,我們單片機(jī)的控制是用不了的,我們的單片機(jī)使用的是離散的控制模型也叫0階保持器的離散系統(tǒng),就是需要把上面的公式離散化,而這個(gè)離散化的過程我們使用的是后項(xiàng)差分法。首先把上面的積分傳遞函數(shù)轉(zhuǎn)化為連續(xù)的s域模型:
使用后向差分法可以得到s域到z域的映射關(guān)系:
于是可以得到:
這里特地給出了Kp Ki Kd這三個(gè)參數(shù),這三個(gè)參數(shù)就是大家最??吹降哪莻€(gè)離散的PID公式,也就是說你在這里既可以使用Kp Ti Td的參數(shù)來建模也可以使用Kp Ki Kd的參數(shù)來建模,到這里就總算是可以把我們的傳遞函數(shù)放在系統(tǒng)中用自控原理的相應(yīng)工具來分析了。分析之前要先聲明一個(gè)事情,有人發(fā)現(xiàn)(比如在MWC和其他許多飛控中)用陀螺儀的輸出來當(dāng)做PID中的微分項(xiàng),會(huì)取得比標(biāo)準(zhǔn)PID更好的控制效果,乍一看這么做與用前后兩次歐拉角作差沒有區(qū)別(因?yàn)榻撬俣日镁褪墙嵌鹊奈⒎郑刂菩Ч灰粯泳驼f不通了。
其實(shí)是這個(gè)樣子的,如果我們?cè)诔绦蛑凶隽朔浅:玫木€程安全的處理并且控制頻率和姿態(tài)解算讀陀螺的頻率是一樣的的情況下二者確實(shí)是沒有任何差別的,但是大家的飛控都寫的非常簡單,姿態(tài)解算頻率都高于控制頻率,于是讀到的陀螺儀的數(shù)據(jù)并不是‘當(dāng)前使用的姿態(tài)前一時(shí)刻’的數(shù)據(jù)而是‘后一時(shí)刻’的數(shù)據(jù),這時(shí)候PID控制的微分部分就不再是‘后項(xiàng)差分’而是‘前向差分’了(這就是我前面要強(qiáng)調(diào)使用后項(xiàng)差分法的原因),那這個(gè)時(shí)候就尷尬了,我們不能全部使用前向差分模型來建模(因?yàn)榉e分還是使用的后向模型)兩邊分開用又會(huì)出現(xiàn)模型階次不匹配的問題,所以這時(shí)候是無法使用PID模型來考慮接下來的問題的,你使用的其實(shí)是兩個(gè)獨(dú)立的控制器并聯(lián),一個(gè)是角度的PI控制器,而另一個(gè)是角速度的P控制器,二者采樣時(shí)間不一樣,于是得當(dāng)做兩個(gè)獨(dú)立的控制回路調(diào)整參數(shù),這是使用這種控制器時(shí)的參數(shù)調(diào)整方法。也就道出了為什么部分情況下使用角度微分和角速度控制效果不一樣的問題,這種方法固然是很好的(可以有效的降低振動(dòng)),當(dāng)然前提是你按照二者獨(dú)立控制的思路來設(shè)計(jì)參數(shù)。但是很不幸,大家都沒有這么做,依然是把整體作為PID控制器來考慮,那么,我只能說這是個(gè)近似的PID控制器了,手調(diào)固然可以(萬能的實(shí)驗(yàn)調(diào)參啊)但是通過建模的方式算出優(yōu)化的參數(shù)就不可能了。我們接下來看會(huì)怎樣:
從系統(tǒng)的零極點(diǎn)圖理解PID控制的原理
有了上面的PID傳遞函數(shù)的離散系統(tǒng)模型我們就可以開始下一步了,將上面的分式上下做因式分解可以得到系統(tǒng)的零極點(diǎn),在自控原理中我們知道,系統(tǒng)的極點(diǎn)確定系統(tǒng)的穩(wěn)定性情況,零點(diǎn)不影響系統(tǒng)穩(wěn)定性,零點(diǎn)和極點(diǎn)共同決定系統(tǒng)的響應(yīng)。這里說的有些模糊,在現(xiàn)代控制理論中會(huì)提到一種控制器叫零極點(diǎn)配置控制器,能更好的闡述零點(diǎn)的作用:系統(tǒng)中的零點(diǎn)可以用來與系統(tǒng)中的不穩(wěn)定(或者不想要)的極點(diǎn)對(duì)消來設(shè)計(jì)出理想的控制器(數(shù)學(xué)上),工程中我們考慮的是讓零點(diǎn)與我們不想要的極點(diǎn)盡可能的靠近,就能削弱這個(gè)不想要的極點(diǎn)對(duì)系統(tǒng)的影響。下面我們用極點(diǎn)配置的方法來設(shè)計(jì)PID控制器,這里提前聲明我們使用的并不是最標(biāo)準(zhǔn)的閉環(huán)極點(diǎn)配置方法,因?yàn)槲覀兊腜ID控制器只有兩個(gè)零點(diǎn)可以配置(如果使用PI控制器的話就只有一個(gè)零點(diǎn)可以自由配置了)而且還多了一個(gè)臨界穩(wěn)定的極點(diǎn),反饋又使用的是單位負(fù)反饋……極大的限制了極點(diǎn)配置的自由度,于是我們?yōu)榱撕唵纹鹨妰H從開環(huán)部分進(jìn)行極點(diǎn)配置,這么做有許多不嚴(yán)謹(jǐn)?shù)牡胤?,但是?huì)簡化許多工程上的應(yīng)用(在做自適應(yīng)PID控制器的時(shí)候會(huì)用到完整的極點(diǎn)配置方法,到那里就會(huì)發(fā)現(xiàn)是多么復(fù)雜的一件事兒了……)。
上圖是PID控制器開環(huán)部分(就是上面推導(dǎo)的數(shù)學(xué)模型)常見的零極點(diǎn)分布情況,有兩個(gè)固定在(0,0)和(1,0)位置的極點(diǎn),兩個(gè)對(duì)稱分布的零點(diǎn)(手調(diào)參數(shù)時(shí)很難出現(xiàn)兩個(gè)零點(diǎn)都在實(shí)軸上的情況而且我們也不希望那樣),這兩個(gè)零點(diǎn)的位置是可調(diào)的,微分時(shí)間常數(shù)Td主管零點(diǎn)位置的左右移(注意是‘主管’,也就是說對(duì)虛軸的位置還是有影響的),常數(shù)越大越靠右(也就是說臨界穩(wěn)定極點(diǎn)的影響越弱,抗噪聲性能越好但到達(dá)0誤差的穩(wěn)態(tài)也就越困難,因?yàn)檫@個(gè)臨界穩(wěn)定的極點(diǎn)是在閉環(huán)系統(tǒng)中讓系統(tǒng)到達(dá)穩(wěn)態(tài)0誤差的關(guān)鍵但很影響穩(wěn)定性),積分常數(shù)Ti越大零點(diǎn)越靠近實(shí)軸,Ti在實(shí)際控制中的作用不好說明,留在后面再說,但是到這里大家也就看出我為什么要使用標(biāo)準(zhǔn)的Kp Ti Td參數(shù)而不是Kp Ki Kd參數(shù)了,因?yàn)槭褂眠@種參數(shù)時(shí)Kp對(duì)開環(huán)系統(tǒng)的穩(wěn)定性(注意僅指開環(huán)系統(tǒng))沒有影響,我們就可以降低系統(tǒng)對(duì)這個(gè)參數(shù)的敏感性而主要考慮另外兩個(gè)參數(shù)就好。大家在手調(diào)參數(shù)的看到的圖形和這個(gè)都應(yīng)該沒有多少區(qū)別
接下來我們看一下我們被控系統(tǒng)的數(shù)學(xué)模型:
被控系統(tǒng)的小范圍線性化模型
正如我前面所述,想要分析PID的控制性能必須得得到被控系統(tǒng)的線性近似模型(非線性系統(tǒng)下的分析工具沒個(gè)正經(jīng)能用的),這里大家可以通過動(dòng)力學(xué)建模得到系統(tǒng)的非線性模型(像幾乎所有的碩士博士論文那樣)再泰勒展開,但是這樣做往往得到的模型跟實(shí)際情況差異太大以至于沒有參考價(jià)值,這里我推薦使用系統(tǒng)辨識(shí)的方法來得到系統(tǒng)的線性模型,因?yàn)檫@么做如果能做到正確的辨識(shí)的話還能得到系統(tǒng)的誤差模型,于是現(xiàn)在在控制界很流行,只是實(shí)際用的時(shí)候就發(fā)現(xiàn)難度頗高,盡管有許多現(xiàn)成的工具但是依然特別難掌握,也難怪很多熱會(huì)把這個(gè)當(dāng)做是看家本領(lǐng),作者在這方面也算是連皮毛都沒摸全,不敢亂講,這里就為了解釋PID方便直接把我的大四軸辨識(shí)出來的Pitch軸模型拿出來當(dāng)做例子來講了:
畫出來的系統(tǒng)階躍響應(yīng)是這個(gè)樣子的:
檢驗(yàn)系統(tǒng)建模的相似程度就靠這個(gè)了,給我的飛機(jī)一個(gè)階躍信號(hào)反映出來的情況和這個(gè)確實(shí)差不多。關(guān)鍵是下面,它的零極點(diǎn)分布情況:
可以看到辨識(shí)出來的結(jié)果又兩個(gè)很靠近不穩(wěn)定邊界的主導(dǎo)極點(diǎn)(氣泡框那里)表現(xiàn)明顯的零點(diǎn)又和這幾個(gè)極點(diǎn)8桿子打不著,如果我們消滅那兩個(gè)主導(dǎo)極點(diǎn),我們的四軸理論上就可以控制的非常完美了,眾所周知,主導(dǎo)極點(diǎn)越靠近0則系統(tǒng)穩(wěn)定性越好,那么按照極點(diǎn)配置的方法(當(dāng)然我這里指的還是開環(huán)的極點(diǎn)配置),那么我們接下來開始看用這種建模的方法怎么實(shí)現(xiàn)PID參數(shù)的配置:
用極點(diǎn)配置PID實(shí)現(xiàn)對(duì)系統(tǒng)的控制
那么按照上面的介紹我們來嘗試消除這兩個(gè)主導(dǎo)極點(diǎn),前面說過,PID模型中兩個(gè)對(duì)稱零點(diǎn)的位置是可以任意調(diào)整的,不用計(jì)算,直接手試出如下的參數(shù):
那么得到的開環(huán)零極點(diǎn)圖是這樣的:
那么閉環(huán)響應(yīng)是這個(gè)樣子的:
看著很漂亮啊,我們加大Kp到4試試,其他參數(shù)都不變
喲,完美嘛,0.5s即可到達(dá)穩(wěn)態(tài),0穩(wěn)態(tài)誤差,超調(diào)量也不過10%而已,相當(dāng)?shù)睦硐耄覐倪@里可以看出使用Kp Ti Td參數(shù)的優(yōu)勢(shì):隨意調(diào)整Kp,可以提高系統(tǒng)性能而且對(duì)閉環(huán)穩(wěn)定性幾乎沒有影響,甚至對(duì)開環(huán)系統(tǒng)的穩(wěn)定性完全沒有影響,我想,這也就是MWC飛控用Kp(角速度的)作為動(dòng)態(tài)參數(shù)的原因。那么好吧,令人沮喪的部分終于要來了,把這個(gè)參數(shù)燒到飛控里面,運(yùn)行,哇塞,不錯(cuò)哦,不動(dòng)搖桿它平衡的很好,那我們遙控下……我擦,越抖越大,控制不住了,翻了,打到人了,鮮血汩汩而出……………………
這是為什么呢?來看下我們這時(shí)的開環(huán)系統(tǒng)階躍響應(yīng):
咦?怎么是一條直線呢?沒錯(cuò),它就是這樣一個(gè)不穩(wěn)定的狀態(tài),在我們高興的做極點(diǎn)配置的時(shí)候,忘記了PID控制器本身還會(huì)引入一個(gè)臨界穩(wěn)定的極點(diǎn),這個(gè)極點(diǎn)帶來的好處0穩(wěn)態(tài)誤差,但是卻對(duì)噪聲非常敏感,也就是說,如果我們的飛機(jī)在氣流平穩(wěn)的地方飛行,飛機(jī)的電機(jī)性能又極佳,建模也準(zhǔn),最關(guān)鍵的,是姿態(tài)解算的精度又出奇的高的話,用這種方法得到的PID參數(shù)肯定是非常完美的。但是現(xiàn)實(shí)總是殘酷的,具體為什么會(huì)對(duì)噪聲這么敏感應(yīng)該可以從系統(tǒng)的噪聲辨識(shí)模型中得到解釋,但是很遺憾到文章這里我并沒有對(duì)噪聲進(jìn)行建模,有興趣的可以嘗試下。
這里就是使用PID控制的弊端了,它只提供了兩個(gè)零點(diǎn)用來對(duì)極點(diǎn)進(jìn)行抑制,但是又同時(shí)引入了一個(gè)不穩(wěn)定的極點(diǎn),不得已,我們只能讓零點(diǎn)從那兩個(gè)極點(diǎn)上向那個(gè)臨界穩(wěn)定的極點(diǎn)移動(dòng),企圖用兩個(gè)零點(diǎn)來牽制三個(gè)極點(diǎn),這自然沒辦法達(dá)到良好的控制效果,但也就成了沒有辦法的辦法了……大家在搜索PID參數(shù)整定方法的時(shí)候一定都聽說過Ziegler-Nichols整定法則,這幾乎是PID基于模型的參數(shù)整定唯一的方法了,但是為什么沒人把這個(gè)如此著名的整定方法(這里指第一方法)應(yīng)用在四軸的PID整定中呢?因?yàn)槭褂迷摲▌t有個(gè)鐵打的前提:控制對(duì)象中既不能包含積分器,又不包含主導(dǎo)共軛復(fù)數(shù)極點(diǎn),也就是說階躍響應(yīng)應(yīng)該是一個(gè)S型…………………………很不幸,我們的四軸這兩條都占了……積分器是在從角速度到角度轉(zhuǎn)換的過程中,在與其他好多極點(diǎn)的共同作用中最終在我們的參數(shù)辨識(shí)中表現(xiàn)為了那兩個(gè)討厭的共軛復(fù)數(shù)極點(diǎn),重新看一遍我的解釋流程,就明白為什么不能用Ziegler-Nichols整定第一法則了,也就是為什么光用PID不能達(dá)到足夠好的控制效果。
那么,既然非要用PID飛又既然缺少極點(diǎn)的情況下我們只能讓零點(diǎn)右移,這么做的理由也是可以從另一個(gè)方面來佐證的:
調(diào)過PID的都知道增加微分可以提高系統(tǒng)的抗噪性能,減小積分會(huì)減小噪聲積累(這里指Ki增加而不是Ti)反映到零點(diǎn)的移動(dòng)中剛好就是零點(diǎn)向右側(cè)的(1,0)點(diǎn)移動(dòng)。所以可以得知,我們經(jīng)過權(quán)衡能得到的PID最佳的控制參數(shù)的零點(diǎn)應(yīng)該是落在了開環(huán)主導(dǎo)極點(diǎn)和(1,0)點(diǎn)連線所在的那一片區(qū)域內(nèi)了,那么我們對(duì)PID的分析是否到此就結(jié)束了呢?顯然沒有,我還沒有論證為什么大家在數(shù)年的總結(jié)中會(huì)得到“先調(diào)P,再調(diào)D,最后調(diào)I就能飛了”的實(shí)驗(yàn)整定方法能夠湊效,并且還要提出個(gè)理論指導(dǎo)實(shí)踐的方法來……
自控原理的書上有提到“串聯(lián)響應(yīng)頻率校正”的設(shè)計(jì)方法,但是該方法屢試都不爽,有興趣可以從這個(gè)方向走走,說不定能為我們的四軸PID控制器設(shè)計(jì)找到一條出路。
之前我曾說過,用Kp Ti Td型的參數(shù)設(shè)計(jì)的PID控制器穩(wěn)定性對(duì)Kp并不敏感,那么我們是不是可以利用這點(diǎn)來優(yōu)化我們的控制器設(shè)計(jì)呢?答案是肯定的。我們先來看下按照上面的‘向右看齊’參數(shù)調(diào)整方法會(huì)發(fā)生什么:
我們隨便選一個(gè)在連線上的點(diǎn)作為參數(shù)查看它的開環(huán)零極點(diǎn)和閉環(huán)階躍響應(yīng)(這里Kp去1):
可以看到,積分的效果明顯減弱了,系統(tǒng)先在0.幾秒的時(shí)候迅速的達(dá)到了穩(wěn)態(tài)(0.3左右)然后在以后漫長的時(shí)間內(nèi)在積分作用的影響下以指數(shù)逼近最終的穩(wěn)態(tài)1,大家看著這個(gè)圖應(yīng)該很快就想到該怎么做了,就是增大Kp,讓系統(tǒng)的‘第一個(gè)’穩(wěn)態(tài)在1附件,那問題就解決了,不錯(cuò),我們這里把Kp設(shè)為4(不設(shè)置為3是為了等下驗(yàn)證另一個(gè)東西):
瞧,這個(gè)很丑的怪物出現(xiàn)了,比剛才好了不少,而且你最終得到的PID控制器輸出效果會(huì)和這個(gè)差不了許多(之所以在視頻上看不出來是因?yàn)槿撕苌贂?huì)從0----Pitch角0°突然給飛機(jī)一個(gè)1----Pitch角57°)另外要說的是為什么我用了4依然沒有讓它的第一步就穩(wěn)定到1,這是因?yàn)殚]環(huán)降低了系統(tǒng)總增益,但是這里給再高的增益會(huì)讓系統(tǒng)不穩(wěn)定,原因就在下面了:
為了更直觀的說明不穩(wěn)定的原因,這里要用Bode圖來看一下系統(tǒng)閉環(huán)的頻域響應(yīng):
可以看到在頻域響應(yīng)有個(gè)很尖的尖峰,這個(gè)尖峰就是我們說的PID在這種情況下沒法達(dá)到優(yōu)良控制性能的關(guān)鍵,你會(huì)發(fā)現(xiàn),使用純PID控制的飛控,都會(huì)在空中來回抖動(dòng),頻率基本是固定的,就是這個(gè)尖峰的緣故,尤其當(dāng)Pitch軸和Roll軸使用同樣的控制參數(shù)的時(shí)候,抖動(dòng)會(huì)疊加,你經(jīng)常會(huì)看到視頻里用純PID控制的四軸在兩個(gè)控制軸交界的方向上抖啊抖抖啊抖抖啊抖抖啊抖…………于是這里就是我們需要用實(shí)驗(yàn)來權(quán)衡的地方,這個(gè)尖峰通過減小Kp的值可以得到一定的抑制,也可以讓零點(diǎn)向左少許移動(dòng),二者都會(huì)延長到達(dá)穩(wěn)態(tài)的時(shí)間,比較明智的做法是保證有足夠的響應(yīng)速度的前提下適當(dāng)減小增益,畢竟在PID沒法很好的完成控制任務(wù)的情況下,人的操作就顯得非常重要了。這里給出我使用的一組PID參數(shù):
也就是說,我提出的整定方法,在可以建模的情況下:
?、俳⒈豢叵到y(tǒng)的模型
?、诟鶕?jù)上述的原則確定PID的開環(huán)0點(diǎn)應(yīng)該出現(xiàn)的區(qū)域(就是在那個(gè)連線上)
?、劢o一個(gè)開環(huán)情況下穩(wěn)態(tài)誤差較小的Kp
?、芸粗A躍響應(yīng)微調(diào)Ti和Td使得在保證Td足夠大的情況下超調(diào)量較小且積分效果打到穩(wěn)態(tài)的時(shí)間又足夠的長(2~3s以上依據(jù)個(gè)人口味)
⑤最后看著Bode圖適當(dāng)減小增益Kp
?、藁仡^再檢查下階躍響應(yīng)是否滿足心意就完事兒了
看到這兒,不知道有多少人會(huì)和我一樣苦苦的一笑(這TM繁瑣的步驟有意思嗎?),這么做確實(shí)是一件非常不值得的事情,只是如我這般不服氣的孩子憑著一股刨根問底的沖勁花了2個(gè)月用自己的方式來調(diào)PID的真實(shí)記錄而已,好了,現(xiàn)在再來介紹不建模的情況下怎么通過試驗(yàn)整定四軸的PID參數(shù)
其實(shí)試驗(yàn)方法整定PID參數(shù)使用的依然是Ziegler-Nichols整定法則,不過這次使用的是第二法則,而且做完以后要按照我接下來給的步驟微調(diào)
鑒于該整定法則在阿莫上沒有人提過(至少我沒有找到),這里先貼上完整的Ziegler-Nichols整定第二法則:
首先,該法則使用Ti Td的參數(shù)形式(現(xiàn)在更理解為什么要用Ti Td參數(shù)格式了吧?)先僅使用Kp進(jìn)行控制(取Ti為無窮大,比如32767,取Td為0,等價(jià)于Ki=0 Kd=0)從0開始慢慢增大Kp直到第一次出現(xiàn)臨界穩(wěn)定的情況記錄下當(dāng)前的Kp值計(jì)作Kc……
這里暫停一下,注意這里的臨界穩(wěn)定的含義,調(diào)參時(shí)請(qǐng)用一根圓桿子橫穿四軸的重心,這個(gè)時(shí)候四軸會(huì)在桿子上等幅擺動(dòng),這個(gè)時(shí)候可不是臨界穩(wěn)定??!四軸風(fēng)扇油門推到很大的時(shí)候氣流是會(huì)給一定旋轉(zhuǎn)的阻力的,如果你Kp調(diào)到?jīng)]過5它就等幅震蕩了那絕對(duì)是不對(duì)的,要把油門推到飛機(jī)平時(shí)剛好起飛的位置(既桿子與飛機(jī)接觸面基本不受力)。另外就是等幅震蕩并不是說你把它放在那兒它慢慢岳震越大了,而是你給個(gè)階躍響應(yīng)它按照那個(gè)幅度等幅震蕩,比如你用手輕輕撥了一下,它就在那個(gè)范圍等幅震蕩了。這個(gè)點(diǎn)很精確,多一小點(diǎn)就發(fā)散,少一小點(diǎn)就能慢慢停下來,比如我的四軸測(cè)完是11.6
…………繼續(xù),則這時(shí)你需要測(cè)量它震蕩一個(gè)周期的時(shí)間(單位為s)計(jì)做Pc,那我們就可以得到用Ziegler-Nichols整定第二法則得到的PID參數(shù):
Kp = 0.6Kc
Ti = 0.5Pc
Td = 0.125Pc
我們看下這個(gè)參數(shù)的階躍響應(yīng)和開環(huán)零極點(diǎn):
你會(huì)發(fā)現(xiàn)它只有一個(gè)零點(diǎn),其實(shí)這并不是一個(gè)零點(diǎn),而是兩個(gè)零點(diǎn)重合了,但是你把這個(gè)參數(shù)燒到四軸上以后出現(xiàn)的情況和我前面的極點(diǎn)配置方法得到的情況非常相像,因?yàn)樗奈⒎窒禂?shù)太小了,抵抗擾動(dòng)的能力很弱,這里要說明為什么他要用一個(gè)重合的零點(diǎn),大家在做控制的時(shí)候很少遇到這種震蕩特性很強(qiáng)的系統(tǒng),大家遇到的基本都是一階的系統(tǒng)(階躍函數(shù)表現(xiàn)為單調(diào)增到達(dá)穩(wěn)態(tài)),這時(shí)候用這種無虛部的零點(diǎn)可以讓超調(diào)量最小。
那么,也許有很多人跟我一樣,剛開始調(diào)PID的時(shí)候兩次調(diào)到這里,一次是應(yīng)為震蕩點(diǎn)沒選對(duì),Kc小了太多導(dǎo)致控制完全不起作用于是放棄了。第二次調(diào)對(duì)了Kc但是發(fā)現(xiàn)穩(wěn)態(tài)效果很差,在Ki Kd的參數(shù)下折騰了好久越調(diào)越爛最終把這個(gè)方法放棄了。我估計(jì)到現(xiàn)在壇子里沒見到這個(gè)整定方法很有可能就是這個(gè)原因吧。
那么好了,我這里要告訴你到了這一步該怎么繼續(xù)調(diào),不要?jiǎng)覭p和Ti,增大Td直到你覺得快速用手轉(zhuǎn)動(dòng)你的四軸的時(shí)候有了足夠的阻力(注意是快速轉(zhuǎn)動(dòng)的過程中,而不是你壓著它不動(dòng)的時(shí)候的阻力),這時(shí)候你的四軸應(yīng)該就已經(jīng)調(diào)好了,想進(jìn)一步微調(diào)就是你自己的事情了,讓我們來看下這個(gè)時(shí)候系統(tǒng)是什么樣子的,我們僅給這時(shí)的Td參數(shù)加上0.5(取個(gè)比較整的數(shù)而已,要是取1就更明顯了)
有沒有發(fā)現(xiàn)和我前面得到的參數(shù)非常接近?看著這個(gè)圖,結(jié)合前面我提到的內(nèi)容,又有什么感悟呢?
維基百科上有個(gè)詞條《齊格勒-尼科爾斯方法》,里面用的是Ki Kd的參數(shù)形式,需要用我前面提到的Ki Kd和Ti Td的轉(zhuǎn)換關(guān)系轉(zhuǎn)換一下。
總結(jié):PID該怎么調(diào),我們?cè)撟⒁馐裁?/strong>
?、傧纫WC電機(jī)的輸出是線性的,微型四軸等沒有電調(diào)的最好先對(duì)電機(jī)的油門行程和供電電壓進(jìn)行矯正,保證對(duì)電機(jī)的控制輸入和電機(jī)輸出的力矩程線性關(guān)系。
②嚴(yán)格注意自己控制程序中的每一步是否有線程安全的問題,不要讓四軸的一次控制運(yùn)算中使用了不是同一時(shí)間的狀態(tài)測(cè)量值。
③用陀螺作為微分項(xiàng)能減少姿態(tài)解算誤差帶來的干擾,但要小心有可能會(huì)破壞了PID的控制模型導(dǎo)致控制效果變壞。
?、茏髡邚?qiáng)烈建議你使用Kp Ti Td的PID參數(shù)形式。
⑤記住Kp Ti Td參數(shù)變化對(duì)系統(tǒng)產(chǎn)生的影響是什么樣的。
⑥注意調(diào)參的時(shí)候你是怎么固定你的四軸的。
?、哌x擇我上面提到的我的兩種調(diào)參方法的一種整定參數(shù)。
⑧不要相信僅用PID能調(diào)出完美的四軸控制器,PID僅僅能讓你的四軸飛起來而已,更不要相信增量式PID能在四軸的姿態(tài)控制中有所作為,牛逼的開源不開源四軸都不僅僅使用了PID控制器。
⑨不要手賤報(bào)控制專業(yè)
這里附上MATLAB的仿真代碼
[plain] view plain copy%% lynx的四軸飛行器PID調(diào)試模型
clc,clear
%被控線性模型
TfPitchNum = [-0.00004584 0.0001312 0.0009171 0.000228];
TfPitchDen = [1 -2.514 2.087 -0.5657];
sysPitch = tf(TfPitchNum,TfPitchDen,0.04); %重新構(gòu)造無噪聲輸入的模型
%ltiview(sysPitch)
sysPitchZpk = zpk(sysPitch);
%使用標(biāo)準(zhǔn)PID參數(shù)的柿子,這個(gè)是一個(gè)可用的參數(shù)
Kp = 6.5;
Ti = 0.8;
Td = 1.1;
% %臨界穩(wěn)定增益
% Kp = 11.6;
% Ti = 1000;
% Td = 0;
% %齊格勒-尼克爾思整定方法
% Kp = 11.6*0.6;
% Ti = 0.5*1.1;
% Td = 0.125*1.1+0.5;
Ts = 0.04
Ki = Kp*Ts/Ti; %0.3
Kd = Kp*Td/Ts; %17
p2 = Kd;
p1 = -Kp-2*p2;
p0 = Kp+Ki+p2;
ControlSys1Num = [p0 p1 p2];
ControlSys1Den = [1 -1 0];
ControlSys1 = tf(ControlSys1Num,ControlSys1Den,0.04);
SysOpen = series(ControlSys1,sysPitchZpk);
SysSum = feedback(SysOpen,1)
ltiview(SysSum)
ltiview(SysOpen)
%ltiview(ControlSys1)
tf(ControlSys1)
評(píng)論
查看更多