找回密码
 立即注册

QQ登录

只需一步,快速开始

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

MPU6050 S9KEA128AMLK GPIO模拟程序 串口输出

[复制链接]
跳转到指定楼层
楼主
S9KEA128AMLK串口输出模拟程序

单片机源程序如下:
  1. #include"MPU6050.h"
  2. #include "soft_i2c.h"


  3. //寄存器读写函数
  4. #define MUP_WR(reg,data)    soft_i2c_write_reg(MPU6050_DEV_ADDR,reg,data)
  5. #define MUP_RD(reg)         soft_i2c_read_reg(MPU6050_DEV_ADDR,reg,IIC)



  6. #define        MPU6050_DEV_ADDR            0xD0>>1        //IIC写入时的地址字节数据,+1为读取

  7. //****************************************
  8. // 定义MPU6050内部地址
  9. //****************************************
  10. #define        SMPLRT_DIV                0x19        //陀螺仪采样率,典型值:0x07(125Hz)
  11. #define        CONFIG                    0x1A        //低通滤波频率,典型值:0x06(5Hz)
  12. #define        GYRO_CONFIG                0x1B        //陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s)
  13. #define        ACCEL_CONFIG        0x1C        //加速计自检、测量范围及高通滤波频率,典型值:0x01(不自检,2G,5Hz)
  14. #define        ACCEL_XOUT_H        0x3B
  15. #define        ACCEL_XOUT_L        0x3C
  16. #define        ACCEL_YOUT_H        0x3D
  17. #define        ACCEL_YOUT_L        0x3E
  18. #define        ACCEL_ZOUT_H        0x3F
  19. #define        ACCEL_ZOUT_L        0x40

  20. #define        GYRO_XOUT_H                0x43
  21. #define        GYRO_XOUT_L                0x44
  22. #define        GYRO_YOUT_H                0x45
  23. #define        GYRO_YOUT_L                0x46
  24. #define        GYRO_ZOUT_H                0x47
  25. #define        GYRO_ZOUT_L                0x48
  26. #define        PWR_MGMT_1                0x6B        //电源管理,典型值:0x00(正常启用)
  27. #define        WHO_AM_I                        0x75        //IIC地址寄存器(默认数值0x68,只读)
  28. #define        SlaveAddress            0xD0        //IIC写入时的地址字节数据,+1为读取



  29. int16 mpu_gyro_x,mpu_gyro_y,mpu_gyro_z;
  30. int16 mpu_acc_x,mpu_acc_y,mpu_acc_z;

  31. void main_test(void)
  32. {
  33.     InitMPU6050();

  34.     //在线调试查看mpu_gyro_x mpu_gyro_y mpu_gyro_z mpu_acc_x mpu_acc_y mpu_acc_z三个变量即可
  35.     for(;;)
  36.     {
  37.         //采集MPU6050数据
  38.         Get_Gyro();
  39.         Get_AccData();
  40.         
  41.         printf("mpu_gyro_x=%d\n",mpu_gyro_x);
  42.         printf("mpu_gyro_y=%d\n",mpu_gyro_y);
  43.         printf("mpu_gyro_z=%d\n\n",mpu_gyro_z);
  44.         
  45.         printf("mpu_acc_x=%d\n",mpu_acc_x);
  46.         printf("mpu_acc_y=%d\n",mpu_acc_y);
  47.         printf("mpu_acc_z=%d\n\n",mpu_acc_z);
  48.         
  49.         systick_delay_ms(30);//延时30ms

  50.     }
  51. }


  52. //**************************************
  53. //初始化MPU6050
  54. //**************************************
  55. void InitMPU6050(void)
  56. {
  57.     soft_i2c_init();


  58.         MUP_WR(PWR_MGMT_1, 0x00);        //解除休眠状态
  59.         MUP_WR(SMPLRT_DIV, 0x07);
  60.         MUP_WR(CONFIG, 0x06);
  61.         MUP_WR(GYRO_CONFIG, 0x18);
  62.         MUP_WR(ACCEL_CONFIG, 0x10);
  63. }

  64. //-------------------------------------------------------------------------------------------------------------------
  65. //  @brief      获取MPU6050加速度计数据
  66. //  @param      NULL
  67. //  @return     void
  68. //  @since      v1.0
  69. //  Sample usage:                                执行该函数后,直接查看对应的变量即可
  70. //-------------------------------------------------------------------------------------------------------------------
  71. void Get_AccData(void)
  72. {
  73.     uint8 dat[6];
  74.    
  75.     soft_i2c_read_regs(MPU6050_DEV_ADDR, ACCEL_XOUT_H, dat, 6, IIC);  
  76.     mpu_acc_x = (int16)(((uint16)dat[0]<<8 | dat[1]));
  77.     mpu_acc_y = (int16)(((uint16)dat[2]<<8 | dat[3]));
  78.     mpu_acc_z = (int16)(((uint16)dat[4]<<8 | dat[5]));
  79. }


  80. //-------------------------------------------------------------------------------------------------------------------
  81. //  @brief      获取MPU6050陀螺仪数据
  82. //  @param      NULL
  83. //  @return     void
  84. //  @since      v1.0
  85. //  Sample usage:                                执行该函数后,直接查看对应的变量即可
  86. //-------------------------------------------------------------------------------------------------------------------
  87. void Get_Gyro(void)
  88. {
  89.     uint8 dat[6];
  90.    
  91.     soft_i2c_read_regs(MPU6050_DEV_ADDR, GYRO_XOUT_H, dat, 6, IIC);  
  92.     mpu_gyro_x = (int16)(((uint16)dat[0]<<8 | dat[1]));
  93.     mpu_gyro_y = (int16)(((uint16)dat[2]<<8 | dat[3]));
  94.     mpu_gyro_z = (int16)(((uint16)dat[4]<<8 | dat[5]));
  95. }



复制代码

所有资料51hei提供下载:
KEA_MPU6050_App.rar (4.72 KB, 下载次数: 19)


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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