1593|2

43

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

[X-NUCLEO-53L4A3 TOF评估板]1.测试和代码移植 [复制链接]

首先感谢EEWORLD以及得捷电子给予这次测评的机会。
先了解一下VL53L4ED官方参数特性
首先运行一下官方例程,让传感器先工作起来,打开STM32CUBEMX,安装TOF扩展包
安装完成后在本地磁盘找到软件包后打开VL53L4A3的例程
例程有3个分别为多传感器测距、单传感器测距、阈值检测,由于本次测评的硬件只有1个中间传感器,所以打开第二个例程编译下载即可体验简单的测距功能。需要注意例程的波特率是460800
先升级STLink模式为VCP+U盘模式
然后打开VL53L4ED_GUI后点击Flash FW烧录固件等待绿灯亮起
点击开始测试
官方的软件波形图局限性能比较大,不能看更多的历史数据,还不能放大缩小,很不方便,所以接下来进行程序驱动的移植,并使用匿名助手上位机软件进行传感器的测试。
本次程序移植以官方的SimpleRangning例程为参考,并加入匿名助手的通讯协议代码,移植过程此处省略,移植后的代码结构如下
本次测试代码中使用的通讯帧是灵活格式帧(具体可以查看上位机说明书)
通讯函数定义如下
匿名助手上位机的灵活数据帧配置如下
打开数据波形控件,添加相关变量
配置完成后进行测试即可,不得不说匿名助手的波形显示功能非常的灵活方便
传感器初始化程序如下,传感器工作过程可以参考手册(UM3177)和注释
void bsp_tof_init(void)
{
uint32_t Id;
/* reset XSHUT (XSDN) pin */
HAL_GPIO_WritePin(VL53L4A3_XSHUT_C_PORT, VL53L4A3_XSHUT_C_PIN, GPIO_PIN_RESET);
HAL_Delay(2);
HAL_GPIO_WritePin(VL53L4A3_XSHUT_C_PORT, VL53L4A3_XSHUT_C_PIN, GPIO_PIN_SET);
HAL_Delay(2);
printf("53L4A3 Simple Ranging demo application\r\n");
status = VL53L4A3_RANGING_SENSOR_Init(VL53L4A3_DEV_CENTER);
if (status != BSP_ERROR_NONE)
{
printf("VL53L4A3_RANGING_SENSOR_Init failed\r\n");
while (1);
}
/*- 读取传感器ID -*/
VL53L4A3_RANGING_SENSOR_ReadID(VL53L4A3_DEV_CENTER, &Id);
VL53L4A3_RANGING_SENSOR_GetCapabilities(VL53L4A3_DEV_CENTER, &Cap);
/*-- 测量模式 --*/
Profile.RangingProfile = VL53L4ED_PROFILE_CONTINUOUS;
/*-- 测量时间 10 ms < TimingBudget < 200 ms --*/
Profile.TimingBudget = TIMING_BUDGET;
Profile.Frequency = 0; /* Induces intermeasurement period, NOT USED for normal ranging */
/*-- 测量噪声输出使能 --*/
Profile.EnableAmbient = 1; /* Enable: 1, Disable: 0 */
/*-- 测量信号强度输出使能 --*/
Profile.EnableSignal = 1; /* Enable: 1, Disable: 0 */
/* set the profile if different from default one */
VL53L4A3_RANGING_SENSOR_ConfigProfile(VL53L4A3_DEV_CENTER, &Profile);
/* 阻塞模式 */
// status = VL53L4A3_RANGING_SENSOR_Start(VL53L4A3_DEV_CENTER, RS_MODE_BLOCKING_CONTINUOUS);
/* 同步模式 */
status = VL53L4A3_RANGING_SENSOR_Start(VL53L4A3_DEV_CENTER, RS_MODE_ASYNC_CONTINUOUS);
if (status != BSP_ERROR_NONE)
{
printf("VL53L4A3_RANGING_SENSOR_Start failed\r\n");
while (1);
}
}

 

Main函数
int main(void)
{
int32_t i = 0, status;
RANGING_SENSOR_Result_t Result;
bsp_init();
init_cycle_counter(true);
bsp_tof_init();
while(1)
{
// int64_t time_stamp = get_system_ms();
VL53L4A3_RANGING_SENSOR_GetDistance(VL53L4A3_DEV_CENTER, &Result);
/* polling mode status = */
while(ToF_EventDetected == 0)
{
}
// printf("time_stamp = %lldms\r\n", get_system_ms() - time_stamp);
ToF_EventDetected = 0;
ano_send_custom1(Result.ZoneResult[0].Distance[0],
Result.ZoneResult[0].Status[0],
Result.ZoneResult[0].Ambient[0],
Result.ZoneResult[0].Signal[0]);
}
}

 

在程序中我们可以通过TIMING_BUDGET参数进行测量时间的设定,其中10 ms < TimingBudget < 200 ms
通过VL53L4A3_RANGING_SENSOR_Start()函数设置模式,有四种模式可选(如下),前两个是阻塞模式,后面两个是中断模式
通过RANGING_SENSOR_INSTANCES_NBR可以配种传感器的个数,例程中配置的是3,即默认为3个传感器,本次测评板只有1个,为了节约内存我们可以定义为1,但VL53L4A3_DEV_CENTER需要重新定义为0
接下来进行精度等方面的测试。

此帖出自传感器论坛

最新回复

这次带的开发板不是可以直接下载使用吗?     详情 回复 发表于 2024-11-9 08:39
点赞 关注
 
 

回复
举报

6450

帖子

10

TA的资源

版主

沙发
 

这次带的开发板不是可以直接下载使用吗?  

此帖出自传感器论坛

点评

上位机不好用,看波形不灵活  详情 回复 发表于 2024-11-9 19:52
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 
 

回复

43

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
秦天qintian0303 发表于 2024-11-9 08:39 这次带的开发板不是可以直接下载使用吗?  

上位机不好用,看波形不灵活

此帖出自传感器论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表