首页 > 其他分享 >I2C 接 MPU6050

I2C 接 MPU6050

时间:2023-09-04 19:33:43浏览次数:38  
标签:int16 WriteReg uint8 MPU6050 I2C 1000

MPU6050

量化范围-32768~32767

    量程
3轴加速度计  测量加速度 ±2/4/8/16(G)
3轴陀螺仪传感器  测量角速度 ±250/500/1000/2000(°/SEC)

从机地址

AD0=0 :110 1000

AD0=1 :110 1001

MPU6050初始化&获取加速度角速度数据

#include "main.h"
#include "MPU6050.h"
#include "i2c.h"
#include "usart.h"



/*读指定寄存器*/
uint8_t MPU6050_ReadReg(uint8_t RegAddress )
{
    
    uint8_t data;
    HAL_I2C_Master_Transmit(&hi2c1,MPU6050_Address, &RegAddress, 1, 1000);
    HAL_I2C_Master_Receive(&hi2c1,MPU6050_Address,&data,1,1000);
    return data;

}

/*写指定寄存器*/
void MPU6050_WriteReg(uint8_t RegAddress,uint8_t Data)
{
    uint8_t transmitData[2] = {RegAddress,Data};
    HAL_I2C_Master_Transmit(&hi2c1,MPU6050_Address, transmitData, 2, 1000);
}


void MPU6050_Init(void )
{
  uint8_t getReadReg = 0x00;

  getReadReg = MPU6050_ReadReg(MPU6050_WHO_AM_I);
  HAL_UART_Transmit(&huart2,&getReadReg,1,1000);
    
    MPU6050_WriteReg(MPU6050_PWR_MGMT_1,0x01);
    MPU6050_WriteReg(MPU6050_PWR_MGMT_2,0x00);
    MPU6050_WriteReg(MPU6050_SMPLRT_DIV,0x09);
    MPU6050_WriteReg(MPU6050_CONFIG,0x06);
    MPU6050_WriteReg(MPU6050_GYRO_CONFIG,0x18);
    MPU6050_WriteReg(MPU6050_ACCEL_CONFIG,0x18);
}

void MPU6050_GetData(int16_t *AccX, int16_t *AccY, int16_t *AccZ,
                     int16_t *GyroX,int16_t *GyroY,int16_t *GyroZ)
{
    uint16_t DataH,DataL;
    
    /*读取加速度*/
    DataH = MPU6050_ReadReg(MPU6050_ACCEL_XOUT_H);
    DataL = MPU6050_ReadReg(MPU6050_ACCEL_XOUT_L);
    *AccX = (DataH<<8) | DataL;
    
    DataH = MPU6050_ReadReg(MPU6050_ACCEL_YOUT_H);
    DataL = MPU6050_ReadReg(MPU6050_ACCEL_YOUT_L);
    *AccY = (DataH<<8) | DataL;
    
    DataH = MPU6050_ReadReg(MPU6050_ACCEL_ZOUT_H);
    DataL = MPU6050_ReadReg(MPU6050_ACCEL_ZOUT_L);
    *AccZ = (DataH<<8) | DataL;
    
    /*读取角速度*/
    DataH = MPU6050_ReadReg(MPU6050_GYRO_XOUT_H);
    DataL = MPU6050_ReadReg(MPU6050_GYRO_XOUT_L);
    *GyroX = (DataH<<8) | DataL;
    
    DataH = MPU6050_ReadReg(MPU6050_GYRO_YOUT_H);
    DataL = MPU6050_ReadReg(MPU6050_GYRO_YOUT_L);
    *GyroY = (DataH<<8) | DataL;
    
    DataH = MPU6050_ReadReg(MPU6050_GYRO_ZOUT_H);
    DataL = MPU6050_ReadReg(MPU6050_GYRO_ZOUT_L);
    *GyroZ = (DataH<<8) | DataL;
    

}

读取数据结果:

标签:int16,WriteReg,uint8,MPU6050,I2C,1000
From: https://www.cnblogs.com/Yannnnnn/p/17677912.html

