前言:上篇博客是对UWB理论方面的基本介绍,掌握基本理论之后肯定还需要去做工程实验来测试,所以这篇开始从最普及的UWB芯片DWM1000的资料展开对UWB工程实现的介绍。其实基本UWB理论知识在论文中都是很容易找到,但是具体的工程实现细节大多数论文都未详细展开,故我把网上找到的相关资料整合介绍下。
最开始有一个问题测时间差的问题一直困扰着我,就是测距是基于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左右,所以才可以做到厘米级的定位。
图1-1
之后,DWM1000模组和MCU的配合开发也非常简单,两者之间采用SPI通信,MCU通过几个控制脚和SPI通信的四个IO脚便完成了基本UWB定位模块,具体如图1-2所示。DWM1000的基本资料其实在官网都可以免费下载如图1-3(包括其官方提高stm32和dwm1000的例程),只是官网https://www.decawave.com/product/dwm1000-module/需要,我后续会免费上传部分资料到CSDN上让大家参考。
图1-2
图1-3
上篇博客已经基本介绍了基本定位方法包括TOA,TDOA,下面再介绍下两种测距方法,两者概念不要搞混,定位的前提是得到基站与移动站的测距值或者是差值。
首先是单次双程测距法,具体流程是,设备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测距的方式。
图2-1
官网例程代码用的就是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为电磁波飞行时间,乘以光速为测距距离。
图2-2
这个是SS与DS介绍的原文地址,要配合官网代码分析https://msd.misuland.com/pd/3545776840385762452