新手213123 发表于 2015-6-10 20:57:29

平衡小车一边倒,求问!

如题,我做的小车目前的主要是先稳住,所以用的是角度和角速度闭环。用了一个pid,P用的是角度算的,D用的是角速度。现在的问题是,小车一开始会稳一会,几秒钟吧,调整得挺好, 然后瞬间就往一个方向倒下。求问这是什么问题?应该如何解决。

Hackerpro 发表于 2015-6-10 21:37:01

放上程序看看吧

新手213123 发表于 2015-6-10 22:59:26

void main(void)
{   
    InitCLK();                     //设置系统时钟源   
    InitUart();                      //串口初始化
    MPU6050_Initialize();
    InitT1();                        //设置T1相应的寄存器
    InitInterrupt();
   
    ENGB_forward;       //橘色灯亮
    while(1)
    {   
    }
}
//定时器T1中断处理函数
#pragma vector = T1_VECTOR      
__interrupt void T1_ISR(void)
{
    EA = 0;
    MPU6050_GetRawAccelGyro(&ax, &ay, &az, &gx, &gy, &gz);
    gx_a = gx/65.5;
    gy_a = gy/65.5;
    gz_a = gz/65.5;
    ax_g = ax/8192.0;
    ay_g = ay/8192.0;
    az_g = az/8192.0;
    IMUupdate(gx_a*0.0174533,gy_a*0.0174533,gz_a*0.0174533,ax_g,ay_g,az_g);//0.174533为PI/180 目的是将角度转弧度
    PID_angle();                        //角度算PID
    Change_duty(PWM_angle,0);
    EA = 1;
}
/****************************************************************************
* PID_angle
****************************************************************************/
void PID_angle()//位置式
{
    error_0 = Pitch - angle_base;
    if(error_0 < 0)
    {
      ENGB_forward;
      i_a_p = 0;
      i_a_n += error_0; if(i_a_n > intergral_limit_H){i_a_n = intergral_limit_H;}   
      p_a = error_0;      
      d_a = gy_a;
      PWM_angle = (int)(p_a*Kp_a + (i_a_n+i_a_p)*Ki_a + d_a*Kd_a) - PWM_limit_L;
    }
    else if(error_0 > 0)
    {
      ENGB_backward;
      i_a_n = 0;
      i_a_p += error_0; if(i_a_p > intergral_limit_H){i_a_p = intergral_limit_H;}
      p_a = error_0;      
      d_a = gy_a;
      PWM_angle = (int)(p_a*Kp_a + (i_a_n+i_a_p)*Ki_a + d_a*Kd_a) + PWM_limit_L;
    }   
   error_1 = error_0;
}

新手213123 发表于 2015-6-10 23:01:41

Hackerpro 发表于 2015-6-10 21:37 static/image/common/back.gif
放上程序看看吧

发上来了,麻烦给看一下吧~我在运行的时候看了下角度的输出,然后发现,过一段时间,我测量的角度会有一个跳边,比如说+10度的时候,它显示为0度,然后慢慢再回来。估计是这个原因导致我的小车会倒。我用的是捷联算法(IMUupdate),感觉挺奇怪的这个现象。

新手213123 发表于 2015-6-10 23:01:59

Hackerpro 发表于 2015-6-10 21:37 static/image/common/back.gif
放上程序看看吧

发上来了,麻烦给看一下吧~我在运行的时候看了下角度的输出,然后发现,过一段时间,我测量的角度会有一个跳边,比如说+10度的时候,它显示为0度,然后慢慢再回来。估计是这个原因导致我的小车会倒。我用的是捷联算法(IMUupdate),感觉挺奇怪的这个现象。

suoma 发表于 2015-6-10 23:55:49

陀螺仪或地磁传感器

血阳 发表于 2015-6-18 22:02:03

我是来围观大神解答的:o
页: [1]
查看完整版本: 平衡小车一边倒,求问!