找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 698|回复: 5
打印 上一主题 下一主题
收起左侧

51单片机控VL53L0X激光测距传感器

[复制链接]
跳转到指定楼层
楼主
ID:1148059 发表于 2025-4-22 21:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这里是我从论坛里看到的主函数代码,有什么方法可以让测量的距离从50mm——1200mm变成测量0mm——1200mm
我修改了if(DeviceRangeStatusInternal3==11&&dist3>20&&dist3<1200)里的dist3>20改为dist3>0,测量还是不能从0开始,我有点不明白,希望大佬指点一下

#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);
                }
                }
               
                }         
        
}





分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:648281 发表于 2025-4-23 08:12 | 只看该作者
VL53L0X测距存在盲区,不能从 0 开始
回复

使用道具 举报

板凳
ID:1148059 发表于 2025-4-23 19:03 | 只看该作者
51hei**1140 发表于 2025-4-23 08:12
VL53L0X测距存在盲区,不能从 0 开始

那盲区有什么方法可以在小1-2cm左右吗吗,因为这个测量只能从5cm开始
回复

使用道具 举报

地板
ID:1148275 发表于 2025-4-24 14:28 | 只看该作者
源流 发表于 2025-4-23 19:03
那盲区有什么方法可以在小1-2cm左右吗吗,因为这个测量只能从5cm开始

应该是不能了,可以看看官方文档,我也是最近在弄这个,不晓得咋把4个都在51上运行,详细内容可以看看我主页,那位大佬帮帮忙,谢谢你!
回复

使用道具 举报

5#
ID:844772 发表于 2025-4-25 08:31 | 只看该作者
源流 发表于 2025-4-23 19:03
那盲区有什么方法可以在小1-2cm左右吗吗,因为这个测量只能从5cm开始

它是基于 Time of Flight 的方式,最小也有3CM啊,你不能安装时把它往后放5cm吗?你看哪个测距传感器是贴边安装啊。
回复

使用道具 举报

6#
ID:1148407 发表于 2025-4-25 09:59 | 只看该作者
源流 发表于 2025-4-23 19:03
那盲区有什么方法可以在小1-2cm左右吗吗,因为这个测量只能从5cm开始

用官方库(比如 ST 的 VL53L0X 库)里的函数,把传感器设置成 “短距离测量” 模式。比如调用 VL53L0X_SetMeasurementTimingBudget 时,给近距离场景分配更短的 “时间预算”,让它更快响应近处物体。同时记得改 Vcsel Period(激光发射周期),近距离用更小的数值(比如阶段 1 设为 18,阶段 2 设为 14),这一步在寄存器配置里调,能让激光发射更密集,捕捉近处反射光。默认传感器可能把近距离的弱信号当成 “没检测到”,可以手动降低信号强度的判定门槛。比如通过 VL53L0X_SetSignalRateLimit 把信号率限制调低(比如设为 10000),或者直接改寄存器里的 Minimum Signal Rate,让它接受更弱的返回信号,这样 1-2cm 也能识别。网上也有大佬改好的 “近距离补丁” 库,可以直接搜关键词 “VL53L0X close range patch”,里面直接封装好了这些参数,可以找找
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表