DWM3000 Capstone Project

Hello,
I am an ECE Senior working on a project using the DWM3000 chips.

Our goal is to use an array of 4 anchors on a landing pad and 1 tag on a multirotor drone to assist in precision landing.

Some things that my team would like to know are:

Does each anchor need it’s own microcontroller in order to sync up the clocks?
What IDE is best to use for configuration of each tag?
Do we need a linux machine?
How does the GUI and API work?
Where do we get started?
Why did we choose such a complicated sensor?

So far we have only ordered two of the RF modules, and we are designing our own breakout board to wire it to a microcontroller, the feather M0 from adafruit. Our first proof of concept would be to get two sensors to talk to each other and eventually add a third to get a position. Finding documentation on how to get started has been tough.

Thank you for anyone who spends their time replying!!

From what you are describing I assume you are talking about custom firmware running on a processor that is talking directly to the DWM3000 radio module over SPI. If that’s not what you are doing then ignore these answers.

Does each anchor need it’s own microcontroller in order to sync up the clocks?

They will all need to be connected to a processor. The DWM3000 is a dumb radio module, it needs a processor to control it. You could in theory connect several to the same processor but generally that makes life more complicated. It’s far simpler to put a separate processor on each module. This also makes things simpler mechanically since each radio is a self contained module.

What IDE is best to use for configuration of each tag?

Whatever works best for the processor you are using

Do we need a linux machine?

No

How does the GUI and API work?

If you are working in the way I think then the GUI isn’t applicable. You are writing firmware to drive the radio. If you want a GUI you need to write it.
The API gives you a series of function calls - Configure radio, send packet, read packet, get packet receive time etc… that you can use to measure ranges. Normally the first stage is to create a measure range function that uses API calls to talk to another device and get a range.

Where do we get started?

First download the source for the API and port it to your processor (mainly change the SPI read/write functions to work on your hardware).
Then look at the examples included with the API, they include both sides of a Two Way Range system, this is in effect a pre-made version of the get range function mentioned above. Get that working and measuring ranges.
Then expand the example to include the ability to include an ID for the device you wish to measure to so that you can measure ranges to multiple devices in a controlled way.
Once you are there you can measure your 4 ranges and calculate how far off centre you are.
These steps are common and there will be lots of posts here already from people doing similar things.
The DW1000 app notes will give all sorts of information on how to improve accuracies and get the best out of the system, these are almost all equally applicable to the DW3000.

Why did we choose such a complicated sensor?

Because you enjoy suffering?
There is a simple out of the box positioning system for the DWM1001C called PANS. I believe there is also some fairly out of the box hardware/firmware for the DW3000 and the iphone localisation system. As soon as you get outside those it does get complicated. Getting the radio up and running on new hardware is a low level firmware task, nothing that hard technically but very intimidating and a steep learning curve if you aren’t familiar with it. After that getting rough ranges is relatively simple. Getting accurate ranges and positions is complicated.
But if you get it right they are capable of getting very good results.

In terms of your specific application on the plus side if you are simply trying to guide a drone in to the pad then you don’t need position, you just need to get all the ranges the same and then reduce them all at equal rates. On the down side you are dealing with a dynamic system where things are constantly moving. Depending on how quickly you can measure ranges you may need to allow for the fact that your ranges aren’t all measured at the same time.

1 Like

Hi AndyA,

Thanks for responding so quickly! The team and I just got back together, after finals and winter break, so sorry for the late reply.

I did not assume that we would need to write to our own firmware, but your suggestion does seem like the best way to go. It would also be a good skill to learn how to do.

I plan on finding a video on YT to help me learn the basics of writing firmware.

We are also planning on designing our own “development board” which will mainly be a pinout to a adafruit feather (SAMD21 chip). Was wondering if you reccommend the development board that Qorvo makes?

I am able to locate the API and I have a downloaded version of it, but porting it to a processor is something I am having trouble finding online. Would you be able to share some information on that?

In the interests of making your life easier if you are making your own board that holds the DWM3000 I would look to make it Ardunio compatible. There are DWM3000 libraries for the ardunio platform that will greatly simplify things for you since you wouldn’t need to port the drivers, that is already done for you. There will also be a reasonable number of examples and other projects out there that you can use as references.

The part of me that writes real firmware hates ardunio for it’s lack of flexibility and performance and the variability of the libraries. The part of me that needs to get a proof of concept done quickly and doesn’t need to worry about it working 24/7 or being a little flaky at times loves it.

Hi @calebunga
maybe you should start with DWM1001-DEV (MDEK kit, or just the DWM1001) + PANS firmware - it works out of the box and you can get some position pretty fast - it will give you some good overview what the technology can do. If you will be happy with it you can keep using it or you can write tour own solution based on this experience.

Cheers
JK

Is this the libraries you are referring to? I am assuming that I do not need to use the exact board that is referenced in there, correct?

I definitely think that this is a great idea. Its just a matter of convincing my team to spend money on something that will not end up in the final product. Those boards are super cool.

Correct. As long as you are something that’s generally code compatible with the sample then changing to a different variant of the hardware is generally fairly simple. Normally just changing the pin numbers and which SPI peripheral is being used.

Hi @calebunga
it could save you a plenty of time - it should be easy to convince them.

Cheers
JK

Thank you Andy! I just ordered the DWM3000 evaluation board and we plan on using the esp32-s3 made by espressif. I have also reached out to someone on an arduino forum who asked if anyone would be willing to help write libraries, which I told him I would contribute to. Details here: DWM 3000 Collaborative Group - Arduino Uno

In case you missed it there is this post: "Missing manual" for register-level access to DW3000 (without using API) that links to an attempt to fill in the gaps in the DW3000 user manual

1 Like