使用先进的飞行时间(TOF)技术精确且可靠地测量距离,非常适合机器人、自动化和智能家电应用
A
A
硬件概览
它是如何工作的?
LightRanger 13 Click 基于 ams OSRAM 的 TMF8806-1A,这是一款用于各种应用的精确距离测量的飞行时间(TOF)传感器。该传感器采用业内最小的模块化封装之一,集成了符合 Class 1 眼部安全标准的 940nm VCSEL。通过单光子雪崩二极管(SPAD)技术、快速时间数字转换器(TDC)架构和片上直方图处理,TMF8806-1A 能够在 1cm 至 500cm 的检测范围内实现高精度距离测量,即使在复杂的环境中也能表现出色。该 Click 板非常适用于需要高分辨率距离感应的工业、商业和住宅场景,如机器人技术、家居和建筑自动化、投影和显示系统、工厂自动化、门禁控制、安全系统以及智能家电。传感器的 dTOF 技术与其高灵敏度的 SPAD 检测相结合,提供了卓越的信噪比和宽动态范围,确保了在弱光和强阳光条件下的可靠性能。其快速的亚纳秒光脉冲能
力和 30Hz 的感测速率使其能够快速而精确地进行距离检测,非常适合动态应用。TMF8806-1A 配备内置的校准、污垢和污渍清除以及串扰补偿机制,确保了长期的一致精度。此外,其集成的眼部安全电路在出现故障时会停止 VCSEL 驱动器,从而提高操作安全性。该 Click 板采用了一种支持 MIKROE 全新引入的 "Click Snap" 功能的独特设计。与标准化版本的 Click 板不同,此功能允许通过折断 PCB 使主要 IC 区域变得可移动,打开了许多新的实现可能性。借助 Snap 功能,TMF8806-1A 可以通过访问标有 1-8 的引脚信号独立运行。此外,Snap 部分还包括一个指定的固定螺丝孔位置,使用户能够将 Snap 板固定在其所需位置。LightRanger 13 Click 通过 I2C 接口与主 MCU 通信,支持最高 1MHz 的时钟频率以实现快速数据交换。除标准接口引脚外,该板还配备了 EN 引脚,该
引脚用作设备启用引脚。当此引脚设置为高电平时,设备将通电;设置为低电平时,传感器将进入关机模式,在此模式下,所有存储器内容都会被清除。该板还包括一个 INT 引脚,该引脚配置为开漏中断输出,当测距测量可用时向主 MCU 发出信号,确保数据的及时处理。此外,板的 Snap 部分包含一个 GPIO0 SEL 跳线,用于选择 TMF8806-1A 的 I/O 电源电压。将跳线设置为 VCC 位置时,可启用 3.3V 或更低的电源(如 1.8V);将其设置为 GND 位置时,可提供更低的 I/O 电源电压(1.2V)。启动后,GPIO0 引脚可作为通用 GPIO 输出信号,通过板背面的 GPIO1 测试点访问。该 Click 板只能在 3.3V 逻辑电压下运行。在使用其他逻辑电平的 MCU 之前,必须执行适当的逻辑电压电平转换。此外,它还配备了包含功能和示例代码的库,可用作进一步开发的参考。
功能概述
开发板
PIC32MZ Clicker 是一款紧凑型入门开发板,它将 Click 板™的灵活性带给您喜爱的微控制器,使其成为实现您想法的完美入门套件。它配备了一款板载 32 位带有浮点单元的 Microchip PIC32MZ 微控制器,一个 USB 连接器,LED 指示灯,按钮,一个 mikroProg 连接器,以及一个用于与外部电子设备接口的头部。得益于其紧凑的设计和清晰易识别的丝网标记,它提供了流畅且沉浸式的工作体验,允许在任
何情况下、任何地方都能访问。PIC32MZ Clicker 开 发套件的每个部分都包含了使同一板块运行最高效的必要组件。除了可以选择 PIC32MZ Clicker 的编程方式,使用 USB HID mikroBootloader 或通过外部 mikroProg 连接器为 PIC,dsPIC 或 PIC32 编程外,Clicker 板还包括一个干净且调节过的开发套件电源供应模块。USB Micro-B 连接可以提供多达 500mA 的电流,这足以操作所有板载和附加模块。所有
mikroBUS™ 本身支持的通信方法都在这块板上,包 括已经建立良好的 mikroBUS™ 插槽、重置按钮以及若干按钮和 LED 指示灯。PIC32MZ Clicker 是 Mikroe 生态系统的一个组成部分,允许您在几分钟内创建新的应用程序。它由 Mikroe 软件工具原生支持,得益于大量不同的 Click 板™(超过一千块板),其数量每天都在增长,它涵盖了原型制作的许多方面。
微控制器概述
MCU卡片 / MCU

