利用mup6050自带的DMP,在mup6050中直接输出俯仰角+翻滚角+偏航角,下载好程序后,将mup6050水平放置,因为要自检,如果不水平放置,自检不会通过,则不能初始化DMP,在程序中,inv_mpu_dmp_motion_driver.c以及inv_mpu.c是官方的示例程序经由正点原子修改,我直接移植该程序。
水平放置初始化DMP后的角度
stm32单片机源程序如下:
- #include "delay.h"
- #include "usart.h"
- #include "mup6050.h"
- #include "mup6050iic.h"
- #include "inv_mpu.h"
- #include "inv_mpu_dmp_motion_driver.h"
- u16 G_X,G_Y,G_Z,A_X,A_Y,A_Z;
- u8 A[6],G[6],J[1],i;
- int main(void){
- delay_init();
- uart_init(115200);
- IIC_Init();
- delay_ms(200);
- i=mpu_dmp_init();
- while(1){
- float pitch,roll,yaw;
- mup6050_R_l(0x68,0x3b,6,A);
- A_X=((u16)A[0]<<8)|A[1];
- A_Y=((u16)A[2]<<8)|A[3];
- A_Z=((u16)A[4]<<8)|A[5];
- mup6050_R_l(0x68,0x43,6,G);
- G_X=((u16)G[0]<<8)|G[1];
- G_Y=((u16)G[2]<<8)|G[3];
- G_Z=((u16)G[4]<<8)|G[5];
- mpu_dmp_get_data(&pitch,&roll,&yaw);
- printf("\r\n出错于第%d步\r\n",i);
- printf("\r\n---------俯仰角---------%f\r\n",pitch);
- printf("\r\n---------翻滚角---------%f\r\n",roll);
- printf("\r\n---------航篇---------%f\r\n",yaw);
- printf("\r\n---------加速度X轴原始数据---------%d \r\n",A_X);
- printf("\r\n---------加速度Y轴原始数据---------%d \r\n",A_Y);
- printf("\r\n---------加速度Z轴原始数据---------%d \r\n",A_Z);
- printf("\r\n---------陀螺仪X轴原始数据---------%d \r\n",G_X);
- printf("\r\n---------陀螺仪Y轴原始数据---------%d \r\n",G_Y);
- printf("\r\n---------陀螺仪Z轴原始数据---------%d \r\n",G_Z);
- delay_ms(10);
- }
- }
复制代码
所有资料51hei提供下载:
MUP6050+STM32.rar
(337.09 KB, 下载次数: 93)
|