搜索
bottom↓
回复: 229

原码放送,MPU6050的DMP用STM32成功的实现,内有移植问题说明

  [复制链接]

出0入0汤圆

发表于 2013-6-14 10:14:58 | 显示全部楼层 |阅读模式
本帖最后由 _spetrel 于 2013-6-14 10:23 编辑

之前用匿名四轴的代码称植过来发现求出的Pitch与Roll一直不断的增加,不知道什么原因,静止放着也不行。
看了不少四元数的资料,能看懂,但是结合数据融合又糊了。加上卡尔漫数据也就那样,可能是我处理得有问题。偶然翻帖看到了DMP,于是打算移植过来看看。
花了两三的时间总算成功了。现在把一些移植过程中的问题给大家分享一下,顺带的附上源码。

I2C我用的是匿名四轴的,能用。但是要注意,官方的那个编程方式很像Linux,应该说用的是GNU C。在Linux下,调用一个函数,成功的时候返回的是0,异常时返回的是-1,-2等。但是一般人写的驱动成功都用1表示,失败用0表示。所以这点要注意一下。
/////////////////////////////////////////////////////////////////////////////////
int8_t i2cwrite(uint8_t addr, uint8_t reg, uint8_t len, uint8_t * data)
{
        if(i2cWriteBuffer(addr,reg,len,data))
        {
                return TRUE;//0
        }
        else
        {
                return FALSE;//-1
        }
        //return FALSE;
}
int8_t i2cread(uint8_t addr, uint8_t reg, uint8_t len, uint8_t *buf)
{
        if(i2cRead(addr,reg,len,buf))
        {
                return TRUE;//0
        }
        else
        {
                return FALSE;//-1
        }
        //return FALSE;
}
//////////////////////////////////////////////////////////////////////////////////

const struct hw_s hw = {
    .addr           = 0x68,
    .max_fifo       = 1024,
    .num_reg        = 118,
    .temp_sens      = 340,
    .temp_offset    = -521,
    .bank_size      = 256
#if defined AK89xx_SECONDARY
    ,.compass_fsr    = AK89xx_FSR
#endif
};
上面这块是GNU C 的初始化, 在MDK里面是不能用的,要改成下面的
const struct hw_s hw={
  0x68,         //addr
  1024,         //max_fifo
  118,         //num_reg
  340,         //temp_sens
  -521,         //temp_offset
  256         //bank_size
};

对了陀螺仪的状态初始化
static struct gyro_state_s st={
  &reg,
  &hw,
  {0},
  &test
};
这里的一块初始化放到mpu_init函数里面去了,这里可以不管,所以初始化为0

struct gyro_reg_s {
    unsigned char who_am_i;
    unsigned char rate_div;
    unsigned char lpf;
    unsigned char prod_id;
    unsigned char user_ctrl;
    unsigned char fifo_en;
    unsigned char gyro_cfg;
    unsigned char accel_cfg;

    //unsigned char accel_cfg2;

    //unsigned char lp_accel_odr;

    unsigned char motion_thr;
    unsigned char motion_dur;
    unsigned char fifo_count_h;
    unsigned char fifo_r_w;
    unsigned char raw_gyro;
    unsigned char raw_accel;
    unsigned char temp;
    unsigned char int_enable;
    unsigned char dmp_int_status;
    unsigned char int_status;

    //unsigned char accel_intel;
......
}这个结构体里面的那三个必须注释掉,不然你直接把标准GNU C的初始化改成标准C的,那么数据会出现偏移的,上面的三个在库里面没有初始化,你对着源码看看就知道。

#define i2c_write   i2cwrite
#define i2c_read    i2cread
#define delay_ms    delay_ms
#define get_ms      get_ms
这个是接口,其实上面的英文说得很清楚,之前我还很纠结这个get_ms到底怎么写,后来发现没用,可以对着源来430的代码看,这个get_ms就用了一次。

读出来的四元数数据是Q30的,就是放大2的30次方,做过定点数FFT的人应该很清楚怎么处理,你把读出来的数据除一下就行了。

