增量式PID控制C程序_详细注释

PID控制C程序_详细注释


// 周茗隆

typedef struct PID
{
int SetPoint; //设定目标 Desired Value
double Proportion; //比例常数 Proportional Const
double Integral; //积分常数 Integral Const
double Derivative; //微分常数 Derivative Const
int LastError; //Error[-1]
int PrevError; //Error[-2]
} PID;
//*****************************************************
//定义相关宏
//*****************************************************
#define P_DATA 100
#define I_DATA 0.6
#define D_DATA 1

#define HAVE_NEW_VELOCITY 0X01
//*****************************************************
//声明 PID 实体
//*****************************************************
static PID sPID;
static PID *sptr = &sPID;
//*****************************************************
//PID 参数初始化
//*****************************************************
void IncPIDInit(void)
{
sptr->LastError = 0; //Error[-1]
sptr->PrevError = 0; //Error[-2]
sptr->Proportion = P_DATA; //比例常数 Proportional Const
sptr->Integral = I_DATA; //积分常数 Integral Const
sptr->Derivative = D_DATA; //微分常数 Derivative Const
sptr->SetPoint =100;
目标是 100
}

int IncPIDCalc(int NextPoint)
{
int iError, iIncpid; //当前误差
iError = sptr->SetPoint - NextPoint; //增量计算
iIncpid = sptr->Proportion * iError //E[k]项
- sptr->Integral * sptr->LastError //E[k-1]项
+ sptr->Derivative * sptr->PrevError; //E[k-2]项
sptr->PrevError = sptr->LastError; //存储误差,用于下次计算
sptr->LastError = iError;
return(iIncpid); //返回增量值
}
Int g_CurrentVelocity;
Int g_Flag;
void main(void)
{
DisableInterrupt//上电关中断,防止采样PID
InitMCu();
IncPIDInit();//PID的参数初始化, 以设定工作需要的P,I,D参数.
g_CurrentVelocity=0; //全局变量也初始化
g_Flag=0; //全局变量也初始化
EnableInterrupt;//打开定时器中断,这样才能在定时器中不断的采集小车的速度.
While(1)
{

if (g_Flag& HAVE_NEW_VELOCITY)//g_Flag& HAVE_NEW_VELOCITY==1,说明新的采样,已经有了,要多新的采样速度,进行PID运算
{
PWMOUT+= IncPIDCalc(CurrentVelocity);//根据采样的当前速度,进行pid运算,计算pwm脉冲的增量数值,然后复制给PWMOUT以调节速度
g_Flag&=~ HAVE_NEW_VELOCITY;//设置完新的速度,将标志位复位,防止没有采样新的速度,再次进入if中,重复进行PID运算.
}
}
}
Interrrupt TIME void
{
CurrentVelocity =GetCurrentVelocity;//定时器中断,采样速度,复制给CurrentVelocity
g_Flag|= HAVE_NEW_VELOCITY;//每次进入中断,将标志位置一
}

你可能喜欢

  • C语言PID算法
  • 温度控制程序
  • 模糊PID控制算法
  • 增量式PID控制算法
  • Excel使用技巧大全(超
  • 神经元自适应PID控制

增量式PID控制C程序_详细注释相关文档

最新文档

返回顶部