PID調(diào)節(jié)C51程序(1)
關(guān)于PID
比例調(diào)節(jié)作用:是按比例反應(yīng)系統(tǒng)的偏差,系統(tǒng)一旦出現(xiàn)了偏差,比例調(diào)節(jié)立即產(chǎn)生調(diào)節(jié)作用用以減少偏差。比例作用大,可以加快調(diào)節(jié),減少誤差,但是過大的比例,使系統(tǒng)的穩(wěn)定性下降,甚至造成系統(tǒng)的不穩(wěn)定。
積分調(diào)節(jié)作用:是使系統(tǒng)消除穩(wěn)態(tài)誤差,提高無差度。因為有誤差,積分調(diào)節(jié)就進行,直至無差,積分調(diào)節(jié)停止,積分調(diào)節(jié)輸出一常值。積分作用的強弱取決與積分時間常數(shù)Ti,Ti越小,積分作用就越強。反之Ti大則積分作用弱,加入積分調(diào)節(jié)可使系統(tǒng)穩(wěn)定性下降,動態(tài)響應(yīng)變慢。積分作用常與另兩種調(diào)節(jié)規(guī)律結(jié)合,組成PI調(diào)節(jié)器或PID調(diào)節(jié)器。
微分調(diào)節(jié)作用,微分作用反映系統(tǒng)偏差信號的變化率,具有預(yù)見性,能預(yù)見偏差變化的趨勢,因此能產(chǎn)生超前的控制作用,在偏差還沒有形成之前,已被微分調(diào)節(jié)作用消除。因此,可以改善系統(tǒng)的動態(tài)性能。在微分時間選擇合適情況下,可以減少超調(diào),減少調(diào)節(jié)時間。微分作用對噪聲干擾有放大作用,因此過強的加微分調(diào)節(jié),對系統(tǒng)抗干擾不利。此外,微分反應(yīng)的是變化率,而當輸入沒有變化時,微分作用輸出為零。微分作用不能單獨使用,需要與另外兩種調(diào)節(jié)規(guī)律相結(jié)合,組成PD或PID控制器。
//PID參數(shù)設(shè)定常數(shù)(放大2倍)
#define Kp 15 // 實際7.5
#define Ki 3 // 實際1.5
#define Kd 25 // 實際14.5
void adcpro()
{
signed int tempP,tempI,tempD,TempOut;
// PID
tempP = Tparam[ path *2 ] - TpreTeat[path]; // 計算 e(t)..基本偏差
tempSigmaEt[path] += tempP; // sigma e(t)..累計偏差積分項
if (tempSigmaEt[path]>60) tempSigmaEt[path]= 60;// 過度積分的極限處理
if (tempSigmaEt[path]<-60) tempSigmaEt[path]= -60;
tempD = (tempP - tempEt[path]) * Kd; // Kd * (e(t)-e(t-1))微分項
tempEt[path] = tempP; // 紀錄e(t)給下一次用e(t-1)比例項
tempI = tempSigmaEt[path] * Ki; // Ki * sigma e(t)積分部分
TempOut = (tempP * Kp + tempI + tempD)/2; // 綜合輸出函數(shù)
if (tempP>25)
{
TempOut = 200;
tempSigmaEt[path]=0;
}
else
{
if (TempOut<0)
{
TempOut = 0;
}
else
{
if(TempOut>200)
{
TempOut=200;
}
}
}
if (tempP<-2)
{
TempOut = 0;
}
hottimer_set[path] = TempOut;
if ( Tparam[ path *2 ] < 50 )
{
Tparam[ 8 ] &= ~( 0x11 << path ); //如果不需要加溫則清除出錯標志
};
}