增量C语言,PID增量算法 c语言

#include

struct _pid{

float SetSpeed;            //

float ActualSpeed;        //

float err;                //

float err_next;            //

float err_last;            //

float Kp,Ki,Kd;

float last_speed;

}pid;

void PID_init(void){                                         //?????????

pid.SetSpeed=3.0;

pid.ActualSpeed=0.0;

//pid.last_Speed=0.0;

pid.err=0.0;

pid.err_next=0.0;

pid.err_last=0.0;

pid.Kp=0.2;

pid.Ki=0.15;

pid.Kd=0.2;

pid.last_speed=0.0;

}

float absu(float err)

{

if(err<0)

err=0-err;

return err;

}

void PID_realize(float speed)

{

float inSpeed=0;int index;

int i=0;

pid.SetSpeed=speed;

pid.err=pid.SetSpeed-pid.ActualSpeed;

while(pid.err>0.0001)

{

i++;

pid.err=pid.SetSpeed-pid.ActualSpeed;

if(absu(pid.err)>pid.SetSpeed-0.01)

{

index=0;

}

else

{

index=1;}

inSpeed = pid.Kp*(pid.err-pid.err_next)+index*pid.Ki*pid.err+pid.Kd*(pid.err-2*pid.err_next+pid.err_last);

pid.ActualSpeed+=inSpeed;

pid.err_last=pid.err_next;

pid.err_next=pid.err;

printf("no:%d,%f,%f\n",i,pid.ActualSpeed,inSpeed);

}

}

main()

{

PID_init();

PID_realize(200);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值