基于STM32CUBEMX驱动TOF模块VL6180与VL6180X(3)----修改设备地址

描述

概述

本章主要介绍如何修改VL6180X传感器的I2C地址,并成功驱动设备以使用新的地址。VL6180X是一种多功能、高性能的接近和环境光传感器,常用于测量物体与传感器之间的距离、检测物体的接近程度以及测量环境光强度等应用。

在某些情况下,可能需要在同一I2C总线上使用多个VL6180X传感器,或与其他I2C设备共享总线资源。由于每个VL6180X传感器具有默认的固定I2C地址,这可能导致地址冲突,从而阻碍多个传感器的同时使用。为了解决这个问题,可以通过修改传感器的I2C地址来避免冲突,并使其能够在同一总线上与其他设备共存。

修改VL6180X传感器的I2C地址,通过配置传感器内部寄存器来修改I2C地址。将提供具体的寄存器配置值和步骤,确保能够成功更改传感器的地址。然后驱动新地址的VL6180X传感器,使用新的I2C地址与VL6180X传感器进行通信。

最近在弄ST和瑞萨RA的课程,需要样片的可以加群申请:615061293 。
stm32cubemx

样品申请

https://www.wjx.top/vm/OhcKxJk.aspx#

视频教程

https://www.bilibili.com/video/BV1xP411k7H2//

完整代码下载

https://download.csdn.net/download/qq_24312945/88051584

修改设备地址

VL6180X使用I²C总线进行通信。默认情况下,VL6180X的7位地址为0x29。然而,为了避免地址冲突并允许多个传感器共享相同的I2C总线,用户可以通过向寄存器I2C_SLAVE__DEVICE_ADDRESS(寄存器地址为0x212)写入自定义的7位地址来修改传感器的地址。
在使用I2C总线和修改传感器地址时注意以下事项:确保正确连接上拉电阻、避免短路或接线错误、提供稳定的电源供应等。
stm32cubemx

查看寄存器I2C_SLAVE__DEVICE_ADDRESS {0x212}可以得知每次上电之后地址会恢复为初始值。

stm32cubemx

首先,找到并打开VL6180.h文件,该文件包含了VL6180X传感器的相关定义和配置。
在VL6180.h文件中,可以定义4个设备的地址常量,分别表示不同的传感器。例如,可以使用以下方式定义地址常量:

#define VL6180X_DEFAULT_I2C_ADDR1 0x29  ///< The fixed I2C addres
#define VL6180X_DEFAULT_I2C_ADDR2 0x2A  ///< The fixed I2C addres
#define VL6180X_DEFAULT_I2C_ADDR3 0x2B  ///< The fixed I2C addres
#define VL6180X_DEFAULT_I2C_ADDR4 0x2C  ///< The fixed I2C addres

这里的地址值是根据实际需求和硬件连接情况选择的,确保每个设备具有唯一的地址。
通过使用定义的设备地址常量,可以轻松地管理和操作多个VL6180X传感器。
首先使用VL6180X_Init函数初始化传感器,接下来通过调用VL6180X_SetDeviceAddress函数来修改设备地址。这个函数需要两个参数:旧的设备地址(即初始的设备地址)和新的设备地址(你希望将传感器的地址修改为的值)。

/* USER CODE BEGIN 2 */

	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);	
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);	

	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);	
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET);	

	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);	
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET);	
	
	
//VL6180_4
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_SET);	
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);

	HAL_Delay(1);
	VL6180X_Init(VL6180X_DEFAULT_I2C_ADDR1);
/************修改VL6180_4地址为VL6180X_DEFAULT_I2C_ADDR2(0x2A)*********************/
	VL6180X_WriteByte(VL6180X_DEFAULT_I2C_ADDR1,0x0212,VL6180X_DEFAULT_I2C_ADDR4);
//	HAL_Delay(100);
	uint8_t ii=VL6180X_ReadByte(VL6180X_DEFAULT_I2C_ADDR4,0x0212);	
	printf("地址为=0x%Xn",ii);		
	VL6180x_UpscaleSetScaling(VL6180X_DEFAULT_I2C_ADDR4,3);//缩放x3
	uint8_t id=VL6180X_Read_ID(VL6180X_DEFAULT_I2C_ADDR4);
	printf("id=%dn",id);	


  /* USER CODE END 2 */

主程序

在主程序的while循环中,使用VL6180X_Read_Range函数从传感器读取距离数据。这个函数需要传入设备的新地址VL6180X_DEFAULT_I2C_ADDR4作为参数。

/* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		
		VL6180_L1=VL6180X_Read_Range(VL6180X_DEFAULT_I2C_ADDR4);

		printf("VL6180_L1=%dmmn",VL6180_L1*3);
		HAL_Delay(1000);			
		
		
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

测试结果

测试距离结果如下所示。
stm32cubemx

审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分