Inhaltsverzeichnis:

UWB-Lokalisierungsfeder - Gunook
UWB-Lokalisierungsfeder - Gunook

Video: UWB-Lokalisierungsfeder - Gunook

Video: UWB-Lokalisierungsfeder - Gunook
Video: Smarte Mobilitäts- und Transportlösungen: UWB-Lokalisierung - Transparenz im Materialfluss | SICK AG 2024, Juli
Anonim
UWB-Lokalisierungsfeder
UWB-Lokalisierungsfeder

Die Ultra-WideBand-Feder integriert das Decawave DWM1000-Modul und einen ATSAMD21 ARM Cortex M0 in den Adafruit-Feder-Formfaktor. Das DWM1000-Modul ist ein IEEE802.15.4-2011 UWB-kompatibles Funkmodul, das eine präzise Indoor-Positionierung und hohe Datenraten ermöglicht, wodurch dieses Board perfekt für Robotikprojekte geeignet ist, bei denen eine Lokalisierung erforderlich ist.

Funktionen:– Decawave DWM1000 für präzises Tracking– ARM Cortex M0 für schnelle und leistungsstarke Anwendungen– Adafruit Feather kompatibel zur Integration in ein breites bestehendes Ökosystem– SWD-Schnittstelle für Programmier- und Debugging-Anwendungen– USB-C-Anschluss– Integriertes LiPo-Akkuladegerät

Für die vollständige Projektbeschreibung und Aktualisierungen sehen Sie sich dieses Projekt auf meiner Website Prototyping Corner unter prototypingcorner.io/projects/uwb-feather an

Quellhardware und -software für dieses Projekt ist im GitHub-Repository verfügbar.

Schritt 1: Hardware-Design

Hardware-Design
Hardware-Design
Hardware-Design
Hardware-Design
Hardware-Design
Hardware-Design

Wie in der Einleitung erwähnt, besteht die UWB Feather aus einem ATSAMD21 ARM Cortext M0+ für das Gehirn und einem Decawave DWM1000 Modul für das Ultrabreitband-Wireless, im Federformfaktor. Das Design ist relativ einfach und besteht aus 20 Stücklistenelementen auf einer 2-Lagen-Leiterplatte. Pinbelegung ist kompatibel mit Adafruit M0 Feather

Die LiPo-Ladung erfolgt über den vollintegrierten Einzelzellen-Lademanagement-Controller MCP73831. Die Batteriespannung kann an D9 überwacht werden, ist jedoch der Zugriff auf alle IO erforderlich, kann JP1 unterbrochen werden, um diesen Pin freizugeben. Die 3,3-Volt-Regelung erfolgt durch den AP2112K-3.3 Low-Dropout-Linearregler, der bis zu 600 mA liefert.

Pinout ist vollständig kompatibel mit der Adafruit M0-Federlinie für einfache Code-Portabilität. Die DWM1000 IO-Leitungen sind mit dem SPI-Bus und den digitalen Pins 2, 3 & 4 für RST, IRQ bzw. SPI_CS verbunden (die nicht über den Header freigelegt sind). D13 ist auch mit der Onboard-LED verbunden, wie es bei vielen Arduino-kompatiblen Boards Standard ist.

Die Programmierung kann über den SWD-Header oder über USB erfolgen, wenn er mit einem entsprechenden Bootloader wie dem uf2-samdx1 von Microsoft geladen wird. Siehe Firmware für mehr.

Hinweis zu V1.0

Es gibt ein Problem mit dem USB-C-Anschluss der Version 1 dieses Boards. Der von mir verwendete Footprint enthielt nicht den Ausschnitt, der für die Ausschnittsmontagemethode dieser Komponente erforderlich ist.

Version 1.1 wird dafür einen Fix enthalten und einen Micro-B-Anschluss für diejenigen hinzufügen, die dies wünschen. Siehe Überlegungen zu Version 1.1 unten.

Hinweise zum Design der Stückliste und der Hardwareversion 1.1 finden Sie in der Projektbeschreibung.

Schritt 2: Montage

Montage
Montage
Montage
Montage
Montage
Montage
Montage
Montage

Mit nur 20 Stück Stücklisten und den meisten Komponenten, die nicht kleiner als 0603 waren (die 2x Quarzkondensatoren waren 0402), war die Handmontage dieses Boards einfach. Die Platine und Lötschablone habe ich von JLCPCB in mattschwarz mit ENIG Oberflächenfinish herstellen lassen.

Die Gesamtkosten für 5 Boards (obwohl 10 keinen Preisunterschied hatten) und die Schablone betrugen 68 AUD, davon jedoch 42 USD für den Versand. Die erste Bestellung bei JLCPCB und die Boards waren von sehr hoher Qualität mit schönem Finish.

Schritt 3: Firmware: Bootloader programmieren

Firmware: Programmierung des Bootloaders
Firmware: Programmierung des Bootloaders
Firmware: Programmierung des Bootloaders
Firmware: Programmierung des Bootloaders
Firmware: Programmierung des Bootloaders
Firmware: Programmierung des Bootloaders

