ADXL345-Modul


1 Zusammenfassung

Dieses Tutorial beschreibt die Ansteuerung vom ADXL345-Modul mit einem Mikrocontroller der MSP430-Serie von Texas Instruments. Als Mikrocontroller wird der MSP430G2553 verwendet. Dieser ist auf den Launchpad EXP430G2 Revision 1.5 aufgebaut. Das Tutorial richtet sich eher an Anwender der MSP430-Serie, jedoch sollte die Bibliothek “adxl345.c“ Mikrocontroller unabhängig sein.

1.1 Hardware

Die Abbildung 1 stellt den schematischen Aufbau des Versuchs dar. Dabei wird das ADXL345-Modul über SPI angesprochen. Da der Aufbau sehr simpel ist, wird einfach ein Steckbrett genutzt.

Abb. 1: Aufbau ADXL345-Modul und Launchpad

Abb. 1: Aufbau ADXL345-Modul und Launchpad

Es wird das Launchpad von Texas Instruments MSP-EXP430G2 Revision 1.5 (adxl345-hardware) genutzt. Darauf wird der Mikrocontroller MSP430G2553 eingesetzt.

1.2 Software

Für die Software würde die IAR-Entwicklungsumgebung eingesetzt (adxl345-software). Der Quellcode ist 1,12 kB Groß und kann noch mit der Kickstart-Version von IAR (maximal 8 kB) abgespielt werden. Die Software zum ADXL345-Beschleunigungssensor ist wie folgt unterteilt:

Tab. 1: Unterteilung der Software für das ADXL345-Modul

Bibliothek Funktion
main.c Hauptprogramm des Projekts, beinhaltet ein Anwendungsbeispiel bei dem die 3 Beschleunigungswerte ausgelesen und über UART zum PC gesendet werden.
adxl345.c Alle Funktionen und Defines des Beschleunigungssensors ADXL345
uart.c Implementation der UART-Schnittstelle

2 Hardware

Generell über dieses ADXL345-Modul

Zusammengefasst die wichtigsten Parameter des ADXL345-Moduls:

  • Spannung 2V bis 3,6 V
  • Zusätzliche digitale Versorgung
  • Schnittstellen SPI oder I2C
  • Maximale SPI-Frequenz 5 MHz
  • Für I2C mit Adresse 0x53 eingelegt (MISO ist über R4 auf GND, für SPI R4 Auslöten)

Der Chip wurde schon als fertiges Modul bestellt, bei dem die wichtigsten Pins als Stiftleiste bereit stehen. Der IC wird von Analog Devices hergestellt, dazu gibt es ein Datenblatt sowie eine Application Note vom Hersteller.

Standardmäßig ist das SPI-Modul für I2C ausgelegt. Falls der Anwender SPI nutzen möchte, muss dieser unbedingt den Widerstand R4 auslöten. Sonst findet keine Kommunikation mit dem ADXL345-Modul statt.

Über den Aufbau

Das Blockschaltbild der Hardware ist in Abbildung 2 dargestellt.

Abb. 1: Aufbau ADXL345-Modul und Launchpad

Abb. 2: Aufbau ADXL345-Modul und Launchpad

Das Launchpad ist links und das ADXL345-Modul rechts im Bild zu sehen. Beide Platinen werden mittels fliegende Drehte verbunden. Das Launchpad versorgt das ADXL345-Modul mit 3,3 V und GND. Vom MSP430G2553 wird der SPI–Kanal UCB0 genutzt, zusätzlich wird auch 1 digitale Leitung (P1.4) für „Chip Select“ benötigt. Die Tabelle 3 fasst die Pinbelegung und deren Beschreibung zusammen.

Tab. 3: Pinbeschreibung für das ADXL345-Modul

Pin

MSP430G2553

Beschreibung Pin

ADXL345

VCC Versorgungsspannung vom Launchpad (3,3 V) VCC
GND Masse vom Launchpad GND
Chip Select-Leitung, „Inactive High“
MOSI SPI-MOSI SDA
MISO SPI-MISO SDO
SCK SPI-Clock SCK

3 Software

