« 系统程序的监控—看门狗(WDT)ASCII码字符对照表 »

外置式与增量式PID模板程序

分类: 单片机指令和编程 发布: admin 浏览: 日期: 2017年12月28日

PID控制器(比例-积分-微分控制器)是一个在工业控制应用中常见的反馈回路部件,由比例单元P、积分单元I和微分单元D组成,本例给出了外置式与增量式PID模板程序。

外置式PID模板

#define MuBiaoCS 0 //目标常数

#define CHang_aCS 0 //比例常数

#define CHang_bCS 0 //积分常数

#define CHang_cCS 0 //微分常数

/*******************************************************************************************/

struct P_I_D { int MuBiao; //设定目标

Desired Value double CHang_a; //比例常数

Proportional Const double CHang_b; //积分常数

Integral Const double CHang_c; //微分常数

Derivative Const int Error1; //Error[-1]int Error2; //Error[-2]}Pidn;

struct P_I_D *PID=&Pidn;

/********************************************************************************************/

void Pidinit(void) //pid初始化

{

PID->MuBiao=MuBiaoCS;

PID->CHang_a=CHang_aCS;

PID->CHang_b=CHang_bCS;

PID->CHang_c=CHang_cCS;

PID->Error1=0; PID->Error2=0;

}

int PID_WZ(int SRuu) //位置式

PID {

int Error0,SCuu;

Error0 = PID->MuBiao - SRuu;

PID->Error1+=Error0;

SCuu = PID->CHang_a*Error0 //比例项

+ PID->CHang_b*PID->Error1 //积分项

+ PID->CHang_c*(Error0-PID->Error2);//微分项

PID->Error2=Error0;

return SCuu;

}

void main(void) { Pidinit(); }

增量式PID模板

#define MuBiaoCS 0 //目标常数

#define CHang_aCS 0 //比例常数

#define CHang_bCS 0 //积分常数

#define CHang_cCS 0 //微分常数

/*******************************************************************************************/

struct P_I_D { int MuBiao; //设定目标

Desired Value double CHang_a; //比例常数

Proportional Const double CHang_b; //积分常数

Integral Const double CHang_c; //微分常数

Derivative Const int Error1; //Error[-1] int Error2; //Error[-2] }Pidn; struct P_I_D *PID=&Pidn;

/********************************************************************************************/

void Pidinit(void) //pid初始化 { PID->MuBiao=MuBiaoCS; PID->CHang_a=CHang_aCS; PID->CHang_b=CHang_bCS; PID->CHang_c=CHang_cCS; PID->Error1=0; PID->Error2=0; }

int PID_WC(int SRuu) //增量式

PID {

int Error0,SCuu; Error0 = PID->MuBiao - SRuu; //偏差

SCuu = PID->CHang_a*Error0 //Error项

- PID->CHang_b*PID->Error1 //Error1项

+ PID->CHang_c*PID->Error2; //Error2项

PID->Error2=PID->Error1; //将上次偏差存

PID->Error2

PID->Error1=Error0; //将这次偏差存

PID->Error1 return SCuu;

}

void main(void) { Pidinit(); }

相关文章:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-Blog 1.8 Walle Build 100427

Copyright 文雅单片机. Some Rights Reserved.