Implement two-way ranging with DW3000

Hey folks,
I am currently working on a simple arduino tx and rx example which by now works quite well.
As I wanted to created a ranging example, I realized that the fast commands the DW3000 has to offer might not be sufficient for me. As I see it (as the DW3000 reacts much faster than my host - an ESP32), it would be smart to enable frame filtering, instantly activate the receiver and - if a frame was received - immediately send a corresponding frame. The DW3000 only features the opposite way: “CMD_TX_W4R” starts tx immediately and then enables the receiver.
Do you have any idea on how to send a frame as soon as another one is received?
I am just worried that if the process includes the host (Interrupt triggers host, host sends new short command via SPI), the timing would get much more inpersistent.

Any idea on how to handle this scenario?

Thanks in advance :slight_smile:



I’d suggest you to go through this application note which is a bit dated in term of IC suppot (DW1000), but the theory behind the implementation of TWR is perfectly valid for DW3000.

APS013 - APS013 DW1000 and two way ranging.pdf (485.4 KB)

One key point is the usage of delayed transmission, which allows you to send the Tx timestamp as part of the payload of a frame. This is extensively used in TWR implementation.

If you want to use immediate TX, you will need additional network management frames that will transmit the timestamp information to the coupled node.

Kind regards

1 Like