STMF3x Quadkopter Flugsteuerung
Quadrokopter Flugsteuerung in C für STMF30x Boards
Projektbeschreibung
Motivation
"Kann ich eine Drohne selber bauen, ohne auf fertige Software zurückzugreifen?" Das war die Frage, die in meinem Kopf gewachsen ist, als ich mich eine Zeit lang mit Mikrokontrollern beschaftigt habe.
Beschreibung
Mein selbst gestecktes Ziel eine autonome Drohne zu bauen, ist bis heute leider noch nicht endgültig erreicht. Ein Multikopter, der auf Basis einer geplanten Route seinen Flug autonom - und ganz wichtig - auch sicher durchführt, muss gründlich entwickelt werden. Der Entwicklungsprozess benötigt demnach auch eine gewisse Zeit. Ein System, das sich selbst reguliert, das basierend auf Sensordaten und eines vorgegebenen Ziels, dieses Ziel auch erreicht, benötigt eine Reihe von Komponenten, die miteinander kommunizieren.
Herausforderung: Ein Multirotor ist ein von Natur aus instabiles System. Die Motoren müssen also regelmäßig und in kurzen Zeitabschnitten die richtigen Impulse übertragen, um den Multirotor zu stabilisieren. Das erfordert wiederum, dass Sensoren schnell ausgelesen, Steuersignale interpretiert und Daten verarbeitet werden müssen. Es findet also eine Menge an wichtiger und zeitkritischer Kommunikation statt. Der Zeitfaktor spielt eine sehr wichtige Rolle. Sollte das System nicht in angemessener Zeit reagieren, kommt es im schlimmsten Fall zum Absturz.
Wichtige elektronische Bauteile eines Multikopters
Es gibt meherer Arten von Multirotoren. In diesem Fall habe ich mich für einen Quadrokopter entschieden. Damit ein Quadrokopter fliegt, benötigt man eine Reihe von Sensoren. Aus den Sensoren müssen Daten in kürzester Zeit analysiert und in Steuersignale für die 4 Motoren umgerechnet werden. Einen Überblick über die an der Kommunikation teilnehmenden Komponenten gibt die folgenden Tabelle.
-
MotorenDie Anzahl varriert je nach Art des Multirotors.
-
ESCsElectronic Speed Controller. Sind elektronische Impulsgeber zur Steuerung der Motordrehzahl.
-
BeschleunigungssensorZur Messung der positiven und negativen Beschleunigung in allen drei Raumachsen.
-
GyroskopGyroskop zur Messung der Drehgeschwindigkeit um alle Raumachsen.
-
BarometerZur Messung des Luftdrucks und Berechnung der Höhe.
-
MagnetometerMagnetometer zur Bestimmung der Position im Erdmagnetfeld.
-
GPS-ModulZur Navigation des Quadrokpters werden GPS-Daten benötigt.
-
RC-EmpfängerEmpfänger für die Funksignale der Fernsteuerung.
Kommunizierende Komponenten eines Quadrokopters
Die Flugsteuerung
Allgemein
Das wichtigste neben der korrekten Auswahl der phyischen Komponenten ist die Programmlogik und die Feedbackschleife(PID). Je eher ein Feedback erfolgt und je schneller die Sensordaten ausgewertet und interpretiert werden können, um so schneller kann eine Korrektur der Lage vorgenommen werden. Die Sensoren müssen also schnell angesprochen, ausgewertet und die Informationen verarbeit werden. Da jeder Sensor Vor- und Nachteile sowie Messungenauigkeiten hat, müssen mehrere Sensordaten kombiniert werden. Man spricht in einem solchen Fall von Sensordatenfusion. Zudem ist ein Multirotor ein stark vibrirendes System. Die Sensordaten müssen entsprechend gefiltert werden, um aus dem Rauschen die richtigen Daten herauszulesen. Datenfusion und Filterung sind rechenintensive Prozesse. Aus diesem Grund ist die geeignete Wahl eines Mikrokontrollers wichtig, der ausreichend Rechenleistung mitbringt.
Mirkokontroller
Ein Arduion 8-Bit MCU mit einer Taktrate von 16Mhz ist auf den erste Blick eine geeignete MCU. Es gibt einige Projekte, wie beispielsweise das Multiwii-Projekt, die auf dem Arudino aufgespielt werden können. Die erreichbaren Flugeigenschaften sind auch in Ordnung. Der kleine Mikrokontroller der ATmega-Familie kommt aber schnell an seine Grenzen. Er ist eher geeignet, einen schnellen Einstieg in die Welt der Mikrokontroller zu finden. Viele der oben genannten Komponenten sind leicht zu beschaffen und es gibt eine große Community, die bei Fragen unterstützen kann. Auch mein Projekt hat auf der Arduino Plattform angefangen.
Arduino Nano. Kleines anwenderfreundliches Breadbord basierend auf dem ATmega328 (Arduino Nano 3.x).
Arduinio NanoEine bessere Alternative ist ein 32 Bit Mikrokontroller mit einer höheren Taktrate. Beispielsweise der SMT32F303. Mit einer Frequenz von 72MHz und dem größeren Adressbereich ist diese MCU als Steuereinheit des Quadrokopters gut geeignet. Eine weitere Anforderungen an eine Flugsteuerung ist das Packaging bzw. die Baugröße. Die kleinsten Bauformen bieten vorgefertigte Boards. All die oben genannten Sensoren sind mindestens einmal integriert oder können durch eine ausreichende Anzahl an Schnittstellen einfach angebunden werden.
Omnibus F4 mit einer SMT32 F405 MCU und Sensoren.
Software bwz. Firmware
Einen Einblick in die Software kann man sich auf Githubverschaffen. Die aktuelle Version ist jedoch kein offizieles Release und bietet keine GUI zum setzen von PID-Werten. Auch können Einstellungen für die Drehrichtung der Motoren und das zu verwendende Funkprotokoll nur im Code selber vorgenommen werden. Sollte trotzdem interesse bestehen, den Code oder Teile davon zu verwenden und Fragen bei der Implementierung aufkommen dann könne Sie mich gernen kontaktieren. Ich helfe gerne weiter.
Ihr Tech-Partner bei Web- und Softwareprojekten
Mit einer professionellen Einstellung und kreativer Energie begleite ich Sie von der Idee bis zur fertigen Anwendung.
Kontakt