初级会员

- 积分
- 85
- 金钱
- 85
- 注册时间
- 2018-4-7
- 在线时间
- 29 小时
|
5金钱
[mw_shl_code=c,true]struct _pid
{
float SetAngle; //定义给定值 本程序为角度
float ActualAngle; //定义实际测量角度值
float err; //偏差值
float err_last; //上一时刻偏差值
float Kp,Ki,Kd; //比例、积分、微分系数
int vSpeed; //计算占空比值
float integral; //定义积分值
}pid;
//*********************************************************
//PID算法
//PID参数初始化设置
//*********************************************************
void PID_init(void)
{
pid.SetAngle=0.0;
pid.ActualAngle=0.0;
pid.err=0.0;
pid.err_last=0.0;
pid.vSpeed=0.0;
pid.integral=0.0;
pid.Kp=1;
pid.Ki=0;
pid.Kd=0;
}
//PID计算电机值
//输出参数:设置角度 实际角度
//输出参数:电机占空比值
int PID_realize(float SAngle,float AAngle)
{
pid.SetAngle=SAngle; //0
pid.ActualAngle=AAngle; //pitch 30
pid.err=pid.ActualAngle-pid.SetAngle; //30
pid.integral+=pid.err; //30
pid.vSpeed=pid.Kp*pid.err+pid.Ki*pid.integral+pid.Kd*(pid.err-pid.err_last); //30
pid.err_last=pid.err; //30
return pid.vSpeed;
}[/mw_shl_code]
|
|