找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1893|回復(fù): 0
收起左側(cè)

零基礎(chǔ)制作平衡小車【連載】7---模擬PID到離散型PID的轉(zhuǎn)換

[復(fù)制鏈接]
ID:223481 發(fā)表于 2020-12-2 17:16 | 顯示全部樓層 |閱讀模式

粘貼過(guò)來(lái)的代碼都亂了,貼個(gè)原文鏈接吧:

https://blog.csdn.net/D_SEngineer?spm=1011.2124.3001.5113

不定時(shí)發(fā)送福利,歡迎小伙伴們交流學(xué)習(xí)。



上一節(jié)對(duì)PID三個(gè)參數(shù)進(jìn)行了分析,知道了三個(gè)參數(shù)各自的優(yōu)缺點(diǎn),這節(jié)我們將三個(gè)參數(shù)整合到一起,通過(guò)他們之間優(yōu)缺點(diǎn)互補(bǔ),真正形成一個(gè)穩(wěn)定的系統(tǒng)。

PID雛形

將上一小節(jié)的公式相加:

        OUT = OUTp + OUTi + OUTd                = K*Ek + K*Sk + K*Dk + 3*OUT0                = K*(Ek +Sk +Dk)+ OUTx
  • 1
  • 2
  • 3

式子中3*OUT0為常數(shù),用常數(shù)OUTx代替。

模擬PID到離散型PID的轉(zhuǎn)換

這是模擬PID公式,對(duì)于這個(gè)公式,你要知道:
Kp :放大系數(shù)
e(t):誤差(t代表第t時(shí)刻采樣得到的誤差)
Ti :積分時(shí)間常數(shù)
Td:微分時(shí)間常數(shù)

另外一點(diǎn)就是,我們使用單片機(jī)進(jìn)行PID運(yùn)算,是不能采用模擬型PID的,因?yàn)閱纹瑱C(jī)本身就是一個(gè)數(shù)字系統(tǒng),里面只有0和1,因此不能處理模擬信號(hào),只能將模擬信號(hào)轉(zhuǎn)換成數(shù)字信號(hào),才能被單片機(jī)所用。
因此上面的公式不能使用,需要稍稍變動(dòng)。

那么怎么轉(zhuǎn)換呢?

1. 比例項(xiàng):

比例項(xiàng)就不同看了,很簡(jiǎn)單,誤差乘上系數(shù)就行了,主要是積分項(xiàng)和微分項(xiàng)、

2. 積分項(xiàng):


高數(shù)中是不是有一張和這個(gè)圖很像的一張圖,應(yīng)該在微積分那一章中,是讓求不規(guī)則圖形面積的。上圖紅色框內(nèi),黑色曲線的面積是怎么求的?是不是將黑線拆分成很多個(gè)矩形,把這些矩形面積相加就行了。這個(gè)理念和離散型PID很像,我們定時(shí)去采樣,之后把采樣值進(jìn)行PID計(jì)算,這個(gè)時(shí)間越小,離散型的結(jié)果就越接近模擬型結(jié)果。

那么積分項(xiàng)就可以寫(xiě)成下面的公式:

Sk:是積分輸出項(xiàng)
Ek:表示誤差(第k次采樣的誤差)
T:采樣時(shí)間
Ti:積分常數(shù)

公式可以這樣理解:
將誤差看做坐標(biāo)軸的Y軸(長(zhǎng)),T看做X軸(寬),當(dāng)k=1時(shí),表示第一次采樣的誤差E1×采樣時(shí)間T是不是相當(dāng)于求矩形的面積(長(zhǎng)×寬),之后將所有的矩形面積都累加起來(lái),就可以近似求出曲線的面積。

3. 微分項(xiàng)

積分是無(wú)限累加,微分是無(wú)限分割,Ek和Ek-1還看做Y軸,T是X軸。斜率 =(y2-y1)/(x2-x1),(y2-y1)就是Ek - Ek-1,(x2-x1)就是T。當(dāng)采樣時(shí)間T足夠小時(shí),上面這個(gè)公式是不是可以看成曲線上每個(gè)點(diǎn)(甚至更小)的效率了。

最終離散型公式:

離散型PID公式中的幾個(gè)參數(shù)總結(jié)
  • 積分時(shí)間常數(shù)Ti
    (1)T是采樣時(shí)間,Ti是積分時(shí)間常數(shù),兩個(gè)不一樣,最終積分系數(shù)Ki=Kp*(T/Ti)
    (2)Ti在分母上,因此Ti越大,Ki越小,積分作用越小;Ti越小,Ki越大,積分作用越大
    (3)我們最終調(diào)節(jié)的參數(shù)是合并之后的Ki,而不會(huì)單獨(dú)調(diào)節(jié)Ti
  • 微分時(shí)間常數(shù)Td.
    (1)Td越大,積分作用就越大,Td越小,積分作用就越小
    (2)我們最終調(diào)節(jié)的參數(shù)是合并之后的Kd,而不會(huì)單獨(dú)調(diào)節(jié)Td
PID注意事項(xiàng)

假設(shè)是溫控系統(tǒng),我們?cè)O(shè)定目標(biāo)值為100℃,當(dāng)?shù)谝淮尾蓸拥降谝坏竭_(dá)目標(biāo)值時(shí),誤差Ek=Sv-Pk,該段時(shí)間內(nèi)的誤差都為正數(shù),積分項(xiàng)是將所有誤差都累加起來(lái)的,因此在第一次到達(dá)目標(biāo)值時(shí),會(huì)累積很大一個(gè)誤差,該誤差會(huì)造成即便溫度達(dá)到目標(biāo)值100℃,此時(shí)P項(xiàng)沒(méi)有作用了,但系統(tǒng)還是會(huì)繼續(xù)加熱,為什么?就是因?yàn)榇藭r(shí)積分項(xiàng)經(jīng)過(guò)計(jì)算,會(huì)輸出一個(gè)很大的值。這就造成系統(tǒng)產(chǎn)生過(guò)沖,最直觀的表現(xiàn)就是下圖中,第一次超過(guò)目標(biāo)值產(chǎn)生的過(guò)沖現(xiàn)象。

解決辦法就是一開(kāi)始不加入積分項(xiàng),當(dāng)溫度到達(dá)一定值,比如80℃時(shí),在加入積分項(xiàng)。

這種情況一般會(huì)出現(xiàn)在系統(tǒng)啟動(dòng)、結(jié)束或大幅度增減設(shè)定值時(shí),短時(shí)間內(nèi)會(huì)造成系統(tǒng)輸出很大的偏差,這種情況可以采用上述方法(積分分離)來(lái)解決。


回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表