在上一篇博客中(https://blog.csdn.net/dreamerhan/article/details/105248944),我介绍了如何基于SimpleLink CC26x2R LaunchPad来进行定位系统的搭建,并如何运行可视化demo。但在Demo运行后,AoA是固定的值,如下图所示:
这是因为我们使用的Passive使用的是内置单天线,所以计算得到的角度只是一个固定值。本章节,我将介绍如何利用CC26XR开发板来进行AoA测量。
按照https://blog.csdn.net/dreamerhan/article/details/105248944配置好Master, Slave, Passive节点。CC26xR开发版烧录对应的程序就可以充当Master,Slave端,Passive端除了烧录对应的程序之外,还需要将开发板上的C51电容切换至外置天线连接点,如下图。
然后将BOOSTXL-AoA上的JSC连接口连接到已配置好外置天线开关的开发版上,然后将BOOSTXL-AoA上的引脚与CC26x2R开发版上的引脚连接。
以上就是我们的准备工作,接下来开始进入有趣的步骤。
TI官网上下载的SDK中,有三种计算AoA的模式:仅Passive端提供AoA测量,仅Master端提供AoA测量,Passive和Master端都提供AoA测量。这里我们选择仅Passive端提供AoA测量。(因为小编手里目前只有一个BOOSTXL-AOA)。需要对代码进行修改,具体修改方式,见官网说明http://dev.ti.com/tirex/explore/node?node=AHYhhuDNTaRXzkOlahOlvA__pTTHBmu__LATEST。
需要注意的是,如果我们想直接利用TI官方SDK提供的Demo,需要也将rtls_master
中的main.c
的rtlsConfig.rtlsCapab
字段也添加RTLS_CAP_AOA_RX
. 否则,在运行Demo时,会提示Warring ! One of the device not supporting AOA functionality
,最后的结果就是一直收不到AoA packet。
然后将节点放置在离地面高1m的平台上,这样做的目的是减小多径和信号的衰减。为了增加测量结果的准确度,建议节点要放在等高的位置上,否则会在三维上产生误差,也要保证节点之间没有遮挡物和发射物。
之后,在终端运行:
cd /Applications/ti/simplelink_cc13x2_26x2_sdk_3_40_00_02/tools/ble5stack/rtls_agent/rtls_ui
chmod 777 rtls_ui_macos
rtls_ui_macos
便可以观察到在Passive端计算得到的AoA测量值。
如果想让测量精度更高,可以改变接受端(Passive)天线的朝向,当天线阵列垂直发送端和接收端连线的时候,测量精度更高。修改天线朝向时,要注意使用的是天线阵列1还是天线阵列2。
BOOSTXL-AOA天线有两个相互正交的天线阵列,但是两个天线阵列不能同时工作,框图如下,
由框图可以看出,U1开关在同一时刻,只能选择DIO27-1引脚或者DIO27-0引脚,同时,从框图中,我们还可以得出,在同一个天线阵列的三根天线,也不是同时接收信号,所以会存在一个天线切换,这一点将在下一篇文章中提及。各个引脚控制逻辑如下:
用户也可以直接修改/Applications/ti/simplelink_cc13x2_26x2_sdk_3_40_00_02/tools/ble5stack/rtls_agent/examples/rtls_example_with_rtls_util.py
中的以下字段:
"aoa_cc26x2": {
"aoa_slot_durations": 1,
"aoa_sample_rate": 1,
"aoa_sample_size": 1,
"aoa_sampling_control": int('0x10', 16),
## bit 0 - 0x00 - default filtering, 0x01 - RAW_RF no filtering,
## bit 4,5 - default: 0x10 - ONLY_ANT_1, optional: 0x20 - ONLY_ANT_2
"aoa_sampling_enable": 1,
"aoa_pattern_len": 2,
"aoa_ant_pattern": [0, 1]
}
在SDK3.30版本中,字段有所不同,但是大同小异,
"aoa_cc26x2": {
"aoa_slot_durations": 1,
"aoa_sample_rate": 1,
"aoa_sample_size": 1,
"aoa_sampling_control": 1, //1: antenna array 1; 0: antenna array 2;
"aoa_sampling_enable": 1,
"aoa_num_of_ant": 3,
"aoa_ant_array_switch": 27,
"aoa_ant_array": [28, 29, 30] //三根天线的引脚号
}