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;
}
位置式PID算法的C语言代码
最新推荐文章于 2024-07-06 15:57:10 发布