這次我們(men) 聊一聊激光測距模塊
我們(men) 用的是正點原子的STM32F103ZET6精英版。
一。VL53L0X 簡介
1.定義(yi)
VL53L0X 是 ToF 激光測距傳(chuan) 感器,利用飛行時間(ToF)原理,通過光子的飛行來回時間與(yu) 光速的計算,實現測距應用。
二。測量模式
1.VL53L0X 傳(chuan) 感器提供了 3 種測量模式,單次測量,連續測量,定時測量。
2.三種測量模式
(1) Single ranging(單次測量) ,在該模式下隻觸發執行一次測距測量,測量結束後,
VL53L0X 傳(chuan) 感器會(hui) 返回待機狀態,等待下一次觸發。
(2) Continuous ranging(連續測量) ,在該模式下會(hui) 以連續的方式執行測距測量。一
旦測量結束,下一次測量就會(hui) 立即啟動,用戶必須停止測距才能返回到待機狀態,最後的一
次測量在停止前完成。
(3) Timed ranging(定時測量) ,在該模式下會(hui) 以連續的方式執行測距測量。測量結
束後,在用戶定義(yi) 的延遲時間之後,才會(hui) 啟動下一次測量。用戶必須停止測距才能返回到待
機狀態,最後的一次測量在停機前完成。
三。ST 官方提供了 4 種不同的精度模式
注意:
針對不同的精度模式,測量時間也是有所區別的,
測量時間最快為(wei) 高速模式,隻需 20ms 內(nei) 就可以采樣一次,但精度確存在有±5%的誤差範圍。
而在長距離精度模式下,測距距離能達到 2m,測量時間在 33ms 內(nei) ,
但測量時需在黑暗條件(無紅外線)的環境下。
所以在實際的應用中,需根據當前的要求去選擇合適的精度模式,以達到最佳的測量效果。
四。工作流程
當上電,VL53L0X會(hui) 進入Hw Standby狀態,這是待機狀態,功耗很低。然後拉高XSHUT引腳,讓VL53L0X進入Fw Boot狀態,開始準備測距。如果不需要待機狀態,可以把XSHUT接到AVDD上。VL53L0X處於(yu) 休眠狀態是不能進行通信IIC
注意: VL53L0X有3種工作模式:
(1)單次模式:收到測距開始命令後,開始進行測量,測量完成後自動退出,進入Sw Standby狀態。
(2)連續模式:收到測距開始命令後,就一直進行測量,直到收到測距停止命令。收到測距停止命令時,會(hui) 把最後一次測量完成才退出。
(3)連續間隔模式:收到測距開始命令後,開始進行測量,完成一次測量後,等待一段時間再進行
下次測量,直到收到測距停止命令。測量等待間隔時間可調。
五。原理圖
六。引腳
1.基礎
模塊自帶了 2.8V 超低壓差穩壓芯片,給 VL53L0X 芯片供電,因此外部供電可以選擇: 3.3V/5V 都可以的。
模塊通過 P1 排針與(yu) 外部連接,引出了 VCC、 GND、IIC_SDA、 IIC_SCL、 VL_INT、 VL_XSH 信號。
其中, IIC_SCL、 IIC_SDA、 VL_INT 和 VL_XSH帶了 4.7K 上拉電阻,外部可以不用再加上拉電阻了。
2.ATK-VL53L0X 激光測距傳(chuan) 感器模塊通過一個(ge) 1*6 的排針(P1)同外部電路連接,各引腳的詳細描述如表 2.1.1 所示:
七。core文件
1.core 文件夾下有四個(ge) 重點.c 文件,
分別是: vl53l0x_api.c、 vl53l0x_api_calibration.c、vl53l0x_api_core.c 和 vl53l0x_api_strings.c
2.這四個(ge) C 文件的關(guan) 係可以用以下關(guan) 係圖來表示
注釋:
- vl53l0x_api_core.c 文件,
提供有 vl53l0x 傳(chuan) 感器的底層操作核心函數。
2.vl53l0x_api_calibration.c 文件,
提供有 vl53l0x 傳(chuan) 感器校準操作的底層函數。
3 vl53l0x_api_strings.c 文件,
它實現信息內(nei) 容的獲取,提供有獲取 vl53l0x 傳(chuan) 感器設備 ID信息的底層函數,以及提供根據功能函數返回的狀態值去獲得其狀態信息(字符串)的底層函數
4.vl53l0x_api.c 文件,
則對以上的底層函數進行封裝,提供包括係統初始化、測量模式配置、參數配置、校準功能、狀態信息獲取、以及中斷配置等 API 函數。在一般的使用時,直接調取 vl53l0x_api.c 提供的 API 函數就可以了。
下麵是激光測距的API函數部分:
一。常用的API函數有這些
二。各個(ge) API函數的備注
1、 VL53L0X_Datalnit()函數
(1)該函數實現傳(chuan) 感器初始化,
(2)函數為(wei) VL53L0X_DataInit(VL53L0X_DEV Dev),
(3)入口參數類型為(wei) VL53L0X_DEV 結構體(ti) ,結構體(ti) 變量為(wei) 設置傳(chuan) 感器的 I2C 地址等重要信息。
注意:在失能傳(chuan) 感器設備,到再重新使能設備,需調用該函數進行初始化。
2、 VL53L0X_Staticlnit()函數
(1)該函數實現傳(chuan) 感器寄存器值恢複默認初值和工作狀態切換為(wei) 待機狀態
(2)函數為(wei) VL53L0X_StaticInit(VL53L0X_DEV Dev)
(3)入口參數為(wei) VL53L0X_DEV 結構體(ti) 變量,VL53L0X_DEV結構體(ti) 變量為(wei) 設置傳(chuan) 感器的 I2C 地址等重要信息
(4)該函數在初始化時進行調用
3、 VL53L0X_SetDeviceAddress()函數
(1)該函數實現修改傳(chuan) 感器設備的 I2C 地址
(2)函數為(wei) VL53L0X_SetDeviceAddress(VL53L0X_DEVDev,uint8_t DeviceAddress)
(3)入口參數為(wei) VL53L0X_DEV 結構體(ti) 變量和 DeviceAddress 變量
(4)VL53L0X_DEV 結構體(ti) 變量為(wei) 設置傳(chuan) 感器 I2C 地址等重要信息
(5)DeviceAddress 變量為(wei) 新設置的 I2C 地址
注意:重新使能設備後,I2C 地址為(wei) 會(hui) 恢複為(wei) 默認的 0x52 地址
(6)若修改設備 I2C 地址,需在使能設備後進行調用
(7)設置的 I2C 地址必須為(wei) 偶數,否則會(hui) 出現通訊出錯
4、 VL53L0X_SetDeviceMode()函數
(1)該函數實現傳(chuan) 感器測量的工作模式配置
(2)函數為(wei) VL53L0X_SetDeviceMode(VL53L0X_DEVDev,VL53L0X_DeviceModes DeviceMode)
(3)入口參數為(wei) VL53L0X_DEV 結構體(ti) 類型變量和VL53L0X_DeviceModes 類型變量
(4)VL53L0X_DEV 結構體(ti) 變量為(wei) 設置傳(chuan) 感器 I2C 地址等重要信息
(5)VL53L0X_DeviceModes 類型變量為(wei) 設置的工作模式
其中包含 SINGLE_RANGING 單次測量、 CONTINUOUS_RANGING 連續測量和 TIMED_RANGING定時器測量
(6)該函數在測量前初始化進行調用
5、 VL53L0X_PerformSingleMeasurement()函數
(1)該函現實現啟動傳(chuan) 感器一次測量
(2)函數為(wei) VL53L0X_PerformSingleRangingMeasurement(VL53L0X_DEVDev,VL53L0X_RangingMeasurementData_t*pRangingMeasurementData)
(3)入口參數為(wei) VL53L0X_DEV 結構體(ti) 類型變量和 VL53L0X_RangingMeasurementData_t 結構體(ti) 類型變量
(4)VL53L0X_DEV 結構體(ti) 變量為(wei) 設置傳(chuan) 感器 I2C 地址等重要信息
VL53L0X_RangingMeasurementData_t 結構體(ti) 變量為(wei) 返回測量距離的數據和測量範圍狀態等數據
(5)該函數一般在傳(chuan) 感器工作在單次測量模式下進行調用
6、 VL53L0X_StartMeasurement()和 VL53L0X_StopMeasurement()函數
(1)該函數分別實現了傳(chuan) 感器啟動測量和暫停測量
實現啟動測量的是VL53L0X_StartMeasurement()函數,
實現暫停測量的是VL53L0X_StopMeasurement()函數。
(2)函數為(wei) VL53L0X_StartMeasurement(VL53L0X_DEV Dev) 和 VL53L0X_StopMeasurement(VL53L0X_DEV Dev)
(3)入口參數都為(wei) VL53L0X_DEV 結構體(ti) 類型變量
(4)VL53L0X_DEV 結構體(ti) 變量為(wei) 設置傳(chuan) 感器 I2C 地址等重要信息
(5)這兩(liang) 個(ge) 函數一般在測量時進行使用
7、 VL53L0X_GetRangingMeasurementData()函數
(1)該函數實現獲取傳(chuan) 感器采樣的測量數據
(2)函數為(wei) VL53L0X_PerformSingleRangingMeasurement(VL53L0X_DEV Dev,VL53L0X_Ranging MeasurementData_t *pRangingMeasurementData)
(3)入口參數為(wei) VL53L0X_DEV結構體(ti) 類型變量和VL53L0X_RangingMeasurementData_t結構體(ti) 類型變量
(4)VL53L0X_DEV 結構體(ti) 變量為(wei) 設置傳(chuan) 感器 I2C 地址等重要信息
(5)VL53L0X_RangingMeasurementData_t 結構體(ti) 變量為(wei) 返回測量距離的數據和測量範圍狀態等數據
(6)該函數一般在傳(chuan) 感器工作在連續測量模式下進行使用
8、 VL53L0X_SetGpioConfig()函數
(1)該函數實現測量中斷模式的配置功能
(2)函數為(wei) VL53L0X_SetGpioConfig(VL53L0X_DEV Dev,uint8_t Pin,VL53L0X_DeviceModes DeviceMode, VL53L0X_GpioFunctionality Functionality,VL53L0X_InterruptPolarity Polarity)
(3)入口參數為(wei) VL53L0X_DEV 結構體(ti) 類型變量、 Pin 變量、VL53L0X_DeviceModes 類型變量VL53L0X_GpioFunctionality 類型變量 和VL53L0X_InterruptPolarity 類型變量。
其中五個(ge) 變量的作用:
VL53L0X_DEV 結構體(ti) 變量作用 設置傳(chuan) 感器 I2C 地址等重要信息
VL53L0X_DeviceModes 類型變量的作用 設置的測量工作模式(單次測量、連續測量、定時測量)
Pin 變量的作用 設置 GPIO 引腳口(使用時默認配置為(wei) 0)
VL53L0X_DeviceModes類型變量的作用 設置測量觸發中斷模式的
VL53L0X_InterruptPolarity 類型變量的作用 設置引腳的觸發模式(包含上升沿和下降沿)
注意:
VL53L0X_DeviceModes類型變量包含以下三種模式
CROSSED_LOW(采樣距離<下限值)
CROSSED_HIGH(采樣距離>上限值)
CROSSED_OUT(采樣距離<下限值或采樣距離>上限值)
(5)函數一般在傳(chuan) 感器工作在連續測量模式初始化配置時進行使用。
9、VL53L0X_SetlnterruptThresholds()函數
(1)該函數實現測量中斷模式上下限距離值的設置
(2)函數為(wei) VL53L0X_SetInterruptThresholds (VL53L0X_DEV Dev,VL53L0X_DeviceModes DeviceMode, FixPoint1616_t ThresholdLow,FixPoint1616_t ThresholdHigh)
(3)入口參數 VL53L0X_DEV 結構體(ti) 類型變量、VL53L0X_DeviceModes 類 型變量、ThresholdLow 和 ThresholdHigh 變量,VL53L0X_DEV 結構體(ti) 變量為(wei) 設置傳(chuan) 感器 I2C 地址等重要信息,
(4) VL53L0X_DeviceModes 類型變量為(wei) 設置的測量工作模式(單次測量、連續測量、定時測量等)
(5) ThresholdLow為(wei) 中斷觸發的下限距離值
ThresholdHigh為(wei) 設置中斷觸發的上限距離值
(6)該函數一般在傳(chuan) 感器工作在連續測量模式初始化配置時進行使用
10、VL53L0X_ClearInterruptMask()函數
(1)該函數實現清除測量中斷模式的中斷標誌位
(2)函數為(wei) VL53L0X_ClearInterruptMask(VL53L0X_DEV Dev,uint32_t InterruptMask)
(3)入口參數為(wei) VL53L0X_DEV 結構體(ti) 類型變量, InterruptMask 變量
(4) VL53L0X_DEV 結構體(ti) 變量為(wei) 設置傳(chuan) 感器 I2C 地址等重要信息
(5) InterruptMask 變量為(wei) 設置中斷清除,默認設置為(wei) 0
(6)該函數在傳(chuan) 感器觸發中斷後時進行使用
11、VL53L0X_SetMeasurementTimingBudgetMicroSeconds()函數
(1)該函數實現配置測量工作模式的周期采樣時間的功能
(2)函數為(wei) VL53L0X_SetMeasure mentTimingBudgetMicroSeconds(VL53L0X_DEV Dev, uint32_t MeasurementTimingBudget MicroSeconds)
(3)入口參數為(wei) VL53L0X_DEV 結構體(ti) 類型變量、MeasurementTimingBudget MicroSeconds 變量
(4) VL53L0X_DEV 結構體(ti) 變量為(wei) 設置傳(chuan) 感器 I2C 地址等重要信息
(5) MeasurementTimingBudgetMicroSeconds 變量為(wei) 設置測量工作模式的周期采樣時間,單位為(wei) ms
(6)該函數在工作模式初始化配置時進行使用
12、VL53L0X_PerformOffsetCalibration()函數
(1)該函數實現距離偏移的校準的功能
(2)函數為(wei) VL53L0X_PerformOffsetCalibration VL53L0X_ DEV Dev,FixPoint1616_t CalDistanceMilliMeter, int32_t *pOffsetMicroMeter)
(3)入口參數為(wei) VL53L0X_DEV 結構體(ti) 類型變量、CalDistanceMilliMeter 變量和 pOffsetMicroMeter 指針變量, VL53L0X_DEV 結構體(ti) 變量為(wei) 設置傳(chuan) 感器 I2C 地址等重要信息
(4) CalDistanceMilliMeter變量為(wei) 設置校準時與(yu) 傳(chuan) 感器設備的相對距離值,單位為(wei) mm
(5) pOffsetMicroMeter指針變量為(wei) 相對距離校準後傳(chuan) 感器返回的修正距離變量的指針
(6)該函數在校準時進行使用
13、VL53L0X_SetOffsetCalibrationDataMicroMeter()函數
(1)該函數實現設置距離補償(chang) 值的功能
(2)函數為(wei) VL53L0X_SetOffsetCalibrationDataMicro Meter(VL53L0X_DEV Dev, int32_t OffsetCalibrationDataMicroMeter)
(3)入口參數為(wei) VL53L0X_DEV 結構體(ti) 類型變量和 OffsetCalibrationDataMicroMeter 變量,VL53L0X_DEV 結構體(ti) 變量為(wei) 設置傳(chuan) 感器 I2C 地址等重要信息
(4)OffsetCalibrationDataMicroMeter 變量為(wei) 設置的距離補償(chang) 值
(5)該函數在補償(chang) 時進行使用