Die Firmware kann über den SWD-Anschluss mit einem Programmiergerät wie dem J-Link von Segger geladen werden. Oben abgebildet ist der J-Link EDU Mini. Um mit der Programmierung des Boards zu beginnen, müssen wir unseren Bootloader laden und dann unsere Werkzeugkette einrichten.

Ich werde Atmel Studio zum Flashen des Bootloaders verwenden. Schließen Sie dazu den J-Link an und öffnen Sie Atmel Studio. Wählen Sie dann Extras > Geräteprogrammierung. Wählen Sie unter Tool den J-Link aus und stellen Sie Device auf ATSAMD21G18A ein und klicken Sie dann auf Apply.

Verbinden Sie den J-Link mit dem Feder-SWD-Header und versorgen Sie ihn entweder über USB oder über den Akku mit Strom. Klicken Sie nach der Verbindung unter Gerätesignatur auf Lesen. Die Textfelder Gerätesignatur und Zielspannung sollten sich entsprechend ausbreiten. Wenn sie die Verbindungen nicht überprüfen und es erneut versuchen.

Um den Bootloader zu flashen, müssen wir zuerst die BOOTPROT-Sicherung deaktivieren. Wählen Sie dazu Sicherungen > USER_WORD_0. NVMCTRL_BOOTPROT und ändern Sie auf 0 Bytes. Klicken Sie auf Programm, um die Änderungen hochzuladen.

Jetzt können wir den Bootloader flashen, indem wir Memories > Flash auswählen und den Ort des Bootloaders festlegen. Stellen Sie sicher, dass Flash vor der Programmierung löschen ausgewählt ist und klicken Sie auf Programm. Wenn alles gut geht, sollte D13 auf der Platine anfangen zu pulsieren.

Jetzt müssen Sie die BOOTPROT-Sicherung auf die 8kB-Bootloader-Größe einstellen. Wählen Sie dazu Sicherungen > USER_WORD_0. NVMCTRL_BOOTPROT und ändern Sie auf 8192 Bytes. Klicken Sie auf Programm, um die Änderungen hochzuladen.

Nachdem der Bootloader geflasht wurde, sollte D13 pulsieren und bei Anschluss über USB ein Massenspeichergerät erscheinen. Hier können UF2-Dateien zur Programmierung des Boards hochgeladen werden.

Schritt 4: Firmware: Blinkcode mit PlatformIO

Firmware: Blinkcode mit PlatformIO
Firmware: Blinkcode mit PlatformIO
Firmware: Blinkcode mit PlatformIO
Firmware: Blinkcode mit PlatformIO

Firmware kann über das UF2-Protokoll oder direkt über die SWD-Schnittstelle hochgeladen werden. Hier verwenden wir PlatformIO wegen seiner Einfachheit und Einfachheit. Um zu beginnen, erstellen Sie ein neues PIO-Projekt und wählen Sie Adafruit Feather M0 als Zielboard aus. Beim Hochladen über SWD mit einem J-Link setzen Sie das upload_protocol in platformio.ini wie unten gezeigt.

[env:adafruit_feather_m0]platform = atmelsam board = adafruit_feather_m0 Framework = arduino upload_protocol = jlink

Jetzt können Sie das Board mit der Einfachheit des Arduino-Frameworks programmieren.

Schritt 5: Firmware: Flashen des Ankers

Firmware: Flashen des Ankers
Firmware: Flashen des Ankers
Firmware: Flashen des Ankers
Firmware: Flashen des Ankers

Die DWM1000-Module können als Anker oder Tags konfiguriert werden. Im Allgemeinen werden Anker an bekannten statischen Orten gehalten und Tags verwenden Anker, um eine relative Position zu ihnen zu erhalten. Um das DWM1000-Modul zu testen, können Sie das DW1000-Anchor-Beispiel aus dem GitHub-Repository hochladen.

Um dieses Programm mit PlatformIO zu flashen, wählen Sie von PIO Home aus Open Project und suchen Sie dann den Speicherort des DW1000-Anchor-Ordners im GitHub-Repository. Klicken Sie dann auf die Schaltfläche PIO-Upload und es wird automatisch die angeschlossene Debug-Sonde gefunden (stellen Sie sicher, dass sie angeschlossen ist und die Platine mit Strom versorgt wird).

Die Tag-Firmware muss auf ein anderes Board hochgeladen werden. Anschließend kann das Ergebnis in einem seriellen Terminal angezeigt werden.

Schritt 6: Weiter gehen

Weitergehen
Weitergehen

Weitere Verbesserungen an diesem Projekt umfassen die Entwicklung einer neuen DW1000-Bibliothek, V1.1-Board-Änderungen anderer Projekte, die diese Ranging-Technologie verwenden. Bei ausreichendem Interesse werde ich über die Herstellung und den Verkauf dieser Boards nachdenken.

Danke fürs Lesen. Hinterlassen Sie Ihre Gedanken oder Kritik in den Kommentaren unten und sehen Sie sich das Projekt auf Prototyping Corner an