蓝点DWM1000 模块已经打样测试完毕,有兴趣的可以申请购买了,更多信息参见 蓝点论坛

正文:

DWM1000 超宽带测距,使用的TOF(time of fly) 的方式,也就是计算无线电磁波传输时间,通过传输的时间换算成距离。 电磁波传输速率和光速一样,速度是299792.458km/s,可参见百度百科。如果想通过测试这个传播时间换算距离,那么就需要非常高的内部时钟。然。。。并不是有了高速的内部时钟即可测距,还需要一点,数据送达天线的精确时间,也就是我们发送数据时,何时将数据送到天线,以及接收到有效数据到天线时的确切时钟。 理论上所有满足以上两点的射频收发器都可以实现TOF测距。

DWM1000有一个delayed 发送,也就是延时发送,可以精确控制发送时间,其实这个可用可不用,用了它可以减少一次数据传输而已。

下面简单介绍官方提供基础例子中的SS-TWR 和 DS-TWR

不论SS-TWR 还是DS-TWR 都是双边测距,能够得到两个模块之间的距离信息,而不是位置信息,位置信息需要后期使用高中数学知识计算。

参考官方资料,但并不会逐句翻译,尽量写我的理解,且别人更容易理解的语句。

官方参考资料:《dw1000_user_manual_2.10》APPENDIX 3: Two-Way Ranging

 1 Single-sided Two-way Ranging(SS-TWR)

一共有两个设备,也就是两个DWM1000 模块,分别称为DeviceA 和 DeviceB, DeviceA 在A 时刻发送一条信息给DeveiceB,经过空中一段时间传播(Tprop)在时刻B到达B设备。

我们很直观的可以看到,时刻B -  时刻A 就是信号的传播时间,也就是Tprop,然后换算距离,是否可行? 答案是不能! 因为A 和B 都有独立的时钟,并没有同步,假如二者时钟可以同步,那么这样计算是最好的。

什么是二者时钟同步? 就是某一个时刻下,设备A 和 设备B 时钟节拍一样,假如都是20180个时钟节拍(时钟节拍从系统上电或者PLL稳定后,从0到最大然后依次0 最大往复)或者两者知道确切的差值。然DWM1000 模块间显然没有这么高的能力让不同模块间时钟同步。

接着正确的方向分析,DeviceB收到DeviceA 的信息后,经过一段时间Treply,在时刻C时将回复信息发送到DeciveA,这个信息经过一段时间Tprop 后,DeciveA收到。

这里假设两次信号的传播时间一致,也就是A发送信息给B 到 B 发信息到A 间隔内二者距离不变,这就要求Treply 很短

DeciveA 可以通过读寄存器获得A 时刻和 D时刻 时间戳,二者相减就是Tround.

从上图我们还可以看到另外一个时间Treply,这个时间长度实际在DeciveA中计算获得的。 DeciveB 发送的信息包含了自己接收信息时刻B的时间戳以及发送信息时刻C的时间戳,当A收到信息后二者减法即可得到Treply。

不同的设备时钟频率是一致的,通过Tround - Treply 即可得到两次无线信号传输的时间,换算成距离除以2即是DeciveA 和 DeceiveB 之间的距离。

关于时间戳以及时间同步时钟频率再举一个栗子

假如,你有一兄弟身在美帝,而你在天朝,两个人都有一个超级无线收发器,想用它测试一下你俩之间的距离。

你兄弟看了下手表,08:10:00(8点10分00秒)按了一下发射器,你收到无线信号,看了下自己的5块钱的电子表,正好是下午3点整,过了两分钟,3点02分00秒,给你老兄发了回去的信息,信息内容是你接收的时间点和发送时间点(分别是3点 和 3点02分00秒),你那位仁兄在08:13:00 收到你回复的信息---》 这个就和上面的图示类似。

由于时差原因,你老兄的手表和你的是不同步的,时间点不一样,不能通过你收到 时间和 你老兄发送时间差 计算距离。

但是频率是一致的,手表都是按秒计算的(不考虑秒表)

你老兄可以根据时间差3分钟,以及你那边的2分钟,算出美帝和天朝无线信号一共传输了1分钟,折半后换算距离就是天朝美帝的距离。(这里仅仅是个栗子)

关于误差:

你五块钱电子表跑两分钟快10秒,发信息告诉老兄说是2分钟,其实才1分50秒左右。 这个就是每个个体的差异了,不能保证全部都一样。误差不能消除只能减小,减小方法就是收到信息后,尽量快速发送出去,防止误差累计。

这也是DS-TWR消除误差主要手段,极度降低Treply 的时间

另外一点,由于两个Device 之间只发送了两次信息(各一次),可能会有障碍物或者的噪声的干扰,测距变化较大,最好多次取均值,也就是DS-TWR的原理。

接着这个误差说一下第三方模块,你的手表之所以不准是因为基准频率不准,内部小的晶振,对于DWM1000模块来说,也是需要一个高精度外部晶振,通过内部PLL产生更高频的信号,如果第三方模块在晶振上偷工减料,对于精度的影响是不可补偿的,不可挽回的,也就是通过软件无法patch。 考虑上面一个栗子。

下面补一张DWM1000 官方图片,不同的晶振对于测距的影响。

