Fork me on GitHub

Quadrofly Building a quadrocopter

10Okt/120

Telemetrie mit RS-232 und Java

Da es beim Entwickeln der Algorithmen von großem Vorteil ist, die Werte der Sensoren und die Ergebnisse der Algorithmen in lesbarer Form angezeigt zu bekommen, loggt der Quadrocopter diese Daten über die UART-Schnittstelle des ATMega644. Zum Darstellen dieser Daten habe ich das Java-Programm Quadrometrics entwickelt, welches die Daten auf der seriellen Schnittstelle empfängt und in einem Swing-Fenster anzeigt.

Quadrometrics

Bis die Übertragung der Daten über Funk stattfindet, nutze ich den bereits vorhandenen Pegelwandler des Telemetriemoduls zur Pegelwandlung zwischen UART und RS-232.

Der nächste Schritt ist nun die Implementierung eines Rückkanals, um die Werte der Algorithmen zur Laufzeit anpassen zu können.

9Apr/121

Motoransteuerung

Am Wochenende habe ich mich mit der Ansteuerung der Brushless-Motoren "Emax CF-2822 1200KV Brushless Outrunner" beschäftigt. Diese Art von Motoren benötigt zusätzliche Elektronik zur Ansteuerung, sogenannte ESCs (Electronic Speed Controls). Für meinen Quadrocopter benutze ich ESCs vom Typ "TowerPro w18A Brushless Speed Controller".

ESCs erwarten standardmäßig ein PWM-Signal mit einer Frequenz von 50 Hz und einer Pulslänge zwischen 1ms und 2ms. Die Pulslänge gibt dabei die gewünschte Motordrehzahl an. Zur Generierung dieses PWM-Signals verwende ich einen ATMega88, der per I2C mit dem Steuerungs-Microcontroller kommuniziert und das PWM-Signal softwareseitig erzeugt. Erste Versuche der PWM-Erzeugung kann man im obigen Video sehen.

7Mrz/120

ATMega simuliert

ASM (CC BY-SA 2.0 PabloBD)

Da die Bauteile für meine RS-232-Schaltung immer noch nicht eingetroffen sind, ich die Software dafür aber bereits am Entwickeln bin, suchte ich eine Möglichkeit, den ATMega644 zu simulieren. Dabei bin ich auf das Tool Simulavr, welches für Windows und Linux zur Verfügung steht, gestoßen. Da man damit einen Mikrocontroller für die Software simulieren kann, konnte ich mit meinem Framework loslegen. Dieses ermöglicht die Ausgabe von Debug-Nachrichten über UART und in Simulavr.

Um das Programm in Simulavr zu testen, muss man die Präprozessordirektive #define SIMULAVR_AVAILABLE in der Datei main.h einkommentieren, damit die Unterstützung für den Simulator mit in die Software kompiliert wird.

Anschließend kann man den Quellcode mit make all kompilieren und die Software per Aufruf von simulavr --device atmega644a --file main.elf -W 0x20,- -m 10000000000 simulieren. --device gibt an, für welchen Mikrocontroller simuliert wird, mit --file wird das kompilierte Programm übergeben, -W 0x20,- hört auf den virtuellen Port in den die Software die Debug-Nachrichten schreibt und -m gibt die Anzahl der Millisekunden an, die unser Simulator simulieren soll.

Den kompletten Quellcode findet man bei GitHub: https://github.com/ni-c/quadrofly/tree/uart

Das Ergebnis sollte folgendermaßen aussehen:


$ simulavr --device atmega644a --file main.elf -W 0x20,- -m 10000000000
Hello debug!
Hello debug!

Ran too long. Terminated after 10000000000 simulated nanoseconds.

$