文章目录
- 前言
- 一、LD2450简介
- 特点
- 引脚定义
- 二、使用步骤
- 上位机使用方法
- 通信协议
- 协议格式
- 数据输出协议
- 雷达命令配置方式
- 串口解析示例
前言
运动目标跟踪是指在区域内实时跟踪运动目标所在的位置,实现对区域内运动目标测距、测角和测速。LD2450是海凌科24G毫米波雷达系列中的的运动目标跟踪传感器模组,包含极简化24 GHz雷达传感器硬件和智能算法固件。本方案主要应用在家庭、办公和酒店等普通室内场景,实现对运动人体的定位跟踪。传感器硬件由AloT毫米波雷达芯片、高性能一发两收微带天线和低成本MCU及外围辅助电路组成。智能算法固件采用FMCW波形和雷达芯片专有的先进信号处理技术
一、LD2450简介
特点
- 24 GHz ISM频段
- 整合智能毫米波雷达芯片和智能算法固件
- 精准运动目标定位和跟踪
- 最远探测距离6m
- 超小模组尺寸: 15mm x 44mm
- 挂壁安装
- 方位角±60°,俯仰角±35°
- 多种连接方式,带有插针和插座接口
引脚定义
二、使用步骤
上位机使用方法
- 用USB转串口工具正确连接模组串口;
- 打开ICLM_MTT.exe上位机工具软件,点击检测设备按钮,上位机软件自动通过串口搜索LD2410模块;
检测到模块后,上位机软件会有如下图的提示
- 然后点击开始按钮,上位机软件将会接收LD2450模块上报的检测数据,并实时显示在软件面上。显示内容包括:在扇形图上的最多三个目标的实时位置,每个目标的距离、角度和速度信息;
通信协议
协议格式
数据输出协议
LD2450模组通过串口与外界通信,雷达串口默认波特率为 256000,1停止位,无奇偶校验位。雷达输出检测到的目标信息,包括在区域中的x坐标,y坐标,以及目标的速度值。雷达上报的数据格式如下表所示,每秒上报10帧。
其中单个目标具体包含的信息如下表所示
数据示例:
AA FF 03 00 0E 03 B1 86 10 00 40 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 CC
该组数据表示雷达当前跟踪到了一个目标即目标1(示例中蓝色字段),目标2和目标3(分别对应示例中的红色和黑色字段)不存在,故其相应数据段为 0x00。将目标1的数据转换为相关信息的过程展示如下:
目标1 x坐标:0x0E + 0x03 * 256 = 782,
0 - 782 = -782 mm
目标1 y坐标:0xB1 + 0x86 * 256 = 34481,
34481 - 2^15 = 1713 mm
目标1速度:0x10 + 0x00 * 256 = 16,
0 -16 =-16 cm/s
目标1距离分辨率:0x40 +0x01* 256 = 320 mm
雷达命令配置方式
LD2450雷达执行一条配置命令的过程包含上位机“发送命令”与雷达“回复命令ACK”两个环节。若雷达无ACK回复或回复ACK失败,则说明雷达执行配置命令失败。
如前所述,向雷达发送任何其他命令前,开发者需先发送“使能配置”命令,然后在规定时间内发送配置命令。命令配置完成之后,发送“结束配置”命令告知雷达配置已经结束。
例如,若要读取雷达配置参数,首先上位机发送“使能配置”命令;待收到雷达ACK成功后,再发送“读取参数”命令;待收到雷达ACK成功后,最后发送“结束配置”命令;待雷达ACK成功后,表明完整的读取参数动作结束。
雷达命令配置流程如下图所示。
串口解析示例
ret = tls_uart_read(TLS_UART_1, (u8 *)rec_buf, len); /* 读取串口的数据 存放到
rec_buf*/
if (ret <= 0)
{
break;
}
// 解析数据 rec_buf ret=30
for (int i = 0; i < ret; i++)
{
if (rec_buf[i] == 0xAA && rec_buf[i + 1] == 0xFF)
{
if (i + 6 < ret)
{
// 解析x和y距离
u16 x_distance = rec_buf[i + 4] | (rec_buf[i + 5] << 8);
u16 y_distance = rec_buf[i + 6] | (rec_buf[i + 7] << 8);
// 检查x_distance的最高位
if (rec_buf[i + 5] & 0x80)
{
// x_distance最高位为1,表示正数,减去最高位的1。y永远为正直接减去0x8000
x_distance -= 0x8000;
y_distance -= 0x8000;
// 输出距离
printf("x:%d,y:%d\r\n", x_distance, y_distance);
}
else // 最高位为0 表示x负距离。y永远为正直接减去0x8000
{
y_distance -= 0x8000;
// 输出距离
printf("x:%d,y:%d\r\n", x_distance, y_distance);
}
// 偏移索引以跳过已处理的数据
i += 7;
}
}
}