DWM1001 measurements distance and data

For a project, I need to evaluate, how precise the TWR of the module DWM1001C is and how much time the loc_engine needs to range the distance. Additionally to that task, I have to find out the datarate of the module, when I wan’t to send specific user data.

I have 5 modules and I configured an initiator, an anchor and a tag as described in the document Gateaway quick deployment guide. I communicate over the UART API.

Now, when I type the command les in shell mode (Commands sends to Tag), I will receive the distances and positions of the anchors.
What I additionally wan’t is the time consumed by the location engine to calculate the TWR-distance. How do I get this?

To the other question of the user datarate, I’m using the TLV commands dwm_usr_data_read and dwm_usr_data_write. When I send some data from the Tag, I can’t read the data out of the anchor. Is there a config-bit I missed to be able to send/receive data?

How accurate do you need the times and what exactly do you want to time?
The time from sending a command to getting a reply? Measure it either in software or with an oscilloscope depending on the accuracy needed.
Time for a single range measurement? You could maybe look at the SPI bus activity, assuming there isn’t constant activity then measuring the time from start to finish of a ranging exchange would give you that. Measuring from the end of the last SPI cycle to the start of the serial output would give you the time to calculate position.

Yes, I could measure it with the host microcontroller with a timer to get my time for a single range. But as I saw in the API datasheet, there is a shell command les providing the time consumed by the location engine in microseconds and when I type the command, I don’t get it like in the example. I just get the distance and position data. I also would like to get the le_us data from the command.

So this is my output, which is slitely different to the output written in the datasheet. According to the datasheet, it should look like this:

Hi @Benji
you wont get the le_us here because it measure only two ranges and from two ranges you cannot estimate the position → in this case the location engine will not start.

What is you plan to do with le_us? The le_us is just the amount of time consumed by location engine to estimate the position?


Hello @leapslabs

Aha okay, it seems like i understood it wrong. So the le_us is for the position and not the calculation of the TWR. I tried it with an additional anchor and it seems like I would get the le_us.

So what I am trying is to compare different kinds of UWB module. The comparison is about accuracy of TWR, and other things. At first I tought that I could use the le_us for the measurement of the TWR, but now I will do this with a timer of the host Microcontroller.
Anyway thanks for the help.


How does knowing the time taken to make the measurement have any impact on the accuracy of the measurement? Measurement time will be dominated by packet length, SPI bus speed and processing time, none of which have any impact on range accuracy.

I can tell you that using the deacwave chip we are able to get 2400 double sided two way range measurements per second. And that with good antennas, delay calibration and corrections for things like signal strength it is possible to get a mean error of under +/- 2 cm and a measurement standard deviation of around 3 cm. If you are using the DWM1001 with it’s built in antenna there will probably be a bit more variation than that depending on the angle of arrival, on some antennas I’ve seen up to 15cm difference depending on angle.