TOF方案在DW1000上的实现(四):DS-TWR方案

说明

在由DW1000芯片的制造原厂提供的示例代码中,同样提供了DS-TWR方案的实现示例:
Example 5a: double-sided two-way ranging (DS TWR) initiator
Example 5b: double-sided two-way ranging respond
该示例以C代码形式,演示了一个简单的双边双向测距的实现过程,本质上双边双向测距和单边单向测距没有太大的不同。
DS比SS方案多发了一次数据,并且测距结果变为了由responded来计算。

流程

测距流程如下,其中有六个关键的时间参数
poll_tx:initiator发送第一帧数据的时间点
poll_rx:responder接收第一帧数据的时间点
resp_tx:responder发送第二帧数据的时间点
resp_rx:initiator接收第二帧数据的时间点
final_tx:initiator发送第三帧数据的时间点
final_rx:responder接收第三章数据的时间点
image

通过三次收发数据,便算出两个设备之间的距离,公式如下:

\[distance = speed\_of\_light * tof\\ \]

\[tof = \frac{Ra * Rb -Da * Db}{Ra + Rb +Da + Db}\\ \]

\[Ra = resp\_rx - poll\_tx \]

\[Rb = final\_rx - resp\_tx \]

\[Da = final\_tx - resp\_rx \]

\[Db = resp\_tx - poll\_rx \]

代码分析

DS和SS代码类似,上一个博客已经对SS方案代码流程分析过一遍,这里就不作过多分析了。

增加Discovery阶段的DS方案

事实上,以上例程中的流程只是单纯的测距,一般的实际使用场景中会添加配对流程
image

首先为了更好的对应到使用场景,我们把之前的定义的角色名换一下:
initiator->Tag
responder->Anchor
Tag我们定义为标签,Anchor我们定义为锚点。

发现阶段的流程如下:
最初,Tag处于发现阶段,它定期发送一个包含它自己地址的Blink消息,并监听来自Anchor的测距流程发起响应(Ranging Init response)。如果Tag没有得到此响应,那么它在再次Blink前会睡眠一段时间(默认为1秒)。Anchor则一直启动接收,当它接收到Blink消息时,Anchor将向标Tag发送测距发起信息,随后Discovery阶段结束,转进到Ranging流程也就是前面讲的流程。

Discover阶段是重要的,它用于交换测距双方的地址信息并进行配对,当同一个场景中拥有多台设备时,他能很好的避免收发双方收到不该收到的数据。

数据帧说明

IEEE 802.15.4标准通用的数据帧格式如下,它包括7个Segment分别是:
image
1.Frame Control(FC):其中的DestAddrMode和SrcAddrMode比特位控制后续地址位的长度时2byte还是8byte
2.Sequence Number:根据标准规定,每发送一帧就累加256的模。
3.PAN ID:示例中所有的消息帧这里都是0xDECA,实际应用场景可以修改为用户自身需要的网络名
4.Destination Address:目标设备地址
5.Source Address:自身设备地址
6.Ranging Message:数据段,不定长,由用户决定。该帧中包含测距数据的部分一般称为有效载荷
7.FCS:CRC校验位

对于上述提及的Discover阶段和Ranging阶段用到的帧示例如下:
image
其中的各类型帧中数据段的内容如下:
image

Blink帧用于发送标签的Blink消息,不带任何测距信息,所以数据段长度为0,Blink帧总长12byte。

Poll message

Poll message由Tag发送,用于开启测距流程。数据为只有一个byte,内容为0x61,是message identifies用于表明信息类型,然后不带有任何时间戳数据。

Response message

Response message由anchor发送,用于响应tag之前发的poll message,数据段有5个byte,第一个byte为message identifies,剩余四个byte为时间戳数据
image

Final message

和Response message类似,只是再多4个byte,一共带有两个时间戳数据,共九个byte
image

Ranging Initiation message

配对响应信息,一个byte用于表明信息类型,两个byte用于对端地址配置,两个byte用于后续ranging流程的延时时间配置,一个五个byte
image

posted on 2023-04-01 11:55  不回本不改名  阅读(1702)  评论(5)    收藏  举报

导航