增量式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控制
- 51单片机温度控制程序12页
- 液晶显示DS18B20温度控制器(程序)9页
- 温度控制_源程序5页
- JD412__DS18B20温度检测控制(带完整程序)16页
- 温度控制_源程序14页
- 液晶显示DS18B20温度控制器(程序)17页
- 模糊PID控制算法在电动舵机控制中的应用4页
- 基于Smith算法的模糊PID控制器的设计2页
- Smith自适应模糊PID控制算法的研究及仿真3页
- 一阶惯性环节的模糊PID自整定控制算法的设计4页
- 单片机模糊PID自整定控制算法的实现及仿真4页
- 基于复合式同步控制策略和模糊PID控制算法的振动打桩机的智能控制器研究4页
- 增量式PID控制算法5页
- 增量式PID控制算法程序22页
- 51单片机PID算法程序(三)增量式PID控制算法19页
- 51单片机PID算法程序(三)增量式PID控制算法16页
- 增量式PID控制算法和HMI-3084实际系统控制条件下智能呼吸椅的研制与开发5页
- 增量式PID控制算法程序(汇编)14页