还有一点是别忘记了IIC的初始化。。。。。。。。。。。这个错我犯了。。。。。。。。。。。。。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2013-6-14 11:18:13 | 显示全部楼层
请问有没有接中断,我刚下了烧了一下发现PE口的没有数据,修改成PB口的可以,然后出来的是
我自己的dmp的代码是遇到


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-6-14 11:24:41 | 显示全部楼层
本帖最后由 _spetrel 于 2013-6-14 11:25 编辑
windless 发表于 2013-6-14 11:18
请问有没有接中断,我刚下了烧了一下发现PE口的没有数据,修改成PB口的可以,然后出来的是
我自己的dmp的代 ...


你的问题我碰到过,我当时发现的问题是因为IIC总线没初始化,后来初始化后就解决了。我没有接中断。

出0入0汤圆

发表于 2013-6-14 11:32:33 | 显示全部楼层
我朋友中午用他的板子测试一下,下午看看,不过还是要谢谢你。我也准备测试完了发代码,可是最后一步dmp_read_fifo有问题,所以你看上面我的那个出来的数据是有问题的。

出0入0汤圆

发表于 2013-6-14 12:19:18 | 显示全部楼层
顶起,记下。

出0入0汤圆

发表于 2013-6-14 12:20:51 | 显示全部楼层
感谢无私的楼主

出0入85汤圆

发表于 2013-6-14 12:26:46 | 显示全部楼层
好人一生平安

出0入0汤圆

发表于 2013-6-14 12:29:26 | 显示全部楼层
支持原创。好人一生平安                                                                                                                                 

出0入0汤圆

发表于 2013-6-14 12:32:30 来自手机 | 显示全部楼层
好东西,谢谢分享!

出0入0汤圆

发表于 2013-6-14 12:34:56 | 显示全部楼层
支持楼主! 收藏了!!!

出0入0汤圆

发表于 2013-6-14 14:41:01 | 显示全部楼层
顶,楼主好人。

出0入0汤圆

发表于 2013-6-14 14:52:56 | 显示全部楼层
记号,支持楼主,刚买模块还没到

出0入0汤圆

发表于 2013-6-14 18:28:46 来自手机 | 显示全部楼层
大好人楼主!!!

出0入0汤圆

发表于 2013-6-14 18:47:00 | 显示全部楼层
顶楼主!!

出0入0汤圆

发表于 2013-6-14 23:32:56 | 显示全部楼层
此贴怎能不顶

出0入0汤圆

发表于 2013-6-14 23:42:40 | 显示全部楼层
楼主牛

出0入0汤圆

发表于 2013-6-14 23:59:20 来自手机 | 显示全部楼层
谢谢分享。。

出0入0汤圆

发表于 2013-6-15 00:01:23 | 显示全部楼层
楼主大牛啊啊         

出0入0汤圆

发表于 2013-6-15 06:31:43 | 显示全部楼层
int类型的函数,返回0成功,小于0失败
bool类型的函数,返回1成功,0失败
STM32是32位的机器,肯定是用int类型比较合理
如果觉得有歧义,那说明只是8位单片机写多了,
特意改成return TRUE,感觉是画蛇添足了,言多勿怪。

出0入0汤圆

发表于 2013-6-15 09:39:17 | 显示全部楼层
lz,为什么iic 我初始化了之后,串口也配置好了,但是输出的全是?号,就是一次上电只输出一个?,不知道有么有人遇到跟我一样的问题。

出0入0汤圆

发表于 2013-6-15 09:46:32 来自手机 | 显示全部楼层
感谢分享,对于lz的无私我只能先顶一个,技术问题看了源码再说

出0入0汤圆

发表于 2013-6-15 10:55:13 来自手机 | 显示全部楼层
太好啦%%%%%***

出0入0汤圆

 楼主| 发表于 2013-6-16 20:38:46 | 显示全部楼层
aki_studio 发表于 2013-6-15 06:31
int类型的函数,返回0成功,小于0失败
bool类型的函数,返回1成功,0失败
STM32是32位的机器,肯定是用int类 ...

