DW1000 WRONG range when using 2 or above anchors and 1 tag

Hello everyone!

I start learning DW1000 chip, Arduino Uno and this lib https://github.com/thotro/arduino-dw1000.
When using 1 Tag and 1 Anchor, measured range is quite correct, but when using 1 Tag and 2 Anchor, only first Anchor that Tag connected shows correct range, second Anchor shows very wrong range: measured range = real range - x (x is very huge). So sometimes, if second Anchor is near the Tag, measured range will be negative. If I shutdown 1 of 2 active anchor, the remaining anchor show correct range.

Arduino Code

I am using example tag code, anchor code of above lib (https://github.com/thotro/arduino-dw1000)

  • DW1000Ranging_ANCHOR
  • DW1000Ranging_TAG

For each anchor, I was set with different address.

Pin Connection

Arduino Uno DWM1000
10 CS
13 CLK

Processes that I log when using 2 anchor, 1 tag (no mention to BLINK, RANGING_INIT message)

  • Tag send POLL message (broadcast).
  • 2 Anchor receives POLL message and send POLL_ACK message back.
  • Tag receive 2 POLL_ACK message from 2 anchor and then send RANGE message (Broadcast)
  • 2 Anchor receives POLL_ACK and compute range then send RANGE_REPORT message back to the tag.

Maybe i need connect some more DW1000 pin, but i’m not sure because 1 anchor and 1 tag working fine.
Does anyone face this issue? Please help me, thanks all.

What are you doing to ensure the two replies from the anchors aren’t being sent at the same time as each other and so interfering? Your code needs to ensure you avoid two radios transmitting at the same time. The gap needs to be long enough not only for the packet to be sent but for the tag to read the packet and re-arm the DW1000 receiver.
Is the tag correctly tracking which reply is from which anchor?

Each anchor have its own relay delay (anchor 1: 7000us, anchor 2: 21000us). This is process that i log in the tag

Send Poll: Broadcast
Set timePollSent
_networkDevicesNumber: 2
Recieve: 1300
Receive POLL_ACK
Set timePollAckReceived
Recieve: 1320
Receive POLL_ACK
Set timePollAckReceived
Send Range: Broadcast
Set timeRangeSent
_networkDevicesNumber: 2
Recieve: 1300
82-130: 0.24
Recieve: 1320
84-132: -0.92

82 - 130 - 1300: Anchor 1 short address
84 - 132 - 1320: Anchor 2 short address

  • The anchor 2 (The second anchor that connect to the tag): have wrong range (nagative range)