一、總體原則
PID調(diào)試一般原則
a.在輸出不振蕩時(shí),增大比例增益P。
b.在輸出不振蕩時(shí),減小積分時(shí)間常數(shù)Ti。
c.在輸出不振蕩時(shí),增大微分時(shí)間常數(shù)Td。
二、各環(huán)節(jié)作用
[P]比例調(diào)節(jié)作用:是按比例反應(yīng)系統(tǒng)的偏差,系統(tǒng)一旦出現(xiàn)了偏差,比例調(diào)節(jié)立即產(chǎn)生調(diào)節(jié)作用用以減少偏差。比例作用大,可以加快調(diào)節(jié),減少誤差,但是過(guò)大的比例,使系統(tǒng)的穩(wěn)定性下降,甚至造成系統(tǒng)的不穩(wěn)定。反之,過(guò)小,更不上系統(tǒng)需求。
[I]積分調(diào)節(jié)作用:是使系統(tǒng)消除穩(wěn)態(tài)誤差,提高無(wú)差度。因?yàn)橛姓`差,積分調(diào)節(jié)就進(jìn)行,直至無(wú)差,積分調(diào)節(jié)停止,積分調(diào)節(jié)輸出一常值。積分作用的強(qiáng)弱取決與積分時(shí)間常數(shù)Ti,Ti越小,積分作用就越強(qiáng)。反之Ti大則積分作用弱,加入積分調(diào)節(jié)可使系統(tǒng)穩(wěn)定性下降,動(dòng)態(tài)響應(yīng)變慢。一般情況是將時(shí)間常數(shù)設(shè)置很小。積分作用常與另兩種調(diào)節(jié)規(guī)律結(jié)合,組成PI調(diào)節(jié)器或PID調(diào)節(jié)器。
[D]微分調(diào)節(jié)作用:微分作用反映系統(tǒng)偏差信號(hào)的變化率,具有預(yù)見(jiàn)性,能預(yù)見(jiàn)偏差變化的趨勢(shì),因此能產(chǎn)生超前的控制作用,在偏差還沒(méi)有形成之前,已被微分調(diào)節(jié)作用消除。因此,可以改善系統(tǒng)的動(dòng)態(tài)性能。在微分時(shí)間選擇合適情況下,可以減少超調(diào),減少調(diào)節(jié)時(shí)間。微分作用對(duì)噪聲干擾有放大作用,因此過(guò)強(qiáng) 的加微分調(diào)節(jié),對(duì)系統(tǒng)抗干擾不利。此外,微分反應(yīng)的是變化率,而當(dāng)輸入沒(méi)有變化時(shí),微分作用輸出為 零。微分作用不能單獨(dú)使用,需要與另外兩種調(diào)節(jié)規(guī)律相結(jié)合,組成PD或PID控制器。
三、細(xì)說(shuō)[分為PID、PI、PD]
1、確定比例增益P
確定比例增益P 時(shí),首先去掉PID的積分項(xiàng)和微分項(xiàng),一般是令Ti=0、Td=0(具體見(jiàn)PID的參數(shù)設(shè)定說(shuō)明),使PID為純比例調(diào)節(jié)。輸入設(shè)定為系統(tǒng)允許的最大值的60%~70%,由0逐漸加大比例增益P,直至系統(tǒng)出現(xiàn)振蕩;再反過(guò)來(lái),從此時(shí)的比例增益P逐漸減小,直至系統(tǒng)振蕩消失,記錄此時(shí)的比例增益P,設(shè)定PID的比例增益P為當(dāng)前值的60%~70%。比例增益P調(diào)試完成。
【解說(shuō)】我們知道P是調(diào)節(jié)與預(yù)設(shè)值(即輸入值)的偏差的作用的,因此P很大時(shí),當(dāng)反饋值很小時(shí)也會(huì)造成很大的波動(dòng),最終是震蕩狀態(tài),這個(gè)可以試出來(lái)的,這時(shí)的P是Pmax。反之P太小時(shí),根本不可能靠近預(yù)設(shè)值,當(dāng)剛好能靠近預(yù)設(shè)值時(shí),這時(shí)的P就是Pmin。一般取P = Pmax(*60~70%)。
2、確定積分時(shí)間常數(shù)Ti
比例增益P確定后,設(shè)定一個(gè)較大的積分時(shí)間常數(shù)Ti的初值,然后逐漸減小Ti,直至系統(tǒng)出現(xiàn)振蕩,之后在反過(guò)來(lái),逐漸加大Ti,直至系統(tǒng)振蕩消失。記錄
此時(shí)的Ti,設(shè)定PID的積分時(shí)間常數(shù)Ti為當(dāng)前值的150%~180%。積分時(shí)間常數(shù)Ti調(diào)試完成。
【解說(shuō)】
3、確定積分時(shí)間常數(shù)Td積分時(shí)間常數(shù)Td一般不用設(shè)定,為0即可。若要設(shè)定,與確定 P和Ti 的方法相同,取不振蕩時(shí)的30%。
【解說(shuō)】
【PID算法演示小軟件(綠色版)】
四、具體實(shí)踐
上面的程序代碼是整個(gè)PID控制的模板。具體的看你的系統(tǒng)需求。下面我講講倒立擺(還不知道倒立擺是什么的可以去網(wǎng)上了解下)的PID控制:
【單個(gè)傳感器實(shí)現(xiàn)倒立擺】
角度傳感器(精密電位器):我們知道一般的精密電位器就可以當(dāng)作傳感器來(lái)使用,電位器三個(gè)腳,其中一端接GND,一端接VCC,那么中間端作為電壓輸出,通過(guò)AD采樣既可以獲取擺轉(zhuǎn)過(guò)的角度位置。自然在擺的最高點(diǎn)就有一個(gè)角度值。為了獲得較好的控制周期,我們采用定時(shí)器中斷的方式,即在定時(shí)器中斷中進(jìn)行采樣和數(shù)據(jù)處理,并進(jìn)行電機(jī)控制(放心,STM32運(yùn)行速度足夠了)。這里取定時(shí)器三毫米中斷一次,注意,AD采樣的時(shí)間一定要小于定時(shí)器中斷時(shí)間,否則會(huì)出現(xiàn)時(shí)序錯(cuò)亂,可以在AD初始化中設(shè)定采樣周期,或者在中斷函數(shù)里面進(jìn)行適當(dāng)?shù)奶幚?,比如分三次采樣取平均值(這個(gè)需要設(shè)定更小的中斷時(shí)間,如一毫秒中斷一次,我就是這樣的做的)。定時(shí)器初始化和一些變量的定義我就沒(méi)貼代碼了,具體的代碼如下:
05if(TIM3->SR&0X0001){//溢出中斷06LED1 = ~LED1;07timercount++;08}09TIM3->SR &= ~(1<<0);//清除中斷標(biāo)志位10
11if(timercount == 1){12ang[0] = Get_Adc(ADC_CH1);13}14if(timercount == 2){15ang[1] = Get_Adc(ADC_CH1);16}17if(timercount == 3){18////////////angle PID///////////19ang[2] = Get_Adc(ADC_CH1);//采集AD值20angleLast = angle;//保存上一次的采樣角度值21angle = (ang[0]+ang[1]+ang[2])/3;//取三次采集的平均值22degreeLast = degree;//保存上一次的計(jì)算角度值23degree = calcAngle(angle);//獲取新的計(jì)算角度值24
25velocity = (angle - angleLast);//得到采樣角速度差值(微分值)26if(abs(angle-setPoint)<=4)//輸入值與反饋值差的絕對(duì)值 < 427error_p = 0;//p = 0