登錄|立即注冊(cè)|使用QQ帳號(hào)登錄
論壇 > STM32/8
發(fā)帖|
看4424|回1|收藏
樓主 ID:226705 只看他
2017-8-10 19:31
mpu6050芯片四元數(shù)法計(jì)算風(fēng)力擺擺動(dòng)角度

所有資料51hei提供下載:
六軸.rar (1009.29 KB)
(下載次數(shù): 71, 2017-8-10 19:30 上傳)

下載積分: 黑幣 -5




stm32f429單片機(jī)源程序如下(主程序):

代碼:

  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "led.h"
  5. #include "key.h"
  6. #include "myiic.h"
  7. #include "mpu6050.h"
  8. #include "siyuanshu.h"


  9. /*簡(jiǎn)單任務(wù)管理*/
  10. uint32_t Task_Delay[3]={0};
  11. //extern AHRS_EulerAngleTypeDef EulerAngle;



  12. int main(void)
  13. {
  14.         u8 res=0;

  15. //        float pitch_temp1 = 0.0;
  16. //        float roll_temp1 = 0.0;
  17.        
  18.        
  19.         extern float Pitch;
  20.         extern float Roll;
  21.    
  22.     HAL_Init();                     //初始化HAL庫(kù)   
  23.     Stm32_Clock_Init(360,25,2,8);   //設(shè)置時(shí)鐘,180Mhz
  24.     delay_init(180);                //初始化延時(shí)函數(shù)
  25.     uart_init(115200);              //初始化USART
  26.     LED_Init();                     //初始化LED
  27.     KEY_Init();                     //初始化按鍵
  28.         IIC_Init();                                                //初始iic
  29.        
  30.        
  31.         /*
  32.         short Acel[3];
  33.         short Gyro[3];
  34.         float Temp;
  35.         */
  36.        
  37.         short aacx,aacy,aacz;                //加速度傳感器原始數(shù)據(jù)
  38.         short gyrox,gyroy,gyroz;        //陀螺儀原始數(shù)據(jù)
  39.         float temp;                                //溫度
  40.        
  41.         printf("\r\n 歡迎使用阿波羅  STM32 F429 開發(fā)板。\r\n");                 

  42.         printf("\r\n 這是一個(gè)I2C外設(shè)(AT24C02)讀寫測(cè)試?yán)?\r\n");

  43.         MPU_Init();
  44.                 res=MPU_Read_Byte(MPU_DEVICE_ID_REG);  //讀取MPU6500的ID       
  45.         if (res==MPU_ADDR)
  46.         {       
  47.                 while(1)
  48.                 {
  49. //                        if(Task_Delay[0]==0)
  50. //                        {
  51. //                                LED1=0;
  52. //                               
  53. //                                Task_Delay[0]=1000;
  54. //                        }
  55. //                       
  56. //                        if(Task_Delay[1]==0)
  57. //                        {
  58.                                 /*
  59.                                 MPU6050ReadAcc(Acel);
  60.                                 printf("加速度:%8d%8d%8d",Acel[0],Acel[1],Acel[2]);
  61.                                 MPU6050ReadGyro(Gyro);
  62.                                 printf("    陀螺儀%8d%8d%8d",Gyro[0],Gyro[1],Gyro[2]);
  63.                                 MPU6050_ReturnTemp(&Temp);
  64.                                 printf("    溫度%8.2f\r\n",Temp);                               
  65.                                 Task_Delay[1]=500; //更新一次數(shù)據(jù),可根據(jù)自己的需求,提高采樣頻率,如100ms采樣一次
  66.                                 */
  67.                        
  68.                        
  69.                        
  70.                        
  71.                         temp=MPU_Get_Temperature();        //得到溫度值
  72.                                 printf("溫度:%8f",temp);
  73.                     MPU_Get_Accelerometer(&aacx,&aacy,&aacz);        //得到加速度傳感器數(shù)據(jù)
  74.                                 printf("加速度:%8d%8d%8d",aacx,aacy,aacz);
  75.                     MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz);        //得到陀螺儀數(shù)據(jù)
  76.                                 printf("陀螺儀:%8d%8d%8d\r\n",gyrox,gyroy,gyroz);
  77.                                
  78.                                
  79.                                
  80. //                        Task_Delay[1]=500; //更新一次數(shù)據(jù),可根據(jù)自己的需求,提高采樣頻率,如100ms采樣一次
  81.                
  82. //                        EulerAngle.Pitch = Kalman_Filter1(pitch_temp1,gyroy);      
  83. //                        EulerAngle.Roll  = Kalman_Filter2(roll_temp1,-gyrox);  
  84. //                       
  85. //                                printf("俯仰角:%8f",EulerAngle.Pitch);
  86. //                                printf("橫滾角:%8f\r\n",EulerAngle.Roll);
  87.                        
  88.                        
  89.                
  90.                         IMUupdate(gyrox,gyroy,gyroz,aacx,aacy,aacz);
  91.                        
  92.                        
  93.                        
  94.                         printf("俯仰角:%8f橫滾角:%8f\r\n", Pitch,Roll);
  95.                                
  96.                        
  97.                        
  98.                                 delay_ms(100);
  99. //                        }

  100.                 }

  101.         }
  102.         else
  103.         {
  104.                         printf("\r\n沒有檢測(cè)到MPU6050傳感器!\r\n");
  105.                         LED0=0;
  106.                 while(1);
  107.         }
  108. }

  109.        



沙發(fā) ID:186696 只看他
2021-2-4 11:11
請(qǐng)問樓主,實(shí)際效果如何?

51黑電子論壇

Powered by Discuz! X3.1

首頁(yè)|標(biāo)準(zhǔn)版|觸屏版|電腦版