没有觉得怪啊,因为IIC的底层驱动与DMP里面返回值类型刚好相反,而且代码里面涉及到许多的用返回值做判断的代码,直接改肯定不方便啊,这里是写了个中间的函数避免大量的处理。还有从占内存的角度来看,似乎用char要好些吧,char也能表示正负啊

出0入0汤圆

 楼主| 发表于 2013-6-16 20:39:48 | 显示全部楼层
windless 发表于 2013-6-15 09:39
lz,为什么iic 我初始化了之后,串口也配置好了,但是输出的全是?号,就是一次上电只输出一个?,不知道有么 ...

你这个是不是串口有问题啊,你可以注释掉代码只单独的输出串口信息啊。

出0入0汤圆

发表于 2013-6-16 23:16:27 | 显示全部楼层
为什么我的f4只要循环有延时程序,输出就是0
  1. int main(void)
  2. {

  3.     STM_EVAL_LEDInit(LED3);
  4.     STM_EVAL_LEDInit(LED4);
  5.     STM_EVAL_LEDInit(LED5);
  6.     STM_EVAL_LEDInit(LED6);


  7.   //  if (SysTick_Config(SystemCoreClock / 21000000))
  8.   //  {
  9.   //      /* Capture error */
  10.   //      while (1);
  11.   //   }

  12.     //InitMPU6050();
  13.     USART2_Config();
  14.     USART3_Config();

  15.     TIM_Config();
  16.     TIM1_INT();

  17.     EXTILine_Config();
  18.     EXTI_GenerateSWInterrupt(EXTI_Line0);
  19.     EXTI_GenerateSWInterrupt(EXTI_Line1);
  20.    
  21.     GPIO_ResetBits(GPIOD, GPIO_Pin_1);
  22.     GPIO_ResetBits(GPIOD, GPIO_Pin_2);
  23.     GPIO_SetBits(GPIOE, GPIO_Pin_12);
  24.     GPIO_SetBits(GPIOE, GPIO_Pin_10);


  25.     i2cInit();
  26.     result = mpu_init();

  27.         //mpu_init();

  28.         //mpu_set_sensor
  29. mpu_set_sensors(INV_XYZ_GYRO | INV_XYZ_ACCEL);

  30.         //mpu_configure_fifo
  31. mpu_configure_fifo(INV_XYZ_GYRO | INV_XYZ_ACCEL);

  32.         //mpu_set_sample_rate
  33. mpu_set_sample_rate(DEFAULT_MPU_HZ);

  34.         //dmp_load_motion_driver_firmvare
  35. dmp_load_motion_driver_firmware();

  36.         //dmp_set_orientation
  37. dmp_set_orientation(inv_orientation_matrix_to_scalar(gyro_orientation));

  38.         //dmp_enable_feature
  39. dmp_enable_feature(DMP_FEATURE_6X_LP_QUAT | DMP_FEATURE_TAP |
  40.                                DMP_FEATURE_ANDROID_ORIENT | DMP_FEATURE_SEND_RAW_ACCEL | DMP_FEATURE_SEND_CAL_GYRO |
  41.                                DMP_FEATURE_GYRO_CAL);

  42.         //dmp_set_fifo_rate
  43. dmp_set_fifo_rate(DEFAULT_MPU_HZ);

  44.         run_self_test();
  45. mpu_set_dmp_state(1);

  46.     while(1)
  47.     {


  48.       dmp_read_fifo(gyro, accel, quat, &sensor_timestamp, &sensors,&more);

  49.         if (sensors & INV_WXYZ_QUAT )
  50.         {
  51.             
  52.             
  53.             q0 = quat[0] / q30;
  54.             q1 = quat[1] / q30;
  55.             q2 = quat[2] / q30;
  56.             q3 = quat[3] / q30;
  57.             Pitch  = asin(-2 * q1 * q3 + 2 * q0* q2)* 57.3; // pitch
  58.            Roll = atan2(2 * q2 * q3 + 2 * q0 * q1, -2 * q1 * q1 - 2 * q2* q2 + 1)* 57.3; // roll
  59.            Yaw =         atan2(2*(q1*q2 + q0*q3),q0*q0+q1*q1-q2*q2-q3*q3) * 57.3;
  60.         }
  61.         printf("%f\n",Pitch);
  62.         printf("%f\n",Roll);
  63.         printf("%f\n\n\n",Yaw);

  64.          
  65.         //send_packet(PACKET_TYPE_QUAT, quat);
  66.      }
复制代码

出0入0汤圆

发表于 2013-6-16 23:23:37 | 显示全部楼层
是传感器休眠了吗

出0入0汤圆

发表于 2013-6-16 23:34:04 | 显示全部楼层
本帖最后由 sirbai 于 2013-6-17 13:15 编辑

算出的三个数是三个轴与重力夹角吗

出0入0汤圆

发表于 2013-6-17 08:22:23 来自手机 | 显示全部楼层
好帖  mark

出0入0汤圆

发表于 2013-6-17 15:04:29 | 显示全部楼层
hah  最近正在研究中 先顶一个

出0入0汤圆

发表于 2013-6-18 17:53:56 | 显示全部楼层
楼主,你解析出来的数据飘不飘。比如我平着放置,第一个数据为-6,然后动一下之后再放平,数据就飘了,恢复到-6是个渐进的变化,不知道楼主数据如何?

出0入0汤圆

发表于 2013-6-18 18:20:56 | 显示全部楼层
主哇,你这个是6轴的的试试外接传感器9轴的??

出0入0汤圆

发表于 2013-6-18 19:12:14 | 显示全部楼层
好贴,不错先赞一个,夜晚细细看!

出0入0汤圆

 楼主| 发表于 2013-6-18 20:54:41 | 显示全部楼层
本帖最后由 _spetrel 于 2013-6-18 20:57 编辑

attach://120109.rar  这个是我用MFC+openGL写的一个上位机,只能显示姿态,波特率9600,8个数据位,无校验,在没有数据的时候,能用Slider控件来调试看看立方体的姿态变化 。
数据的通信格式为:"S" +正负号+ pitch +正负号+ roll + 正负号+yaw + 'E',
pitch,roll,yaw为unint16_t 型的数据,先发高位,后发低位,正负号用0表示正号,用其它的表示负号,正负号用uint8_t来表示。

之前发的贴子发现这个DMP很不稳定,初始化要复位好几次,把I2C的延时加长一点也不行,不知道是什么原因。还有就是这个DMP采样输出的数据其实是很不连续的,看图
,觉得做个插值会不会好点。还有我发现程序跑的时间长了,Yaw角会一直的增大,这个问题不知道各位测试的时候碰到没。
http://v.youku.com/v_show/id_XNTcyNDU1ODcy.html

这个是调试的时候的视频,看起来还可以。

准备放弃DMP方案,还是去研究算法算了,采样率只能到200HZ啊。。。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-6-18 21:05:24 | 显示全部楼层
_spetrel 发表于 2013-6-18 20:54
attach://120109.rar  这个是我用MFC+openGL写的一个上位机,只能显示姿态,波特率9600,8个数据位,无校验 ...

没这么慢吧???

出0入0汤圆

发表于 2013-6-19 21:13:22 | 显示全部楼层
_spetrel 发表于 2013-6-18 20:54
attach://120109.rar  这个是我用MFC+openGL写的一个上位机,只能显示姿态,波特率9600,8个数据位,无校验 ...

楼主滤波算法研究好了别忘了分享下啊

出0入0汤圆

发表于 2013-6-19 21:26:46 | 显示全部楼层
本帖最后由 stm8s 于 2013-6-19 21:28 编辑

支持原创。好人一生平安  

楼主滤波算法研究好了别忘了分享下啊 +1

出0入0汤圆

发表于 2013-6-21 16:54:51 | 显示全部楼层
sirbai 发表于 2013-6-16 23:34
算出的三个数是三个轴与重力夹角吗

同问。。。

出0入0汤圆

发表于 2013-6-21 21:04:09 | 显示全部楼层
顶起!!感谢分享。

出105入79汤圆

发表于 2013-6-21 22:21:17 | 显示全部楼层
感谢分享~ 马上动身

出0入0汤圆

发表于 2013-6-24 20:15:04 | 显示全部楼层
既然可以通过直接读FIFO得到四元数,为什么不能像读取普通的寄存器一样来操作?还要做那么复杂的驱动程序?看的头晕啊……

出0入0汤圆

发表于 2013-6-26 17:58:44 | 显示全部楼层
  if (tmp[0] & BIT_FIFO_OVERFLOW) {
            mpu_reset_fifo();
            return -2;
        }
我在这里老出错,后来发现不能单步运行,联续就没问题了

出0入0汤圆

发表于 2013-7-3 00:35:58 | 显示全部楼层
找了好久,这是个好东西,谢过了

出0入0汤圆

发表于 2013-7-4 11:14:32 | 显示全部楼层
感谢分享,好东西,正要用

出0入0汤圆

发表于 2013-7-5 15:07:31 | 显示全部楼层
留个记号

出0入0汤圆

发表于 2013-7-12 14:05:55 | 显示全部楼层
楼主,程序在运行到run_self_test();时,打印显示“bias has not been modified ”,请问这是自检部分吗?这一步没过的话,会不会有影响?

出0入0汤圆

发表于 2013-7-12 21:28:12 | 显示全部楼层
感谢分享~ ~~~

出0入0汤圆

发表于 2013-7-12 21:40:38 | 显示全部楼层
好东西,先留一个,说不定什么时候会用到哇。

出0入0汤圆

发表于 2013-7-12 21:49:55 | 显示全部楼层
lancefang 发表于 2013-7-12 14:05
楼主,程序在运行到run_self_test();时,打印显示“bias has not been modified ”,请问这是自检部分吗? ...

同问,同求解答,目前出来的4个数都是0

出0入0汤圆

发表于 2013-7-12 22:17:45 | 显示全部楼层
lancefang 发表于 2013-7-12 14:05
楼主,程序在运行到run_self_test();时,打印显示“bias has not been modified ”,请问这是自检部分吗? ...

搞定了,这个不用管它

出0入0汤圆

发表于 2013-7-14 03:17:02 | 显示全部楼层
先标记一下,好帖子啊

出0入0汤圆

发表于 2013-7-17 11:13:57 | 显示全部楼层
lancefang 发表于 2013-7-12 14:05
楼主,程序在运行到run_self_test();时,打印显示“bias has not been modified ”,请问这是自检部分吗? ...

楼主的也是这样,我之前也是这样,回头仔细看楼主的截图就清楚了。

出0入0汤圆

发表于 2013-7-17 12:25:00 | 显示全部楼层
R2D1 发表于 2013-7-17 11:13
楼主的也是这样,我之前也是这样,回头仔细看楼主的截图就清楚了。

你搞到哪一步了?上浆了没?

出0入0汤圆

发表于 2013-7-17 12:56:18 | 显示全部楼层
楼主程序,调出的数据。感谢楼主

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-7-17 12:57:24 | 显示全部楼层
lancefang 发表于 2013-7-17 12:25
你搞到哪一步了?上浆了没?

进度比较慢,机架还没买。

出0入0汤圆

发表于 2013-7-18 10:13:31 | 显示全部楼层
楼主,我的yaw数据总有-8°左右的漂移,啥原因呢

出0入0汤圆

发表于 2013-7-19 11:55:29 | 显示全部楼层
谢谢分享,学习了

出0入0汤圆

发表于 2013-7-20 09:09:10 | 显示全部楼层
好帖,顶。

出0入0汤圆

发表于 2013-7-20 11:39:53 | 显示全部楼层
buck 发表于 2013-7-19 11:48
偏航是正常的啊,没参考系修正,一般用地磁作航向修正

好的,谢了哈,昨天调试,放着跑了一个多小时吧,发现偏航角从0增加到-9°,然后就从-9°缓慢变化到+18°左右,看样子不上磁力计这玩意肯定是用不了啊

出0入0汤圆

发表于 2013-7-22 15:57:44 | 显示全部楼层
_spetrel 发表于 2013-6-18 20:54
attach://120109.rar  这个是我用MFC+openGL写的一个上位机,只能显示姿态,波特率9600,8个数据位,无校验 ...

你好,你这个上位机的源码方便发一份吗?

出0入0汤圆

发表于 2013-7-22 21:41:06 | 显示全部楼层
200HZ,如果数据准确的话也够用了,就怕拿到的数据还需要处理,精度估计就不行了。

出0入0汤圆

发表于 2013-7-23 13:53:37 | 显示全部楼层
_spetrel 发表于 2013-6-18 20:54
attach://120109.rar  这个是我用MFC+openGL写的一个上位机,只能显示姿态,波特率9600,8个数据位,无校验 ...

您好,你的这个上位机的源代码可以发给我一份吗?如果方便的话请发到邮箱1139301489@qq.com,在下不胜感激!

出0入0汤圆

发表于 2013-7-23 14:32:26 | 显示全部楼层
从DMP里面出来的数据有几种
1.姿态四元数,二选一:DMP_FEATURE_LP_QUAT(只用陀螺仪计算得到)/DMP_FEATURE_6X_LP_QUAT(加速度和陀螺仪融合)
2.加速度数据,DMP_FEATURE_SEND_RAW_ACCEL
3.陀螺仪数据.二选一: DMP_FEATURE_SEND_RAW_GYRO(原始数据) / DMP_FEATURE_SEND_CAL_GYRO(自动校准后数据)
3.时间戳

加入自动校准功能(DMP_FEATURE_GYRO_CAL)后,姿态可以做到非常稳定,自动校准功能在静止8秒后自动进行.

出0入0汤圆

发表于 2013-7-23 16:57:48 | 显示全部楼层
果断顶起,学习了!

出0入0汤圆

发表于 2013-7-25 15:35:34 | 显示全部楼层
int mpu_read_fifo_stream(unsigned short length, unsigned char *data,
    unsigned char *more)
{
    unsigned char tmp[2];
    unsigned short fifo_count;
    if (!st.chip_cfg.dmp_on)
        return -1;
    if (!st.chip_cfg.sensors)
        return -1;

    if (i2c_read(st.hw->addr, st.reg->fifo_count_h, 2, tmp))
        return -1;
    fifo_count = (tmp[0] << 8) | tmp[1];
    if (fifo_count < length) {
        more[0] = 0;
        return -1;
    }
    if (fifo_count > (st.hw->max_fifo >> 1)) {
        /* FIFO is 50% full, better check overflow bit. */
        if (i2c_read(st.hw->addr, st.reg->int_status, 1, tmp))
            return -1;
       if (tmp[0] & BIT_FIFO_OVERFLOW) {
            mpu_reset_fifo();
            return -1;

        }
    }

    if (i2c_read(st.hw->addr, st.reg->fifo_r_w, length, data))
        return -1;
    more[0] = fifo_count / length - 1;
    return 0;
}
程序一直在红字那段错误退出,找很久都不知道哪里出错,看I2C逻辑应该没问题,读写都很顺利。LZ有没有遇过这种情况。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-7-25 17:41:14 | 显示全部楼层
将读FIFO周期缩短了就没有溢出错误这问题了。但是输出结果的欧拉角乱跳,毫无规律。都不知道啥问题。我用的是STM8的,应该不关事吧

出0入0汤圆

发表于 2013-7-30 15:35:19 | 显示全部楼层
收下了,谢谢lz

出0入0汤圆

发表于 2013-7-30 21:00:46 | 显示全部楼层
LZ 大无私………………………………

出0入0汤圆

发表于 2013-8-1 10:29:01 | 显示全部楼层
lgnativs 发表于 2013-7-23 14:32
从DMP里面出来的数据有几种
1.姿态四元数,二选一:DMP_FEATURE_LP_QUAT(只用陀螺仪计算得到)/DMP_FEATURE_6X ...

自动校准是只校准陀螺仪,那磁力计上电的时候也应该校准吧?

出0入0汤圆

发表于 2013-8-1 15:37:03 | 显示全部楼层
楼主,我用9150的片子,程序还有要改动的地方吗?我在结构体里加上了磁力计的几行程序,偏航还是有点漂,新手求指教啊

出0入0汤圆

发表于 2013-8-2 23:40:02 | 显示全部楼层
学习ING,,,,期待俺的四轴早日起飞

出40入518汤圆

发表于 2013-8-9 15:23:09 | 显示全部楼层
MPU_ID1:68
mPU_ID2:68
rate_div:100

bias has not been modified ......
mpu initialization complete......
mpu_set_sensor complete ......
mpu_configure_fifo complete ......
mpu_set_sample_rate error ......
dmp_load_motion_driver_firmware come across error ......
dmp_set_orientation complete ......
dmp_enable_feature complete ......
dmp_set_fifo_rate complete ......
bias has not been modified ......
mpu_set_dmp_state complete ......

为什么我MPU
mpu_set_sample_rate error ......
dmp_load_motion_driver_firmware come across error ......
老是失败的?        MPU的SlaveAddress不是0xD0吗? 为什么库函数里定义是SlaveAddress  是 0x68 , i2cread(0x68, 0x75, 1, &read_out) 读回来的是0x68?
write_in = 100;
i2cwrite(0x68,0x19, 1, &write_in);   
i2cread(0x68, 0x19, 1, &read_out);
printf("rate_div:%d\n",read_out);     
读回来是rate_div:100 , 为什么还是显示mpu_set_sample_rate error ......

dmp_load_motion_driver_firmware come across error ......这句是哪里出错了?

出0入0汤圆

发表于 2013-8-10 16:44:51 | 显示全部楼层
好人啊!!!

出0入0汤圆

发表于 2013-8-11 11:45:57 | 显示全部楼层
mark......
顶一个...

出0入0汤圆

发表于 2013-8-19 20:41:31 | 显示全部楼层
最近都在看,mark~~

出0入0汤圆

发表于 2013-8-21 15:17:46 | 显示全部楼层
悔恨当初没有仔细看楼主的帖子,基本上说到得问题我都遇上了。。。

出0入0汤圆

发表于 2013-8-22 09:23:27 | 显示全部楼层
楼主好人,顶起这个真心给力

出0入0汤圆

发表于 2013-8-22 09:37:51 | 显示全部楼层
源码的话,官方是公开了的。

关于其固件的算法,不知道楼主怎么理解。

V5.1用户手册说的太模糊。

出0入0汤圆

发表于 2013-8-22 19:37:51 | 显示全部楼层
楼主   您好   我最近也在玩   STM32  MPU6050   ,下载了您的代码   但总是有问题 !想让您给我指点指点  我的qq:1149840258   求助

出0入0汤圆

发表于 2013-8-22 21:23:27 | 显示全部楼层
本帖最后由 NJ8888 于 2013-8-22 21:25 编辑

一行行拷贝,用新塘400KHz的硬件IIC搞了下,大约快3000行

出0入0汤圆

发表于 2013-8-24 17:14:01 | 显示全部楼层
一直关注数据融合

出0入0汤圆

发表于 2013-8-24 17:23:08 | 显示全部楼层
我用新塘123芯片移植了下,IIC是硬件的,400kHz,输出通过公式换成欧拉角传PC

出0入0汤圆

发表于 2013-8-24 22:53:04 | 显示全部楼层
_spetrel 发表于 2013-6-18 20:54
attach://120109.rar  这个是我用MFC+openGL写的一个上位机,只能显示姿态,波特率9600,8个数据位,无校验 ...

这个是什么软件,挺好的

出0入0汤圆

发表于 2013-8-28 16:22:02 | 显示全部楼层
好东西,谢谢分享!

出0入0汤圆

发表于 2013-8-30 15:30:55 | 显示全部楼层
Pitch不旋转时,ROLL和YAW数据正常,但是只要Pitch旋转一定角度后,ROLL和YAW数据就不正常了;
平放时数据(Pitch = -0.027330  Roll = 0.818385  Yaw = -0.941145)
往ROLL旋转一定角度后,(Pitch = 0.751704  Roll = -42.787109  Yaw = -0.686597)
保持ROLL不变,此时只往Pitch方向旋转(Pitch = -35.260311  Roll = -42.027378  Yaw = 19.004519

出0入0汤圆

发表于 2013-8-30 16:23:20 | 显示全部楼层
串口出来上是:ID read as 0 indicates device is either incompatible or an MPU3050.



一直是这个问题啊,怎么办啊啊

出0入0汤圆

发表于 2013-8-31 20:57:14 | 显示全部楼层
终于找到源代码了,好好研究一下。

出0入0汤圆

发表于 2013-9-1 11:25:42 | 显示全部楼层
PITCH转动到90度后,ROLL和YAW乱跳,这个是万向锁。

出0入0汤圆

发表于 2013-9-1 11:27:49 | 显示全部楼层
DMP最大的问题貌似就是速度了。这个在飞机上会出大问题的。

出0入0汤圆

发表于 2013-9-2 20:26:21 | 显示全部楼层
请问楼主   
#define delay_ms    delay_ms
#define get_ms      get_ms
这里的 get_ms是实现什么功能啊? 不用处理没关系吗?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-9-3 10:08:04 | 显示全部楼层
用什么东西别写的啊?

出0入0汤圆

发表于 2013-9-3 16:56:10 | 显示全部楼层
默默七 发表于 2013-9-1 11:27
DMP最大的问题貌似就是速度了。这个在飞机上会出大问题的。

你的意思是不用DMP?不过我看过有人四轴上用dmp的呀,速度很成问题吗

出0入0汤圆

发表于 2013-9-4 17:27:42 | 显示全部楼层
l楼主,我不知道你用什么环境编译的,我用Source in sight看你的程序,怎么都找不到twi_write(a, b, d, c);twi_read(a, b, d, c);MPL_LOGI这几个函数和变量的定义在哪,楼主是不是调用了什么库函数?

出0入0汤圆

发表于 2013-9-5 10:25:00 | 显示全部楼层
ivanl 发表于 2013-8-1 15:37
楼主,我用9150的片子,程序还有要改动的地方吗?我在结构体里加上了磁力计的几行程序,偏航还是有点漂,新 ...

请问这位哥们是用的STM32+MPU9150吗?9150用的是数字的还是模拟的?  我们被限定用瑞萨编MPU9150,各种尴尬,串口刚刚写好

出0入0汤圆

发表于 2013-9-5 18:12:47 | 显示全部楼层
LZ好人,不过自己拿来有点看不懂,有没详细的解释

出0入0汤圆

发表于 2013-9-6 17:00:58 | 显示全部楼层
楼主,我移植了你的程序,但是最后得到的Pitch,Roll,Yaw值都飘的很大,你的飘吗

出0入0汤圆

发表于 2013-9-6 17:03:06 | 显示全部楼层
windless 发表于 2013-6-18 17:53
楼主,你解析出来的数据飘不飘。比如我平着放置,第一个数据为-6,然后动一下之后再放平,数据就飘了,恢复 ...

我解析出来的Pitch,Roll,Yaw都飘,放着不动,飘得很厉害,不知道哪里搞错了

出0入0汤圆

发表于 2013-9-12 12:54:51 | 显示全部楼层
楼主 请问若要用到MPU6050里面的DMP 是不是还需要 把HMC5883和MPU6050连接起来啊,不然罗盘数据他内部的DMP怎么读取到呢?
求解。。。。

出0入0汤圆

发表于 2013-9-12 13:57:49 | 显示全部楼层
不错 记下啦                                       

出0入0汤圆

发表于 2013-9-12 16:01:37 | 显示全部楼层
谢谢楼主分享。

出0入0汤圆

发表于 2013-9-12 16:02:11 | 显示全部楼层
NJ8888 发表于 2013-8-22 21:23
一行行拷贝,用新塘400KHz的硬件IIC搞了下,大约快3000行

哪款芯片,ARM核的吗?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 09:30

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表