laylovesb1314 发表于 2014-7-5 11:38:15

帮看看位置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占空比
        }               
}

laylovesb1314 发表于 2014-7-8 16:10:36

好吧~!没人回复!我自己沙发!=   =~!
页: [1]
查看完整版本: 帮看看位置PID的算法对了嘛!