增量式pid和位置式PID參數整定過程對比


//增量式PID
float IncPIDCalc(PID_Typedef* PIDx,float SetValue,float MeaValue)//err»ý·Ö·ÖÀë³£Êý
{
	
	PIDx->Error = SetValue - MeaValue;

	PIDx->PWM_Inc = (PIDx->P * (PIDx->Error - PIDx->PreError)) \
			+ (PIDx->I * PIDx->Error) \
			+ (PIDx->D * ((PIDx->Error - PIDx->PreError) - (PIDx->PreError - PIDx->PrePreError)));
	PIDx->PrePreError = PIDx->PreError;
	PIDx->PreError = PIDx->Error;
	
	return PIDx->PWM_Inc ;
}
//位置式PID
float LocPIDCalc(PID_Typedef* PIDx,float SetValue,float MeaValue) { u8 Index=1; PIDx->Error = SetValue - MeaValue; Intergral_Error+=PIDx->Error; if(abs(PIDx->Error)>250)//積分分離 { Index=0; } else{ Index=1; } PIDx->PWM_Inc = (PIDx->P * PIDx->Error) \ + (Index * PIDx->I * Intergral_Error) \ + (PIDx->D * (PIDx->Error - PIDx->PreError)); PIDx->PrePreError = PIDx->PreError; PIDx->PreError = PIDx->Error; return PIDx->PWM_Inc ; }

  

首先先要明確,增量式pid和位置式pid本質是一樣的,本次增量式pid的輸出是由本次位置式pid的輸出減去上次位置式的輸出得到的。對比一下

位置式:u(k) =Kp*e(k)+Ki*∑e(k)+Kd[e(k)-e(k-1)]

增量式:Δu(k) =Kp[e(k)-e(k-1)]+Ki*e(k)+Kd[e(k)-2e(k-1)+e(k-2)]

可以看出增量式的KP和位置式的kd一樣,增量式的ki和位置式的kp一樣。所以對於增量式的參數整定,應該先整定KI,它反映了響應的速度,再整定KP,它反映了對超調量的限制,也就是緩減增量式KI參數過大時候的抖動

位置式PID:

比例項只考慮現在有沒有偏差,現在有偏差就開始控制,現在偏差越大,控制效果越明顯。

積分項根據歷史數據輸出控制信號,如果歷史總體超標就要減小輸出信號,如果歷史不達標那要大量輸出控制信號

微分項只關注偏差有沒有變化趨勢,偏差有了變化趨勢才開始控制(而不是偏差存不存在),即偏差的變化率。

增量式PID:Δu(k) =Kp[e(k)-e(k-1)] + Ki*e(k) + Kd[e(k)-2e(k-1)+e(k-2)]

Kp項是誤差變化率

Ki項是誤差,

Kd項是變化率的變化率 : e(k)-2e(k-1)+e(k-2)= [e(k)-e(k-1)] - [e(k-1)-e(k-2)]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM