利用mup6050自帶的DMP,在mup6050中直接輸出俯仰角+翻滾角+偏航角,下載好程序后,將mup6050水平放置,因為要自檢,如果不水平放置,自檢不會通過,則不能初始化DMP,在程序中,inv_mpu_dmp_motion_driver.c以及inv_mpu.c是官方的示例程序經由正點原子修改,我直接移植該程序。
2.png (26.7 KB, 下載次數: 66)
下載附件
水平放置初始化DMP后的角度
2017-9-14 13:56 上傳
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)
2017-9-14 16:39 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|