高分辨率 3D 传感器技术已经成为各种应用的一大关键功能,从基于手势的用户界面到汽车驾驶员辅助系统 (ADAS) 等。在各种 3D 传感器技术中,雷达技术具有大多数传统方法所不具备的功能和性能特点。然而,开发人员发现保持高精度和低功耗具富挑战性,部署雷达传感器系统也具有陡峭的学习曲线。
Acconeer 使用被称作相干脉冲雷达 (PCR) 的先进技术开发集成式雷达传感器,为智能产品和其他新兴应用同时提供了所需的高精度和低功耗。
本文首先介绍 Acconeer 的 PCR 方法,然后介绍一款雷达模块以及基于该技术的相关开发平台。此外,本文还将演示如何使用该平台将复杂的雷达传感器技术应用到各种系统设计中,包括电池供电的智能产品。
为什么要使用雷达?
在更新频率较快的情况下,基于雷达的感应技术仍能够提供毫米级分辨率,并为精确物体检测、距离测量、定位跟踪等各种应用提供所需的高精度距离和运动数据。但是,要在智能产品设计中采用雷达技术,开发人员通常必须在低功耗或高精度这两者之间进行取舍。随着开发人员将这项技术应用于功率预算有限的设计,越来越多的应用要求保持高精度,即使代价是降低功率水平。
先进的雷达技术
有别于传统雷达设计的另一种方法提供了相应的解决方案,可将复杂相干雷达方法的高精度与脉冲雷达系统的低功耗要求结合在一起。脉冲雷达系统会在脉冲之间关闭发射器,从而实现低功耗,但精度也比较低。相反,相干雷达系统则可发射连续脉冲,使用对返回信号的精确相位测量来提供高精度测量,代价则是功耗较高。
Acconeer 的 A111 雷达传感器中使用的 PCR 技术结合了这两种技术。与脉冲雷达一样,PCR 在脉冲发射之间也会关闭无线电,但与相干雷达系统一样,发射的是脉冲串,即扫描,具有已知的起始相位(图 1)。
图 1:Acconeer 的 A111 相干脉冲雷达器件通过发射长短不同的小波,对脉冲重复频率 (PRF)、中心频率 (fRF)、脉冲持续时间 (tpulse) 进行精准控制,以低功耗实现高精度。(图片来源:Acconeer)
通过调节脉冲持续时间 (tpulse) 等参数,开发人员能够针对不同应用来优化信号。例如,在手势控制的用户界面应用中,开发人员可以缩短 tpulse 以生成时间较短的小波,来解析各手指的小幅运动。相反,在汽车自动停车应用中,他们可以延长 tpulse 以生成时间较长的高能量小波,来解析障碍物。
虽然 PCR 的技术优势颇具吸引力,但若没有雷达技术领域的丰富经验,开发人员很少有时间能自行实现这项技术。除了在高效毫米波 (mmWave) 前端设计阶段所面临的挑战外,开发人员还面临着另一项严峻挑战,即将所采集的反射雷达信号的幅值和相位数据转换为实用的距离和运动测量数据。
Acconeer 基于 PCR 的 A111 雷达器件和相关软件开发套件 (SDK) 专为应对这些挑战而设计,可提取雷达信号处理的低级细节,并以应用易于处理的方式来提供数据。
集成式 PCR 前端简化开发
Acconeer 的 A111 在硬件方面简化了 PCR 技术实施,提供完整的雷达传感器,将毫米波雷达前端与封装天线 (AIP) 集成,采用 5.2 x 5.5 x 0.88 mm 的倒装片芯片级封装 (fcCSP)(图 2)。
图 2:Acconeer 的 A111 集成毫米波无线电、数字子系统、定时和电源管理模块,为使用相干脉冲雷达技术的雷达检测提供完整的前端解决方案。(图片来源:Acconeer)
除了毫米波射频 (RF) 子系统之外,A111 还包括数字子系统,为程序和数据提供专用存储区域,用于管理毫米波无线电子系统。独立子系统提供锁相环 (PLL) 定时和电源管理功能,包括上电复位 (PoR) 和独立低压差 (LDO) 稳压器,适用于器件的多个功率域。
凭借皮秒级的时间分辨率,在长达两米的测量范围内,该器件的测距精度通常能够达到毫米级。同时,低功耗特性让开发人员能够将其用于电池供电的设备。由于 A111 传感器高度集成,开发人员在主机微控制器之外只需其他少量元器件,即可在设计中实现雷达检测(图 3)。由于 A111 能够在未合成孔径雷达信号的情况下工作,因而开发人员能够将其应用在智能产品中,而不影响现有的侵入防护要求。
图 3:由于 A111 集成了雷达前端所需的全部射频和数字子系统,因而开发人员在主机微控制器之外只需其他少量元器件,即可实现雷达检测。(图片来源:Acconeer)
A111 充当传统的串行外设接口 (SPI) 器件,具有串行数据输入 (MOSI)、串行输出 (MISO)、时钟 (SPI_CLK) 和从设备选择信号 (SS) 端口。A111 的使能引脚 (ENABLE) 让开发人员能够使用微控制器为器件上电和断电,而中断引脚 (INTERRUPT) 让开发人员能够在测量就绪时使用 A111 通知微控制器。
通过在脉冲扫描发射之间利用使能引脚关闭 A111,开发人员能够将 A111 功耗降低至 66 µA(典型值)。相反,在 A111 执行一系列扫描和测量时,开发人员可使用基于 Arm® Cortex®-M 的处理器所提供的等待中断 (WFI) 指令,将主机微控制器置于低功耗休眠状态,并在 A111 完成操作后发出中断来唤醒微控制器。
设计人员可以自行添加高精度时钟源,也可以依赖器件的内部时钟电路,后者只需接入 EPSON 的 TSX-3225 等外部晶体振荡器即可工作。该器件使用 1.8 V 单电源为射频(VIO_1 和 VIO_2)和数字 (VIO_3) 端供电。或者,对于高能耗应用,开发人员可以使用独立电源。图 3 所示的 VIO_Na 和 VIO_Nb 引脚已在器件内部连接,Acconeer 建议在印刷电路板上对其进行外部连接。
A111 专门作为雷达前端器件而设计,因此本身并不具备任何永久性存储的固件,而是依赖于主机微控制器来上传所有传感器软件,处理 A111 传感器启动、配置、扫描采集和信号处理。因此,辅助微控制器的选择是一项重要的设计决策。Acconeer 指出,STMicroelectronics 的 STM32L476 或 Nordic Semiconductor 的 NRF52840 等基于 Arm Cortex-M4 的微控制器,通常足以处理测距或基本运动检测等相对静态的操作。而对于呼吸运动检测或对象跟踪等更动态的应用,Acconeer 则推荐使用基于 Arm Cortex-M7 的微控制器,例如 Microchip Technology 的 ATSAME70。因此,Acconeer 在 XM112 雷达模块中,将 A111 PCR 器件与 ATSAME70 配对使用。
Acconeer 的 XM112 模块结合了 A111 雷达传感器与 Microchip Technology 的 ATSAME70 微控制器,可提供完整的雷达子系统。开发人员可将 XM112 与 XB112 分线板结合使用,即可开始评估 A111,并构建基于 PCR 的软件应用程序。或者,开发人员只需将这款 30 引脚 24 mm x 16 mm 模块插入自己的 PCB,即可为定制设计添加自足式 PCR 子系统。为了执行雷达检测,开发人员可以通过与开发系统串行连接来控制 XM112 模块,或者直接在 XM112 主机 ATSAME70 微控制器上执行软件。
软件接口
无论硬件系统如何配置,开发人员都要使用 Acconeer 雷达系统软件 (RSS) 应用编程接口 (API),以编程方式控制雷达测量。RSS API 是使用 A111 的唯一软件接口。由于设计、校准和处理要求的复杂性,Acconeer 不支持通过典型 SPI 事务对 A111 寄存器进行访问。相反,所有操作都通过 RSS 进行,以此提供 A111 检测器功能。这些检测器转而通过 API 构建低级服务,以便访问来自 A111 的不同类型预处理数据。这些服务包括:
Envelope 服务,提供有关传感器数据的幅值信息
Power Bin 服务,提供预定义范围间隔 (bin) 内的幅值信息
IQ 服务,提供 IQ 调制数据,可使用相位和幅值测量,生成的测量结果比使用仅幅值 Envelope 和 Power Bin 服务时更精确
在这些服务中,开发人员能够充分利用电源管理、范围增强、自校准等特殊功能。
在电源管理方面,开发人员能够将器件设置于四种功率模式中的一种模式,通过降低传感器更新速率来减少功耗。开发人员可借助范围增强功能来执行长扫描,在某些条件下测量范围可扩展至 7 米。最后,通过自校准功能,开发人员能够降低每次器件启动时因校准周期而产生的功耗。例如,在适用于物联网的电池供电设计中,器件可能经常处于休眠模式,甚至因长期保持非活动状态而关闭。
很多情况下,每个唤醒周期开始时都执行自校准实无必要,纯粹只是增加功耗而已。相反,开发人员可将初始校准周期的数值存储在非易失性存储器中,并在后续的唤醒周期中使用这些值就能可靠地执行测量。
对于生产代码开发,工程师可以下载完整的软件分发包,该软件包提供了样例应用程序源代码以及 Acconeer SDK。SDK 提供了头文件,并在针对特定微控制器的分发软件中,分别提供了适用于 Arm Cortex-M4 和 Arm Cortex-M7 微控制器的预编译 RSS 库。
SDK 的 C 语言代码样例阐示了在生产应用中使用 RSS API 执行雷达测量的基本设计模式。对于任何类型的测量,这种设计模式首先都要初始化系统和 RSS,按顺序调用三个例程:
acc_driver_hal_init(),用于初始化电路板和 GPIO
acc_driver_hal_get_implementation(),用于实例化 C 结构 acc_hal_t,C 结构用于存储传感器和电路板属性,以及存储器分配和信号量等运行时间处理程序的指针。
acc_rss_activate_with_hal(),用于激活雷达系统服务 (RSS) 实用程序本身
此时,典型测量需要创建名为配置的对象,其中包含传感器和特定测量的相关参数。然后使用该配置来调用 RSS API 函数,以构建所需的检测器或服务。样例代码阐示了这种设计模式在 example_detector_distance_peak.c 模块中的应用,以构建和使用距离峰值检测器。在该模块中,main() 例程(清单 1)首先执行初始化和 RSS 激活,然后创建配置 (acc_detector_distance_peak_configuration_create()),并使用该配置来构建峰值检测器 (distance_peak_detect_with_blocking_calls())。
int main(void)
{ acc_detector_distance_peak_status_t detector_status; printf(“Acconeer software version %s\n”, ACC_VERSION);
printf(“Acconeer RSS version %s\n”, acc_rss_version());
if (!acc_driver_hal_init())
{ return EXIT_FAILURE; } acc_hal_t hal = acc_driver_hal_get_implementation();
if (!acc_rss_activate_with_hal(&hal))
{ return EXIT_FAILURE; } //Create the detector configuration acc_detector_distance_peak_configuration_t distance_configuration = acc_detector_distance_peak_configuration_create();
if (distance_configuration == NULL) { fprintf(stderr, “\nacc_service_distance_configuration_create() failed”);
return EXIT_FAILURE; } //Run distance peak detection in blocking mode detector_status = distance_peak_detect_with_blocking_calls(distance_configuration);
if (detector_status != ACC_DETECTOR_DISTANCE_PEAK_STATUS_SUCCESS)
{ fprintf(stderr, “Running distance peak detector in blocking mode failed”);
acc_detector_distance_peak_configuration_destroy(&distance_configuration);
acc_rss_deactivate(); return EXIT_FAILURE; } detector_status = distance_peak_detect_with_blocking_calls_with_estimated_threshold(distance_configuration);
if (detector_status != ACC_DETECTOR_DISTANCE_PEAK_STATUS_SUCCESS)
{ fprintf(stderr, “Running distance peak detector in blocking mode with estimated threshold failed”);
acc_detector_distance_peak_configuration_destroy(&distance_configuration); acc_rss_deactivate(); return EXIT_FAILURE;
} acc_detector_distance_peak_configuration_destroy(&distance_configuration); acc_rss_deactivate(); return EXIT_SUCCESS; }
清单 1:Acconeer 软件开发套件分发中包括的样例代码演示了使用 Acconeer 雷达系统服务 (RSS) 应用编程接口 (API),通过 Acconeer 的 A111 传感器来执行测量的基本设计模式。(代码来源:Acconeer)
在这个样例应用程序中,实际的距离峰值测量在例程 distance_peak_detect_with_blocking_calls() 中执行。该例程转而使用 RSS API 函数 acc_detector_distance_peak_get_next(),来检索 A111 器件的实际测量数据(清单 2)。在本例中,代码将 acc_detector_distance_peak_get_next() 测量例程置于循环中,递减计数器 detection_runs,直至执行 100 次测量。
复制 detector_status = acc_detector_distance_peak_activate(handle);
if (detector_status == ACC_DETECTOR_DISTANCE_PEAK_STATUS_SUCCESS)
{ uint_fast8_t detection_runs = 100; while (detection_runs 》 0)
{ reflection_count = 10; detector_status = acc_detector_distance_peak_get_next(handle, reflections, &reflection_count, &result_info);
if (detector_status == ACC_DETECTOR_DISTANCE_PEAK_STATUS_SUCCESS)
{ printf(“Distance detector: Reflections: %u.Seq.nr: %u.(%u-%u mm): %s\n”, (unsigned int)reflection_count, (unsigned int)result_info.sequence_number, (unsigned int)(start_m * 1000.0f), (unsigned int)(end_m * 1000.0f), format_distances(reflection_count, reflections, metadata.free_space_absolute_offset));
} else { fprintf(stderr, “reflection data not properly retrieved\n”); } detection_runs--; }
清单 2:在使用 Acconeer A111 传感器执行测量的过程中,开发人员仅能使用 Acconeer 雷达系统服务 (RSS) 应用编程接口 (API),以调用 acc_detector_distance_peak_get_next() 等例程,用于处理低级细节,如本代码片段所示。(代码来源:Acconeer)
开发人员能够在类似的设计模式中使用服务调用来进行初始化、RSS 激活、配置创建、服务实例化,从而实现自己的检测器。例如,要使用 Envelope 服务,开发人员可以调用 acc_service_envelope_configuration_create() 来创建必需的配置,并在调用 acc_service_create() 时将该配置作为参数使用,以便实例化服务对象。
通过研究 C 语言样例代码,开发人员能够使用 RSS API 来构建带定制检测器的专用雷达应用,从而快速获取经验。为了帮助开发人员更快熟悉基于雷达的感应,特别是 RSS 服务,Acconeer 还在 Python 探索套件软件库中提供了样例代码。
Python 探索套件旨在与 Acconeer SDK 和 XM112 等评估套件配合使用,帮助开发人员充分利用 Python 的工作效率优势来构建 RSS 服务和检测器。除了基本样例之外,该套件还提供能实现复杂测量应用的样例代码,包括检测睡眠对象的呼吸模式、使用相位信息来跟踪相对运动、检测正在接近的障碍物等。
总结
雷达检测技术能够为距离和运动测量应用提供高精度测量。但是,可能需要消耗大量功率才能实现高精度,设计过程通常也比较复杂。通过实现 PCR 技术,Acconeer 的 A111 集成式雷达传感器为智能产品和其他新兴应用同时提供了所需的高精度和低功耗。辅助软件开发套件 (SDK) 可以对雷达信号处理的复杂度进行抽象化,提供应用级所需的更高级数据。
通过将 SDK 与基于 A111 的开发板配合使用,工程师能够快速获取雷达检测技术方面的经验,快速实现可识别对象和跟踪运动的复杂应用,并达到毫米级分辨率。
评论
查看更多