超宽带(UWB)是一种基于IEEE 802.15.4a和802.15.4z标准的无线电技术,可以非常精确地测量无线电信号的飞行时间,从而实现厘米级精度的距离/位置测量。UWB技术除了提供定位功能外,它本身是一种通信技术,其提供了一种安全的无线通信新方式,为新形式的安全交易打开了大门。
DW1000芯片是DecaWave公司于2012年推出的一款超宽带定位芯片,DecaWave公司已于2020年被苹果供应商Qorvo(威讯联合半导体)收购,最新推出的DW3000可与受支持的 Apple 产品配合使用实现附近互动功能(寻物等)。
本篇文章采取由上到下的思路来介绍UWB,首先介绍的是UWB这项技术的一些背景,再整体的从MDEK1001(Module Development & Evaluation Kit)开发套件讲起,直观的了解如何使用UWB技术来实现RTLS(实时定位系统),然后再介绍DWM1001-DEV(DWM1001模组的开发板),最后着重介绍DWM1001(DWM1001模组,集成了DW1000等芯片)的开发使用。
UWB技术概述
超宽带技术是一种全新的、与传统通信技术有极大差异的通信新技术。它不需要使用传统通信体制中的载波,而是通过发送和接收具有纳秒或纳秒级以下的极窄脉冲来传输数据。 FCC对UWB系统的定义为带宽 >500MHz且载波中心频率>2.5GHz。
超宽带无线通信的实现方案有三种。
- IR-UWB(脉冲无线电)。
- DS-UWB(脉冲无线电的改进版)。
- MB-UWB(调制技术)。
目前真正用于定位领域的是IR-UWB(下面介绍的也是这一种),利用纳秒级的非正弦波窄脉冲传输数据。
技术优势
超宽带技术射频发射的脉冲工作脉宽一般为0.1-1.5ns (1纳秒= 十亿分之一秒),重复周期在25-1000ns。因为信号脉冲极窄,它的频谱无法像蓝牙这种持续信号能够通过傅里叶变化得到对应频率的尖峰(如下图蓝色部分在2.4G展示)而是得到一个以脉冲频率为中心,宽度大于500MHz的频谱结果,好似信号的能量被分摊到以500MHz为带宽,脉冲频率为中心的所有频率中(如下图的橙色部分),脉冲的频率被"隐藏"了起来。极高的带宽和极低的功率谱密度可以使其与其他窄带和宽带无线通信系统共享频谱且具备一定的抗干扰性。
这种发波的物理特性带来的好处还有一下两点:
- UWB 系统使用间歇的脉冲来发送数据,脉冲持续时间很短,可能在1ns,有很低的占空因数,系统耗电可以做到很低。
- 纳秒级窄脉冲,因为其持续时间远小于多径传播的时延,所以在接收端能够有效分离多径信号,使UWB技术具有了较强的抗多径能力。
与蓝牙或WiFi等其他技术不同,UWB技术射频信号的物理特性从一开始就被专门定义,以实现实时,超精确,超可靠的定位和通信。Qorvo收购了DecaWave之后,在 UWB 芯片的发展方向中添加了低功耗和低成本,使其的通用性更强。
定位实现方法
UWB 基本原理是通过将信号的飞行时间(ToF)乘以光速来测量两个无线电收发器之间距离。根据这一基本原理,又分为到达时间差(TDoA),双向量程(TWR)以及到达相位差(PDoA)。
到达时差 (TDoA)
TDoA方法与GPS非常相似。多个参考点(称为锚点)部署在一个场地中,并且时间同步。将信标放置在移动物体上, 当锚点收到信标信号时,它将为其添加时间戳.然后将来自多个锚点的时间戳发送回中央定位引擎,该引擎将根据信标信号到达的时间差运行多点定位算法,以计算移动设备的 X、Y、Z坐标.
这种方式具有以下优点:
- 标签的电池寿命长达 7 年(CR2032 – 0.1Hz 更新率)。
- 可部署设备密度非常高 – 数千台。
这种方式同时具有以下缺点:
- 锚点需要时间同步。
- 更复杂的部署。
这种方式的应用场景如下:
- 在拥挤的场所(即体育场,商场,贸易展览)寻找家人,朋友和同事。
- 跟踪大型仓库中的员工。
- 跟踪学校的孩子(确保他们在上学日结束前不会离开校园)。
双边测距(TWR)
TWR方法依赖于两个设备之间的双向通信。在通信时,这些设备还会测量它们之间 UWB射频信号的飞行时间。通过将信号的往返时间乘以光速,然后除以2,可以得出两个设备之间的实际距离。如果在两个设备之间应用 TWR 方案,您将获得两个设备之间的距离 (D)。基于 TWR 方案, 您还可以通过测量移动标签和多个固定信标之间的距离来实现 2D 甚至 3D 定位 – 这称为三角测量。
方法优势:
- 不需要同步时间。
- 方便部署。
- 双向通信可实现。
方法劣势:
- 由于设备使用双向通信,功耗更高 – 电池寿命从数月到一年(取决于实际使用情况)。
- 移动设备数量有限(数百台)。
应用场景:
- 查找家中丢失的物品。
- 根据您的距离锁定和解锁您的电脑。
- 使用智能遥控器或手机指向和控制物联网设备。
到达相位差(PDoA)
PDoA 方法包括将提供两个设备之间距离的 TWR 方案与两个设备之间的方位测量相结合。距离和方位的组合允许计算两个设备的相对位置(X,Y,z),而无需任何其他基础设施。为此,其中一个设备携带两个天线,能够测量射频信号到达的相位差。
方法优势:
- 降低锚点安装位置选择的要求。
- 仅用两个设备进行相对位置定位。
方法劣势:
- 位置误差不再是恒定的,它是2个设备之间距离的函数。
应用场景:
- 自定义智能家居(音频、视频、照明等)根据相对位置进行动作。
- 安全访问您的家庭或办公楼,无需使用钥匙或触摸屏。
- 跟踪预定义区域内的人员或物品。
MDEK1001
MDEK1001是基于DWM1001模组的评估和开发套件,它帮助我们通过DWM1001C来快速实现一个实时定位系统(Real-Time Location System),这个系统可以使用运行Android系统的平板电脑来轻松配置部署和可视化标签的实时位置信息。
套件内容
套件包含如下:
- RTLS units:定位系统设备,一共包含12个,可以通过配置在RTLS来担任不同的角色:anchor(锚点),tag(标签,用电池供电),listener(监听),bridge(桥接)。
- USB线缆,用于连接电脑和定位设备。
- 胶垫和彩色贴纸:胶垫用于固定锚点,彩色贴纸用于区分标签。
- 安卓平板:用于安装Decawave DRTLS Manager,部署锚点和标签,实时显示标签位置信息。
- PC:PC 直接连接到 RTLS 定位系统设备以记录位置数据或向该设备发送命令。
- 供电设备:给锚点供电。
RTLS系统部署
部署RTLS系统分为以下几个步骤。
- 将锚点与标签设备安装妥当。
- 选择 4个RTLS 定位设备作为锚点,三角定位理论上只需要三个锚点即可,官方推荐使用四个锚点来提高标签位置的估算准确性。
- 将它们安装在墙壁或三脚架的高处,最好高于头部高度,确保它们都处于同一高度
- 将它们大致排列成矩形,并为其供电。
- 选择 4个RTLS 定位设备作为标签,并用电池为其供电。
- 建立网络。
- 从谷歌Play商店或Decawave网站下载.apk安卓应用程序文件 (Decawave DRTLS
Manager)。按照平板电脑上的说明安装应用程序。 - 打开 Decawave DRTLS Manager应用程序,点击'Start Device Discovery'。
- 点击列出的设备之一,将出现一个选项来命名一个网络,保存之后此设备将添加到该网络。
- 对其余设备重复此操作以将其添加到此网络(向右滑动可以从列表中删除设备)。
- 所有 RTLS 定位设备的初始配置都是被动的UWB 模式下的标签设备。
- 从谷歌Play商店或Decawave网站下载.apk安卓应用程序文件 (Decawave DRTLS
- 将4个固定好的RTLS 定位设备锚点。
- 将“Node Type”设置为“Anchor”。
- 将“UWB“设置为“Active”。
- 选其中一个锚点为“Initiator”,选中相应属性框(网络中必须有一个发起者)。
- 将一个RTLS 定位设备设置为标签。
- 将“Node Type”设置为“Tag”。
- 将“UWB“设置为“Active”。
- 属性框勾选“RESPONSIVE MODE”、“STATIONARY DETECTION”和
“LOCATION ENGINE”。
- 将锚点的位置信息输入系统。
- 锚点可以自动生成位置坐标。
- 在“Network Details”屏幕上,点击右上角下拉菜单(出现蓝牙范围内的锚点)。
- 对列表中的定位点重新排序以匹配它们在房间中的位置:
- 在房间内逆时针排序锚点(如下图)。
- 列表中的第一个锚点是(0,0)坐标。
- 点击“Measure”开始自动定位,点击”‘PREVIEW“来检查自动生成的锚点坐标。
- 通过点击“Z-AXIS”输入锚点的高度。最后保存配置。
- 锚点的坐标也可以手动输入,点击然后在“POSITION”位置输入x,y,z坐标。
- 锚点可以自动生成位置坐标。
- 点击”Grid“来看标签的位置信息如下。
其他的定位系统组成
下图是8个锚点和两个标签的实时定位系统,其中的两个网关由定位设备配置成桥接模式与树莓派3B+组合而成,使用了预留的排针进行相连。
通过下图可以看到标签在不同区域时选择了最合适的锚点来做三角定位。
DWM1001-DEV
DWM1001-DEV是Decawave DWM1001C模组的开发板,上面提到的RTLS units外壳里边装的就是它,其主要是在Decawave DWM1001模组的基础上增加了板载 J-Link 用于通过 USB 进行调试和刷录,预留了8pin的普通IO和26pin与树莓派连接的接口,以及充电电路和LED指示灯。
其原理图如下:
DWM1001C
DWM1001C是基于Decawave的DW1000芯片和Nordic Semiconductor的nRF52832 SoC的UWB和蓝牙模组。它具有板载运动传感器和集成天线,它的硬件/软件功能框图如下。
可以看出模组主要包含四个芯片:
- nRF52832蓝牙芯片,DWM1001 Firmware就跑在这个芯片上。
- LIS2DH12TR三轴加速度传感器,用于检测模组是否处于运动状态,从而选择不同的位置刷新频率。
- DW1000,UWB芯片,完成UWB射频部分实现。
- 电源芯片,完成DC-DC不同电压转换。
模组功耗与天线方向图
下图是模组在不同状态下的功耗情况,可以看出模组在收发波的时候会有一个比较大的电流变化,对电源部分的瞬时相应提出了要求。
下图是显示了DWM1001C模组的天线辐射方向图。测量围绕板中心的球形空间中的三个平面,带有θ图和φ图,表示不同的极化。可以看出,在 RTLS 系统中使用时应该直立放置标签和锚点,如果标签和锚点的天线相对于彼此垂直,则极化会发生变化。在这种情况下,水平极化图案θ适用,并且在某些角度存在零点,可能限制定位的有效范围和引入位置不准确。
UWB网络帧格式
UWB网络使用 IEEE 802.15.4 定义的标准帧。该标准定义了多种帧类型,该系统仅使用数据帧。下图是一帧数据帧的组成。
UWB网络中的帧由上图中的Payload的第一字节来区分不同类型的消息,下面我们着重描述以下常见的消息。
- Beacon message:这个消息由锚点发送,包含一些当前网络的基本信息。
- Join request message:这个消息由锚点发送,请求加入已经存在的网络。
- Join confirmation message:这个消息由收到请求加入网络的锚点发送,这个消息在紧接着Beacon message发送。
- Position message:这个消息作为Beacon message的补充来发送,包含锚点的(x,y,z坐标)。
- Group Poll message:这个消息用于意在进行一次TWR定位的设备,主要由标签发起,锚点在自动生成坐标的时候也会发起,包含了刷新频率以及上一次的定位计算结果(x,y,z)。
- Response message:当前参与三角定位的锚点在接收到Group Poll消息之后,会回复这条消息,这条消息包含了标签发送Group Poll的时间戳以及锚点发送回复时候的时间戳。
DWM1001模组固件开发
DWM1001 模块预装了嵌入式固件,可提供基于双向测距 (TWR) 的实时定位系统 (RTLS)。该模块不仅可以通过蓝牙串口等通信接口进行配置和控制此,Decawave还以库和源代码的形式提供了模块固件源码以及构建环境,以便用户可以自定义操作和/或添加自己的功能。
DWM1001 模块中嵌入的固件基本上提供两种类型的功能:PANS API 和提供较低级别功能的 PANS 库。PANS API 包括通用 API(这些包括用于不同接口的不同 API 集和相应的解析器,它充当用户 API(C、UART、SPI 和 BLE)和 PANS 库之间的转换器)。下图显示了 DWM1001 固件的体系结构和组件。
其中核心的是PANS(Positioning and Networking Stack) Library,它主要包含了以下几个部分,其框图在列表的下面。
- SoftDevice and BLE driver:SoftDevice是Nordic为BLE实现提供的库文件,为 DWM001C提供 BLE 功能,以无线方式创建复杂的网络拓扑、通信和固件更新。
- eCos RTOS and BSP:eCos RTOS是一个免费开源的实时操作系统,eCos 系统为 DWM1001 硬件平台提供了非常好的运行时性能和板级支持包 (BSP)。
- DW1000 driver:Decawave’s DW1000 驱动。
- RTLS Management:RTLS 管理应用程序支持将 DWM1001 模块配置为将参与 TWR 的标签和锚点。
- TWR solver / Location Engine:标签中的TWR solver / Location Engine计算标签的 x、y 和 z 坐标。标签和相对锚点之间的 TWR 结果将发送到TWR solver以计算标签的位置。
环境搭建
开发环境搭建包括以下几个组件,将其正确安装即可。
- Segger Embedded Studio v4.12:集成开发环境。
- Segger J-Flash Lite (J-Link software suite):烧录仿真工具。
- GNU ARM Embedded Toolchain 5.4 2016q3:编译工具链。
修改例程
原厂提供的简易Demo目录结构如下:
打开“examples/dwm-simple-example/dwm-simple-example.emProject” file,工程应该被Segger Embedded Studio成功打开。
下一步配置编译工具链,遵循以下步骤。
- 右键单击SES 主窗口左侧项目项部分中的解决方案名称。解决方案名称位于项目结构的顶部:dwm-simple。在打开的串口中点击“option”。
- 将变量“工具链目录”设置为先前安装的 GNU Arm 嵌入式工具链的 bin 目录的路径。
要编译项目,请从SES菜单栏中打开“build”菜单,然后单击“编译dwm-simple”或按“F7”。生成的日志显示在输出窗口中。如果构建成功,目标 MCU 内存映射也会显示,以及占用和剩余的存/RAM 内存量。
下一步我们对例程做一些简单的修改。
- 在dwm-simple.c文件中,找到app_thread_entry函数。
- 添加局部变量如下:
dwm_pos_t pos;
- 找到while(1)循环体,添加代码如下:
dwm_pos_get(&pos); printf("x=%ld, y=%ld, z=%ld, qf=%u \n", pos.x, pos.y, pos.z, pos.qf); printf("\t\t time=%lu \n", dwm_systime_us_get());
代码的作用是通过串口输出当前标签的坐标信息。代码中使用的dwm_pos_get即为Firmware提供的C语言的API接口,所有的C语言API接口定义都能在dwm/include/dwm.h文件找到。
编译的固件可以直接从 SES 向目标设备上刷写。通过 USB 将 DWM1001-Dev 设备与计算机相连,然后单击菜单栏中的“target”。选项“Download dwm-simple”可用于加载示例。SES 还支持调试。要启动调试模式,请单击菜单栏中的““Debug”或按F5。
DWM1001固件API
Decawave公司不仅将上述的C语言接口称之为API,还将通过串口或者SPI发送的控制协议统称为API,我们举一个例子来类比它们的关系,比如接口int dwm_pos_set(dwm_pos_t* p_pos),它可以通过如下方式来配置位置信息:
dwm_pos_t pos;
pos.qf = 100;
pos.x = 121;
pos.y = 50;
pos.z = 251;
dwm_pos_set(&pos);
对应的UART/SPI的协议则如下:
值得一提的是串口可以通过在1秒内连续摁‘ENTER’键两次来进入shell模式,在shell模式中串口可以通过一系列命令来进行配置。
BLE同样也提供了一组API来设置和获取设备信息,并提供了升级Firmeware的功能。
十六宿舍 原创作品,转载必须标注原文链接。
©2023 Yang Li. All rights reserved.
欢迎关注 『十六宿舍』,大家喜欢的话,给个👍,更多关于嵌入式相关技术的内容持续更新中。