DWM3000 - Ranging issues

I’m trying to get two-way ranging to work using DWM3000EVB’s. Currently, it successfully transmits and receives data, but only within a range of ~20cm. No matter what settings I use, it will not increase the range. We are using a simplified version of the API provided by Qorvo that works with the ESP32.

GitHub Repo: GitHub - Grunn-Museum-Accessible/ESP32-uwb-ranging

If anyone knows how to increase the range, please let me know.
Thanks a lot!

What you are using is not supported by Qorvo in any way.

Qorvo has an official release here:DWM3000 Module - Decawave

From UWB perspective the misconfiguration could be:

  • huge CFO in between devices >30-40ppm (unlikely to be if you are using Qorvo’s origin DWM3000EVB);
  • bad power source, i.e. if power rail is noisy;
  • misconfiguration of the chip / could be an ESP32 SPI problem, say wrong Mode selection;
  • low Tx power / wrong power settings ::: of course

I would recommend spend 50$ on Nordic nRF52840-DK or NUCLEO-F429ZI, and use oficiall source codes.

Happy debugging!

Hey there!

I’ve tried multiple power sources, which did not change anything. Even with the highest power settings, the range will not improve much. Other than that, the mode should be correct for the ESP32.

I did notice that if I hold the DWM3000EVB really high and aim perfectly, I can get a range of ~1m, which is clearly not enough. Not only that, but at that range it will only detect the preamble. Replacing the ESP32’s is not a option right now, so any other suggestions or things I could try are welcome!

Does anyone have an idea why the range is messed up?

Hi @HeadTiXz

I am also using the DW1000 with an ESP32 and have the following suggestions:

  1. Check your constants from your DWM3000.h with the datasheet.
  2. try out some different settings in your config.

My config:
static dwt_config_t config = {

5,                /* Channel number. */

DWT_PRF_64M,      /* Pulse repetition frequency. 16M or 64M */

DWT_PLEN_1024,      /* Preamble length. Used in TX only. Higher is more range & longer air time 64 - 4096 */

DWT_PAC64,         /* Preamble acquisition chunk size. Used in RX only. 8 (plen <=128), 16 (plen 256), 32 (plen 512), 64 (plen >= 1024)*/

9,                /* TX preamble code. Used in TX only. */

9,                /* RX preamble code. Used in RX only. */

0,                /* 0 to use standard 8 symbol SFD, 1 to use non-standard 8 symbol, 2 for non-standard 16 symbol SFD and 3 for 4z 8 symbol SDF type*/

DWT_BR_850K,      /* Data rate.  DWT_BR_110K DWT_BR_850K DWT_BR_6M8 */

DWT_PHRMODE_EXT,  /* PHY header mode. for a bigger packet size */

(1024 + 1 + 64 - 64) /* SFD timeout (preamble length + 1 + SFD length - PAC size). Used in RX only. */


Good luck, Hans.
p.s. I get at leastn 50 meters in open field. PLaying with the Tx Power will get you further, but maybe
not legal anymore

Hey Hans!

I’ve tried many things, but nothing seems to work. If you have any other ideas, please let me know ^^