S9KEA128AMLK串口輸出模擬程序
0.png (40.19 KB, 下載次數: 59)
下載附件
2018-7-9 02:00 上傳
單片機源程序如下:
- #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)
2018-7-8 20:03 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|