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.
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.
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:
- “main.c“ welche das Hauptprogramm beinhaltet,
- “adxl345.h“ / “adxl345.c“ welche zusammen die ADXL345-Lib erzeugen und für die Kommunikation und Interpretation des ADXL345 zuständig sind und
- “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.
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:
- Die Defines SPI_CS, SPI _MOSI, SPI _MISO, SPI _SEL, SPI _SEL2, SPI _DIR und ADXL345_OUT bearbeiten (in der ”adxl345.h” zu finden)
- Funktion ADXL345_SPI_init() bearbeiten (vgl. auch Tabelle 5)
- 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.
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.