芯片解密|单片机解密|IC解密|芯片破解|芯片复制| PCB抄板|软件开发

飞芯科技-芯片解密|单片机解密|IC解密|芯片破解|芯片复制| PCB抄板|软件开发

单片机解密mpu6050卡尔曼滤波STM32单片机程序

  1. 单片机解密#include "kalman.h"
  2. 单片机解密#include "mpu6050.h"
  3. 单片机解密#include "math.h"


  4. short aacx,aacy,aacz;                /*加速度传感器原始数据*/
  5. short gyrox,gyroy,gyroz;        /*陀螺仪原始数据*/
  6. short temperature;                        /*陀螺仪温度数据*/
  7. float Accel_x;                             /*X轴加速度值暂存*/
  8. float Accel_y;                            /*Y轴加速度值暂存*/
  9. float Accel_z;                             /*Z轴加速度值暂存*/
  10. float Gyro_x;                                /*X轴陀螺仪数据暂存*/
  11. float Gyro_y;                        /*Y轴陀螺仪数据暂存*/
  12. float Gyro_z;                                 /*Z轴陀螺仪数据暂存*/
  13. float Angle_x_temp;                  /*由加速度计算的x倾斜角度*/
  14. float Angle_y_temp;                  /*由加速度计算的y倾斜角度*/
  15. float Angle_X_Final;                 /*X最终倾斜角度*/
  16. float Angle_Y_Final;                 /*Y最终倾斜角度*/

  17. /**
  18.   * @brief  读取数据预处理
  19.   *         
  20.   * @param  NULL
  21.   *
  22.   * @retval NULL
  23.   */
  24. void Angle_Calcu(void)         
  25. {
  26.         /*1.原始数据读取*/
  27.         float accx,accy,accz;                                                /*三方向角加速度值*/
  28.         MPU_Get_Accelerometer(&aacx,&aacy,&aacz);        /*得到加速度传感器数据*/
  29.         MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz);        /*得到陀螺仪数据*/
  30.         temperature = MPU_Get_Temperature();                /*得到温度值*/
  31.         Accel_x = aacx;
  32.         Accel_y = aacy;
  33.         Accel_z = aacz;
  34.         Gyro_x  = gyrox;
  35.         Gyro_y  = gyroy;
  36.         Gyro_z  = gyroz;
  37.         
  38.         /*2.角加速度原始值处理过程*/        
  39.         /*加速度传感器配置寄存器0X1C内写入0x01,设置范围为±2g。换算关系:2^16/4 = 16384LSB/g*/
  40.         if(Accel_x<32764) accx=Accel_x/16384;
  41.         else              accx=1-(Accel_x-49152)/16384;
  42.         if(Accel_y<32764) accy=Accel_y/16384;
  43.         else              accy=1-(Accel_y-49152)/16384;
  44.         if(Accel_z<32764) accz=Accel_z/16384;
  45.         else              accz=(Accel_z-49152)/16384;
  46.         /*加速度反正切公式计算三个轴和水平面坐标系之间的夹角*/
  47.         Angle_x_temp=(atan(accy/accz))*180/3.14;
  48.         Angle_y_temp=(atan(accx/accz))*180/3.14;
  49.         /*判断计算后角度的正负号*/                                                                                       
  50.         if(Accel_x<32764) Angle_y_temp = +Angle_y_temp;
  51.         if(Accel_x>32764) Angle_y_temp = -Angle_y_temp;
  52.         if(Accel_y<32764) Angle_x_temp = +Angle_x_temp;
  53.         if(Accel_y>32764) Angle_x_temp = -Angle_x_temp;
  54.         
  55.         /*3.角速度原始值处理过程*/
  56.         /*陀螺仪配置寄存器0X1B内写入0x18,设置范围为±2000deg/s。换算关系:2^16/4000=16.4LSB/(°/S)*/
  57.         /*计算角速度*/
  58.         if(Gyro_x<32768) Gyro_x=-(Gyro_x/16.4);
  59.         if(Gyro_x>32768) Gyro_x=+(65535-Gyro_x)/16.4;
  60.         if(Gyro_y<32768) Gyro_y=-(Gyro_y/16.4);
  61.         if(Gyro_y>32768) Gyro_y=+(65535-Gyro_y)/16.4;
  62.         if(Gyro_z<32768) Gyro_z=-(Gyro_z/16.4);
  63.         if(Gyro_z>32768) Gyro_z=+(65535-Gyro_z)/16.4;
  64.         
  65.         /*4.调用卡尔曼函数*/
  66.         Kalman_Filter_X(Angle_x_temp,Gyro_x);  /*卡尔曼滤波计算X倾角*/
  67.         Kalman_Filter_Y(Angle_y_temp,Gyro_y);  /*卡尔曼滤波计算Y倾角*/                                                                                                                          
  68. }



联系方式

地址:石家庄市新华区民族路77号华强广场D座2009
电话:0311-88816616/87087811
手机:13315190088
传真:0311-67901001
联系人:张工
网址:www.feixindz.com
邮箱:feixindz@163.com
微信:xinpianjiemi
QQ:527263666/568069805

在线客服
热线电话

企业微信