王曉忠
(江蘇聯(lián)合職業(yè)技術(shù)學(xué)院無(wú)錫立信分院,江蘇 無(wú)錫 214153)
PID(Proportional Integral Derivative)控制是工業(yè)過程中一種比較常見的控制方法,其將偏差(給定值和實(shí)際輸出值的差)的比例P、積分I、微分D,通過線性組合構(gòu)成控制量,用在被控對(duì)象。
1922 年,米羅斯基對(duì)PID 給出了控制規(guī)律公式,多年之后,自動(dòng)控制器被設(shè)計(jì)出來(lái);1942 年以后,PID控制器的各種算法被研究出來(lái),得到了廣泛的應(yīng)用。1984 年Astrom 等提出基于繼電反饋?zhàn)哉ǖ姆椒?,通過繼電控制使系統(tǒng)產(chǎn)生振蕩,得到臨界比例系數(shù)Ku和振蕩周期Tu。然后根據(jù)Ziegler-Nichols(Z-N)整定公式,計(jì)算出有關(guān)PID 的各個(gè)參數(shù)[1-3]。經(jīng)過多年國(guó)內(nèi)外對(duì)PID 控制算法的研究,現(xiàn)在逐漸向人工神經(jīng)網(wǎng)絡(luò)等多種復(fù)合控制多方面發(fā)展,以獲得更好的控制效果。
某工廠需要一種小型的加熱溫控設(shè)備用于某種液體的調(diào)溫控制;由于電加熱系統(tǒng)具有較大的慣性滯后,被加熱液體化學(xué)反應(yīng)比較復(fù)雜,具有時(shí)變、非線性的特點(diǎn);加熱控制過程比較復(fù)雜,由人工整定得不到理想的PID 控制參數(shù),需要研究自整定控制算法,以獲得比較好的溫控效果。
本設(shè)計(jì)基于STM32F103C8T6 單片機(jī),主要由觸摸屏模塊、電源模塊、過零觸發(fā)模塊和測(cè)溫模塊等組成。各模塊之間的關(guān)系如圖1 所示。
圖1 PID 自整定加熱系統(tǒng)框圖
加熱溫度由觸摸屏輸入,通過485 接口傳輸給SMT32 核心板;STM32 核心板通過檢測(cè)市電過零點(diǎn)的時(shí)刻控制固態(tài)繼電器進(jìn)行過零點(diǎn)功率調(diào)節(jié),從而準(zhǔn)確控制加熱系統(tǒng)對(duì)液體的加熱。在加熱過程中,通過測(cè)溫系統(tǒng),實(shí)時(shí)把溫度數(shù)值反饋給STM32 核心板,用于PID的調(diào)節(jié),同時(shí)溫度曲線顯示在觸摸屏的界面中。在調(diào)試的時(shí)候,計(jì)算機(jī)通過RS232 串口把指令發(fā)送給STM32核心板,用于改變工作狀態(tài)和查看系統(tǒng)運(yùn)行情況,以便更好地調(diào)整系統(tǒng)。
在系統(tǒng)工作的時(shí)候,觸摸屏和單片機(jī)之間用Modbus-RTU 通信協(xié)議;測(cè)溫系統(tǒng)和單片機(jī)之間用SPI通信協(xié)議;計(jì)算機(jī)和單片機(jī)之間用RS232 通信協(xié)議。單片機(jī)采用外部中斷的上升沿觸發(fā)和下降沿觸發(fā)檢測(cè)市電過零點(diǎn)。為了更好地處理各部分之間的關(guān)系,STM32 單片機(jī)采用ProtoThread 機(jī)制編制程序。
1.2.1 過零觸發(fā)模塊
在加熱系統(tǒng)中,采用可控硅進(jìn)行功率調(diào)節(jié),通過過零觸發(fā)控制市電電壓波形出現(xiàn)的次數(shù)控制可控硅輸出的功率。過零觸發(fā),降低了諧波分量,輸出的線性較好,能比較準(zhǔn)確地控制輸出功率的百分比,在控制中通過記錄過零的次數(shù)就可以方便地計(jì)算出輸出的功率比。
在圖2 中,220 V 交流電經(jīng)過整流后在波形上半周使PC817 導(dǎo)通,觸發(fā)單片機(jī)中斷,在波形下半周,使光隔關(guān)斷,單片機(jī)外部中斷引腳由高電平變?yōu)榈碗娖剑僖淮斡|發(fā)單片機(jī)中斷,每個(gè)周期單片機(jī)外部中斷2 次;在波形每次過零點(diǎn)都可以比較準(zhǔn)確地控制可控硅的通斷,從而比較準(zhǔn)確地控制加熱系統(tǒng)的輸出功率比。
圖2 過零監(jiān)測(cè)電路
1.2.2 測(cè)溫模塊
測(cè)溫電路實(shí)時(shí)檢測(cè)液體的溫度。采用PT100 作為溫度傳感器,金屬鉑(PT)的電阻值隨溫度的變化而變化,并具有良好的穩(wěn)定性和重現(xiàn)性,PT100 在-200 ℃~+850 ℃內(nèi)測(cè)溫精確、線性度比較好,且不需要冷端補(bǔ)償。電路采用1 mA 的激勵(lì)源,因?yàn)镻T100 輸出信號(hào)比較小,需要采用放大器進(jìn)行信號(hào)處理[4]。選用Microchip 精密運(yùn)放MCP609,其具有80 pA 的低輸入偏置電流。
如圖3(a)所示,由2 個(gè)運(yùn)放構(gòu)成了一個(gè)1 mA 的電流源,電流的精度取決電阻R13 的精度,電流計(jì)算公式如下
圖3 測(cè)溫模塊示意圖
在電壓一定的情況下,電流的精度取決于R13 電阻的精度。系統(tǒng)中R13 選取金屬箔無(wú)感低溫漂5 ppm的電阻。
PT100 采用3 線制傳感器,如圖3(b)所示,圖中RW1、RW2、RW3為PT100 的線阻,運(yùn)放U79D 為差分輸入,同相輸入端電壓為
反向輸入端電壓為
假定PT100 線阻RW1=RW3,則有VRW1=VRW3,電路中選取R16=R17,則輸出電壓為
從上面推導(dǎo)可以看出,運(yùn)放U79D 消除了PT100線阻的影響。運(yùn)放U79C 和周邊電路組成了帶增益的Sallen-Key 濾波器電路,考慮到溫度變化比較緩慢截止頻率設(shè)置為2 Hz 左右。
PT100 信號(hào)經(jīng)過放大處理后,送到AD 采集輸入端,其示意圖如圖3(c)所示。經(jīng)過AD 芯片多次采集后,求取平均值作為傳感器的輸出值。AD 芯片采用TI公司ADS1256 芯片,該器件具有24 位△-Σ型高性能模數(shù)轉(zhuǎn)換器,高達(dá)23 bit 的無(wú)噪聲精度、數(shù)據(jù)速率高達(dá)30 kSPS(次采樣/秒)、±0.001 0%非線性特性(最大值)。ADS1256 芯片通過SPI 接口和STM32 單片機(jī)相連進(jìn)行數(shù)據(jù)通信。ADS1256 芯片按照官方手冊(cè)推薦電路進(jìn)行外圍器件的配置,以保證芯片的采集精度。
1.2.3 其他模塊的配置
觸摸屏采用MCGS,屏幕通過RS485 和STM32 單片機(jī)相連接,采用Modbus-RTU 協(xié)議進(jìn)行通信,MCGS觸摸屏設(shè)置了多個(gè)界面,如測(cè)試界面、實(shí)時(shí)溫度曲線界面、歷史溫度曲線界面和PID 參數(shù)讀/寫界面等,以方便操作及觀察設(shè)備的運(yùn)行狀態(tài)。STM32 通過RS232 接口和電腦進(jìn)行通信,用于數(shù)據(jù)的傳輸;電源模塊把220 V 交流電通過AC-TO-DC 模塊變?yōu)镈C+5 V,然后通過DC-TO-DC 模塊變?yōu)镈C+3.3 V 供給系統(tǒng)使用;加熱系統(tǒng)采用普通的220 V 電熱棒進(jìn)行加熱,外部設(shè)置了過流和過熱等硬件保護(hù)電路,以保護(hù)加熱系統(tǒng)的安全。
PID 調(diào)節(jié)器是一種線性調(diào)節(jié)器,如圖4 所示,其將給定值r(t)與實(shí)際輸出值c(t)的偏差e(t)的比例(P)、積分(I)、微分(D)通過線性組合構(gòu)成控制量,通過執(zhí)行機(jī)構(gòu)對(duì)控制對(duì)象進(jìn)行控制[5-11]。
圖4 PID 控制系統(tǒng)框圖
其中偏差e(t)與輸出u(t)的關(guān)系為
式中:Kp×e(t)為比例部分為積分部分;為微分部分。這3 部分共同控制調(diào)節(jié)系統(tǒng)以達(dá)到預(yù)設(shè)目標(biāo)。
為了便于計(jì)算機(jī)的采集和控制,對(duì)公式進(jìn)行離散化處理,以T作為采樣周期,k作為采樣序列號(hào),則離散采樣時(shí)間kT對(duì)應(yīng)著連續(xù)時(shí)間t,用矩形法數(shù)值積分近似代替積分,用一階后向差分近似替代微分得
式中:k為采集序號(hào),k=0,1,2,3…;uk為第k次采樣時(shí)刻的計(jì)算機(jī)輸出值;ek為第k次采集時(shí)刻輸入的偏差值;ek-1為第k-1 次采集時(shí)刻輸入的偏差值;Ki=Kp×T/Ti為積分系數(shù);Kd=Kp×Td/T為微分系數(shù)。
在采集過程中周期T足夠小,則離散的PID 表達(dá)式近似計(jì)算可以獲得足夠精度的結(jié)果,離散控制過程與連續(xù)過程十分接近。
Astrom 和Hagglund 在1984 年提出基于繼電反饋的PID 參數(shù)整定法;在自整定方法中引入繼電反饋控制(圖5)。
圖5 繼電反饋控制示意圖
由圖5 所示,在繼電反饋框圖中,當(dāng)開關(guān)K 在b端為繼電反饋系統(tǒng);r為設(shè)定值,e為偏差,u為控制輸入,GP為被控對(duì)象傳遞函數(shù),y為控制輸出;回路中放置一個(gè)幅值為d的繼電環(huán)節(jié)。計(jì)算e(t)=r(t)-y(t),當(dāng)e(t)>=0 時(shí),取控制量u(t)為最大值d;當(dāng)e(t)<0 時(shí),取控制量u(t)為最小值-d。不同的控制量在切換繼電控制回路的時(shí)候,產(chǎn)生一個(gè)周期為Tu的極限振蕩;此時(shí)繼電反饋實(shí)驗(yàn)測(cè)得的極限振蕩頻率ωu為
從Fourier series 展開來(lái)看,可以認(rèn)為輸出振蕩的幅值a為繼電輸出的主諧波。此時(shí)極限增益Ku可以近似地認(rèn)為
式中:d為繼電的高度,可以根據(jù)實(shí)際情況進(jìn)行設(shè)定。
開關(guān)K 在b 端時(shí),通過繼電反饋計(jì)算出極限振蕩周期Tu和極限增益Ku。然后根據(jù)表1 可知,Z-N 參數(shù)整定規(guī)則計(jì)算出有關(guān)參數(shù)。
表1 Z-N 參數(shù)整定表
開關(guān)K 合在a 端時(shí),根據(jù)不同被控對(duì)象的動(dòng)態(tài)特性和控制響應(yīng)要求;在表1 中選擇不同的控制形式,計(jì)算出各個(gè)參數(shù),對(duì)系統(tǒng)進(jìn)行PID 調(diào)節(jié)[9]。
如圖5 所示,在繼電輸入和輸出波形圖中,當(dāng)y(t)的值小于設(shè)定值r時(shí),繼電輸出為d,系統(tǒng)全速加熱;當(dāng)y(t)的值大于設(shè)定值r時(shí),繼電輸出為-d,系統(tǒng)不加熱自然散熱(有些設(shè)備需要強(qiáng)制冷卻),由于繼電輸入在最大值和最小值之間變換,使輸出產(chǎn)生振蕩。在實(shí)際測(cè)量時(shí),因?yàn)榈谝粋€(gè)振蕩波形不穩(wěn)定,不能準(zhǔn)確地反映出系統(tǒng)的正常工作情況,需要從第二個(gè)波形開始計(jì)算有關(guān)參數(shù),在t1 時(shí)刻記錄峰值數(shù)值,在t2 時(shí)刻記錄谷值數(shù)值,(峰值+谷值)/2=a(公式(8)中輸出振蕩的幅值a)。在第二個(gè)波形中2 個(gè)相鄰過零點(diǎn)的時(shí)間就是Tu/2(振蕩周期),振蕩周期也可以表示為:Tu=2(t2-t1)。
假如選取表1 中PID(原始Z-N 法)的控制形式:Kp=Ku/1.7,Ti=Tu/2,Td=Tu/8,根據(jù)公式(6)—(8)可得
根據(jù)公式(9)可以計(jì)算出PID 調(diào)節(jié)的比例系數(shù),公式(10)為積分系數(shù),公式(11)為微分系數(shù),根據(jù)這3 個(gè)系數(shù)就可以進(jìn)行PID 調(diào)節(jié);所以繼電振蕩的PID 參數(shù)自整定算法可歸納如下[6-11]。
第一,啟動(dòng)自整定(圖5 中開關(guān)K 合在b 端)。
第二,計(jì)算e(t)=r(t)-y(t),當(dāng)e(t)>0 時(shí),選取控制量為最大(圖5 中幅值d);當(dāng)e(t)<0 時(shí),選取控制量為最小值(圖5 中幅值-d)。參數(shù)d(繼電特性的幅值)根據(jù)不同系統(tǒng)取值不同。
第三,根據(jù)圖5 中的y1、y2、t1 和t2 的值計(jì)算極限振蕩的Ku及Tu。
第四,根據(jù)不同的控制形式,用Z-N 參數(shù)整定表(表1)計(jì)算PID 參數(shù)的值。
第五,退出自整定過程,轉(zhuǎn)入PID 控制模式(圖5中開關(guān)K 合在a 端)。
STM32 單片機(jī)程序采用C 語(yǔ)言編制,利用ProtoThread 機(jī)制處理各個(gè)模塊之間的關(guān)系。PID 繼電自整定子程序流程如圖6 所示。
圖6 自整定子程序流程圖
在圖6 中,SV為設(shè)定溫度,PV為測(cè)量溫度,C用來(lái)記錄實(shí)際循環(huán)次數(shù),NO. 為根據(jù)不同的情況設(shè)置的循環(huán)次數(shù)。在自整定的時(shí)候如果連續(xù)3~5 次波峰y1(圖5)的值偏差在30%以內(nèi),系統(tǒng)軟件判定系統(tǒng)振蕩成功,系統(tǒng)自整定成功。在自整定過程中可以讓系統(tǒng)多次振蕩求取Ku和Tu的平均值,這樣更能準(zhǔn)確地反映出系統(tǒng)的工作狀態(tài)。系統(tǒng)根據(jù)測(cè)量值和設(shè)定值的關(guān)系對(duì)參數(shù)進(jìn)行控制,在測(cè)量時(shí)為了得到準(zhǔn)確的測(cè)量溫度值,STM32 單片機(jī)控制ADS1256 芯片每次采集5個(gè)數(shù)據(jù),去掉采集數(shù)據(jù)中的最大值和最小值,其余求平均值作為一個(gè)數(shù)據(jù);然后軟件采用遞推平均濾波法:把連續(xù)取得的N個(gè)數(shù)據(jù)值排成隊(duì)列,每次得到的一個(gè)新數(shù)據(jù)放入隊(duì)尾,并扔掉原來(lái)隊(duì)首的一個(gè)數(shù)據(jù)(先進(jìn)先出原則);把隊(duì)列中的數(shù)據(jù)求取平均值,作為新的濾波結(jié)果,這樣處理就能比較準(zhǔn)確地測(cè)試出當(dāng)前溫度。
在程序自整定的開始時(shí)刻由于設(shè)定值和測(cè)量值的不同,原始狀態(tài)可以分為SV>=PV和SV<PV兩種狀態(tài);測(cè)量時(shí),在求取y1、y2、t1 和t2 時(shí),第一個(gè)峰值有時(shí)是波峰,有時(shí)是波谷,程序需要做出一定的判斷。
在切換到PID 控制的時(shí)候,設(shè)置最大和最小溫度值,當(dāng)檢測(cè)到當(dāng)前溫度小于最小溫度的時(shí)候需要全速加熱,反之需要停止加熱;當(dāng)前溫度在范圍內(nèi),則進(jìn)行PID 調(diào)節(jié)。在PID 調(diào)節(jié)過程中,設(shè)置溫度死區(qū)范圍,如果偏差在死區(qū)范圍內(nèi),則保持當(dāng)前的輸出不變;如果在偏差范圍以外,則進(jìn)行PID 調(diào)節(jié)。
系統(tǒng)設(shè)定好溫度后,開始自整定,經(jīng)過3 個(gè)震蕩周期后自動(dòng)計(jì)算出有關(guān)參數(shù),經(jīng)過系統(tǒng)PID 調(diào)節(jié),溫度能平穩(wěn)地穩(wěn)定在設(shè)定值附近。工作時(shí)可以通過MCGS 觸摸屏實(shí)時(shí)監(jiān)控測(cè)試設(shè)備的各個(gè)參數(shù),也可對(duì)有關(guān)參數(shù)進(jìn)行修改,用于調(diào)節(jié)控制系統(tǒng),從而達(dá)到理想狀態(tài)。系統(tǒng)整定完成后,主要參數(shù)會(huì)自動(dòng)記錄在單片機(jī)中,下次加熱液體時(shí)可以直接進(jìn)入PID 調(diào)節(jié)狀態(tài);如果液體成分發(fā)生改變,也可以重新整定有關(guān)參數(shù),設(shè)備操作靈活,適應(yīng)性強(qiáng)。
經(jīng)過多次測(cè)試后表明,系統(tǒng)穩(wěn)定后,加入一定量的低溫液體或者加入一定量的高溫液體,經(jīng)過系統(tǒng)PID自動(dòng)調(diào)節(jié),能快速重新穩(wěn)定在設(shè)定值附近;系統(tǒng)穩(wěn)定后,把設(shè)定溫度適當(dāng)?shù)靥岣呋蛘呓档?,系統(tǒng)能平穩(wěn)地過渡到新的工作點(diǎn)附近。自整定算法,能在1 h 內(nèi)整定出比例、積分、微分系數(shù);其工作可靠,能夠克服加熱系統(tǒng)的過程滯后、慣性滯后和液體復(fù)雜的時(shí)變性;在PID 控制的時(shí)候,能使溫度偏差控制在±0.3 ℃以內(nèi);系統(tǒng)溫度控制誤差較小,獲得較滿意的控制效果,達(dá)到了設(shè)計(jì)指標(biāo),滿足廠家提出的要求。