[STM32] 增量式PI算法 控制电机 程序怎么写

[复制链接]
2441|0
 楼主| llcg1314 发表于 2014-9-18 22:59 | 显示全部楼层 |阅读模式
增量式PI算法 控制电机   参数设置部分这样的 主程序应该怎么写 不需要PMW  只需通过PI得到值直接控制电机 Kp  Ki 我都有值
typedef struct PID  
{  
int SetPoint; //设定目标 Desired Value  
long SumError; //误差累计   
double Proportion; //比例常数 Proportional Const  
double Integral; //积分常数 Integral Const  
double Derivative; //微分常数 Derivative Const  
int LastError; //Error[-1]  
int PrevError; //Error[-2]
} PID;
static PID sPID;   
static PID *sptr = &sPID;   
/*============================  Initialize PID Structure  PID参数初始化  ========================*/  
void IncPIDInit(void)
{
sptr->SumError = 0;  
sptr->LastError = 0; //Error[-1]  
sptr->PrevError = 0; //Error[-2]   
sptr->Proportion = 0; //比例常数 Proportional Const  
sptr->Integral = 0; //积分常数Integral Const   
sptr->Derivative = 0; //微分常数 Derivative Const  
sptr->SetPoint = 0;  
}
/*========================================  增量式PID计算部分   ===================================*/  
int IncPIDCalc(int NextPoint)  
{   
register 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);  
}


您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

37

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部