文章目錄
前言
1 產(chǎn)品概述
1.1 技術(shù)規(guī)格
1.2?系統(tǒng)框圖
1.3?設(shè)備引腳分布
2 工作流程
2.1?系統(tǒng)功能描述
2.2?狀態(tài)機(jī)描述
2.3?測距模式說明
3?控制接口
3.1 設(shè)備地址
3.2?I2C寫1個(gè)字節(jié)數(shù)據(jù)
3.3?I2C讀1個(gè)字節(jié)數(shù)據(jù)
3.4?I2C寫多個(gè)字節(jié)數(shù)據(jù)
3.5?I2C讀多個(gè)字節(jié)數(shù)據(jù)
3.6?I2C 接口 - 參考寄存器
4 代碼說明
4.1 下載編譯
4.2 代碼結(jié)構(gòu)
5 波形分析
前言
本文介紹了在 ESP32 DEVKIT V1 開發(fā)板上開發(fā) VL53L3CX 距離傳感器的過程。
VL53L3CX 是意法半導(dǎo)體的最新飛行時(shí)間(ToF)產(chǎn)品,并嵌入了意法半導(dǎo)體的第三代 FlightSense 專利技術(shù)。它結(jié)合了高性能的接近和測距傳感器,具有多目標(biāo)距離測量和自動(dòng)污點(diǎn)校正功能。微型可回流封裝集成了單光子雪崩二極管(SPAD)陣列和物理紅外濾光片,在各種環(huán)境照明條件下實(shí)現(xiàn)最佳測距性能,并配有各種蓋片。
VL53L3CX 結(jié)合了高性能接近傳感器的優(yōu)點(diǎn)、出色的近距離線性度以及高達(dá) 3m 的測距能力。
憑借獲得專利的算法和巧妙的模塊構(gòu)造,VL53L3CX 還能夠通過深度檢測視野(FoV)內(nèi)的不同對象。意法半導(dǎo)體的直方圖算法允許覆蓋玻璃的串?dāng)_抗擾度超過 80cm,并具有動(dòng)態(tài)污跡補(bǔ)償功能。
-
完全集成的小型化模塊
- 發(fā)射器:940nm 不可見激光(VCSEL)及其模擬驅(qū)動(dòng)器;
- 運(yùn)行進(jìn)階數(shù)字固件的低功耗微控制器;
- 尺寸:4.4 x 2.4 x 1 mm。
-
快速,精確測距
- 基于直方圖技術(shù);
- 完整視野(FoV)時(shí),高達(dá) 300cm+ 的檢測范圍;
- 使用專利算法(直接 ToF)可以遠(yuǎn)距離覆蓋玻璃串?dāng)_和指紋污跡;
- 動(dòng)態(tài)指紋污跡補(bǔ)償;
- 短距離,高精度線性;
- 多目標(biāo)檢測和距離測量。
- 典型全視野:25°
-
方便集成
- 可回流組件;
- 提供零件間或通用形狀串?dāng)_校準(zhǔn);
- 單電源;
- 適用于多種類型的覆蓋玻璃材料;
- I2C 接口(可達(dá) 1MHz);
- Xshutdown 復(fù)位并中斷 GPIO 以優(yōu)化測距操作;
- 包含 C 和 Linux 全套軟件驅(qū)動(dòng)程序。
1 產(chǎn)品概述
1.1 技術(shù)規(guī)格
1.2?系統(tǒng)框圖
1.3?設(shè)備引腳分布
2 工作流程
2.1?系統(tǒng)功能描述
下圖顯示了系統(tǒng)級功能說明。客戶主機(jī)應(yīng)用程序使用應(yīng)用編程接口 (API) 控制設(shè)備。API 的實(shí)現(xiàn)以驅(qū)動(dòng)程序(裸 C 代碼或 Linux 驅(qū)動(dòng)程序)的形式交付給客戶。
驅(qū)動(dòng)程序與客戶應(yīng)用程序共享一套高級功能,可控制設(shè)備固件,如初始化、范圍啟動(dòng)/停止、設(shè)置系統(tǒng)精度等。
用戶的應(yīng)用程序調(diào)用 API 中的函數(shù),然后 API 通過 IIC 與 VL53L3CX 中的固件(Firmware)進(jìn)行通信,固件再操作硬件。
2.2?狀態(tài)機(jī)描述
下圖顯示了設(shè)備狀態(tài)機(jī)。
上電以后,VL53L3CX 會進(jìn)入 Hw Standby 狀態(tài),這是待機(jī)狀態(tài),功耗很低。然后拉高 XSHUT腳,讓 VL53L3CX 進(jìn)入 Initial Boot 狀態(tài),自動(dòng)進(jìn)入軟件待機(jī)狀態(tài)。主機(jī)初始化開始,準(zhǔn)備校準(zhǔn)。如果不需要待機(jī)狀態(tài),可以把 XSHUT 接到 AVDD 上。VL53L3CX 處于休眠狀態(tài)是不能進(jìn)行 IIC 通信的。
2.3?測距模式說明
VL53L3CX 的專用運(yùn)行模式(稱為 "預(yù)設(shè)")是 "測距模式"。在該模式下,軟件驅(qū)動(dòng)程序提供了統(tǒng)包功能,可在所有客戶應(yīng)用中快速、輕松地進(jìn)行測距: 測距模式是獲得 VL53L3CX 最佳功能的配置。
- 測距模式對 80cm 以外的蓋板玻璃串?dāng)_和污點(diǎn)具有本機(jī)抗擾度。利用獲得專利的算法(直接 ToF),可以進(jìn)行時(shí)間濾波,將串?dāng)_信號與距離大于 80cm 的物體信號區(qū)分開來?,F(xiàn)在,與市場上的其他傳感器不同,在蓋上玻璃的情況下,可以實(shí)現(xiàn) 300cm 的同類最佳測距性能,而且無需任何計(jì)算;
- 測距模式可同時(shí)檢測 FoV 內(nèi)的多個(gè)物體。軟件驅(qū)動(dòng)程序最多可同時(shí)輸出四個(gè)范圍,以顯示物體的范圍。詳情請查閱最新的軟件驅(qū)動(dòng)程序手冊 了解更多詳情;
- 調(diào)用驅(qū)動(dòng)函數(shù)后,默認(rèn)以 30Hz 的頻率執(zhí)行測距操作(典型測距操作持續(xù) 33ms)。它包括內(nèi)部內(nèi)務(wù)管理、測距和后處理。
3?控制接口
本節(jié)介紹控制接口。I2C 接口使用兩個(gè)信號:串行數(shù)據(jù)線 (SDA) 和串行時(shí)鐘線 (SCL)。連接到總線上的每個(gè)設(shè)備都使用唯一的地址,存在簡單的主/從關(guān)系。
SDA 和 SCL 線路均通過主機(jī)上的上拉電阻與正電源電壓相連。當(dāng)線路處于浮動(dòng)狀態(tài),上拉電阻器將線路拉高時(shí),線路處于高電平狀態(tài)。當(dāng)沒有數(shù)據(jù)傳輸時(shí),兩條線路均為高電平。
時(shí)鐘信號 (SCL) 由主設(shè)備生成。主設(shè)備啟動(dòng)數(shù)據(jù)傳輸。產(chǎn)品設(shè)備上的 I2C 總線最大速度為1Mbits/s,默認(rèn)設(shè)備地址為 0x52。
信息以 8 位數(shù)據(jù)包(字節(jié))的形式打包,后面總是跟著一個(gè)確認(rèn)位,Ac 表示 VL53L3CX 確認(rèn),Am 表示主確認(rèn)(主機(jī)總線主控)。內(nèi)部數(shù)據(jù)通過在 SCL 上升沿采樣 SDA? 產(chǎn)生。外部數(shù)據(jù)必須在 SCL 的高電平期間保持穩(wěn)定。但在 SCL 為高電平時(shí),SDA 分別下降或上升時(shí)的啟動(dòng) (S) 或停止 (P) 條件除外。
報(bào)文包含一系列字節(jié),前面是啟動(dòng)條件,后面是停止或重復(fù)啟動(dòng)(另一個(gè)啟動(dòng)條件,但前面沒有停止條件),然后是另一條報(bào)文。第一個(gè)字節(jié)包含設(shè)備地址(0x52),并指定數(shù)據(jù)方向。如果最低有效位為低位(即 0x52),則報(bào)文是主從寫入。如果 LSB 被置位(即 0x53),則信息是主從讀取。
3.1 設(shè)備地址
VL53L3CX 模塊的 I2C 通訊地址是 0x52。
3.2?I2C寫1個(gè)字節(jié)數(shù)據(jù)
與飛行時(shí)間傳感器的所有串行接口通信必須以啟動(dòng)條件開始。VL53L3CX 模塊通過將 SDA 線變?yōu)榈碗娖絹泶_認(rèn)收到有效地址。讀/寫位(地址字節(jié)的 LSB)的狀態(tài)將被存儲,并可解釋從 SDA 采樣的下一個(gè)數(shù)據(jù)字節(jié)。在寫入序列中,接收到的第二個(gè)字節(jié)提供一個(gè) 16 位索引,該索引指向一個(gè)內(nèi)部 8 位寄存器。
從站接收到數(shù)據(jù)后,逐位寫入串行/并行寄存器。從站接收到每個(gè)數(shù)據(jù)字節(jié)后,都會產(chǎn)生一個(gè)確認(rèn)。然后,數(shù)據(jù)將被存儲到由當(dāng)前索引尋址的內(nèi)部寄存器中。
在讀取信息期間,當(dāng)前索引所尋址寄存器的內(nèi)容將在設(shè)備地址字節(jié)之后的字節(jié)中讀出。該寄存器的內(nèi)容被并行加載到串行/并行寄存器中,并通過 SCL 的下降沿從設(shè)備中時(shí)鐘輸出。
3.3?I2C讀1個(gè)字節(jié)數(shù)據(jù)
在讀取和寫入信息序列中,每個(gè)字節(jié)結(jié)束時(shí),接收設(shè)備都會發(fā)出確認(rèn)(即 VL53L3CX 設(shè)備為寫入,主機(jī)為讀?。?/p>
3.4?I2C寫多個(gè)字節(jié)數(shù)據(jù)
總線主站只能通過發(fā)出停止條件或在讀取操作過程中讀取完整字節(jié)后發(fā)出負(fù)確認(rèn)(即不將 SDA 線路拉低)來終止報(bào)文。接口還支持自動(dòng)遞增索引。因此,主站可以連續(xù)向從站發(fā)送數(shù)據(jù)字節(jié),直到從站無法提供確認(rèn),或者主站通過停止條件終止寫入通信。如果使用自動(dòng)遞增功能,主站就不必在發(fā)送數(shù)據(jù)字節(jié)時(shí)同時(shí)發(fā)送地址索引。
3.5?I2C讀多個(gè)字節(jié)數(shù)據(jù)
3.6?I2C 接口 - 參考寄存器
下表所示寄存器可用于驗(yàn)證用戶 I2C 接口。
4 代碼說明
4.1 下載編譯
1. 下載代碼
git clone https://github.com/EmotionFly/ESP32_VL53L3CX.git
cd ESP32_VL53L3CX
2. 獲取?esp-idf?庫的環(huán)境
. $HOME/esp/esp-idf/export.sh
3. 編譯—>下載—>監(jiān)控
idf.py flash monitor
4.2 代碼結(jié)構(gòu)
1. 先確定測量數(shù)據(jù)是否已準(zhǔn)備就緒。
VL53L1_GetMeasurementDataReady(&dev, &dataReady);
VL53L1_Error VL53L1_GetMeasurementDataReady(VL53L1_DEV Dev,
uint8_t *pMeasurementDataReady)
{
VL53L1_Error Status = VL53L1_ERROR_NONE;
LOG_FUNCTION_START("");
Status = VL53L1_is_new_data_ready(Dev, pMeasurementDataReady);
LOG_FUNCTION_END(Status);
return Status;
}
本質(zhì)是訪問 GPIO__TIO_HV_STATUS(0x0031) 寄存器的數(shù)據(jù)。
2. 獲取測量數(shù)據(jù)。
VL53L1_GetRangingMeasurementData(&dev, &rangingData);
VL53L1_Error VL53L1_GetRangingMeasurementData(VL53L1_DEV Dev,
VL53L1_RangingMeasurementData_t *pRangingMeasurementData)
{
VL53L1_Error Status = VL53L1_ERROR_NONE;
VL53L1_range_results_t results;
VL53L1_range_results_t *presults = &results;
VL53L1_range_data_t *presults_data;
LOG_FUNCTION_START("");
/* Clear Ranging Data */
memset(pRangingMeasurementData, 0xFF,
sizeof(VL53L1_RangingMeasurementData_t));
/* Get Ranging Data */
Status = VL53L1_get_device_results(
Dev,
VL53L1_DEVICERESULTSLEVEL_FULL,
presults);
if (Status == VL53L1_ERROR_NONE) {
pRangingMeasurementData->StreamCount = presults->stream_count;
/* in case of lite ranging or autonomous the following function
* returns index = 0
*/
presults_data = &(presults->data[0]);
Status = SetSimpleData(Dev, 1,
presults->device_status,
presults_data,
pRangingMeasurementData);
}
LOG_FUNCTION_END(Status);
return Status;
}
本質(zhì)是訪問 RESULT__RANGE_STATUS(0x0089)和 RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD0(0x0096)寄存器的數(shù)據(jù)。
3.?系統(tǒng)中斷清零
本質(zhì)是將 SYSTEM__INTERRUPT_CLEAR(0x0086) 寄存器置 1。
5 波形分析
1.?GPIO__TIO_HV_STATUS(0x0031)
從?0x0031?寄存器讀取數(shù)據(jù),當(dāng)返回值為 0x02 時(shí),表示測量數(shù)據(jù)準(zhǔn)備就緒。
2.?RESULT__RANGE_STATUS(0x0089)和 RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD0(0x0096)
從?0x0089?寄存器讀取數(shù)據(jù),返回值為 0x09。
從?0x0096?寄存器讀取數(shù)據(jù),返回值為 0x0069,為測量值。
3.?SYSTEM__INTERRUPT_CLEAR(0x0086)
向?0x0086?寄存器寫入 1。文章來源:http://www.zghlxwxcb.cn/news/detail-671499.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-671499.html
到了這里,關(guān)于ESP32應(yīng)用教程(1)— VL53L3CX距離傳感器的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!