S9KEA128AMLK串口输出模拟程序
单片机源程序如下:
- #include"MPU6050.h"
- #include "soft_i2c.h"
- //寄存器读写函数
- #define MUP_WR(reg,data) soft_i2c_write_reg(MPU6050_DEV_ADDR,reg,data)
- #define MUP_RD(reg) soft_i2c_read_reg(MPU6050_DEV_ADDR,reg,IIC)
- #define MPU6050_DEV_ADDR 0xD0>>1 //IIC写入时的地址字节数据,+1为读取
- //****************************************
- // 定义MPU6050内部地址
- //****************************************
- #define SMPLRT_DIV 0x19 //陀螺仪采样率,典型值:0x07(125Hz)
- #define CONFIG 0x1A //低通滤波频率,典型值:0x06(5Hz)
- #define GYRO_CONFIG 0x1B //陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s)
- #define ACCEL_CONFIG 0x1C //加速计自检、测量范围及高通滤波频率,典型值:0x01(不自检,2G,5Hz)
- #define ACCEL_XOUT_H 0x3B
- #define ACCEL_XOUT_L 0x3C
- #define ACCEL_YOUT_H 0x3D
- #define ACCEL_YOUT_L 0x3E
- #define ACCEL_ZOUT_H 0x3F
- #define ACCEL_ZOUT_L 0x40
- #define GYRO_XOUT_H 0x43
- #define GYRO_XOUT_L 0x44
- #define GYRO_YOUT_H 0x45
- #define GYRO_YOUT_L 0x46
- #define GYRO_ZOUT_H 0x47
- #define GYRO_ZOUT_L 0x48
- #define PWR_MGMT_1 0x6B //电源管理,典型值:0x00(正常启用)
- #define WHO_AM_I 0x75 //IIC地址寄存器(默认数值0x68,只读)
- #define SlaveAddress 0xD0 //IIC写入时的地址字节数据,+1为读取
- int16 mpu_gyro_x,mpu_gyro_y,mpu_gyro_z;
- int16 mpu_acc_x,mpu_acc_y,mpu_acc_z;
- void main_test(void)
- {
- InitMPU6050();
- //在线调试查看mpu_gyro_x mpu_gyro_y mpu_gyro_z mpu_acc_x mpu_acc_y mpu_acc_z三个变量即可
- for(;;)
- {
- //采集MPU6050数据
- Get_Gyro();
- Get_AccData();
-
- printf("mpu_gyro_x=%d\n",mpu_gyro_x);
- printf("mpu_gyro_y=%d\n",mpu_gyro_y);
- printf("mpu_gyro_z=%d\n\n",mpu_gyro_z);
-
- printf("mpu_acc_x=%d\n",mpu_acc_x);
- printf("mpu_acc_y=%d\n",mpu_acc_y);
- printf("mpu_acc_z=%d\n\n",mpu_acc_z);
-
- systick_delay_ms(30);//延时30ms
- }
- }
- //**************************************
- //初始化MPU6050
- //**************************************
- void InitMPU6050(void)
- {
- soft_i2c_init();
- MUP_WR(PWR_MGMT_1, 0x00); //解除休眠状态
- MUP_WR(SMPLRT_DIV, 0x07);
- MUP_WR(CONFIG, 0x06);
- MUP_WR(GYRO_CONFIG, 0x18);
- MUP_WR(ACCEL_CONFIG, 0x10);
- }
- //-------------------------------------------------------------------------------------------------------------------
- // @brief 获取MPU6050加速度计数据
- // @param NULL
- // @return void
- // @since v1.0
- // Sample usage: 执行该函数后,直接查看对应的变量即可
- //-------------------------------------------------------------------------------------------------------------------
- void Get_AccData(void)
- {
- uint8 dat[6];
-
- soft_i2c_read_regs(MPU6050_DEV_ADDR, ACCEL_XOUT_H, dat, 6, IIC);
- mpu_acc_x = (int16)(((uint16)dat[0]<<8 | dat[1]));
- mpu_acc_y = (int16)(((uint16)dat[2]<<8 | dat[3]));
- mpu_acc_z = (int16)(((uint16)dat[4]<<8 | dat[5]));
- }
- //-------------------------------------------------------------------------------------------------------------------
- // @brief 获取MPU6050陀螺仪数据
- // @param NULL
- // @return void
- // @since v1.0
- // Sample usage: 执行该函数后,直接查看对应的变量即可
- //-------------------------------------------------------------------------------------------------------------------
- void Get_Gyro(void)
- {
- uint8 dat[6];
-
- soft_i2c_read_regs(MPU6050_DEV_ADDR, GYRO_XOUT_H, dat, 6, IIC);
- mpu_gyro_x = (int16)(((uint16)dat[0]<<8 | dat[1]));
- mpu_gyro_y = (int16)(((uint16)dat[2]<<8 | dat[3]));
- mpu_gyro_z = (int16)(((uint16)dat[4]<<8 | dat[5]));
- }
复制代码
所有资料51hei提供下载:
KEA_MPU6050_App.rar
(4.72 KB, 下载次数: 20)
|