首页 > 其他分享 >TOF方案在DW1000上的实现(三):SS-TWR方案实践

TOF方案在DW1000上的实现(三):SS-TWR方案实践

时间:2023-03-30 18:13:34浏览次数:34  
标签:发送 initiator 延时 dwt SS responder ts TWR DW1000

说明

在上一篇博客中对代码和原理进行了分析,现在对方案进行实践。

测试环境

本次测试硬件使用Nordic的nRF52840DK板作为主控,通过杜邦线连接到DWM1000模块上
软件环境使用Nordic V1.7.10 SDK和dw1000 V2.14 API库。

测试例程为:
Example 6a: single-sided two-way ranging (SS TWR) initiator
Example 6b: single-sided two-way ranging responder

将两个测试例程分别烧录到两个开发板上运行,即可查看运行结果。

测试中遇到的问题

虽说是官方的API库例程,但实际还是会有遇到跑不通的情况。这里分享下我的心得

responder端延时发送失败

问题情况:responder程序中接收到第一帧数据后调用dwt_starttx接口发送第二帧数据失败,API返回error,进入到函数内部能观察到读取芯片内部STATUS寄存器的HPDWARN标志位被置位。
原因分析:HPDWARN被置位说明延迟发送设置的时间点已经滞后于系统时钟,启动发送已经没有意义了,就直接终止发送。打个比方就是你本来打算定个早上8点钟的闹钟去上班,结果一看时间都9点了,那这个闹钟自然就定不成了。
出现这种情况一般是你主控运行的太慢了或者定的延时发送时间太短导致的,可以通过读取系统时间戳和延迟发送时间戳进行对比,正常延时发送的时间戳应该在系统时间戳之后。如果不是,那就说明是时间不够。

例如可以在responder例程中,在dwt_starttx启动发送代码后获取下系统时间戳,然后比较系统时间戳sys_ts和延时发送时间戳resp_tx_ts。如果resp_tx_ts小于sys_ts,那就要说明要增大延迟时间,或者提高主控运行速度(或者是SPI速率)

ret = dwt_starttx(DWT_START_TX_DELAYED);
sys_ts=get_sys_timestamp_u64();
								
printf("poll_rx_ts = %llx",poll_rx_ts);
printf("resp_tx_ts = %llx",resp_tx_ts);
printf("sys_ts     = %llx",sys_ts);

时间戳读取数据为0

问题情况:读取系统时间戳寄存器或者收发时间戳寄存器都是0
原因分析:时间戳寄存器需要通过初始化时调用DWT_LOADUCODE才会启动
解决方法:检查初始化时dwt_initialise接口的入参是不是DWT_LOADUCODE。

initiator收不到回发的第二帧数据

问题情况:initiator发的第一帧数据responder能收到,responder也回发成功了,但是initiator却收不到
原因分析:上一节博客代码分析我们直到,initiator在发完第一帧后,会设置自动延时开启接收,并且有接收超时参数。如果responder回发数据时超出了这个接收窗口,就会丢失接收。
特别是如果有修改过responder的延时发送参数超过了initiator的自动延时接收参数的话。
解决方法:initiator不使用发送完后延时启动接收,在发送完后干脆直接启动接收,然后一直轮询直到收到数据

//    dwt_setrxaftertxdelay(POLL_TX_TO_RESP_RX_DLY_UUS);
//    dwt_setrxtimeout(RESP_RX_TIMEOUT_UUS);

/* Activate reception immediately. */
dwt_rxenable(DWT_START_RX_IMMEDIATE);

不过这样会有缺点,一个是如果一直没说到数据就会一直卡在这。另一个就是一直开接收会导致功耗降不下来。

标签:发送,initiator,延时,dwt,SS,responder,ts,TWR,DW1000
From: https://www.cnblogs.com/simpleGao/p/17273589.html

相关文章

  • SSTI之细说jinja2的常用构造及利用思路
    现在关于ssti注入的文章数不胜数,但大多数是关于各种命令语句的构造语句,且没有根据版本、过滤等具体细分,导致读者可能有一种千篇一律的感觉。所以最近详细整理了一些SSTI常用的payload、利用思路以及题目,谨以结合题目分析以及自己的理解给uu们提供一些参考,如有写错的地方,还望大佬们......
  • css控制文本超出省略(单行、两行、多行)
    想要控制文本长度?想要文本超出隐藏?还想要不用JavaScript实现?让我们来用css试试吧~本文重点css控制文本超出省略。完成单行、两行、多行的效果注意点本文提到的方法都需要控制元素width的大小单行省略:overflow:hidden;text-overflow:ellipsis;white-space:nowrap;......
  • Webug——过滤xss
    同反射型xss相同在url参数id中进行xss攻击http://192.168.75.146/control/xss/filter_xss.php?id=<script>alert(xss)</script>不过根据反馈script被过滤了我们就......
  • 利用 rpc 获取 boss __zp_stoken__
    1什么是RPCRPC,英文RangPaCong,中文让爬虫,旨在为爬虫开路,秒杀一切,让爬虫畅通无阻!开个玩笑,实际上RPC为远程过程调用,全称RemoteProcedureCall,是一种技术思想而非一种......
  • 云图说 | MSSI之应用业务模型ABM,搭建业务与技术的数据治理桥梁
    摘要:应用业务模型ABM(ApplicationBusinessModel)是MSSI为客户提供的统一模型管理服务。本文分享自华为云社区《【云图说】|第274期MSSI之应用业务模型ABM,搭建业务与技......
  • Media Query 在 CSS 中使用的一个具体例子
    在CSS中,MediaQuery是一种用于指定不同屏幕尺寸和设备类型的样式表的技术。如下图所示:alland(max-width:360px)是一个MediaQuery表达式,它指定了一个条件,只有在......
  • 拒绝“爆雷”!GaussDB(for MySQL)新上线了这个功能
    摘要:智能把控大数据量查询,防患系统奔溃于未然。本文分享自华为云社区《拒绝“爆雷”!GaussDB(forMySQL)新上线了这个功能》,作者:GaussDB数据库。什么是最大读取行一直以来,大......
  • 乔布斯眼中的Project Glass:你该找个女朋友了
    ProjectGlass为Google赢得了不少赞誉之词,但也有人不以为然。科技博客“科技小萝莉”(Joylita)博主就是其中之一,她撰写了一篇名为《我不是机器人:乔帮主眼中的ProjectGlass》......
  • 基于pytorch 的loss监控可视化
    基于pytorch的loss监控可视化绘制可以train和val在一张图上的趋势图。1安装tensorboardpipinstalltensorboard2嵌入代码工程1)定义数据集#-------------......
  • linux里 cannot create /www: permission denied
    这个错误信息表明你尝试在根目录下创建一个名为www的目录,但是你没有足够的权限来完成这个操作。在Linux中,根目录(/)拥有系统管理员账户(root)的特殊权限,普通用户默认没有在根......