QINPEILONG 发表于 2016-6-15 10:20:48

请 大师解决MPU6050 左转右转 算法灵敏度问题 重谢

我现在做了一个汽车转向灯 用6050 感觉转向时不灵敏。必须猛打方向才有信号。请大师帮助重谢
void Gesture_Update(void)
{                                                           
        static uint8_t no_new_direction_tick =0;

        AccGyroStructure.acc_x =GetData(ACCEL_XOUT_H) +4096;        //显示X轴加速度
        AccGyroStructure.acc_y =GetData(ACCEL_YOUT_H) +4096;        //显示Y轴加速度
        AccGyroStructure.acc_z =GetData(ACCEL_ZOUT_H) +4096;        //显示Z轴加速度
        AccGyroStructure.gyr_x =GetData(GYRO_XOUT_H) +4096;        //显示X轴角速度
        AccGyroStructure.gyr_y =GetData(GYRO_YOUT_H) +4096;        //显示Y轴角速度
        AccGyroStructure.gyr_z =GetData(GYRO_ZOUT_H) +4096;        //显示Z轴角速度       
        Uart_Send_String("\r\n ");
        if(AccGyroStructure.gyr_z >=0)
                sprintf(strBuffer," %.5d ",AccGyroStructure.gyr_z);
        else
                sprintf(strBuffer,"%.5d ",AccGyroStructure.gyr_z);
        Uart_Send_String(strBuffer);

        //Accelarate_Gyro_XYZ_Filter();                                        //水平放置时gyro的offset约为 -56
          
        if(AccGyroStructure.gyr_z > SENSOR_OFFSET_MAX +AccGyroStructure.gyr_z_offset)          // 左转时数据变大
        {
      no_new_direction_tick =0;
          //if(SYSTEM_MODE_STABLE ==SystemStruture.curMode )
          {
              SystemStruture.curMode =SYSTEM_MODE_TURN;                       
                  SystemStruture.curOption =SYSTEM_TURN_RIGHT;                 
          }
        }
        else if(AccGyroStructure.gyr_z < AccGyroStructure.gyr_z_offset -SENSOR_OFFSET_MIN) // 右转时数据变小
        {   
      no_new_direction_tick =0;
      //if(SYSTEM_MODE_STABLE ==SystemStruture.curMode )
          {
              SystemStruture.curMode =SYSTEM_MODE_TURN;
                    SystemStruture.curOption =SYSTEM_TURN_LEFT;
          }                         
        }
        else
        {
      no_new_direction_tick ++;
      if(no_new_direction_tick >0)
      {
      no_new_direction_tick =0;
              SystemStruture.curMode =SYSTEM_MODE_STABLE;
                  SystemStruture.curOption =SYSTEM_NONE_OPTION;       
      }
        }
//        if(AccGyroStructure.gyr_x >=0)
//                sprintf(strBuffer," %.5d ",AccGyroStructure.gyr_x);
//        else
//                sprintf(strBuffer,"%.5d ",AccGyroStructure.gyr_x);
//        Uart_Send_String(strBuffer);
//        if(AccGyroStructure.gyr_y >=0)
//                sprintf(strBuffer," %.5d ",AccGyroStructure.gyr_y);
//        else
//                sprintf(strBuffer,"%.5d ",AccGyroStructure.gyr_y);
//        Uart_Send_String(strBuffer);
        if(AccGyroStructure.gyr_z >=0)
                sprintf(strBuffer," %.5d ",AccGyroStructure.gyr_z);
        else
                sprintf(strBuffer,"%.5d ",AccGyroStructure.gyr_z);
        Uart_Send_String(strBuffer);
        if(AccGyroStructure.gyr_z_offset >=0)
                sprintf(strBuffer," %.5d ",AccGyroStructure.gyr_z_offset);
        else
                sprintf(strBuffer,"%.5d ",AccGyroStructure.gyr_z_offset);
        Uart_Send_String(strBuffer);

AilikeZ 发表于 2016-6-15 12:42:11

用dmp吧,一个库
库函数及代码:https://github.com/jrowberg/i2cdevlib/tree/master/Arduino/MPU6050

直接运行范例程序:i2cdevlib / Arduino / MPU6050 / Examples / MPU6050_DMP6 /
                           (路径:https://github.com/jrowberg/i2cdevlib/tree/master/Arduino/MPU6050/Examples/MPU6050_DMP6      )

AilikeZ 发表于 2016-6-15 12:43:19

开机之后需要一段时间自动校正

QINPEILONG 发表于 2016-6-15 13:45:36

大师你的 QQ 号多少,我的279641518

QINPEILONG 发表于 2016-6-15 17:04:32

这只是模拟啊,我装到车上还是还是反应慢:dizzy:

1981818001 发表于 2016-6-17 11:24:07

转角太小,装方向盘才有用。

QINPEILONG 发表于 2016-6-17 22:30:19

1981818001 发表于 2016-6-17 11:24 static/image/common/back.gif
转角太小,装方向盘才有用。

什么意思
我那个 往右转时灵敏度高,挺好。就是往右转时反应迟钝
页: [1]
查看完整版本: 请 大师解决MPU6050 左转右转 算法灵敏度问题 重谢