欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 592|回復: 7
打印 上一主題 下一主題
收起左側

VL53L0X怎么使用呢?

[復制鏈接]
跳轉到指定樓層
樓主
ID:1162261 發表于 2025-10-31 09:47 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
最近在調試VL53L0X測距芯片,但在網上找了很久都沒有找到其寄存器介紹的文檔;只找到了用stm32調用api的程序,自己用stm32測試了一下自己的VL53L0X芯片,是可以測試距離的;但是想用其他32芯片 來測試VL53L0X芯片,發現這個api程序體積太大了,裝不下;想直接操控寄存器,這樣體積小點;但在網上查詢的程序,總是在0x14狀態寄存器時,就會出現0x5F;而測試距離數據是不對的;不知道什么原因;望大佬給點撥一下,謝謝!!!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1064915 發表于 2025-10-31 16:22 | 只看該作者
VL53L0X是意法半導體推出的第二代FlightSense™技術激光測距傳感器,其官方數據手冊及相關技術資料可通過權威渠道獲取
回復

使用道具 舉報

板凳
ID:1138150 發表于 2025-11-1 00:34 | 只看該作者
VL53L0X 的狀態寄存器(0x14)用于指示最后一次測距的結果狀態。值 0x5F 換算成二進制是 0101 1111。根據VL53L0X的文檔,這個值的含義是:  Bit [7:4]: 0101 - 這表示測量狀態。0101 通常對應 Ranging API Error 或類似的硬件錯誤狀態。這告訴你,傳感器內部的狀態機在執行測距流程時遇到了問題,沒有正常完成。  Bit [3:0]: 1111 - 這表示流狀態。1111 通常對應 GPTIMING 狀態,意思是傳感器正在等待某個內部定時器事件。  組合起來,0x5F 的含義是:傳感器卡在了某個內部等待狀態,并最終因為超時或錯誤而停止了測量。 這幾乎總是由于初始化序列不正確或關鍵配置寄存器設置錯誤導致的。
回復

使用道具 舉報

地板
ID:1138150 發表于 2025-11-1 00:35 | 只看該作者
VL53L0X 的狀態寄存器(0x14)用于指示最后一次測距的結果狀態。值 0x5F 換算成二進制是 0101 1111。根據VL53L0X的文檔,這個值的含義是:

Bit [7:4]: 0101 - 這表示測量狀態。0101 通常對應 Ranging API Error 或類似的硬件錯誤狀態。這告訴你,傳感器內部的狀態機在執行測距流程時遇到了問題,沒有正常完成。

Bit [3:0]: 1111 - 這表示流狀態。1111 通常對應 GPTIMING 狀態,意思是傳感器正在等待某個內部定時器事件。

組合起來,0x5F 的含義是:傳感器卡在了某個內部等待狀態,并最終因為超時或錯誤而停止了測量。 這幾乎總是由于初始化序列不正確或關鍵配置寄存器設置錯誤導致的。

回復

使用道具 舉報

5#
ID:420836 發表于 2025-11-2 06:17 | 只看該作者
官方網站下載數據手冊
回復

使用道具 舉報

6#
無效樓層,該帖已經被刪除
7#
ID:1162375 發表于 2025-11-2 13:01 | 只看該作者
VL53L0X 直接操作寄存器時出現狀態寄存器 0x14 為 0x5F 且測距錯誤,核心原因可能是初始化流程不完整或寄存器配置順序錯誤
回復

使用道具 舉報

