一种C语言PID算法

struct _pid{
    float SetSpeed;            //定义设定值
    float ActualSpeed;        //定义实际值
    float err;                //定义偏差值
    float err_next;            //定义上一个偏差值
    float err_last;            //定义最上前的偏差值
    float Kp,Ki,Kd;            //定义比例、积分、微分系数
};
struct _pid pid;

void PID_init(void)
{
    pid.SetSpeed=0.0;
    pid.ActualSpeed=0.0;
    pid.err=0.0;
    pid.err_last=0.0;
    pid.err_next=0.0;
    pid.Kp=0.25;
    pid.Ki=0.02;
    pid.Kd=0.1;		//根据系统调整参数
}

float PID_realize(float speed)
{
	float freq = 0;
    pid.ActualSpeed=speed;
    pid.err=pid.ActualSpeed-pid.SetSpeed;
	pid.err_last+=pid.err;	//用来计算累积误差
    
	freq = pid.Kp*pid.err + pid.Ki*(pid.err_last) + pid.Kd*(pid.err-pid.err_next);
	pid.err_next=pid.err;	//用来计算误差增量
    return freq;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值