中级会员
 
- 积分
- 433
- 金钱
- 433
- 注册时间
- 2013-4-10
- 在线时间
- 83 小时
|
如题,请教PID算法的问题
//数据结构
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;
//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);
}
如上代码:int IncPIDCalc(int NextPoint) 返回值的范围是多少,如果我要设置输出的上下限应该怎么处理呢,假设输出范围在【-1000-1000】。
另外:输入的参数是反馈的量,对这个参数有什么要求,比如说范围应该在什么区间。
我的应用是恒张力控制,控制目标是伺服电机的转速,反馈的量是张力值。
先谢谢大家了。
|
|