找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4009|回复: 1
打印 上一主题 下一主题
收起左侧

stm32f429使用mpu6050检测风力摆角度 四元数法

[复制链接]
跳转到指定楼层
楼主
ID:226705 发表于 2017-8-10 19:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
mpu6050芯片四元数法计算风力摆摆动角度

所有资料51hei提供下载:
六轴.rar (1009.29 KB, 下载次数: 71)


stm32f429单片机源程序如下(主程序):
  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. /*简单任务管理*/
  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库   
  23.     Stm32_Clock_Init(360,25,2,8);   //设置时钟,180Mhz
  24.     delay_init(180);                //初始化延时函数
  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;                //加速度传感器原始数据
  38.         short gyrox,gyroy,gyroz;        //陀螺仪原始数据
  39.         float temp;                                //温度
  40.        
  41.         printf("\r\n 欢迎使用阿波罗  STM32 F429 开发板。\r\n");                 

  42.         printf("\r\n 这是一个I2C外设(AT24C02)读写测试例程 \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; //更新一次数据,可根据自己的需求,提高采样频率,如100ms采样一次
  66.                                 */
  67.                        
  68.                        
  69.                        
  70.                        
  71.                         temp=MPU_Get_Temperature();        //得到温度值
  72.                                 printf("温度:%8f",temp);
  73.                     MPU_Get_Accelerometer(&aacx,&aacy,&aacz);        //得到加速度传感器数据
  74.                                 printf("加速度:%8d%8d%8d",aacx,aacy,aacz);
  75.                     MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz);        //得到陀螺仪数据
  76.                                 printf("陀螺仪:%8d%8d%8d\r\n",gyrox,gyroy,gyroz);
  77.                                
  78.                                
  79.                                
  80. //                        Task_Delay[1]=500; //更新一次数据,可根据自己的需求,提高采样频率,如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没有检测到MPU6050传感器!\r\n");
  105.                         LED0=0;
  106.                 while(1);
  107.         }
  108. }

  109.        
复制代码



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:186696 发表于 2021-2-4 11:11 | 只看该作者
请问楼主,实际效果如何?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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