发帖
2 0 0

定位开发板BU03-Kit使用指南 ——【软件篇】

AndyL
论坛元老

8

主题

17

回帖

4500

积分

论坛元老

今日待办

积分
4500
UWB 26 2 5 小时前

低功耗精准定位开发板BU03-Kit ——【软件篇】

一、硬件介绍

硬件功能、UWB功能介绍等,详见【硬件篇

二、开发方式

1、AT指令

AT指令表详见

在出厂固件下,使用相关AT指令,能快速上手使用。可以进行算法选择、距离、角度测量配置等

(1)用数据线连接至开发板的TTL口,并打开串口助手连接

(2)连接后,使用指令 AT进行测试,若返回 OK,即代表AT指令处理成功

image-20250418173458729.png

主要相关指令:

保存配置:AT+SAVE

恢复出厂模式:AT+RESTORE

获取配置信息:AT+GETCFG (getcfg ID:65535, Role:0, CH:1, Rate:1)

算法切换指令:AT+SETUWBMODE=X

算法选择 X=0:TWR 1:PDOA)

配置完需执行保存配置 AT+SAVE指令

设置配置信息:AT+SETCFG=X1,X2,X3,1

X1: 设备ID(0~10)

X2:设备角色(0:标签 1:基站)

X3:设备信道(0:信道 9 1:信道 5)

1:(设备速率6.8M) 【目前只支持6.8M】

配置完需执行保存配置AT+SAVE指令

流水灯测试指令

AT+TESTLED=X

开始 / 停止开发板LED(流水灯)测试

X:1:开始测试LED 0:停止测试LED

注:执行AT+SETCFG配置设备信息前使用

获取加速度传感器数据

AT+GETSENSOR

获取加速度传感器数据 (BU03模组支持,BU04模组硬件不支持)

acc_x:80.000000 acc_y:960.000000 acc_z:144.000000 angle: 81.493958

使用串口助手的定时发送功能,此时再移动开发板的位置,即可获得此时开发板传感器的实时数据

image-20250418174124906.png

TWR算法指令

TWR测距

(1)用数据线连接至A开发板的TTL口,使用AT指令 AT+SETUWBMODE=0 AT+SETCFG=0,1,1,1 以及 AT+SAVE 配置为**“基站”**

(2)用数据线连接至B开发板的TTL口,使用AT指令 AT+SETUWBMODE=0 AT+SETCFG=0,0,1,1 以及 AT+SAVE 配置为**“标签**”

此时,“基站”开发板的OLED屏幕将会显示,当前**“标签”与“基站”之间的距离**

也可以在“基站”上使用 AT+DISTANCE指令,显示距离

image-20250418180444431.png

专用指令

获取设置的相关系数参数

AT+GETDEV

(getdev cap:10 anndelay:16336, kalman_enable:1, kalman_Q:0.018, kalman_R:0.642, para_a:1.0142, para_b:-173.75, pos_enable:0, pos_dimen:0)

设置设备的系数

AT+SETDEV=X1,X2,X3,X4,X5,X6,X7,X8,X9

X1:标签容量(标签刷新速率)

X2:天线延迟参数

X3:是否卡尔曼滤波使能位

X4:卡尔曼滤波参数 Q

X5:卡尔曼滤波参数 R

X6:校正参数 a

X7:校正参数 b

X8:是否定位使能位

X9:定位维度设置

配置完需执行保存配置AT+SAVE指令

PDOA算法指令

PDOA测距 / 角度

(1)用数据线连接至A开发板的TTL口,使用AT指令 AT+SETUWBMODE=1 AT+SETCFG=0,1,1,1 以及 AT+SAVE 配置为**“基站”**

此时继续观察“基站”TTL口,将会打印出一串标签 ID,使用AT指令 AT+ADDTAG=267F1313,8834,1,64,0 AT+SAVE进行绑定。

image-20250418182212832.png

(2)用数据线连接至B开发板的TTL口,使用AT指令 AT+SETUWBMODE=1 AT+SETCFG=0,0,1,1 以及 AT+SAVE 配置为**“标签”**

此时,“基站”OLED屏幕显示与标签的距离D 和 角度A

专用指令

以下指令,仅适用与“基站”:

AT+GETDLIST

获取 [发现列表]

AT+GETKLIST

获取 [配对列表]

AT+ADDTAG

增加标签到 [配对列表]

(AT+ADDTAG=267F1313,8834,1,64,0)

AT+DELTAG

从 [配对列表] 删除标签、

更多指令AT指令表详见

2、二次开发SDK

Github地址

Gitee地址

此SDK只适用于安信可BU03或BU04系列模组或开发板

2.1、开发环境

(1)此开发板的主控MCU为STM32系列,因此可以使用 Keil 开发,SDK文件夹下的README.md有相关的配置使用方法

(2)打开下载好的SKD文件夹,在\Projects\USER目录下面找到Project.uvprojx文件双击打开工程

SDK工程目录结构

文件夹 描述
Components 组件
Components/APP 应用程序
Components/HAL 驱动库
Components/Main 入口函数
Projects/USER 工程文件
doc 直到文档和图片
名称及路径 说明
/APP 应用代码。包含串口收发封装处理、AT指令处理、初始化、应用层事件。
/HAL 外设驱动。led、timer、uart、flash、spi、i2c、usb初始化、配置以及驱动功能实现。
/OSAL 系统抽象层。队列操作等。
/Main 应用程序入口。包含总的应用逻辑。
/DW/Twr TWR算法相关代码。包含与DW3000 SPI通讯、唤醒、休眠、中断等,TWR node和TWR tag算法。
/DW/Driver UWB原厂驱动。
/OLED OLED显示屏驱动文件。
/USB USB配置、读写处理文件。
/USB/Lib USB库
/LIS2DH12 三轴加速度传感器。初始化、读写、数据处理。
/DW/PDoA PDOA算法相关代码。包PDOA node和PDOA tag算法、配置、输出。
/Device stm32f10x标准库

