DWM1000 测距原理简单分析 之 SS-TWR代码分析1 -- [蓝点无限]
蓝点DWM1000 模块已经打样测试完毕,有兴趣的可以申请购买了,更多信息参见 蓝点论坛

正文:
这一篇内容主要是通过官方源码理解SS-TWR 细节
代码下载链接:https://download.csdn.net/download/duanfei255/10787882
所有代码使用方法:复制example 中的main.c到Keil MDK工程目录,即可编译出不同的工程


使用开发环境:Keil MDK
对应与SS-TWR工程一共有两个文件夹,分别是ex_06a_ss_twr_init 和 ex_05b_ds_twr_resp。 其中ex_06a_ss_twr_init 对应于上一节原理分析中的DeciveA 而 ex_05b_ds_twr_resp 对应于DeviceB。
分别编译下载到两个模块即可通过液晶查看二者直接的距离。
这里留空,认为所有人都使用过Keil - MDK
下面分析代码:
DWM1000 代码所有都遵循如下原则: 初始化 + 任务循环(例如测距)。
下面摘录ex_06a_ss_twr_init 初始化代码(基本所有DWM1000 工程的初始化代码都是一样的) 在SS-TWR中会调用一些API,占到常用API 90%
int main(void)
{
/* Start with board specific hardware init. */
peripherals_init(); /* Display application name on LCD. */
lcd_display_str(APP_NAME); /* Reset and initialise DW1000.
* For initialisation, DW1000 clocks must be temporarily set to crystal speed. After initialisation SPI rate can be increased for optimum
* performance. */
reset_DW1000(); /* Target specific drive of RSTn line into DW1000 low for a period. */
spi_set_rate_low();
dwt_initialise(DWT_LOADUCODE);
spi_set_rate_high(); /* Configure DW1000. See NOTE 6 below. */
dwt_configure(&config); /* Apply default antenna delay value. See NOTE 2 below. */
dwt_setrxantennadelay(RX_ANT_DLY);
dwt_settxantennadelay(TX_ANT_DLY); /* Set expected response's delay and timeout. See NOTE 1 and 5 below.
* As this example only handles one incoming frame with always the same delay and timeout, those values can be set here once for all. */
dwt_setrxaftertxdelay(POLL_TX_TO_RESP_RX_DLY_UUS);
dwt_setrxtimeout(RESP_RX_TIMEOUT_UUS);
上面初始化分为两部分,一部分是STM32 相关的初始化,例如设定IO SPI OLED等等
/* Start with board specific hardware init. */
peripherals_init(); /* Display application name on LCD. */
lcd_display_str(APP_NAME); spi_set_rate_low();
spi_set_rate_high();
这里一般不需要更改,除非针对不同的板子IO 发生变化或者更改液晶驱动。 关于SPI 速率设定,由于DWM1000初始化之前SPI 不能全速运行,所以开始的时候需要低速SPI,而待DWM1000 初始化完,可以全速运行了。
reset_DW1000(); /* Target specific drive of RSTn line into DW1000 low for a period. */
dwt_initialise(DWT_LOADUCODE);
/* Configure DW1000. See NOTE 6 below. */
dwt_configure(&config); /* Apply default antenna delay value. See NOTE 2 below. */
dwt_setrxantennadelay(RX_ANT_DLY);
dwt_settxantennadelay(TX_ANT_DLY); /* Set expected response's delay and timeout. See NOTE 1 and 5 below.
/* As this example only handles one incoming frame with always the same delay and timeout, those values can be set here once for all. */
dwt_setrxaftertxdelay(POLL_TX_TO_RESP_RX_DLY_UUS);
dwt_setrxtimeout(RESP_RX_TIMEOUT_UUS);
前面三个函数进行DWM1000 初始化,通常情况下无需修改。
note:所有以dwt_ 开头的函数均为DWM1000 官方标准API。
后面四个标准API 比较重要,设定不好距离测试不准是小,很可能无法测距。
先说前两个 setrxantennadelay/settxantennadelay 从字面意思就可以理解,这个是设定天线延时的。 在原理分析过程中明确到,DWM1000 可以精确知道无线信号何时到达,而无线信号通过天线接收,然后送给DWM1000模块,天线收到信号到送给DWM1000 这个是花费时间的,同样,当发送的时候也是,DWM1000 只知道自己将数据送出去,送给天线的时间,而天线收到信号到发射到空中也是需要时间的。 前者称为rxantennadelay 后者称为txantennadelay。而这两个值通常较大,而且基本认为是一样的。
后面会有一节专门分析antennadelay 以及 软件设定技巧以及相关校准(calibration)
在一次SS-TWR测距中,有两条无线消息,所有需要
接着上一节原理 Tround - Treplay - DeciveA txantennadelay - DeciveB rxantennadelay - DeciveB txantennadelay - DeciveA rxantennadelay 才是无线信号真正在空中传输时间。
后面两个是控制射频接收开启时间以及timeout的。 当DWM1000 发送一条信息后,如果明确知道收到信息的其它模块会回复一条信息,那么就需要在发送后打开接收器。当然可以选择立即打开接收器,但是根据实验数据大概估计会回复数据的时刻,可以延时一段时间在打开接收器,这个延时设定就setrxaftertxdelay。 接上面,打开接收器就在等数据,如果等不到就过段时间自动关闭接收器,不能一直无限期等下去啊,这个时间段就是setrxtimeout设定的。
实验过程有时忘记加setrxaftertxdelay 或者timeout 设置的时间太短,都可能导致无法收到信息而报错。
DWM1000 测距原理简单分析 之 SS-TWR代码分析1 -- [蓝点无限]的更多相关文章
- DWM1000 测距原理简单分析 之 SS-TWR代码分析2 -- [蓝点无限]
蓝点DWM1000 模块已经打样测试完毕,有兴趣的可以申请购买了,更多信息参见 蓝点论坛 正文: 首先将SS 原理介绍中的图片拿过来,将图片印在脑海里. 对于DeviceA 和 DeviceB来说,初 ...
- DWM1000 测距原理简单分析 之 SS-TWR
蓝点DWM1000 模块已经打样测试完毕,有兴趣的可以申请购买了,更多信息参见 蓝点论坛 正文: DWM1000 超宽带测距,使用的TOF(time of fly) 的方式,也就是计算无线电磁波传输时 ...
- 一个简单C程序的汇编代码分析
几个重要的寄存器 eip - 用于存放当前所执行的指令地址 esp - 栈(顶)指针寄存器 ebp - 基址(栈底)指针寄存器 简单的C程序 int g(int x) { ; } int f(int ...
- 【DWM1000】 code 解密2一 工程初始化代码分析
instance_init 函数追下去,绝大多数的代码都在初始化如下结构体 typedef struct { INST_MODE mode; instance_init -ANCHOR //insta ...
- 编译原理简单语法分析器(first,follow,分析表)源码下载
编译原理(简单语法分析器下载) http://files.cnblogs.com/files/hujunzheng/%E5%8A%A0%E5%85%A5%E5%90%8C%E6%AD%A5%E7%AC ...
- 简单C程序生成的汇编代码分析
首先给出完整的C代码: int g(int x) { ; } int f(int x) { return g(x); } int main(void) { )+; } 使用命令:gcc –S –o h ...
- 常用 Java 静态代码分析工具的分析与比较
常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基 本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBu ...
- [转载] 常用 Java 静态代码分析工具的分析与比较
转载自http://www.oschina.net/question/129540_23043 简介: 本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代 ...
- 【转载】常用 Java 静态代码分析工具的分析与比较
摘自:http://www.oschina.net/question/129540_23043常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基本概念及主要技术,随后 ...
随机推荐
- 【NOIP2013模拟】终极武器(经典分析+二分区间)
No.2. [NOIP2013模拟]终极武器 题意: 给定你一些区间,然后让你找出\(1\sim 9\)中的等价类数字. 也就是说在任何一个区间里的任何一个数,把其中后\(k\)位中的某一位换成等价类 ...
- 分布式追踪系统sleauth+zipkin
- 二、java基本语法
一.标识符 java对各种变量.方法和类等要素命名时使用的字符序列成为标识符:通俗点,凡是自己可以起名字的地方都叫标识符,都遵守标识符的规则 1.标识符命名规则: 1)标识符由字符.下划线.美元符或数 ...
- 状态压缩动态规划 状压DP
总述 状态压缩动态规划,就是我们俗称的状压DP,是利用计算机二进制的性质来描述状态的一种DP方式 很多棋盘问题都运用到了状压,同时,状压也很经常和BFS及DP连用,例题里会给出介绍 有了状态,DP就比 ...
- 报表工具-ECharts 特性介绍
ECharts 特性介绍 ECharts,一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,S ...
- Python 各种进制转换
#coding=gbk var=input("请输入十六进制数:") b=bin(int(var,16)) print(b[2:]) 详细请参考python自带int函数.bin函 ...
- 第二十三节: EF性能篇(三)之基于开源组件 Z.EntityFrameWork.Plus.EF6解决EF性能问题
一. 开篇说明 EF的性能问题一直以来经常被人所吐槽,究其原因在于“复杂的操作在生成SQL阶段耗时长,且执行效率不高”,但并不是没有办法解决,从EF本身举几个简单的优化例子: ①:如果仅是查询数据,并 ...
- Faster RCNN 学习笔记
下面的介绍都是基于VGG16 的Faster RCNN网络,各网络的差异在于Conv layers层提取特征时有细微差异,至于后续的RPN层.Pooling层及全连接的分类和目标定位基本相同. 一). ...
- Servlet中文件上传下载
1.文件下载: package FileUploadAndDown; import java.io.FileInputStream; import java.io.IOException; impor ...
- 「luogu3258」[JLOI2014] 松鼠的新家
https://www.luogu.org/problemnew/show/P3258 (树剖裸题 树上差分 = = 差分 + lca 1. 树上差分基本思想:和差分一样,用前缀和的思想来处理解(操作 ...