打印
[STM32]

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

[复制链接]
2207|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

粉丝