陳洪偉
[摘 要] 我國(guó)提出了“中國(guó)制造2025”。目前企業(yè)工業(yè)自動(dòng)化的水平已經(jīng)成為現(xiàn)代化水平的一個(gè)主要衡量指標(biāo)。PID控制器的特點(diǎn)是結(jié)構(gòu)簡(jiǎn)單、應(yīng)用廣泛、完全擺脫了精確模型的限制,這樣就能解決在工業(yè)過(guò)程中需要精確建模的困難。那么,基于單片機(jī)的PID控制成本低廉,可以根據(jù)不同的應(yīng)用環(huán)境進(jìn)行開(kāi)發(fā),具有很大的應(yīng)用優(yōu)勢(shì)。
[關(guān) 鍵 詞] PID算法;C語(yǔ)言;單片機(jī)
[中圖分類號(hào)] F403.6 [文獻(xiàn)標(biāo)志碼] A [文章編號(hào)] 2096-0603(2017)30-0220-01
不論在工業(yè)還是民用應(yīng)用中PID及其衍生算法是應(yīng)用較為廣泛的算法之一,也被大家稱為萬(wàn)能算法,所以熟練掌握PID算法的設(shè)計(jì)和實(shí)現(xiàn)的過(guò)程,對(duì)研發(fā)人員來(lái)講,基本上是可以應(yīng)對(duì)工作中遇到的一些基本問(wèn)題了。其實(shí)PID的控制過(guò)程也是相當(dāng)?shù)暮?jiǎn)單了,原理是通過(guò)誤差信號(hào)來(lái)控制被控的量,就控制器本身而言就是比例、積分、微分三個(gè)環(huán)節(jié)的加和。在這里我們規(guī)定(在t時(shí)刻):輸入的變量為rin(t),輸出的變量為rout(t),所以我們可以得出偏差量為err(t)=rin(t)-rout(t)。那么我們從參考文獻(xiàn)上可以查閱到PID的控制規(guī)律為U(x)=kp(err(t)+1/T*∫err(t)*dt+TD*derr(t)/dt)。接下面我們來(lái)舉例說(shuō)明這個(gè)公式,首先來(lái)假設(shè)這個(gè)工作流程是用來(lái)直流電機(jī)調(diào)速的。在這里rin(t)為電機(jī)轉(zhuǎn)速預(yù)定值,rout(t)作為電機(jī)的實(shí)際轉(zhuǎn)速值。直流電機(jī)的調(diào)速方法為PWM脈寬調(diào)制。轉(zhuǎn)速的單位用轉(zhuǎn)/min表示。那么接下來(lái)我們要考慮的是系統(tǒng)中的U(t)是什么,而U(t)和PWM之間存在的關(guān)系是什么樣的。我們都知道實(shí)際應(yīng)用中,每一個(gè)電壓對(duì)應(yīng)的是一個(gè)轉(zhuǎn)速,但是大多數(shù)人把電壓和轉(zhuǎn)速的關(guān)系理解成線性的對(duì)應(yīng)關(guān)系了。而在實(shí)際的應(yīng)用中直流電機(jī)的特性不是線性的,或者只能說(shuō)直流電機(jī)的特性是在局部上趨于線性的。所以這樣就引出來(lái)一個(gè)問(wèn)題,直流電機(jī)在PID調(diào)速上是有范圍限制的。這樣就要求我們?cè)谶M(jìn)行PID調(diào)速之前,用開(kāi)環(huán)系統(tǒng)來(lái)測(cè)試電壓和轉(zhuǎn)速之間的特性曲線,根據(jù)這個(gè)曲線再進(jìn)行閉環(huán)參數(shù)的調(diào)整。
接下來(lái)我們?cè)賮?lái)說(shuō)明一下反饋的原理,來(lái)看一下公式U(x)=kp(err(t)+1/T*∫err(t)*dt+TD*derr(t)/dt)。在這里,PID控制其實(shí)就是對(duì)偏差的控制過(guò)程。那么偏差如果為0則比例環(huán)節(jié)就不起作用了。當(dāng)控制系統(tǒng)存在偏差時(shí)比例環(huán)節(jié)才發(fā)揮作用,這里的積分環(huán)節(jié)是用來(lái)消除靜差的,靜差在這里是系統(tǒng)穩(wěn)定后輸出值和設(shè)定值之間的相差值,而積分環(huán)節(jié)就是偏差累計(jì)后的結(jié)果,把累計(jì)的誤差加到原有系統(tǒng)上用來(lái)抵消掉系統(tǒng)產(chǎn)生的靜差。而微分信號(hào)則是反映偏差信號(hào)的變化規(guī)律,它的作用是根據(jù)偏差信號(hào)的變化趨勢(shì)提前進(jìn)行調(diào)節(jié),這樣就增加了系統(tǒng)的快速性。了解了它的控制原理后,接下來(lái)我們將對(duì)PID進(jìn)行連續(xù)系統(tǒng)離散化,這樣我們就能在單片機(jī)上通過(guò)C語(yǔ)言來(lái)實(shí)現(xiàn)。偏差err(K)=rin(K)-rout(K);積分環(huán)節(jié)用加和來(lái)表示,也就是err(K)+err(K+1)+……,而微分環(huán)節(jié)用斜率的形式來(lái)表示,[err(K)-err(K-1)]/T,這樣就形成了如下所列出的PID離散表示形式:U(k)=kp(err(k)+Ki∑err(j)+Kd(err(k-1)-err(k-2)),從這個(gè)公式可以看出,增量式的結(jié)果是和最近的一次偏差有關(guān)系,這樣就可以最大限度地提高系統(tǒng)的穩(wěn)定性。但是需要注意的是最后的結(jié)果應(yīng)該為u(K)+增量調(diào)節(jié)后的值,這就是PID的離散化過(guò)程,接下來(lái)要做的工作是將離散化的公式轉(zhuǎn)換成為C語(yǔ)言,從而實(shí)現(xiàn)在單片機(jī)上控制。實(shí)現(xiàn)過(guò)程C語(yǔ)言控制代碼如下:
首先我們來(lái)定義一個(gè)PID變量結(jié)構(gòu)體struct_pid{ float SetSpeed;float ActualSpeed;float err;float err_last;float Kp,Ki,Kd;float voltage;float integral} pid,結(jié)構(gòu)體中變量含義分別為定義一個(gè)設(shè)定的值,定義一個(gè)偏差值,定義上一個(gè)偏差值,定義比例系數(shù)、積分系數(shù)、微分系數(shù),定義一個(gè)控制執(zhí)行器電壓值的變量,定義一個(gè)積分值。把所要用到的參數(shù)定義在一個(gè)結(jié)構(gòu)體中可以使程序更加模塊化。接下來(lái)我們要對(duì)三個(gè)比例系數(shù)賦初值,pid.Kp=0.2;pid.Ki=0.015;pid.Kd=0.2.在調(diào)試過(guò)程當(dāng)中,對(duì)要求的控制效果,可以通過(guò)調(diào)節(jié)這三個(gè)量直接進(jìn)行調(diào)節(jié)。float PID_realize(float speed){pid.SetSpeed=speed;pid.err=pid.SetSpeed-pid.ActualSpeed;pid.integral+=pid.err;pid.voltage=pid.Kp*pid.err+pid.Ki*pid.integral+pid.Kd*(pid.err-pid.err_last);pid.err_last=pid.err;pid.ActualSpeed=pid.voltage*1.0;returnpid.ActualSpeed;}那么到此PID的基本算法已經(jīng)呈現(xiàn)出來(lái)了。但是在實(shí)際應(yīng)用中這個(gè)算法沒(méi)有考慮上下限的問(wèn)題,只是對(duì)公式的一種直接實(shí)現(xiàn)。如放在實(shí)際應(yīng)用中應(yīng)根據(jù)情況加以改進(jìn)。
參考文獻(xiàn):
[1]維斯.數(shù)據(jù)結(jié)構(gòu)與算法分析[M].機(jī)械工業(yè)出版社,2004.
[2]譚浩強(qiáng).C語(yǔ)言程序設(shè)計(jì)[M].清華大學(xué)出版社,2001,