PID算法的FPGA實(shí)現(xiàn)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
1.引言
在許多現(xiàn)代化的工業(yè)生產(chǎn)如冶金、電力等,實(shí)現(xiàn)對(duì)溫度的精度控制至關(guān)重要的,不僅直接影響著產(chǎn)品的質(zhì)量,而且還關(guān)系到生產(chǎn)安全、能源節(jié)約等一系列重大經(jīng)濟(jì)指標(biāo)。
PID控制由于其魯棒性好,可靠性高,在常規(guī)的溫度控制中應(yīng)用非常廣泛。目前工程的實(shí)際應(yīng)用中,大多數(shù)模糊PID控制器都利用單片機(jī)軟件編程來實(shí)現(xiàn),然而單片機(jī)的指令是按順序執(zhí)行的,實(shí)時(shí)性不強(qiáng),加上軟件實(shí)現(xiàn)容易受外界的干擾,抗干擾性能力差,對(duì)于實(shí)時(shí)性要求很高和外界干擾比較嚴(yán)重的系統(tǒng)不太適宜。本文選取FPGA(現(xiàn)場(chǎng)可編程門陣列)作為系統(tǒng)的主控制芯片,F(xiàn)PGA所有的信號(hào)都是時(shí)鐘驅(qū)動(dòng)的,對(duì)于程序的執(zhí)行具有并行運(yùn)算的能力,顯著的提高了系統(tǒng)控制的實(shí)時(shí)性,在FPGA內(nèi)部硬件實(shí)現(xiàn)還可以防止像單片機(jī)程序一樣,在惡劣的環(huán)境條件下發(fā)生程序跑飛的問題。尤其是現(xiàn)在FPGA器件有越來越多的參考設(shè)計(jì)方案以及IP(知識(shí)產(chǎn)權(quán))核心庫方面的支持。利用FPGA設(shè)計(jì)的PID控制器一方面可以將實(shí)現(xiàn)PID算法的模塊單獨(dú)作為控制模塊來使用,直接去實(shí)現(xiàn)對(duì)控制對(duì)象的調(diào)節(jié),另一方面,基于FPGA的PID控制算法也可以將其作為系統(tǒng)內(nèi)的IP核,以便在多路或復(fù)雜的系統(tǒng)上直接調(diào)用,加快研發(fā)設(shè)計(jì)速度。
2.PID算法分析
2.1 離散PID算法
PID控制系統(tǒng)是一個(gè)簡(jiǎn)單的閉環(huán)系統(tǒng),如圖1所示,PID系統(tǒng)框圖中,整個(gè)系統(tǒng)主要包括比較器、PID控制器和控制對(duì)象,其中PID包括三個(gè)環(huán)節(jié),即比例、積分和微分。
圖1 PID系統(tǒng)框圖
圖1中的r(t)作為系統(tǒng)的給定值,y(t)作為系統(tǒng)的輸出值,e(t)是給定值與輸出值的偏差,所以系統(tǒng)的偏差可以求得:
e(t)=r(t)-y(t) (1)
u(t)作為控制系統(tǒng)中的中間便量,既是偏差e(t)通過PID控制算法處理后的輸出量,又是被控對(duì)象的輸入量,因此模擬PID控制器的控制規(guī)律為:
其中,KP為模擬控制器的比例增益,TI為模擬控制器的積分時(shí)間常數(shù),TD為模擬控制器的微分時(shí)間常數(shù)。
2.2 離散PID算法
為了用微處理器實(shí)現(xiàn)PID算法,我們需要將模擬PID離散化,根據(jù)采樣時(shí)刻的偏差來實(shí)現(xiàn)PID算法,因此式(3.2)中的微分和積分項(xiàng)兩項(xiàng)內(nèi)容作離散化處理。
假設(shè)T為采樣周期,則積分項(xiàng)可作如下變換:
采樣周期的時(shí)間非常短,故微分可以近似的表示為:
將式(3)和式(4)帶入式(2)后,可得到離散PID算法為(限于篇幅,推導(dǎo)過程省略):
這個(gè)等式被叫做增量式PID控制算法。其中,乘積因子由PID控制參數(shù)KP、KI、KD確定:
3.PID算法的FPGA實(shí)現(xiàn)
由公式(5)知,增量式PID控制算法的具體實(shí)現(xiàn)步驟為:先通過誤差計(jì)算模塊求出偏差值e(k)、e(k-1)、e(k-2),再通過乘積模塊求出三個(gè)信號(hào)分別與乘積因子的相乘,最后對(duì)乘積項(xiàng)求和得到最后的控制量。圖2所示為增量式PID算法結(jié)構(gòu)圖。
3.1 誤差計(jì)算模塊
誤差計(jì)算模塊的目的是為了求出三次相鄰的偏差采樣值,即公式(3.8)中提到的e(k)、e(k-1)、e(k-2),輸入的給定值r(t)與實(shí)際輸出值y(t)相減得到誤差值。Verilog HDL程序代碼如下,其中,ek0、ek1、ek2、rt、yt分別對(duì)應(yīng)偏差值e(k)、e(k-1)、e(k-2)、r(t)、y(t)。
將上述程序在Quartus II軟件環(huán)境里完成編譯后,其仿真結(jié)果如圖3所示。
圖2 增量式PID算法結(jié)構(gòu)圖
圖3 誤差模塊仿真圖
3.2 乘積和求和模塊
通過誤差計(jì)算模塊求出e(k)、e(k-1)、e(k-2)后,由公式(5)知,要計(jì)算出控制量還必須將其分別與乘積因子做乘法運(yùn)算,通過硬件描述語言來實(shí)現(xiàn)乘法運(yùn)算的功能:
按照上述程序,在Quartus II完成編譯后,其仿真結(jié)果如圖4所示。
圖4 乘法器仿真圖
現(xiàn)在可計(jì)算出α0e(k)、α1e(k-1)、α2e(k-2)三個(gè)乘積項(xiàng)的計(jì)算結(jié)果,將上面三個(gè)乘積項(xiàng)求和就可以得出控制量△u(k)。程序代碼如下所示,其中輸入val0[15..0]、val1[15..0]、val2[15..0] 分別對(duì)應(yīng)α0e(k)、α1e(k-1) 、α2e(k-2)乘積的結(jié)果,輸出val[15..0]就是控制量△u(k)的值。
按照上述程序,在Quartus II完成編譯后,其仿真結(jié)果如圖5所示。
圖5 PID求和模塊仿真波形圖
3.3 溫度檢測(cè)及輸出控制電路設(shè)計(jì)
本文用到的溫度測(cè)量器件是K型熱電偶,溫度測(cè)量范圍為0~1200℃。熱電偶輸出的是模擬電壓信號(hào),必須進(jìn)行A/D轉(zhuǎn)換,同時(shí)還需對(duì)熱電偶進(jìn)行冷端補(bǔ)償和非線形校正。為了解決上面的問題,本文采用的是K型熱電偶專用數(shù)字轉(zhuǎn)換器MAX6675芯片,MAX6675芯片內(nèi)部集成了熱電偶放大器,內(nèi)置高達(dá)12位的模數(shù)轉(zhuǎn)換器。還包括了非線性矯正、冷端補(bǔ)償、斷線檢測(cè)等功能模塊。MAX6675的工作溫度范圍為-20~85℃,溫度的測(cè)量范圍為0~1024℃,溫度分辨率可以達(dá)到0.25℃。假設(shè)D為A/D轉(zhuǎn)換后得到的數(shù)字量對(duì)應(yīng)的十進(jìn)制數(shù)值,那么測(cè)量溫度值T可以通過如下公式算出:
輸出控制電路采用的是PWM(脈寬調(diào)制)方式,實(shí)現(xiàn)對(duì)電阻爐的溫度控制。光耦芯片選用MOC3061,用于對(duì)強(qiáng)弱電路的隔離,雙向?qū)煽毓柽x用的是BT137_600E。如果占空比越高,那么相對(duì)可控硅導(dǎo)通的時(shí)間也就越長,電阻爐加熱溫度也就越高,反之溫度也就會(huì)慢慢散熱降低,從而達(dá)到控制爐溫的目的。
4.結(jié)語
本文分析了PID算法,給出了在FPGA內(nèi)部硬件實(shí)現(xiàn)增量式PID控制的主要設(shè)計(jì)思路。在電阻爐為控制對(duì)象的溫控系統(tǒng)中,系統(tǒng)工作穩(wěn)定,在整個(gè)過程沒有出現(xiàn)震蕩和較大波動(dòng),并且溫度控制精度在始終保持在5%以內(nèi);系統(tǒng)的抗干擾能力增強(qiáng),對(duì)現(xiàn)場(chǎng)的各種噪聲和干擾具有較好的抑制作用。