UWB定位记录二(DWM1000模组介绍)

    前言:上篇博客是对UWB理论方面的基本介绍,掌握基本理论之后肯定还需要去做工程实验来测试,所以这篇开始从最普及的UWB芯片DWM1000的资料展开对UWB工程实现的介绍。其实基本UWB理论知识在论文中都是很容易找到,但是具体的工程实现细节大多数论文都未详细展开,故我把网上找到的相关资料整合介绍下。

  一、DWM1000模组介绍

     最开始有一个问题测时间差的问题一直困扰着我,就是测距是基于d=c*t,d为距离,c为光速,t为时间差,一般我们的测距应用范围d都在几十米以内,而c光速值约为3*10的8次方,那么t的值是纳秒级别的,时钟由晶振产生那么则需要Ghz级别的时钟,这对于我经常用到MCU都是在几十M时钟是不可想象的,所以我当时一直找资料想是否需要加额外的倍频器。后面了解到DW1000这款芯片后,知道这些UWB芯片本身都是可以做到的。

    首先,DWM1000是Deca公司的一款用于UWB通信定位的模组,集成了DW1000芯片的基本外围电路,两者关系如下图1-1所示。关于上段提出的问题,解决方法是因为DW1000内部有一个非常非常高的时钟,高达64GHz左右,所以才可以做到厘米级的定位

   UWB定位记录二(DWM1000模组介绍)

 

                                                                          图1-1

   之后,DWM1000模组和MCU的配合开发也非常简单,两者之间采用SPI通信,MCU通过几个控制脚和SPI通信的四个IO脚便完成了基本UWB定位模块,具体如图1-2所示。DWM1000的基本资料其实在官网都可以免费下载如图1-3(包括其官方提高stm32和dwm1000的例程),只是官网https://www.decawave.com/product/dwm1000-module/需要*,我后续会免费上传部分资料到CSDN上让大家参考。

                         UWB定位记录二(DWM1000模组介绍)

                                                                                   图1-2

UWB定位记录二(DWM1000模组介绍)

                                                                                     图1-3

 二、DWM1000模组测距方法

          上篇博客已经基本介绍了基本定位方法包括TOA,TDOA,下面再介绍下两种测距方法,两者概念不要搞混,定位的前提是得到基站与移动站的测距值或者是差值。

  2.1.Single-sided Two-way Ranging (SS)

      首先是单次双程测距法,具体流程是,设备A首先向设备B发出一个数据包,并记录下发包时刻Ta1,设备B收到数据包后,记下收包时刻Tb1。之后设备B等待Treply时刻,在Tb2(Tb2=Tb1+Treply)时刻,向设备A发送一个数据包,设备A收到数据包后记下时刻值Ta2。然后可以算出电磁波在空中的飞行时间Tprop,飞行时间乘以光速即为两个设备间的距离。具体如图2-1所示。

Tround= Ta2-Ta1               //总时间差

Treply=Tb2-Tb1                 //基站处理时间差

Tprop=(Tround-Treply)/2      //最终得到的标签与基站的UWB通信时间差,距离值即为TOF*c光速

因为设备A和设备B使用各自独立的时钟源,时钟都会有一定的偏差,假设设备A和设备B时钟的实际频率是预期频率的eA和eB倍,那么因为时钟偏差引入的误差error,设备A和B的时钟偏差都会对Tprop值造成影响,并且直接影响我们的测量精度,因为光速是30cm/ns,所以很小的时钟偏差也会对测量结果造成很大影响,而且这种影响是SS测距方式无法避免的。也因此SS测距很少被采用,大部分情况下我们都使用下一种,DS测距的方式。

       UWB定位记录二(DWM1000模组介绍)

                                                                                              图2-1

2.2Double-sidedTwo-way Ranging(DS)

     官网例程代码用的就是DS,刚开始我也很费解因为看的论文基本用的都是SS也没提到过DS下面关于DS的介绍较为复杂,不了解可以再看过官网例程代码后再来看下面的原理公式推导。

      DS测距是在SS测距的基础上再增加一次通讯,两次通讯的时间可以互相弥补因为时钟偏移引入的误差。假设设备A和设备B的时钟精度是20ppm(很差)1ppm为百万分之一,那么Ka和Kb分别是0.99998或者1.00002,ka和kb分别是设备A、B时钟的实际频率和预期频率的比值。设备A、B相距100m,电磁波的飞行时间是333ns。则因为时钟引入的误差为20*333*10-9秒,导致测距误差为2.2mm,可以忽略不计了。因此双边测距是最常采用的测距方式。下面我将介绍官网的双边测距的代码实现。

完成一次DS测距需要6个步骤,总流程如2-2所示。

1.设备A发送POLL包。并记下发送时间T1。并在一段时间后打开RX。

2.设备B要提前打开接收,然后收到POLL包,记录时间T2.

3.设备B在T3(T3=T2+Treply1)时刻发送Response包,发送完之后打开RX.

4.设备A收到Response包,记录时刻T4。

5.设备A在T5(T5=T4+Treply2)发送Final包。

6.设备B收到Final包,记录时间T6。

 

公式推导:

Tround1 = Treply1 + 2Tprop;

Tround2 = Treply2 + 2Tprop;

Tround1*Tround2 - Treply1*Treply2 =4Tprop² + 2Tprop*Treply1+2Tprop*Treply2;

Tround1 +Tround2 + Treply1 + Treply2 = 4Tprop + 2Treply1 + 2Treply2;

所以Trop等于上图的公式。

 

下面是具体的时间计算:

Tround1 = T4 - T1

Tround2 = T6 - T3

Treply1 = T3 - T2

Treply2 = T5 - T4

Tprop为电磁波飞行时间,乘以光速为测距距离。

UWB定位记录二(DWM1000模组介绍)

 

                                                                                         图2-2 

这个是SS与DS介绍的原文地址,要配合官网代码分析https://msd.misuland.com/pd/3545776840385762452