Für das IAR-Projekt sind 5 Dateien zu finden. Diese sind:

  1. “main.c“ welche das Hauptprogramm beinhaltet,
  2. “adxl345.h“ / “adxl345.c“ welche zusammen die ADXL345-Lib erzeugen und für die Kommunikation und Interpretation des ADXL345 zuständig sind und
  3. “uart.h“ / “uart.c“ welche für die serielle Kommunikation mit den PC zuständig ist

3.1 “main.c“

Im Hauptprogramm (main) ist ein Beispiel, der die Beschleunigungsdaten aus den ADXL345 ausliest und dem PC über UART sendet, implementiert.

Abb. 3: Flussdiagramm der “main.c“ – (i) Main-Funktion, (ii) Demo-Funktion für den Beschleunigungssensor

Abb. 3: Flussdiagramm der “main.c“ – (i) Main-Funktion, (ii) Demo-Funktion für den Beschleunigungssensor

Die Abbildung stellt links die Main- und rechts die Demo-Funktion dar. Um das Programm bei der Main-Funktion (Abb. 3 – i) zu starten, muss zuerst der MSP430 initialisiert werden. Dazu muss der Watchdog-Timer unterbrochen und daraufhin die Frequenz des Mikrocontroller eingestellt werden. Des Weiteren werden die SPI- und das ADXL345-Modul initialisiert. Abschließend folgt die Endlosschleife, bei der der Mikrocontroller das Demo-Programm abspielt.

Die Demo-Funktion (Abb. 3 – ii) liest die Beschleunigungsdaten Byte-Weise aus dem ADXL345-Modul aus und sendet diese dem PC über UART (und USB zu UART-Wandler). Dabei werden zuerst die Daten aus dem ADXL345 ausgelesen, daraufhin eine CRC-Prüfsumme gebildet und schließlich die Daten über UART versandt.

3.2 “adxl345.c“

Die Bibliothek kümmert sich um die Ansteuerung des ADXL345-Beschleunigungssensors. Diese ist in Header- und Source-Datei aufgeteilt. Die Header beinhaltet: Registernamen, Prototypen und Pin-Bezeichnungen. In der Source-Datei dagegen sind alle Funktionen der Bibliothek zu finden.

Bevor die Funktionen für den ADXL345 präsentiert werden, sollte noch folgendes beachten werden:

  • Die Initialisierungsroutine sollte am Start des Programms implementiert werden.
  • Die maximale SPI-Frequenz ist laut Datenblatt 5 MHz

Alle Funktionen der ADXL345-Bibliothek sind in Tabelle 4 sind zusammengefasst.

Tab. 4: Funktionen und deren Beschreibung für die“adxl345.c“

Funktion Beschreibung
ADXL345_SPI_init () Initialisiert die SPI-Schnittstelle des Mikrocontrollers.
ADXL345_SPI_transmit ()* Senden und Empfangen von Nachrichten über die SPI Schnittstelle.
ADXL345_transmit () Sende dem ADXL345 einen Befehl.
ADXL345_init () Initialisiere den ADXL345-Beschleunigungssensor.
ADXL345_selbsTest () Der ADXL345 überprüft ob er Funktionsbereit ist.
ADXL345_offset_korrekur () Korrigiere Offset für X, Y und Z.
ADXL345_getDaten () Fordere die X-, Y- und Z-Beschleunigungswerte an.
ADXL345_calculateMagnitude () Berechne Betrag aus X, Y und Z vom ADXL345.
ADXL345_calculatePitch () Berechne Pitch (siehe englische Literatur was Pitch ist).
ADXL345_calculateRoll () Berechne Roll (siehe englische Literatur was Roll ist).
ADXL345_demo () Sendet ADXL345-Werte zum PC.

* Diese Funktion muss angepasst  werden falls ein anderer Mikrocontroller genutzt wird.

3.3 Anpassungen für alternativen Mikrocontroller