8#
ID:628113 發表于 2025-11-7 09:03 | 只看該作者
這個器件的API實在太爛了。
一是, 該API 太大了, 本想用在STM8L中,但無論如何空間度不夠。
二是,移植時的兼容性太差了, 整個API混亂不堪。
看看當時跟蹤的實際記錄:
VL53L0X PLT: RdByte status: 0H  Byte: 6H
VL53L0X PLT: RdByte status: 0H  Byte: 4H
VL53L0X: PerformRefCalibration
VL53L0X API CAL: perform_ref_calibration/ PALDevDataGet
VL53L0X API CAL: perform_vhv_calibration / PALDevDataGet
VL53L0X API CAL: perform_vhv_calibration / WrByte status: 0
VL53L0X API CAL: perform_single_ref_calibration / WrByte status: 0
VL53L0X PLT: RdByte status: 0H  Byte: 50H
VL53L0X API: GetInterruptMaskStatus / RdByte status: 0H  Byte: 50H
VL53L0X API CORE: measurement_poll_for_completion / GetMeasurementDataReady status: FFFA
VL53L0X API CAL: perform_single_ref_calibration / measurement_poll_for_completion status: FFFA
VL53L0X API CAL: perform_single_ref_calibration / ClearInterruptMask status: FFFA
VL53L0X API CAL: perform_single_ref_calibration / WrByte status: FFFA
VL53L0X API CAL: perform_vhv_calibration / perform_single_ref_calibration status: FFFA
VL53L0X API CAL: perform_ref_calibration/perform_vhv_calibration status: FFFA
VL53L0X ErrorCode [-6]: Range error
VL53L0X: PerformSingleRangingMeasurement
Set Single Measurement ...
Set Perform Measurement ...
VL53L0X PLT: RdByte status: 0H  Byte: 0H
VL53L0X PLT: RdByte status: 0H  Byte: 50H
VL53L0X API: GetInterruptMaskStatus / RdByte status: 0H  Byte: 50H
VL53L0X API CORE: measurement_poll_for_completion / GetMeasurementDataReady status: FFFA
Get data ...
Clear IntMask ...
VL53L0X Get:    0 mm

前段時間調試一個 狀態 0x50 錯誤, 花了兩天跟蹤,才找到原因處理好, 結果又發現出現 no vhv value 錯誤。我是不高興再陪它折騰了。連個寄存器都不肯給的器件,下次絕對不采用。

如果 不需要 使用  長距離的 測量選項,有個簡單方法, 可以這樣用:

#define VL53L0X_REG_RESULT_RANGE_STATUS              0x0014



                        u8 LR_VL53L0X_Send(u8 reg,u8 dat)
                                {
                                        return I2C_WriteOneByte(VL53L0X_IIC_PORT,VL53L0X_ADDR, reg,dat);       
                                }
                        u8 LR_VL53L0X_Read(u8 reg)
                                {
                                        return I2C_ReadOneByte(VL53L0X_IIC_PORT,VL53L0X_ADDR,reg);
                                }
                       

發開始測量:
LR_VL53L0X_Send(VL53L0X_REG_SYSRANGE_START, 0x01);
等待完成
                                          while(cnt<=100)
                      {
                                                 val = LR_VL53L0X_Read(VL53L0X_REG_RESULT_RANGE_STATUS);
                                                         if (val & 0x01) break;
                                                         cnt++;
                                                }
讀取12字節數據
                                                         for(i=0;i<12;i++)
                                                             gbuf[i]=LR_VL53L0X_Read(VL53L0X_REG_RESULT_RANGE_STATUS+i);

讀取狀態, 這個不能省略 , 因為讀出異常時,前面操作也會返回值 比如 20 , 要讀出狀態碼判斷是否成功
                             err=LR_VL53L0X_Read(VL53L0X_REG_RESULT_RANGE_STATUS);
                             err=(err&0x78)>>3;                                                       
下面是錯誤表:
    char* vl53l0x_err[VL53L0X_MAXERR]={
    "OK",
    "VCSELCONTINUITYTESTFAILURE",
    "VCSELWATCHDOGTESTFAILURE"        ,
    "NOVHVVALUEFOUND"        ,
    "MSRCNOTARGET",
    "SNRCHECK",
    "RANGEPHASECHECK",
    "SIGMATHRESHOLDCHECK"        ,
    "TCC",
    "PHASECONSISTENCY",
    "MINCLIP"        ,
    "RANGECOMPLETE",
    "ALGOUNDERFLOW",
    "ALGOOVERFLOW",
    "RANGEIGNORETHRESHOLD"};

實測正常時 , 并非返回 0 -OK, 而是  RANGECOMPLETE

該程序工作正常, 但只能測量短距離模式,無法切換到長距離。

總之,這個器件是垃圾。
回復

使用道具 舉報

9#
ID:57657 發表于 2025-11-8 13:17 | 只看該作者
你要用其他32芯片驅動哪就是程序移植問題,有問題用邏輯分析儀檢查時序差異。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表