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

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值