建筑
PIC32
MCU 内存 (KB)
1024
硅供应商
Microchip
引脚数
64
RAM (字节)
524288
使用的MCU引脚
mikroBUS™映射器
“仔细看看!”
Click board™ 原理图

一步一步来
项目组装
实时跟踪您的结果
应用程序输出
1. 应用程序输出 - 在调试模式下,“应用程序输出”窗口支持实时数据监控,直接提供执行结果的可视化。请按照提供的教程正确配置环境,以确保数据正确显示。

2. UART 终端 - 使用UART Terminal通过USB to UART converter监视数据传输,实现Click board™与开发系统之间的直接通信。请根据项目需求配置波特率和其他串行设置,以确保正常运行。有关分步设置说明,请参考提供的教程。

3. Plot 输出 - Plot功能提供了一种强大的方式来可视化实时传感器数据,使趋势分析、调试和多个数据点的对比变得更加直观。要正确设置,请按照提供的教程,其中包含使用Plot功能显示Click board™读数的分步示例。在代码中使用Plot功能时,请使用以下函数:plot(insert_graph_name, variable_name);。这是一个通用格式,用户需要将“insert_graph_name”替换为实际图表名称,并将“variable_name”替换为要显示的参数。

软件支持
库描述
LightRanger 13 Click 演示应用程序使用 NECTO Studio开发,确保与 mikroSDK 的开源库和工具兼容。该演示设计为即插即用,可与所有具有 mikroBUS™ 插座的 开发板、入门板和 mikromedia 板完全兼容,用于快速实现和测试。
示例描述
此应用演示了使用 LightRanger 13 Click 进行距离测量和监控的功能。
关键功能:
lightranger13_cfg_setup
- 配置对象初始化函数。lightranger13_init
- 初始化函数。lightranger13_default_cfg
- Click 默认配置函数。lightranger13_set_threshold
- 设置阈值水平和中断持续性lightranger13_start_measurement
- 启动测量功能(使用上下文对象中的配置、出厂校准和状态数据)。lightranger13_read_result
- 读取测量结果的函数。
应用初始化
初始化日志记录器和 LightRanger 13 Click,加载默认配置,显示设备信息,执行出厂校准(如果启用),并设置距离测量的阈值(1mm 至 1000mm)以及持续性(连续 5 次)以确保可靠读数。然后启动测量过程。
应用任务
等待数据就绪中断信号,指示新的测量数据可用。在接收到信号后,从传感器读取距离和温度数据,并通过 USB UART 记录这些值。
开源
代码示例
完整的应用程序代码和一个现成的项目可以通过NECTO Studio包管理器直接安装到NECTO Studio。 应用程序代码也可以在MIKROE的GitHub账户中找到。
/*!
* @file main.c
* @brief LightRanger 13 Click example
*
* # Description
* This application demonstrates the usage of the LightRanger 13 Click for distance
* measurement and monitoring.
*
* The demo application is composed of two sections:
*
* ## Application Init
* Initializes the logger and LightRanger 13 Click with default configuration,
* displays device information, performs factory calibration (if enabled), and sets up
* distance measurement thresholds (1mm-1000mm) with persistence (5 consecutive times)
* to ensure reliable readings. It then starts the measurement process.
*
* ## Application Task
* Waits for the data ready interrupt signal, indicating a new measurement is available.
* Upon receiving the signal, it reads the distance and temperature data from the sensor
* and logs the values to USB UART.
*
* @note
* The factory calibration step can be enabled or disabled by commenting/uncommenting
* the `FACTORY_CALIBRATION_DISABLE` macro.
*
* @author Stefan Filipovic
*
*/
#include "board.h"
#include "log.h"
#include "lightranger13.h"
// Comment out the line below to enable factory calibration
#define FACTORY_CALIBRATION_DISABLE
static lightranger13_t lightranger13;
static log_t logger;
void application_init ( void )
{
log_cfg_t log_cfg; /**< Logger config object. */
lightranger13_cfg_t lightranger13_cfg; /**< Click config object. */
/**
* Logger initialization.
* Default baud rate: 115200
* Default log level: LOG_LEVEL_DEBUG
* @note If USB_UART_RX and USB_UART_TX
* are defined as HAL_PIN_NC, you will
* need to define them manually for log to work.
* See @b LOG_MAP_USB_UART macro definition for detailed explanation.
*/
LOG_MAP_USB_UART( log_cfg );
log_init( &logger, &log_cfg );
log_info( &logger, " Application Init " );
// Click initialization.
lightranger13_cfg_setup( &lightranger13_cfg );
LIGHTRANGER13_MAP_MIKROBUS( lightranger13_cfg, MIKROBUS_1 );
if ( I2C_MASTER_ERROR == lightranger13_init( &lightranger13, &lightranger13_cfg ) )
{
log_error( &logger, " Communication init." );
for ( ; ; );
}
if ( LIGHTRANGER13_ERROR == lightranger13_default_cfg ( &lightranger13 ) )
{
log_error( &logger, " Default configuration." );
for ( ; ; );
}
log_printf( &logger, "--- DEVICE INFO ---\r\n" );
log_printf( &logger, " App version: %u.%u.%u.%u\r\n",
( uint16_t ) lightranger13.info.app_ver[ 0 ],
( uint16_t ) lightranger13.info.app_ver[ 1 ],
( uint16_t ) lightranger13.info.app_ver[ 2 ],
( uint16_t ) lightranger13.info.app_ver[ 3 ] );
log_printf( &logger, " Chip version: %u.%u\r\n",
( uint16_t ) lightranger13.info.chip_ver[ 0 ],
( uint16_t ) lightranger13.info.chip_ver[ 1 ] );
log_printf( &logger, " Serial number: %.8LX\r\n\n", lightranger13.info.serial_num );
Delay_ms ( 1000 );
#ifndef FACTORY_CALIBRATION_DISABLE
log_printf( &logger, "--- FACTORY CALIBRATION ---\r\n" );
log_printf( &logger, " Calibration environment:\r\n" );
log_printf( &logger, " - Device has to be in the final (correct) optical stack\r\n" );
Delay_ms ( 10 );
log_printf( &logger, " - Cover glass (no smudge on the glass) in front of the device\r\n" );
log_printf( &logger, " - No target in front of the device within 40cm\r\n" );
log_printf( &logger, " - Dark room or low ambient light\r\n" );
log_printf( &logger, " Performing factory calibration in 5 seconds...\r\n" );
for ( uint8_t cnt = 5; cnt > 0; cnt-- )
{
log_printf( &logger, " %u\r\n", ( uint16_t ) cnt );
Delay_ms ( 1000 );
}
if ( LIGHTRANGER13_ERROR == lightranger13_factory_calib ( &lightranger13 ) )
{
log_error( &logger, " Factory calibration." );
for ( ; ; );
}
log_printf( &logger, " Factory calibration DONE.\r\n\n" );
Delay_ms ( 1000 );
#endif
log_printf( &logger, "--- THRESHOLD AND PERSISTANCE ---\r\n" );
log_printf( &logger, " Setting threshold: 1mm-1000mm; and persistance: 5 times\r\n" );
if ( LIGHTRANGER13_ERROR == lightranger13_set_threshold ( &lightranger13, 1, 1000, 5 ) )
{
log_error( &logger, " Set threshold." );
for ( ; ; );
}
log_printf( &logger, " Set threshold DONE.\r\n\n" );
Delay_ms ( 1000 );
log_printf( &logger, "--- STARTING MEASUREMENT ---\r\n" );
if ( LIGHTRANGER13_ERROR == lightranger13_start_measurement ( &lightranger13 ) )
{
log_error( &logger, " Start measurement." );
for ( ; ; );
}
log_printf( &logger, " Measurement started.\r\n\n" );
Delay_ms ( 1000 );
log_info( &logger, " Application Task " );
}
void application_task ( void )
{
lightranger13_meas_result_t result;
// Wait for data ready interrupt
while ( lightranger13_get_int_pin ( &lightranger13 ) );
lightranger13_clear_interrupts ( &lightranger13 );
if ( LIGHTRANGER13_OK == lightranger13_read_result ( &lightranger13, &result ) )
{
log_printf( &logger, " Distance: %u mm\r\n", result.dist_peak );
log_printf( &logger, " Temperature: %d degC\r\n\n", ( int16_t ) result.temperature );
}
}
int main ( void )
{
/* Do not remove this line or clock might not be set correctly. */
#ifdef PREINIT_SUPPORTED
preinit();
#endif
application_init( );
for ( ; ; )
{
application_task( );
}
return 0;
}
// ------------------------------------------------------------------------ END
额外支持
资源
类别:光学