相关文章

  • 协议I2C
    SCL  SDA  同步,半双工 开漏+弱上拉,谁用这跟线,就下拉成低电平想输出,去拉杆子或放手,操作杆子变化想输入,直接放手,看电平高低就行线与,一个低电平,全部低电平,可以利用这个执行多主机下的时钟同步和总线仲裁 时序 主机发出起始信号(SCL高,SDA下拉),从机捕获这个状态时,就复......
  • linux自带i2c工具使用
    I2C总线被全球超过50个公司的1000+个ICs所使用,已然是一个世界标准.另外,I2C总线与多种不同的控制总线是兼容的,比如SMBus(系统管理总线),PMBus(电源管理总线),IPMI(智能平台管理总线),DDC(显示数据通道)以及ATCA(高级电信架构).如果没记错的话,linux中的I2C框架是完全支持SMBu......
  • SHT20温湿度传感器数据读取/HAL/硬件I2C
    SHT20CommandHold/NoHoldMasterModeHoldMasterMode:SHT20在测量完之前会拉低SCL,暂停通信。NoHoldMastermode:测量未完成,SHT20只回应NACK*数据最后两位是状态位,计算时置0#include"S_SHT20.h"#include"S_IIC.h"#include"stdio.h"/**SHT20地址:100000......
  • IMXRT 1060 LPI2C总结
    1. However,theLPI2CwillnolongerstalltheI2CbuswaitingforthetransmitorreceiveFIFO,andafterthetransmitFIFOisempty,theLPI2CgeneratesaSTOPconditionautomatically.LPI2C不会因为等待发送/接收FIFO而让I2C总线搁置,并且当发送FIFO为空......
  • I2C知识总结
    一、1.I2C接两个上拉电阻的意义节选自百度百科中高阻态电路设计人员经常使用上拉电阻以及下拉电阻(通常为1至100kΩ)让这个处于三态的节点能有确定的默认逻辑状态,防止状态不定或感染噪声。例如,I²C总线协议(一种常用的设备间双向通信的协议)在两条通信线上使用了上拉电阻。当设备......
  • USART、SPI和I2C通信协议:串行通信中的异同比较
    在嵌入式系统和通信领域,USART(UniversalSynchronous/AsynchronousReceiver/Transmitter)、SPI(SerialPeripheralInterface)和I2C(Inter-IntegratedCircuit)是三种常见的串行通信协议。它们各自具有独特的特点和应用场景,本文将对它们的异同进行比较,帮助读者更好地理解它们的适用场景......
  • 陀螺仪的使用及四元数解算(MPU6050为例)
    陀螺仪的介绍常用的六轴陀螺仪有MPU6050,icm-20602。MPU6050基本上只用软件IIC驱动,速率较慢,数据漂移也相对大一点。陀螺仪的使用以MPU6050为例。软件IIC驱动->MPU6050寄存器基本配置->读取原始数据->将原始数据滤波后使用。原始数据可以使用互补滤波,卡尔曼滤波,解算四元......
  • zynq7000 I2C RTC 与 串口使用
     RS485串口测试硬件上2路串口,其中UART1对应PSSTDIN/OUT,UART0对应RS485;图‑1RS485电路,自动转换输入、输出方向可参考https://blog.csdn.net/qq_39400113/article/details/122387133图‑2使能2路串口图‑3先查看串口设备状态其中0对应UART串口,1对应RS485......
  • I2C死锁产生机理与解决方法
    在I2C实际使用过程中,最容易出现的一个问题就是死锁,其主要表现为:SCL持续为高,SDA持续为低。产生机理I2C死锁产生的机理是:当Slave输出应答信号或者输出数据0时,Master发生异常复位,此时SCL会保持或被释放为高电平,但因为Slave没有复位,就会继续应答,保持SDA为低电平,直到SCL变为低电平;Ma......
  • 编写设备驱动之i2c_client -10
    编写设备驱动之i2c_client参考资料:Linux内核文档:Documentation\i2c\instantiating-devices.rstDocumentation\i2c\writing-clients.rstLinux内核驱动程序示例:drivers/eeprom/at24.c本节代码:GIT仓库中IMX6ULL\source\04_I2C\03_ap3216c_okSTM32MP15......