|
部分源程序
typedef struct PID
{
intSetPoint; //設(shè)定目標(biāo) Desired Value
doubleProportion; //比例常數(shù) Proportional Const
doubleIntegral; //積分常數(shù) Integral Const
doubleDerivative; //微分常數(shù) Derivative Const
intLastError; //Error[-1]
intPrevError; //Error[-2]
} PID;
//*****************************************************
//定義相關(guān)宏
//*****************************************************
#define P_DATA 100
#define I_DATA 0.6
#define D_DATA 1
#define HAVE_NEW_VELOCITY 0X01
//*****************************************************
//聲明PID實(shí)體
//*****************************************************
static PID sPID;
static PID *sptr = &sPID;
//*****************************************************
//PID參數(shù)初始化
//*****************************************************
void IncPIDInit(void)
{
sptr->LastError = 0; //Error[-1]
sptr->PrevError = 0; //Error[-2]
sptr->Proportion = P_DATA; //比例常數(shù) ProportionalConst
sptr->Integral = I_DATA; //積分常數(shù)Integral Const
sptr->Derivative = D_DATA; //微分常數(shù) DerivativeConst
sptr->SetPoint =100; 目標(biāo)是100
}
//*****************************************************
//增量式PID控制設(shè)計(jì)
//*****************************************************
int IncPIDCalc(int NextPoint)
{
int iError, iIncpid;//當(dāng)前誤差
iError =sptr->SetPoint - NextPoint; //增量計(jì)算
iIncpid =sptr->Proportion * iError //E[k]項(xiàng)
- sptr->Integral * sptr->LastError//E[k-1]項(xiàng)
+ sptr->Derivative * sptr->PrevError;//E[k-2]項(xiàng)
sptr->PrevError =sptr->LastError; //存儲(chǔ)誤差,用于下次計(jì)算
sptr->LastError = iError;
return(iIncpid); //返回增量值
}
Int g_CurrentVelocity;
Int g_Flag;
先跟大家交代下為什么要用PID。。
1由于外界原因,小車的實(shí)際速度有時(shí)不穩(wěn)定
2要讓小車以最快的時(shí)間達(dá)達(dá)到既定的目標(biāo)速度
3速度控制系統(tǒng)是閉環(huán),才能滿足整個(gè)系統(tǒng)的穩(wěn)定要求,必竟速度是系統(tǒng)參數(shù)之一
而這份文檔是一份講述關(guān)于PID的算法,大家知道,PID算法的講述其實(shí)網(wǎng)上你去找的話
會(huì)有很多資源的,而臥現(xiàn)在共享的這一份與網(wǎng)上其他資源略有不同,這份是詳細(xì)闡述了
飛思卡爾單片機(jī)的PID控制的,并且里面最后一段還有標(biāo)注相當(dāng)清晰的代碼,大家看完以
后肯定會(huì)有收獲的,因?yàn)榱畲蠹易钔纯嗟氖蔷W(wǎng)上的資源都沒(méi)有以代碼的形式進(jìn)行闡述,而是純粹的理論。
另外呢,PID算法的應(yīng)用現(xiàn)在已經(jīng)是相當(dāng)廣泛了,對(duì)于車子的穩(wěn)定性加強(qiáng)應(yīng)該說(shuō)是首選的算法,而且呢,
這次的電磁組大家看過(guò)資料的話應(yīng)該明白,有超過(guò)5處需要用到PID算法軟件控制。。這就對(duì)大家提出了更高的要求。
所以,特地為大家奉上這個(gè)完美資源。希望大家能給點(diǎn)鼓勵(lì),畢竟我好不容易才找到的,肯定已經(jīng)有一部分人看過(guò)
類似的資源了,但是沒(méi)有看到有人完全把這個(gè)資源拿出來(lái)的,,嘿嘿,大家懂得
但是如果要徹頭徹尾地弄PID,建議多調(diào)試,寫幾個(gè)仿真程序
這是劉金錕先生的《先進(jìn)PID控制及其MATLAB仿真.pdf》,方便大家實(shí)際演練PID
|
|