使用先进的飞行时间(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 之前,必须执行适当的逻辑电压电平转换。此外,它还配备了包含功能和示例代码的库,可用作进一步开发的参考。
功能概述
开发板
UNI Clicker 是一款紧凑型开发板,设计为一体化解决方案,它将 Click 板™ 的灵活性带给您喜爱的微控制器,使其成为实现您想法的完美入门套件。它支持广泛的微控制器,如 Microchip、ST、NXP 和 TI 等厂商的不同 ARM、PIC32、dsPIC、PIC 和 AVR(不论其引脚数量),具备四个 mikroBUS™ 插槽用于 Click 板™ 连接,一个 USB 连接器,LED 指示灯,按钮,一个调试器/程序员连接器,以及两个 26 针头用于与外部电子设备的接口。得益于创新的制造技术,它允许您迅速构建具有独特功能和特性的小工
具。UNI Clicker 开发套件的每个部分都包含了使同一板块运行最高效的必要组件。除了可以选择 UNI Clicker 的编程方式,使用第三方程序员或通过板载 JTAG/SWD 头连接的 CODEGRIP/mikroProg 外,UNI Clicker 板还包括一个为开发套件提供的干净且调节过的电源供应模块。它提供了两种供电方式;通过 USB Type-C(USB-C)连接器,其中板载电压调节器为板上每个组件提供适当的电压水平,或使用锂聚 合物/锂离子电池通过板载电池连接器供电。所有 mikroBUS™ 本身支持的通信方法(加上 USB
HOST/DEVICE)都在这块板上,包括已经建立良好的 mikroBUS™ 插槽、为 MCU 卡提供的标准化插座(SiBRAIN 标准),以及几个用户可配置的按钮和 LED 指示灯。UNI Clicker 是 Mikroe 快速开发生态系统的一个重要组成部分,允许您在几分钟内创建新的应用程序。它由 Mikroe 软件工具原生支持,得益于大量不同的 Click 板™(超过一千块板),其数量每天都在增长,它涵盖了原型制作的许多方面。
微控制器概述
MCU卡片 / MCU

类型
8th Generation
建筑
ARM Cortex-M4
MCU 内存 (KB)
512
硅供应商
NXP
引脚数
144
RAM (字节)
131072
使用的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
额外支持
资源
类别:光学