找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 488|回復(fù): 5
收起左側(cè)

51單片機(jī)控VL53L0X激光測(cè)距傳感器

[復(fù)制鏈接]
ID:1148059 發(fā)表于 2025-4-22 21:43 | 顯示全部樓層 |閱讀模式
這里是我從論壇里看到的主函數(shù)代碼,有什么方法可以讓測(cè)量的距離從50mm——1200mm變成測(cè)量0mm——1200mm
我修改了if(DeviceRangeStatusInternal3==11&&dist3>20&&dist3<1200)里的dist3>20改為dist3>0,測(cè)量還是不能從0開始,我有點(diǎn)不明白,希望大佬指點(diǎn)一下

#include "REG51.h"
#include "oled.h"
#include "bmp.h"
#include "intrins.h"
#include "VL53L0X.h"
#include "i2c.h"

#define uchar unsigned char
#define uint unsigned int

uchar gbuf3[16];
uint acnt3;
uint scnt3;
uint dist3;
uchar DeviceRangeStatusInternal3;


sbit K=P1^0;
int zx=0;
int op;
void Delay1ms()                //@11.0592MHz
{
    unsigned char i, j;

    _nop_();
    i = 11;
    j = 190;
    do
    {
        while (--j);
    } while (--i);
}
void delay_ms(unsigned int time)
{
    unsigned char
    i;
    for(i=1; i<=time; i++)
        Delay1ms();
}






void date3()
{
        uchar val = 0;        
        uchar vall;
        int cnt = 0;
                        vl53l0x_send3(VL53L0X_REG_SYSRANGE_START, 0x01);
                while (cnt < 100)
                {
                        // 1 second waiting time max
      delay_ms(10);
      val = vl53l0x_read3(VL53L0X_REG_RESULT_RANGE_STATUS);
      if (val & 0x01) break;
      cnt++;
     }
                 gbuf3[0]=vl53l0x_read3(0x14);
                 gbuf3[7]=vl53l0x_read3(0x14+7);
                 gbuf3[6]=vl53l0x_read3(0x14+6);
                 gbuf3[9]=vl53l0x_read3(0x14+9);
                 gbuf3[8]=vl53l0x_read3(0x14+8);
                 gbuf3[11]=vl53l0x_read3(0x14+11);
                 gbuf3[10]=vl53l0x_read3(0x14+10);
     acnt3 = makeuint163(gbuf3[7], gbuf3[6]);
     scnt3 = makeuint163(gbuf3[9], gbuf3[8]);
     dist3 = makeuint163(gbuf3[11], gbuf3[10]);
                 DeviceRangeStatusInternal3 = ((gbuf3[0] & 0x78) >> 3);
                         if(DeviceRangeStatusInternal3==11&&dist3>0&&dist3<1200)
                        {
                        OLED_ShowNum(30, 6, dist3, 5, 16);
                        }
}




int main(void)
{        
         
                OLED_Init();                                 
                 OLED_Clear();
         
                 //                OLED_ShowCHinese(30,0,1);
                //        OLED_ShowCHinese(48,0,1);
         K=0;
         
         
                while(1)
                {               
                                       
                                        if(K == 1)
                {
                zx++;
                delay_ms(10);
                        while(K == 1){
                        delay_ms(10);                                
                                 date3();
                                op=dist3;
                OLED_ShowNum(90, 0, op, 4, 16);
                }
                }
               
                }         
        
}





回復(fù)

使用道具 舉報(bào)

ID:648281 發(fā)表于 2025-4-23 08:12 | 顯示全部樓層
VL53L0X測(cè)距存在盲區(qū),不能從 0 開始
回復(fù)

使用道具 舉報(bào)

ID:1148059 發(fā)表于 2025-4-23 19:03 | 顯示全部樓層
51hei**1140 發(fā)表于 2025-4-23 08:12
VL53L0X測(cè)距存在盲區(qū),不能從 0 開始

那盲區(qū)有什么方法可以在小1-2cm左右嗎嗎,因?yàn)檫@個(gè)測(cè)量只能從5cm開始
回復(fù)

使用道具 舉報(bào)

ID:1148275 發(fā)表于 2025-4-24 14:28 | 顯示全部樓層
源流 發(fā)表于 2025-4-23 19:03
那盲區(qū)有什么方法可以在小1-2cm左右嗎嗎,因?yàn)檫@個(gè)測(cè)量只能從5cm開始

應(yīng)該是不能了,可以看看官方文檔,我也是最近在弄這個(gè),不曉得咋把4個(gè)都在51上運(yùn)行,詳細(xì)內(nèi)容可以看看我主頁,那位大佬幫幫忙,謝謝你!
回復(fù)

使用道具 舉報(bào)

ID:844772 發(fā)表于 2025-4-25 08:31 | 顯示全部樓層
源流 發(fā)表于 2025-4-23 19:03
那盲區(qū)有什么方法可以在小1-2cm左右嗎嗎,因?yàn)檫@個(gè)測(cè)量只能從5cm開始

它是基于 Time of Flight 的方式,最小也有3CM啊,你不能安裝時(shí)把它往后放5cm嗎?你看哪個(gè)測(cè)距傳感器是貼邊安裝啊。
回復(fù)

使用道具 舉報(bào)

ID:1148407 發(fā)表于 2025-4-25 09:59 | 顯示全部樓層
源流 發(fā)表于 2025-4-23 19:03
那盲區(qū)有什么方法可以在小1-2cm左右嗎嗎,因?yàn)檫@個(gè)測(cè)量只能從5cm開始

用官方庫(比如 ST 的 VL53L0X 庫)里的函數(shù),把傳感器設(shè)置成 “短距離測(cè)量” 模式。比如調(diào)用 VL53L0X_SetMeasurementTimingBudget 時(shí),給近距離場(chǎng)景分配更短的 “時(shí)間預(yù)算”,讓它更快響應(yīng)近處物體。同時(shí)記得改 Vcsel Period(激光發(fā)射周期),近距離用更小的數(shù)值(比如階段 1 設(shè)為 18,階段 2 設(shè)為 14),這一步在寄存器配置里調(diào),能讓激光發(fā)射更密集,捕捉近處反射光。默認(rèn)傳感器可能把近距離的弱信號(hào)當(dāng)成 “沒檢測(cè)到”,可以手動(dòng)降低信號(hào)強(qiáng)度的判定門檻。比如通過 VL53L0X_SetSignalRateLimit 把信號(hào)率限制調(diào)低(比如設(shè)為 10000),或者直接改寄存器里的 Minimum Signal Rate,讓它接受更弱的返回信號(hào),這樣 1-2cm 也能識(shí)別。網(wǎng)上也有大佬改好的 “近距離補(bǔ)丁” 庫,可以直接搜關(guān)鍵詞 “VL53L0X close range patch”,里面直接封裝好了這些參數(shù),可以找找
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表