Getting Started

Hi Everyone!

I’m a newbie from NZ and very excited to be getting into UWB – something I’ve been interested in for the past 10 years. Although prior to that I was an electronics engineer I have been too busy with other things to keep up with technology.

I’m about to embark on a project utilising Decawave’s DW1000, and have a couple of university interns helping me. They are newbies to the technology as well, plus I’m a bit rusty having been away from development for too long!

I’d really appreciate any assistance anyone could provide to help us get started. Assuming we buy the TREK1000, plus some DWM1000’s, what would we need and what steps should we take to design a working prototype which would include a number of tags (say 50), 3 anchors (mounted in ceiling) and software running on a PC or SBC to triangulate and integrate with the software that needs to know the positions of each tag in a room?

In this application, we simply need to identify the position of each tag carried by a person in a large room. Movement won’t be an issue, but NLOS will be a bit of an issue, with people rather than walls causing the attenuation. The cost of each tag must be as low as possible as the application is very price sensitive. What I’d love is some guidance on the following, if anyone can help please:

What Decawave documents are best to study initially, to begin working with the TREK1000, and to understand how both the hardware and software works.
What equipment we need. For instance do we need an oscilloscope for testing and if so, what speed / specs / any suggestions?
What is the recommended overall architecture and what components are required, eg a bunch of tags each of which include a controller, 3 anchors each with presumably the same controller and connected together via LAN or WiFi? Plus a server device – either a single board computer or a PC – that controls the anchors and triangulates the position of each tag.
What are the recommended options for controllers?
What development tools and languages are recommended?
Any other helpful suggestions.
That’s about all for now. Appreciate any help you can provide.

1 Like

Hi John,
Just short answer to some of your questions.
— Documents (DW1000 User Manual, DW1000 Datasheet, TREK1000 User Manual, EVK1000 User Manual and API User Manual ).
— Development environment is COOCOX IDE, but not the last version, you have to use the i think something like 1.7, description of the installation is in the documentation)
— About having more then 3 devices communicate, you will have to search the mailing list, there is a thread about that.
— oscilloscope is needed in case that you want to measure the power consumption, or some deeper data, otherwise you have software tool for presenting the results visually, but also you can just use the serial communication to see the usb messages that comes from the anchor node, or just watch the display of the devices, it will give you all that you need.

Good luck

Hi John,

Just to share my experience of exploration UWB topic:
(sorry, I don’t follow your sequence of topics)

  1. SPI speed is very important.
    Anyway, you will end up developing your own uC board, at least for tags, so first you have to choose right CPU for your project. Cortex-M3 is recommended and from my experience, it is best choice in price/performance. I tried several other options from Cortex-m0 up to Amlogic S805 (under Linux) and main issue in all cases was clocks (timimgs) of SPI bus, which is used to talk to DM1000 (in my case - DWM1000). SPI is supported by every nowadays CPU, but pay attention to max bitrate it can do. DW1000 is tuned to operate at 20 Mbit and you’ll be happy if your CPU (uC) will be able to use its at maximum. Trust me ) Not less important to have at least 6 pins free for use in your development board (4x SPI, 1x IRQ, 1x RST) to avoid such tricks as I had to apply, removing components from the board I had on-hand to explore DWM1000.

  2. Development environment is not important.
    Indeed, you can use whatever IDE you want or familiar with as long as you can compile binary for your uC. I use arm-gcc toolchain with QTCreator. In most cases, C language is used in most cases, writing code for uC. Decawave’s driver use C, while it also allows pretty esy port to C++. From my experience, C is preferable. I tried to port to MBED C++ environment, and I’m not satisfied with result… the driver relays upon the assumption, that you connect only one DW1000 module to your uC, so support of multiple modules not straightforward.

  3. You will probably port existing DecaWave driver to your uC.
    Don’t be afraid if you come across to this topic. Its not very difficult. And it is worth doing, because all init/config routines exists already, so you don’t need to read complete datasheet in advance to start talk to DW1000. DW1000 can be tuned for pretty wide range of installations, it has many features to configure, and you’d better stick to driver routines to make time savings in the beginning.

  4. TREK1000 is slightly redudant in your case.
    I’m risking saying so, but if you have engineering background, you can save couple dollars purchasing only DWM1000. 5-10 modules will satisfy your needs in the beginning.

  5. As Nokola suggests, User Manuals are must read.

  6. Depending on your goals, you will need different number of modules in setup, so you can ask this list about your intents and people will help. When I first discovered DWM1000, I ordered 5 modules and it was enough for beginning: 4 modules as anchors and one as tag.

Hope this helps,
Have a nice day!

Hi Nicola

Thank you for taking time to respond. I will definitely check out CooCox and study up on those docs for starters.

Thanks so much!!


Hi Stan

Thanks for your detailed response - I so appreciate you taking the time!

You’ve given me a lot to think about as I get my head around getting started.

Looking forward to getting stuck in!

Thanks again

Me again Stan - I meant to ask about the pic you attached. Is the PCB something you designed or is a readily available SBC?

Hi John!

This is it:

And I strongly advise you AGAINST it! Its is cool board, combined with programmer and nRF51 uC (Cortex-m0). I love nRF51, for certain projects it does the deal.
But it can’t do DecaWave’s SPI full speed, so you will loose performance if you decide to use Cortex-m0…

Have happy hacking! )

I haven’t tied it so far, but this one looks as pretty good choice:

Cheap, small, enough pins, fast SPI

I can vouch for those boards – they are very affordable and do just
what they should. Add an STLINK clone and you can easily program and
debug the ARM using open source tools (openocd, gdb, …).


Thanks Stan and Robin. What about power consumption? In my application its important the tag consisting of say this board plus the dwm1000 can run for a long time on small battery.

Hi John,

I’m not fluent with power issues with DW1000 so far (wasn’t assumed by our scenario). I’d advised to look through section 4.4+ of DW1000 User’s Manual. Battery life will certainly depend upon scenario, employed.
Dealing with module, you’ll have to choose appropriate method of localization for your tags (DS TWR, SS TWR, TDoA), then develop suitable protocol of exchange in multi-tag environment. All these things will affect battery life.


Thanks Stan, will do.