帮看看位置PID的算法对了嘛!
这是我平衡车的PID算法,调了很久都没出来,是不是我算法不对啊?麻烦帮看看这样写对不对?公式里的GY是陀螺仪输出卡尔曼滤波后的角度值
e0 是当前偏差量
e1是偏差累计量
卡尔曼滤波我调到了相对有一点滞后,不知道是哪里的问题,请各位前辈指教下
陀螺仪是MPU6050,我的程序周期大概是29MS这个速度可以了嘛?
想问下你们得PID值一般是放到多少左右?
static floatKp =1; //PID参数震荡速度
static floatKi =0.0; //PID参数积分
static floatKd =0.0; //PID参数微分调节震荡速度
static floatr = 0.0; //PID参数设定值
void PWM_out()
{
/******************PID计算*********************************/
e0=r-rt; //当前偏差信号
e1+=e0;
out=Kp*e0+Ki*e1-Kd*gy; //位置式PID
if (out>255)
{out=255;
}
if (out<-255)
{out=-255;
}
/*********************PWM******************************/
if(out>0) ////后退
{
PORTB=0xfd;
OCR1AH=0x00;
OCR1AL=0x00;// OC1A输出1/2占空比
OCR1BH=0x00;
OCR1BL=(out);// OC1B输出1/2占空比
}
if(out<0) //前进
{
PORTB=0xfe;
OCR1AH=0x00;
OCR1AL=(-out);// OC1A输出1/2占空比
OCR1BH=0x00;
OCR1BL=0x00;// OC1B输出1/2占空比
}
} 好吧~!没人回复!我自己沙发!= =~!
页:
[1]