本文以線性伺服電機(jī)的用例說(shuō)明了比例積分微分 (PID) 控制,包括其背后的數(shù)學(xué)原理。
通過(guò)本文你將能了解到:
PI
D 控制的基礎(chǔ)知識(shí)。
電
路中連接元件以完成位置控制的 PID 功能的那些部分的注意事項(xiàng)。
固件
代碼實(shí)現(xiàn)。
比例積分微分 (PID) 控制是用于調(diào)節(jié)系統(tǒng)動(dòng)態(tài)行為的常用方法。在許多工業(yè)設(shè)備中都可以找到示例,其中它用于控制溫度、壓力、流量、速度或位置等。 PID 控制背后的理論和數(shù)學(xué)一直是很多討論的主題。但是如何應(yīng)用這些數(shù)學(xué)和理論來(lái)實(shí)現(xiàn)一個(gè)真實(shí)的設(shè)備呢?為了演示這是如何完成的,本文將探討一個(gè)完整的示例。
位置控制的任務(wù)將針對(duì)線性伺服電機(jī)的情況進(jìn)行討論。首先,介紹控制 PID 控制器運(yùn)行的數(shù)學(xué)函數(shù)。我們將展示函數(shù)的各個(gè)部分如何在實(shí)際設(shè)計(jì)中組合在一起。具體來(lái)說(shuō),我們將解決電路中接口元件的注意事項(xiàng),以完成用于位置控制的 PID 功能的那些部分,以及在將執(zhí)行控制的微控制器的固件代碼中實(shí)現(xiàn)該功能所涉及的內(nèi)容。
PID 基礎(chǔ)知識(shí)
作為任何 PID 控制應(yīng)用基礎(chǔ)的通用數(shù)學(xué)函數(shù)可以表述如下:
其中e(t)是偏差值:
對(duì)于位置控制,r(t)為設(shè)定位置,y(t)為當(dāng)前位置。
一張圖可以讓我們更直觀地理解這個(gè)數(shù)學(xué)在應(yīng)用于伺服電機(jī)時(shí)是如何工作的。圖 1說(shuō)明了線性伺服 PID 控制系統(tǒng)的框圖。
圖1、線性伺服PID控制系統(tǒng)。
圖 1中描繪的系統(tǒng)的一些關(guān)鍵元素是設(shè)置位置輸入(設(shè)定點(diǎn),或我們的線性執(zhí)行器的目標(biāo)位置)、驅(qū)動(dòng)執(zhí)行器的某些占空比的脈沖寬度調(diào)制 (PWM) 信號(hào),以及執(zhí)行器的當(dāng)前位置。它們分別對(duì)應(yīng)于數(shù)學(xué)方程式中的量r(t)、 u(t)和y(t) 。
之所以稱為閉環(huán)控制,是因?yàn)榉答伝芈穼⒂嘘P(guān)當(dāng)前狀態(tài)的信息傳遞回系統(tǒng),使其能夠獲得當(dāng)前狀態(tài)與所需設(shè)定點(diǎn)之間的差異,必須對(duì)其進(jìn)行校正。具體到我們的案例,從設(shè)置位置中減去當(dāng)前位置以獲得誤差(或偏差)信號(hào),如上所示。此誤差對(duì)應(yīng)于數(shù)量e(t)。
正如文章開(kāi)頭提到的,PID 代表比例、積分和微分。這些是指為調(diào)節(jié) PID 控制系統(tǒng)的運(yùn)行而生成的三個(gè)控制信號(hào)。
如數(shù)學(xué)和圖表所示,三個(gè)控制信號(hào)由誤差信號(hào)產(chǎn)生,從Proportional、Integral和Derivative模塊輸出——也標(biāo)有它們各自的增益K p、K i和K d ——并且是結(jié)合起來(lái)產(chǎn)生驅(qū)動(dòng)執(zhí)行器的 PWM 信號(hào)的占空比。
現(xiàn)在我們已經(jīng)描述了系統(tǒng)的結(jié)構(gòu),我們想在固件中實(shí)現(xiàn)它。但要做到這一點(diǎn),我們需要了解如何將線性致動(dòng)器與微控制器連接起來(lái)。具體來(lái)說(shuō),我們?nèi)绾螐腜ID函數(shù)中獲取Duty Cycle信號(hào)來(lái)驅(qū)動(dòng)執(zhí)行器,以及執(zhí)行器如何產(chǎn)生Current Position信號(hào)反饋給PID函數(shù)?
隨后,我們可以解釋如何將PID函數(shù)翻譯成用C語(yǔ)言編寫(xiě)的固件源代碼。然后將提供一些演示工作實(shí)施的示例數(shù)據(jù),作為理解三個(gè) PID 控制信號(hào)的作用以及如何調(diào)整其性能的基礎(chǔ)。
電氣連接線性致動(dòng)器
線性致動(dòng)器用于提升、傾斜、拉動(dòng)或推動(dòng)物體(圖 2)。我們這里使用的微型線性執(zhí)行器由驅(qū)動(dòng)部分的直流伺服電機(jī)和位置傳感部分的電位器組成。
圖2. 線性致動(dòng)器的示例。
對(duì)于該裝置,PID 控制器板需要輸出 12V PWM 信號(hào)來(lái)控制電機(jī)速度,并使用模數(shù)轉(zhuǎn)換器 (ADC) 通道來(lái)感測(cè)執(zhí)行器的位置。因此,我們應(yīng)該在微控制器上配置兩個(gè) GPIO 引腳,一個(gè)用于 PWM,另一個(gè)用于 ADC。
線性執(zhí)行器的位置輸出是一個(gè)電阻值。如果電位器連接在電源V dd和地GND之間(圖 3),則可以將抽頭處的電阻作為簡(jiǎn)單分壓器的輸出進(jìn)行測(cè)量。位置的范圍和單位從 0 ~ 10,000 Ω 對(duì)應(yīng)為 0 ~ V dd V,ADC 將電壓轉(zhuǎn)換為數(shù)字值,即我們實(shí)現(xiàn)的當(dāng)前位置y(t)。如果 ADC 的分辨率為 10 位,則此數(shù)字值介于 0 和 1023 之間。
圖3、電位器ADC電路。
我們的控制器輸出u(t)也可以是表示電壓的數(shù)字值,這很方便。然而,該控制器輸出驅(qū)動(dòng)線性致動(dòng)器,線性致動(dòng)器不期望變化的電壓作為輸入來(lái)控制其速度,而是期望具有變化占空比的固定電壓 PWM 信號(hào)。因此,需要進(jìn)行轉(zhuǎn)換。
圖 4中的圖表顯示了 0 V 至 12 V 的電壓如何轉(zhuǎn)換為具有 0% 至 100% 占空比的可變寬度脈沖的 12 V PWM 信號(hào)。嚴(yán)格來(lái)說(shuō),高于 12 V 的電壓也必須考慮在內(nèi),并且必須轉(zhuǎn)換為 100% 的占空比,因?yàn)閿?shù)學(xué)決不會(huì)將控制器輸出限制在 12 V 以下。
圖4. PWM 信號(hào)圖。
作為關(guān)于執(zhí)行器接口的最后評(píng)論,我們應(yīng)該強(qiáng)調(diào),只有我們選擇的設(shè)備的速度控制和位置傳感特性的性質(zhì)引導(dǎo)我們將 u(t) 和 y(t) 都指定為我們實(shí)施中的電壓值。這些數(shù)值沒(méi)有其他關(guān)系,如果受控設(shè)備接口的性質(zhì)另有規(guī)定,在另一個(gè)應(yīng)用程序中甚至可能不在同一測(cè)量單位中。
編寫(xiě)固件
對(duì)于用作 PID 控制器的固件,它必須確定誤差值e(t),評(píng)估 PID 函數(shù)以調(diào)整驅(qū)動(dòng)設(shè)備的信號(hào)u(t) ,并隨著時(shí)間的推移連續(xù)執(zhí)行此操作。然而,對(duì)于固件執(zhí)行而言,以真正連續(xù)的方式執(zhí)行任務(wù)并不是一個(gè)可行的概念。最接近的是在很短的時(shí)間間隔內(nèi)快速重復(fù)或迭代任務(wù)。?
如果該任務(wù)是 PID 算法,則其連續(xù)時(shí)間數(shù)學(xué)需要用離散時(shí)間版本替換,具有以下含義:
1. 固定間隔T被指定為迭代之間的時(shí)間,即它們的周期。
2. 將連續(xù)時(shí)間t時(shí)刻的誤差值e(t)的評(píng)估替換為離散時(shí)間迭代n時(shí)的評(píng)估,即e(n)?=?r(n)?–?y(n),其中n?= 0 , 1, 2, …
3. e(t)的連續(xù)時(shí)間積分由e(n)T的離散時(shí)間求和代替。
4. e(t)的連續(xù)時(shí)間導(dǎo)數(shù)替換為e(n)在前一次迭代和當(dāng)前迭代之間的線性斜率——即:
因此,在第n次迭代中評(píng)估的離散時(shí)間輸出信號(hào)u(n)可以表示如下:
現(xiàn)在我們可以實(shí)現(xiàn)離散時(shí)間PID控制功能了。在示例 C 代碼(參見(jiàn)下面的代碼列表)中,變量和常量的名稱與數(shù)學(xué)方程式中的相應(yīng)元素非常匹配。此代碼可以在 PID 固件的每次迭代中執(zhí)行,通常在配置為每T毫秒觸發(fā)一次的定時(shí)器中斷內(nèi)執(zhí)行。
/* 當(dāng)前誤差- 比例項(xiàng) */
e = r - y;
/* 累積誤差- 積分項(xiàng) */
總誤差 += e;
/* 差分誤差- 導(dǎo)數(shù)項(xiàng) */
deltaError = e - 先前的錯(cuò)誤;
/* PID控制*/
u = Kp * e + Ki * (totalError * T) + Kd * (deltaError /T);
/* 同時(shí)為下一次迭代做準(zhǔn)備——將之前的設(shè)置為當(dāng)前錯(cuò)誤 */
以前的錯(cuò)誤= e;
剩下要做的是為 PID 增益K p、K i、和K d以便系統(tǒng)在被要求移動(dòng)到選定的設(shè)定點(diǎn)時(shí)正確執(zhí)行。我們將為這些增益手動(dòng)選擇不同的值,以研究它們對(duì)位置控制的影響,并在此過(guò)程中演示調(diào)整它們的通用方法。我們還將深入了解控制功能中每個(gè)術(shù)語(yǔ)的用途。
PID 增益調(diào)整
有幾個(gè)評(píng)估系統(tǒng)性能的標(biāo)準(zhǔn),包括死區(qū)時(shí)間、上升時(shí)間、過(guò)沖、穩(wěn)定時(shí)間和穩(wěn)態(tài)誤差。雖然在調(diào)整 PID 增益之前應(yīng)根據(jù)這些標(biāo)準(zhǔn)定義性能預(yù)期,但此類預(yù)期取決于應(yīng)用程序的要求。因此,就本文而言,足以說(shuō)明各種標(biāo)準(zhǔn)何時(shí)受到不同增益調(diào)整的影響。
Kp , K i , _和Kd增益將單獨(dú)調(diào)整,并按此順序,給定一個(gè)選定的設(shè)置點(diǎn)。更具體地說(shuō),代碼將在每次執(zhí)行時(shí)將其中一個(gè)增益設(shè)置為不同的值,并將 r 的值設(shè)置為 700。
至于這個(gè) 700 值的相關(guān)性,讀者應(yīng)該記得Current Position是一個(gè)數(shù)字值,表示從執(zhí)行器的電位器獲得的電壓,而Current Position現(xiàn)在在我們的代碼中由變量 y 表示。設(shè)置位置-表示我們代碼中的變量 r - 是相同范圍內(nèi)的數(shù)字值,如前所述,如果 ADC 具有 10 位分辨率,則該值介于 0 和 1023 之間。因此,700 的設(shè)定點(diǎn)值是合理的,盡管是任意的。
調(diào)整 K?p以接近目標(biāo)位置
Kp是比例增益??刂坪瘮?shù)的比例項(xiàng)通過(guò)使用與該電流誤差成比例的信號(hào)移動(dòng)線性致動(dòng)器來(lái)補(bǔ)償電流誤差。比例項(xiàng)用于使當(dāng)前位置接近目標(biāo)是有意義的,因?yàn)樵撜`差是執(zhí)行器的設(shè)定位置與其當(dāng)前位置之間的差異。比例項(xiàng)使控制函數(shù)尋求將其減少到零。
在調(diào)整的第一步中,我們將積分和微分增益K i和K d設(shè)置為零,并增加比例增益K p直到致動(dòng)器穩(wěn)定在目標(biāo)位置附近 (700)。比例增益太高會(huì)引起振蕩。
圖 5中的圖表顯示了對(duì)于不同的K p值,執(zhí)行器的當(dāng)前位置如何隨時(shí)間變化。我們將選擇K p = 1,觀察它會(huì)導(dǎo)致當(dāng)前位置穩(wěn)定在目標(biāo)附近并且穩(wěn)定時(shí)間最快。
圖5.比例增益調(diào)整。
讀者會(huì)注意到有一個(gè)殘余的穩(wěn)態(tài)誤差,即最終的當(dāng)前位置與目標(biāo)設(shè)定點(diǎn)位置有偏差。這種偏移在純比例控制器的情況下很常見(jiàn),并且會(huì)在下一步調(diào)整積分增益時(shí)消除。
調(diào)整 K?i以消除穩(wěn)態(tài)誤差
Ki是積分增益。控制函數(shù)的積分項(xiàng)通過(guò)使用與隨時(shí)間累積的過(guò)去誤差量成比例的信號(hào)移動(dòng)線性致動(dòng)器來(lái)補(bǔ)償過(guò)去誤差。積分項(xiàng)用于消除穩(wěn)態(tài)誤差是有意義的,因?yàn)樵撜`差是一個(gè)常數(shù)偏移量,它會(huì)隨著時(shí)間的推移增加積分,從而使控制函數(shù)試圖將其減小到零。
在調(diào)整的第二步中,我們保持在第一步中選擇的比例增益K p = 1,將微分增益K d設(shè)置為零,并增加積分增益K i直到執(zhí)行器穩(wěn)定得更接近目標(biāo)位置 (700) ——即,直到穩(wěn)態(tài)誤差接近于零。
圖 6中的圖表顯示了對(duì)于K p = 1 的不同K i值,執(zhí)行器的當(dāng)前位置如何隨時(shí)間變化。對(duì)于一組給定的要求, Ki =?0.5的結(jié)果可能非常令人滿意,我們可能會(huì)選擇不涉及微分項(xiàng),在這種情況下,解決方案將是比例積分 (PI) 控制器。
圖6.積分增益調(diào)整。
但是,或者,我們可能更愿意選擇K i = 2,這可能是由于其結(jié)果中顯示的上升時(shí)間有所改善。讀者會(huì)注意到,在這種情況下,更好的上升時(shí)間是以過(guò)沖為代價(jià)的。當(dāng)在下一步中調(diào)整微分增益時(shí),將消除這種過(guò)沖。
調(diào)整 K?d以消除過(guò)沖
Kd是微分增益??刂坪瘮?shù)的導(dǎo)數(shù)項(xiàng)通過(guò)使用與根據(jù)誤差的時(shí)間導(dǎo)數(shù)(即其變化率)估計(jì)的未來(lái)誤差量成比例的信號(hào)移動(dòng)線性致動(dòng)器來(lái)補(bǔ)償未來(lái)(估計(jì)的)誤差。
微分項(xiàng)用于消除瞬態(tài)效應(yīng)(如超調(diào))是有道理的,它們自然反映在時(shí)間導(dǎo)數(shù)中,從而使控制函數(shù)尋求將它們減少到零。在存在干擾的情況下提高穩(wěn)定性和縮短建立時(shí)間是額外的相關(guān)優(yōu)勢(shì)。但是請(qǐng)注意,如果誤差信號(hào)非常嘈雜,微分項(xiàng)會(huì)使控制系統(tǒng)不穩(wěn)定。
在這第三步調(diào)整中,我們保持在前兩步中選擇的比例和積分增益K p = 1 和K i = 2,并增加微分增益K d直到消除超調(diào)。微分增益太高會(huì)引起振蕩。
圖 7中的圖表顯示了對(duì)于不同的K d值,K p = 1 和K i = 2 ,執(zhí)行器的當(dāng)前位置如何隨時(shí)間變化。我們將選擇K d = 0.05,觀察到它有效地減少了過(guò)沖,同時(shí)保持了改進(jìn)的上升時(shí)間。
圖7. 微分增益調(diào)整。
然后,在我們的控制器版本中,啟用了所有三個(gè)信號(hào)比例、積分和微分,我們已經(jīng)成功地調(diào)整了它們的增益以實(shí)現(xiàn)適當(dāng)?shù)目刂破餍袨?。我們還確定增益值應(yīng)為K?p?= 1、K?i?= 2 和K?d?= 0.05。
結(jié)論
這篇關(guān)于 PID 控制的文章解釋了 PID 控制器核心的數(shù)學(xué)原理,并提供了一個(gè)實(shí)際示例,說(shuō)明如何實(shí)現(xiàn)該數(shù)學(xué)原理以在微控制器上運(yùn)行。討論了用于位置控制的微控制器和直流伺服電機(jī)之間的信號(hào)性質(zhì)的實(shí)際考慮因素。
最后,提供了一些數(shù)據(jù)來(lái)演示如何手動(dòng)調(diào)整控制函數(shù)的比例、積分和微分項(xiàng)以獲得適當(dāng)?shù)男阅?。它還讓讀者了解 PID 算法中每個(gè)函數(shù)的用途。
通用現(xiàn)成的 PID 控制器不是將 PID 控制設(shè)計(jì)到定制的嵌入式設(shè)備中,而是工業(yè)市場(chǎng)上可用的替代品,例如,其中一些基于可編程邏輯控制器 (PLC)。這些可能會(huì)滿足許多用戶的需求。
但是,如果它需要與您的工廠流程相關(guān)的非標(biāo)準(zhǔn)功能,它可能無(wú)法滿足您的應(yīng)用需求?;蛘?,如果它有特殊的數(shù)據(jù)通信需求,或者如果通用控制器具有您希望避免用于成本敏感型應(yīng)用的不需要的功能。在這種情況下,定制 PID 控制器設(shè)計(jì)是一種選擇。(EETOP編譯自electronicdesign)
編輯:黃飛
?
評(píng)論