Wenn ein Anwender einen anderen Mikrocontroller als den MSP430G2553 nutzen möchte, dann muss dieser folgende Änderungen vornehmen:

  1. Die Defines SPI_CS, SPI _MOSI, SPI _MISO, SPI _SEL, SPI _SEL2, SPI _DIR und ADXL345_OUT bearbeiten (in der ”adxl345.h” zu finden)
  2. Funktion ADXL345_SPI_init() bearbeiten (vgl. auch Tabelle 5)
  3. Funktion ADXL345_SPI_ transmit () bearbeiten (vgl. auch Tabelle 6)

Defines

Für den SPI_CS-Pin sollte ein normaler GPIO als Ausgang genutzt werden. Da zusätzlich der Pin „Inactive High“ sein soll, sollte dieser auch mit „High“ initialisiert werden.

ILI9341_SPI_init()

Hier findet die Initialisierung der SPI-Schnittstelle statt. Der Ablauf sollte den nachfolgenden Pseudocode folgen:

Tab. 5: Pseudocode der SPI-Initialisierung

// “Chip Select” als Ausgang und High setzen

// Spezialfunktionen für SPI-Kanal (MOSI, MISO,  SCK) auswählen (falls MSP430)

// SPI für Inactive High, MSB first, 8-Bit, MCU ist Master einstellen

// SPI Modi 1,1 (Clock = Inactive High, CPHA = High)

// SPI Frequenz maximal 5 MHz

// SPI aktivieren (freigeben)

ILI9341_SPI_transmit()

Aufgabe der Funktion ist es Nachrichten zu dem ADXL345-Beschleunigungssensor zu senden oder Empfangen.

Die Transmit-Funktion sollte wie in Tabelle 6 beschrieben aufgebaut sein.

Tab. 6: Pseudocode der Transmit-Funktion

// Warte bis TX-Puffer fertig zum senden ist

// Sende Daten über TX-Puffer

// Warte bis Senden abgeschlossen ist

// Daten in meiner Variable Schreiben

// Gebe RX-Puffer zurück (falls empfangen wurde)

3.4 “uart.c“

Die UART-Kommunikation ist nicht das eigentlich Thema des Versuchs und wird deshalb nicht näher beschrieben. Die Funktionen der Bibliothek werden kurz in Tabelle 7 zusammengefasst.

Tab. 7: Funktionen und deren Beschreibung für die“uart.c“

Funktion Beschreibung
UART_init () Initialisiert die UART-Schnittstelle
UART_sendByte () Sende 1 Byte
UART_sendInt () Sende 2 Byte
UART_sende_4_byte () Sende 4 Byte
UART_sendChar () Sende Zeichen
UART_sendString () Sende String
UART_USCI0RX_ISR Empfange Bytes per Interrupt

Beachte um den UART des EXP430G2 zu nutzen, setze die Jumper des Board auf HW-UART.


4 Tests

Um den ADXL345-Beschleuigungssensor zu testen, wurde ein simples Programm mit Visual Studio 2015 erstellt (vgl. Abbildung 4). Das Programm ist im Ordner „ADXL345_Software“ unter „adxl viewer 2.0“ zu finden.

Abb. 4 GUI-Programm zum Auswerten des ADXL345-Beschleunigungssensors

Abb. 4 GUI-Programm zum Auswerten des ADXL345-Beschleunigungssensors

Mit der ComboBox (Abbildung 4 – COM17) kann – der COM-Port bei dem der EXP430G2-Lauchpad eingesetzt ist – ausgewählt werden. Daraufhin kann der Nutzer die Kommunikation starten, indem er auf den Button „connect“ drückt. Je nachdem wie der Anwender nun das ADXL345-Beschluinigungssensor dreht, dreht sich die Pyramide mit. Die Beschleunigungswerte werden außerdem bei den TextBoxes über der Pyramide angezeigt.


5 Weiterführende Literatur

Für das Verständnis des ADXL345-Moduls haben mir folgende Quellen weitergeholfen:


6 Literatur

[1] Datenblatt ADXL345, Analog Devices, 2016

Kontakt-Formular

Sie haben Fragen zu dem Tutorial?

Dann schreiben Sie mir einfach eine Nachricht über folgendes Formular oder senden Sie mir eine E-Mail.