高精度晶振2ppm,而质量差一点的40ppm,相差20倍。(摘自百度:ppm是个相对偏差,1ppm表示百万分之一,跟百分比一个道理。晶振频率一般以MHz(10的6次方)为单位,所以,标称频率10MHz的晶振,频率偏差10Hz就刚好是1ppm

可以计算出2ppm 到 40 ppm 相差3.8ns,而光1ns传播30cm,也就是误差达到1m以上。所以晶振质量至关重要

再来,可以纵向比较,前面说过 极度降低Treply 的时间  

假如同样是2ppm 的晶振,Treply 增加引入的误差也是线性的,如果Treply = 5ms,引入的误差也超过1m

 然,并不是第三方模块不好,舍得投入的第三方模块性价比一定高于官方模块!

DWM1000 测距原理简单分析 之 SS-TWR的更多相关文章

  1. DWM1000 测距原理简单分析 之 SS-TWR代码分析2 -- [蓝点无限]

    蓝点DWM1000 模块已经打样测试完毕,有兴趣的可以申请购买了,更多信息参见 蓝点论坛 正文: 首先将SS 原理介绍中的图片拿过来,将图片印在脑海里. 对于DeviceA 和 DeviceB来说,初 ...

  2. DWM1000 测距原理简单分析 之 SS-TWR代码分析1 -- [蓝点无限]

    蓝点DWM1000 模块已经打样测试完毕,有兴趣的可以申请购买了,更多信息参见 蓝点论坛 正文: 这一篇内容主要是通过官方源码理解SS-TWR 细节 代码下载链接:https://download.c ...

  3. wp7之换肤原理简单分析

    wp7之换肤原理简单分析 纠结很久...感觉勉强过得去啦.还望各位大牛指点江山 百度找到这篇参考文章http://www.cnblogs.com/sonyye/archive/2012/03/12/2 ...

  4. AbstractRoutingDataSource 实现动态数据源切换原理简单分析

    AbstractRoutingDataSource 实现动态数据源切换原理简单分析 写在前面,项目中用到了动态数据源切换,记录一下其运行机制. 代码展示 下面列出一些关键代码,后续分析会用到 数据配置 ...

  5. mr原理简单分析

    背景 又是一个周末一天一天的过的好快,今天的任务干啥呢,索引总结一些mr吧,因为前两天有面试问过我?我当时也是简单说了一下,毕竟现在写mr程序的应该很少很少了,废话不说了,结合官网和自己理解写起. 官 ...

  6. Spring整合Mybatis原理简单分析

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" ...

  7. jquery原理的简单分析,让你扒开jquery的小外套。

    引言 最近LZ还在消化系统原理的第三章,因此这部分内容LZ打算再沉淀一下再写.本次LZ和各位来讨论一点前端的内容,其实有关jquery,在很久之前,LZ就写过一篇简单的源码分析.只不过当时刚开始写博客 ...

  8. 简单分析ThreadPoolExecutor回收工作线程的原理

    最近阅读了JDK线程池ThreadPoolExecutor的源码,对线程池执行任务的流程有了大体了解,实际上这个流程也十分通俗易懂,就不再赘述了,别人写的比我好多了. 不过,我倒是对线程池是如何回收工 ...

  9. 学习OpenCV双目测距原理及常见问题解答

    学习OpenCV双目测距原理及常见问题解答 转自博客:https://blog.csdn.net/angle_cal/article/details/50800775 一. 整体思路和问题转化.  图 ...

随机推荐

  1. app升级注意事项version

    1.每次升级生成apk前,修改versionName: 位置: 2.修改数据库表中对应version字段与之对应: 3.出现waiting for debugger,要重启手机: 5.解析包错误,是a ...

  2. Ubuntu设置和查看环境变量

    设置环境变量的三种方法 1.1 临时设置 export PATH=/home/yan/share/usr/local/arm/3.4.1/bin:$PATH 1.2 当前用户的全局设置 打开~/.ba ...

  3. 关于微信登录授权获取unionid的方法

    前言:微信登录授权是目前普遍存在于小程序的,还有一种静默授权方式是微信提供的但是不推荐使用,由于不同设备登录openid是不同的那么我们应该怎样拿到一个唯一的ID呢,下面做分享 wxml代码 < ...

  4. Django 数据库查询集合(双下划线连表操作)

    Django是一款优秀的web框架,有着自己的ORM数据库模型.在项目中一直使用django数据库,写一篇文章专门记录一下数据库操作.略写django工程创建过程,详写查询过程.可以和sqlalche ...

  5. COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 80070005 拒绝访问。最新解决方案

    检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 80070005 拒绝访问. (异常来自 HRE ...

  6. List总结

    List是接口,不能直接new,需要使用它的实现类 所有已知实现类:AbstractList, AbstractSequentialList, ArrayList, AttributeList, Co ...

  7. Django之Cookie和Session

    http://www.cnblogs.com/liwenzhou/p/8343243.html 一.Cookie Cookie是什么? 就是保存在客户端浏览器上的键值对. Cookie为什么存在? 因 ...

  8. 20175204 张湲祯 2018-2019-2《Java程序设计》第二周学习总结

    20175204 张湲祯 2018-2019-2<Java程序设计>第二周学习总结 教材学习内容总结 -第二章基本数据类型与数组要点: -标识符与关键字:标识符的第一个字符不能是数字字符: ...

  9. springboot项目中如何在pom文件覆盖starter中默认指定的jar版本号

    分两种情况: 1.项目继承自spring-boot-starter-parent  通过定义properties的方式改变starter中的默认版本 <!-- Inherit defaults ...

  10. Visual studio 配置

    解决方案 一个解决方案的文件结构: .sln        项目目录         debug   release 其中,debug与release放置最终生成的dll或exe,项目目录下包含 头文 ...