概述
本章主要介紹如何修改VL6180X傳感器的I2C地址,并成功驅(qū)動設(shè)備以使用新的地址。VL6180X是一種多功能、高性能的接近和環(huán)境光傳感器,常用于測量物體與傳感器之間的距離、檢測物體的接近程度以及測量環(huán)境光強(qiáng)度等應(yīng)用。
在某些情況下,可能需要在同一I2C總線上使用多個VL6180X傳感器,或與其他I2C設(shè)備共享總線資源。由于每個VL6180X傳感器具有默認(rèn)的固定I2C地址,這可能導(dǎo)致地址沖突,從而阻礙多個傳感器的同時使用。為了解決這個問題,可以通過修改傳感器的I2C地址來避免沖突,并使其能夠在同一總線上與其他設(shè)備共存。
修改VL6180X傳感器的I2C地址,通過配置傳感器內(nèi)部寄存器來修改I2C地址。將提供具體的寄存器配置值和步驟,確保能夠成功更改傳感器的地址。然后驅(qū)動新地址的VL6180X傳感器,使用新的I2C地址與VL6180X傳感器進(jìn)行通信。
最近在弄ST和瑞薩RA的課程,需要樣片的可以加群申請:615061293 。
樣品申請
https://www.wjx.top/vm/OhcKxJk.aspx#
視頻教程
https://www.bilibili.com/video/BV1xP411k7H2//
完整代碼下載
https://download.csdn.net/download/qq_24312945/88051584
修改設(shè)備地址
VL6180X使用I2C總線進(jìn)行通信。默認(rèn)情況下,VL6180X的7位地址為0x29。然而,為了避免地址沖突并允許多個傳感器共享相同的I2C總線,用戶可以通過向寄存器I2C_SLAVE__DEVICE_ADDRESS(寄存器地址為0x212)寫入自定義的7位地址來修改傳感器的地址。
在使用I2C總線和修改傳感器地址時注意以下事項:確保正確連接上拉電阻、避免短路或接線錯誤、提供穩(wěn)定的電源供應(yīng)等。
查看寄存器I2C_SLAVE__DEVICE_ADDRESS {0x212}可以得知每次上電之后地址會恢復(fù)為初始值。
首先,找到并打開VL6180.h文件,該文件包含了VL6180X傳感器的相關(guān)定義和配置。
在VL6180.h文件中,可以定義4個設(shè)備的地址常量,分別表示不同的傳感器。例如,可以使用以下方式定義地址常量:
#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
這里的地址值是根據(jù)實際需求和硬件連接情況選擇的,確保每個設(shè)備具有唯一的地址。
通過使用定義的設(shè)備地址常量,可以輕松地管理和操作多個VL6180X傳感器。
首先使用VL6180X_Init函數(shù)初始化傳感器,接下來通過調(diào)用VL6180X_SetDeviceAddress函數(shù)來修改設(shè)備地址。這個函數(shù)需要兩個參數(shù):舊的設(shè)備地址(即初始的設(shè)備地址)和新的設(shè)備地址(你希望將傳感器的地址修改為的值)。
/* 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循環(huán)中,使用VL6180X_Read_Range函數(shù)從傳感器讀取距離數(shù)據(jù)。這個函數(shù)需要傳入設(shè)備的新地址VL6180X_DEFAULT_I2C_ADDR4作為參數(shù)。
/* 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 */
}
測試結(jié)果
測試距離結(jié)果如下所示。
審核編輯:湯梓紅
-
傳感器
+關(guān)注
關(guān)注
2551文章
51097瀏覽量
753527 -
TOF
+關(guān)注
關(guān)注
9文章
483瀏覽量
36344 -
stm32cubemx
+關(guān)注
關(guān)注
5文章
283瀏覽量
14807
發(fā)布評論請先 登錄
相關(guān)推薦
評論