Ausgewählte Lösung

 <<  ^^  >>

STM32F4Discovery

<* Zur Ansteuerung der Sensoren wurde das Microcontrollerbord STM32F4Discovery verwendet, auf dem neben einem STM34F407VG-Prozessor mit ARM Cortex-M4-Kern unter anderem ein Programmiergerät, ein Beschleunigungssensor und ein Micro-USB-Anschluss zur Kommunikation mit einem Computer montiert sind.

Zur Programmieren des Controllers wurde auf das Echtzeitbetriebssystem ChibiOS/RT zurückgegriffe, da es die Einbindung der Peripherieeinheiten des Microcontrollers erleichtert. *>

Das Microcontrollerboard STM32F4Discovery

Eclipse

Wie gefordert, wurde als integrierte Entwicklungsumgebung (IDE) die Software Eclipse verwendet. Diese dient dem Schreiben des C-Codes für den µController und bietet die Möglichkeit, das Echtzeitbetriebsystem ChibiOS einzubinden, sowie On-Chip-Debugging anzuwenden.

ChibiOS/RT

<* ChibiOS/RT ist ein Echtzeitbetriebssystem für Microcontroller, das unter anderem für den STM32F4Discovery optimiert wurde. Es ermöglicht eine vereinfachte Konfiguration und Kommunikation mit externen Geräten [...] *>

Auch eine Schnittstelle zur Kommunikation mit einem PC über USB kann sehr einfach realisiert werden, was von uns zum Übertragen der erfassten Daten genutzt wurde.

Für die Aufnahme der Messungen wurde ein ChibiOS-Projekt einer Vorgängergruppe angepasst. Es enthält einen Thread, der über einen virtuellen COM-Port mit dem Computer kommuniziert.

OpenOCD

OpenOCD ist ein sogenanntes On-Chip-Debug-System (OCDS), welches die Entwicklung des Programmcodes durch Debugging auf der Hardware erleichtert.

Flachbaugruppe mit Battery-Fuel-Gauge-ICs (DS2786)

Auf dieser Flachbaugruppe befinden sich die Battery-Fuel-Gauge-ICs, die mit unserer Software über I²C angesteuert werden sollen. Auf der Platine erkennt man für jeden Akku einen eigenen Bereich.

Die Flachbaugruppe mit den Akku-ICs

I²C-Kommunikation mit dem DS2786

Die Anbindung an den IC erfolgt über die I²C-Schnittstelle mit folgenden Einstellungen:

Einstellung Wert
SCL (Serial Clock Line) 400 kHz
Master STM32F4
Slave 1-8 DS2786 1-8
Bitfolge MSB zuerst
Pull-Up-Rs 4,7 kOhm
I²C-Adresse des ICs (Factory) 0x36
Adresse des Kapazitätsregister 0x02

Hinweis: Wie sich bei der Inbetriebnahme der Flachbaugruppe herausstellte, liefert der DS2786 trotz korrekter Adressierung das Acknowledge-Bit nicht zurück, was auf einen Fehler der Flachbaugruppe hinwies:

Oszilloskop-Bild I²C-Telegramm (Battery-Fuel-Gauge-IC): kein Acknowledge-Bit (!)

Aus diesem Grunde wurde die Funktionalität unserer Software mit Hilfe eines anderen ICs (auf Breakout-Board) nachgewiesen. Die Wahl fiel hier auf den Beschleunigungssensor ADXL345. Die I²C-Kommunikation mit diesem funktioniert und es lässt sich ein Register auslesen.

Oszilloskop-Bild I²C-Telegramm (Beschleunigungssensor): Erhalt des Acknowledge-Bits

Fehlerbehebung

Um das Kapazitätsregister eines Battery-Fuel-Gauge-ICs auszulesen, wurde es notwendig den Fehler in der Hardware zu finden. Die Überprüfung ergab: Fehlende Masseverbindung zwischen IC-GND und µC-GND.

Nun konnten weiterführende Schritte vorgenommen werden, um die Register des DS2786 auszulesen. Parallel dazu wurde ein Windows-Programm zur Anzeige der Werte entwickelt:

Serielle Kommunikation USB / virtueller COM-Port

Um eine serielle Verbindung des µControllers mit dem PC über USB herstellen zu können, benötigt man den Treiber für den virtuellen COM-Port. Diesen erhält man auf der Seite von ST: http://www.st.com/web/en/catalog/tools/PF257938

Nun ist man bereits in der Lage mit einer Terminal-Software (z.B. PuTTY) seriell zu kommunizieren.

Folgende Parameter werden zur Kommunikation verwendet:

Einstellung Wert
COM-Port je nach System
Baudrate 9600
Parität keine
Datenbits 8
Stoppbit 1
Handshake XOnXOff

Das µC-Programm reagiert auf verschiedene Commands, z.B. "capacity", "voltage" oder "current", und antwortet mit dem auszulesenden Register.

Anzeige und Verarbeitung der ausgelesenen Register im Windows-Programm

Um das Auslesen des Registers auf einer benutzerfreundlichen Oberfläche zu ermöglichen wurde ein Tool in C# geschrieben, welches den Aufbau der Kommunikation loggt und den aus dem IC-Register gelesenen Wert umrechnet und ausgibt. Mehr Infos dazu auf der nächsten Seite: Programme

<* ... *> = Quelle: Projektgruppe "Defekterkennung", WS13/14

 

 

 <<  ^^  >>