(3)Keil环境配置

image-20250418224924820.png

若提示报错,将报错的misc.c的131行的NVIC->IPR[NVIC_InitStruct->NVIC_IRQChannel] = tmppriority;

更改为 NVIC->IP[NVIC_InitStruct->NVIC_IRQChannel] = tmppriority;

2.2、快速上手例程

Example下有不同的例程,以ds_twr_sts_sdc_init(双边测距发起者例程)、ds_twr_sts_sdc_resp(双边测距回复者例程) 为例

TWR双边测距回复者例程(UWB基站),负责接收发起者(UWB标签)的数据,并计算距离数据,实现在串口上显示TWR下的距离

  • 此应用程序发送一个 “轮询 ”帧(记录轮询的 TX 时间戳)
  • 然后等待 “ds_twr_sts_sdc_resp”示例代码(此应用程序的配套代码)发出 “响应 ”信息。
  • 收到响应后,记录其 RX 时间戳,然后发送 “最终 ”报文完成交换。
  • 最终报文包含本应用程序记录的所有时间戳,包括计算/预测的最终报文本身的 TX 时间戳。
  • 配套的 “ds_twr_sts_sdc_resp”示例应用程序(回复者)可计算出空中飞行时间,并由此估算出两地之间的距离。
  • 从而估算出两个设备之间的距离。

发起者:发起双边定位的设备,负责发送定位数据包,可视为"UWB标签"

回复者:负责接收定位数据包,并计算测距距离,可视为 "UWB基站"

image-20250421000055661.png

(1)打开 example_defines.h ,把宏 #define EXAMPLE_DEMO 的值改成 1,打开 example_selection.h,取消宏 #define TEST_DS_TWR_INI_STS的注释

(2)编译后,连接开发板的TTL口,下载并烧录到开发板中,配置为“标签

image-20250421233002717.png

(3)打开 example_selection.h ,取消宏 #define TEST_DS_TWR_RESP_STS 的注释

example_selection.h 每次只能运行一个例程,所有要注释 #define TEST_DS_TWR_INI_STS

image-20250422003527867.png

(4)让距离信息从UART上打印出来

  • 打开 “ ds_twr_sts_sdc_resp.c ” 定位到 285 行
  • 取消相关的注释
  • 定义 dist_str 数组变量

image-20250422003532471.png

(5)编译后,连接另一块开发板的TTL口,下载并烧录到开发板中,配置为“基站

  • 上电运行ds_twr_sts_sdc_init例程的设备A “标签
  • 上电运行ds_twr_sts_sdc_resp例程的设备B “基站

(6)打开串口助手,输出标签到基站之间的距离数据 (间隔1s)

串口N.gif

2.3、SDK相关代码介绍

UWB 驱动API指南

main.c:若没有打开 EXAMPLE_DEMO 宏 ,则执行主要任务 nt_task();

main.c.png

nt_task:主要是根据设备的不同配置、角色进行不同初始化和操作;

根据工作模式的不同,处理不同的数据传输模式(TWR / PDOA模式)

void nt_task (void)
{
    //读取上次flash存储数据
    load_bssConfig();
​
    if (sys_para.param_Config.s.userConfig.workmode == 0)
    {
        OLED_ShowStr (19, 2, "Please Send", 2);
        OLED_ShowStr (19, 4, "AT Command", 2);
​
        while (app.pConfig->s.userConfig.nodeAddr == 0xFFFF) //AOA是否有设置
        {
            App_Module_Sys_Work_Mode_Event();
        }
        if (app.pConfig->s.userConfig.twr_pdoa_mode == 0)
        {
            if (sys_para.flag == 0xAAAA)
            {
                if (sys_para.param_Config.s.userConfig.role == 1) //node
                {
                    node_start();
                }
                else if (sys_para.param_Config.s.userConfig.role == 0) //tag
                {
                    tag_start();
                }
            }
        }
        else
        {
            if (sys_para.param_Config.s.userConfig.role == 1)
            {
                ds_twr_sts_sdc_responder();
            }
            else if (sys_para.param_Config.s.userConfig.role == 0)
            {
                ds_twr_sts_sdc_initiator();
            }
        }
    }
    else
    {
        while (1)
        {
            App_Module_Sys_Work_Mode_Event();
        }
    }
​
    for (;;);
}

三、程序烧录

方式一:使用SWD接口下载 / 调试

接线方式

BU03-Kit DAPLink
3V3 3V3
GND GND
SWDIO SWDIO
SWCLK SWCLK

Keil 烧录配置

image-20250418233923748.png

方式二:使用串口USB下载

Uart烧录软件:点击下载

(1)使用数据线连接至TTL口

image-20250418232742825.png

(2)打开烧录软件

  1. 选择固件,已编译出来的Hex文件
  2. 点击搜索串口,选择对应的Port。
  3. 长按板载的BOOT0不松开,再按一下RESET后松开BOOT0。进入烧录模式,开始编程即可开始烧录。等待烧录完成即可。

image-20250418233135904.png

──── 0人觉得很赞 ────

使用道具 举报

赞~ 沙发!
🤭
您需要登录后才可以回帖 立即登录
高级模式
返回
统计信息
  • 会员数: 28571 个
  • 话题数: 40654 篇