您的位置:首页 > 编程语言 > C语言/C++

位置式PID算法的C语言代码

2015-08-05 01:13 274 查看
typedef struct{
float limit;	//输出限幅
float target;	//目标量
float feedback;	//反馈量
float Kp;
float Ki;
float Kd;
float eSum;
float e0;		//当前误差
float e1;		//上一次误差
}PIDType;

#define max(a, b)			(a>b? a:b)
#define min(a, b)			(a<b? a:b)
#define range(x, a, b)		(min(max(x, a), b))

float pid_pos_update(PIDType *p)
{
float pe, ie, de;
float out=0;

//计算当前误差
p->e0 = p->target - p->feedback;

//误差积分
p->eSum += p->e0;

//误差微分
de = p->e0 - p->e1;

pe = p->e0;
ie = p->eSum;

p->e1 = p->e0;

out = pe*(p->Kp) + ie*(p->Ki) + de*(p->Kd);
//输出限幅
out = range(out, -p->limit, p->limit);
return out;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: