MPU6050调试记录

2 篇文章 0 订阅

1. 硬件部分

使用的是淘宝上销售最多的6050模块
参考如图
在这里插入图片描述
下图是模块的原理图
在这里插入图片描述
使用了模块上的4根线,VCC,GND ,SCL,SDA 。具体接线方式请自行想象。

设备因为在原理图上将AD0,连接到了GND,
所以它
7位地址是 1101000 (0x68)
八位写地址 0xD1(11010001)

PS:不知道是不是板子上的LDO不好,在正负电源接反后,会烧掉LDO,以及芯片。所以请注意不要将电压接反了。

2 芯片寄存器

0x6B寄存器。设定值为0x00,

可以开始读取陀螺仪、加速度以及温度的参数。否则读出来的全为0
在这里插入图片描述

0x19寄存器。设定值为0x07

采样率分频器 SMPLRT_DIV
采样率 = 陀螺仪输出率 / (1 + SMPLRT_DIV) 陀螺仪输出率 DLPF_CFG(1A) 控制
在这里插入图片描述

0x1A寄存器。设定值为0x06

低通滤波器,以及采样频率的设置???还需要继续阅读
在这里插入图片描述

0x1C寄存器。设定值为0x00

加速度计配置
在这里插入图片描述
在这里插入图片描述

0x1B寄存器。设定值为0x08

在这里插入图片描述
在这里插入图片描述

加速度测量

在这里插入图片描述

温度

Temperature in degrees C = (TEMP_OUT Register Value as a signed quantity)/340 + 36.53
以摄氏度为单位的温度 = (TEMP_OUT 寄存器值作为有符号数)/340 + 36.53
在这里插入图片描述

陀螺仪测量

在这里插入图片描述

PS:以上寄存器信息仅作为速查参考,详情请配合MPU6050的寄存器数据手册食用。

3 软件代码

基础逻辑如下图所示

发送写指令:0xD0
发送读的起始地址:0x41
发送读指令:0xD1
接收数据:0xF2 ,0xC0
在这里插入图片描述
控制芯片使用的是恒烁的 CX32L003
官方资料连接:http://zbitsemi.com/display.php?id=44

2. 6050初始化代码

强调一下,0x6B这个地址必须要写数值进去,否则无法读出数据。

void MPU6050_INIT()
{
	
	int i=0,j=0;
  //在初始化之前要延时一段时间,若没有延时,则断电后再上电数据可能会出错??
  for(i=0;i<1000;i++)
  {
    for(j=0;j<1000;j++)
    {
      ;
    }
  }
	
	uint8_t Send_Data[2] = {0x6b,0x00};//解除休眠状态
	HAL_I2C_Master_Transmit(&i2c_test, 0xD1, Send_Data, 2);
	Send_Data[0] = 0x19;//采样率分频器  SMPLRT_DIV
	Send_Data[1] = 0x07;//采样率 = 陀螺仪输出率 / (1 + SMPLRT_DIV)  陀螺仪输出率  DLPF_CFG(1A) 控制
	HAL_I2C_Master_Transmit(&i2c_test, 0xD1, Send_Data, 2);
	
	Send_Data[0] = 0x1A;//EXT_SYNC_SET[2:0]  DLPF_CFG[2:0]低通滤波器的设置,截止频率是1K,带宽是5K
	Send_Data[1] = 0x06;//
	HAL_I2C_Master_Transmit(&i2c_test, 0xD1, Send_Data, 2);
	
	Send_Data[0] = 0x1C;//加速度计配置
	Send_Data[1] = 0x00;//± 2g
	HAL_I2C_Master_Transmit(&i2c_test, 0xD1, Send_Data, 2);

	Send_Data[0] = 0x1B;//陀螺仪配置
	Send_Data[1] = 0x08;//± 500 °/s
	HAL_I2C_Master_Transmit(&i2c_test, 0xD1, Send_Data, 2);
}

3. 主函数的操作代码

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
//	HAL_StatusTypeDef  ret = HAL_ERROR;
	
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
	HAL_Init();		
	
  /* Configure the system clock to HIRC 24MHz*/
	SystemClock_Config();
	__HAL_RCC_GPIOA_CLK_ENABLE();
	__HAL_RCC_GPIOB_CLK_ENABLE();
	__HAL_RCC_GPIOC_CLK_ENABLE();
	__HAL_RCC_GPIOD_CLK_ENABLE();
	/* Initialize BSP Led for LED1 */	
	BSP_LED_Init(LED1);
  /* Configure uart1 for printf */	
	LogInit();//PD5 PD6
	printf("Printf success using UART1, PD5-TXD, PD6-RXD\r\n");

	I2CClock_Config();
	I2C_Init(); //PB4 PB5
	uint8_t pR2_Data[] = {0X00, 0X00,0X00, 0X00,0X00, 0X00,0X00, 0X00,0X00, 0X00,0X00, 0X00,0X00, 0X00};
	preg1_Data[0] = 0x41;
	MPU6050_INIT();
	while (1)
	{
		HAL_I2C_Master_Receive(&i2c_test, 0xD1, preg1_Data,1, pR2_Data, 14);
		printf("jiaodu = %u \r\n",jiaodu);
		BSP_LED_Toggle(LED1);
		HAL_Delay(100);
	}
}

主函数中只是将数据读取出来,并且存在数组 pR2_Data 中,后续的拟合完善后增加上信息。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值