UWB Localization Feather

Decawave DWM1000 and an ATSAMD21 ARM Cortex M0 in the Adafruit feather form-factor for projects requiring localization

Similar projects worth following
Starting from
jedhodson has 1 orders / 0 reviews
Ships from Australia
The Ultra-WideBand Feather incorporates the Decawave DWM1000 module and an ATSAMD21 ARM Cortex M0 into the Adafruit feather form-factor. The DWM1000 module is an IEEE802.15.4-2011 UWB compliant wireless module capable of precision indoor positioning and high data rates, making this board perfect for robotics projects where localization is required.

– Decawave DWM1000 for precision tracking
– ARM Cortex M0 for fast & powerful applications
– Adafruit Feather compatible to integrate with a wide existing ecosystem
– SWD interface for programming and debugging applications
– USB-C connector
– Intergrated LiPo battery charger

I maintain all projects on my site Prototyping Corner, so check there for updates on this project


As mentioned in the introduction, the UWB Feather consists of an ATSAMD21 ARM Cortext M0+ for the brains and a Decawave DWM1000 module for the ultra-wide band wireless, in the feather form-factor. The design is relatively simple consisting of 20 BoM items on a 2-layer PCB. Pinout is Adafruit M0 Feather compatible

LiPo charging is handled by the MCP73831 single-cell, fully integrated charge management controller. Battery voltage can be monitored on D9, however is access to all the IO is required, JP1 can be cut to free up this pin. 3.3 volt regulation is preformed by the AP2112K-3.3 low dropout linear regulator, providing up to 600mA.

Pinout is fully compatible with the Adafruit M0 feather line for easy code portability. The DWM1000 IO lines are connected to the SPI bus and digital pins 2, 3 & 4 for RST, IRQ & SPI_CS respectivly (which are not exposed via the header). D13 is also connected to the onboard LED, as is standard among many Arduino-compatible boards.

Programming can be preformed over the SWD header or via USB if loaded with a corresponding bootloader such as the uf2-samdx1 from Microsoft. See firmware for more.

Spot the issue

Note on V1.0: There is an issue with the USB-C connector on version 1 of this board. The footprint I used did not include the cutout required for the cutout mounting method of this component.

Version 1.1 will include a fix for this as well as adding a micro-b connector for those who want it. See version 1.1 considerations below.

The DWM1000 has a One Time Programmable (OTP) user programmable memory for storing calibration information (see 1.6 in the datasheet). To program this region the VDD3V3 pins may need to be raised to 3.8 volts temporarily. To do this JP2 can be cut and a separate power supply can be connected to selectively boost the power to the module.

Version 1 Board Renders

Bill of Materials

BoM items are all available from DigiKey and are plentiful in supply. Total BoM cost was $60 AUD for 1 quantity, however further optimization can shave a few dollars off this.
CSV version of this table can be found in the project repository.

Manufacturer Part NumberManufacturerDigi-Key Part NumberCustomer ReferenceQuantityDescription
DX07B024JJ3R1600JAE Electronics670-2963-1-NDJ11CONN RCP USB3.1 TYPEC 24P SMD RA
S2B-PH-SM4-TB(LF)(SN)JST Sales America Inc.455-1749-1-NDCN11CONN HEADER SMD R/A 2POS 2MM
AP2112K-3.3TRG1Diodes IncorporatedAP2112K-3.3TRG1DICT-NDU41IC REG LINEAR 3.3V 600MA SOT25
ATSAMD21G18A-MUMicrochip TechnologyATSAMD21G18A-MU-NDU11IC MCU 32BIT 256KB FLASH 48QFN
20021221-00010C4LFAmphenol ICC (FCI)609-3700-1-NDJ41CONN HEADER SMD 10POS 1.27MM
DWM1000Decawave Limited1479-1002-1-NDU31RF TXRX MODULE 802.15.4 CHIP ANT
MCP73831T-2ATI/OTMicrochip TechnologyMCP73831T-2ATI/OTCT-NDU21IC CONTROLLR LI-ION 4.2V SOT23-5
RC0603FR-075K1LYageo311-5.10KHRCT-NDR1, R2, R63RES SMD 5.1K OHM 1% 1/10W 0603
SML-D12D8WT86Rohm Semiconductor511-1577-1-NDD11LED ORANGE DIFFUSED 0603 SMD
150060BS55040Würth Elektronik732-12013-1-NDD51LED BLUE DIFFUSED 0603 SMD
RC0603FR-071KLYageo311-1.00KHRCT-NDR41RES SMD 1K OHM 1% 1/10W 0603
RC0603FR-07100KLYageo311-100KHRCT-NDR5, R32RES SMD 100K OHM 1% 1/10W 0603
TMCJ0J106MTRFVishay Sprague718-2355-1-NDC5, C7, C83CAP TANT 10UF 20% 6.3V 0603
RC0603FR-0710KLYageo311-10.0KHRCT-NDR101RES SMD 10K OHM 1% 1/10W 0603
TMCJ1C105MTRFVishay Sprague718-2362-1-NDC1, C4, C6, C94CAP TANT 1UF 20% 16V 0603
RC0603FR-07330RLYageo311-330HRCT-NDR91RES SMD 330 OHM 1% 1/10W 0603
CC0402FRNPO9BN150Yageo311-1642-1-NDC2, C32CAP CER 15PF 50V C0G/NPO 0402
FC-135 32.7680KA-A0EPSONSER4077CT-NDY11CRYSTAL 32.7680KHZ 12.5PF SMT

Hardware Version 1.1 Considerations

There are a number of changes required for a board that would be put into production as nobody gets it right the first time,...

Read more »

  • New boards & panel

    Jed Hodson01/29/2020 at 11:11 0 comments

    New boards made and assembled. Now available at

  • Finalized Rev 1.1

    Jed Hodson01/07/2020 at 07:44 0 comments

    Finished routing V1.1 boards and made some other minor changes such as reduced BoM from 20 to 17 unique components, fixed some minor schematic issues and cleaned up the silkscreen. V1.1 changes merged into master branch in the repository. I also changed the license of the board to the CERN OHL v1.2. 

    Next up: panelization and test jig

  • Revision 1.1 Update

    Jed Hodson01/06/2020 at 12:48 0 comments

    Schematic for Version 1.1. Issues with first boards fixed and I took the opportunity to make a few other changes. The board file is still incomplete (fully routed, just needs a little tidying up) and I need to update the BOM - will finalize tomorrow.


     - Changed USB-C connector

     - Added pull-up resistor on DWM1000 IRQ line

     - Rerouted with larger trace widths (10mil)

     - Enlarged test point footprint and changed exposed pins: USB D+ and D- instead of CC1&2, removed D2, D3 and replaced with SWD for programming

     - Reduced wire protrusion around antenna

     - Replaced D13 and charge indicator for RGB led and connected to unused pins on M0

     - Changed the charge controller from MCP73831 to the MCP73832 and connected the STAT pin to an unused pin on the M0. Now it is possible to detect when the battery is charging in software however controlling the charge LED (RGB LED) will need to be done in software.

     - Connected BATT_V to unused analog pin (instead of D9)

    What these changes mean:
     - The USB-C connector will actually fit on the board.
     - Board is now better suited to going in a test jig. 
     - All exposed header pins are fully available IO (no shared lines)
     - There's an RGB LED and charge detection is now more flexible.

    Changes to the pins will mean I will need to create a custom bootloader based off UF2, however I am much more happy with the board design and its flexibility. Intermediate changes are in the GitHub repo under the version-1.1 branch.

View all 3 project logs

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates