DWM1000 测距原理简单分析 之 SS-TWR

时间:2024-03-10 21:24:28

蓝点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

 

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