?? pid.c
字號:
#include"stdio.h"
#include "math.h"
typedef struct PID
{
int SetPoint; // 設定目標 Desired Value
float Proportion; // 比例常數 Proportional Const
float Integral; // 積分常數 Integral Const
float Derivative; // 微分常數 Derivative Const
int LastError; // Error[1]
int PrevError; // Error[2]
int SumError; // 誤差累計值
} PID;
PID stPID;
int fOut=0;
stPID.Proportion = 1.5; // 設置PID比例值
stPID.Integral = 0.5; // 設置PID積分值
stPID.Derivative = 0.0; // 設置PID微分值
//具體要調用的:
float PIDCalc( PID *pp, int NextPoint )
{ int dError, Error;
Error = pp->SetPoint*10 - NextPoint; // 偏差
pp->SumError += Error; // 積分
dError = pp->LastError - pp->PrevError; // 當前微分
pp->PrevError = pp->LastError;
pp->LastError = Error;
return (pp->Proportion * Error // 比例項
+ pp->Integral * pp->SumError // 積分項
+ pp->Derivative * dError // 微分項
);
}
void active(int fOut)
{ if(fOut<=0)
{ turn_off_relay(); //溫度高于設定值,關閉電爐
turn_off_timerB(); //停止計時
}
else
{ if (fOut>30*stPID.Proportion) //溫度低于設定值2攝氏度
turn_on_relay(); //開電爐加熱
else
{ turn_on_relay();
SP_INT_TIMEB(); } //初始化定時器,開始定時加熱
}
}
main()
{ fOut = PIDCalc ( &stPID,(int)(fT*10) ); // PID計算
active();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -