Dieser Artikel passt chronologisch nicht in die Serie über meinen Hexakopter, sondern beschreibt wie das Flight Control mit der MultiWii Software bespielt, eingestellt und mit GPS und Bluetooth Addons erweitert wird. Dies macht man (in Teilen) nachdem die Elektronik auf dem Rahmen angebracht worden ist, als letzten Schritt vor dem Jungfernflug. Ich habe diesen Artikel lediglich so lange zurückgehalten, bis ich alle Komponenten da hatte, in Betrieb nehmen und testen konnte.
Logisch ist es, mit dem Herzstück des Flight Controls zu beginnen, in meinem Fall das Crius AIO Pro, mit seinem ATMega 2560 und den ganzen Sensoren an seiner Seite. Das Board kommt mit irgendwas vorbespielt aus Shenzen in einem Bubblepack, was dort allerdings drauf war, habe ich mir aber gar nicht angesehen.
Klar ist jedenfalls, dass der Arduino Bootloader bereits vorhanden ist, was eine interessante Information ist, wenn man später die Arduino Software konfiguriert.
Das Board hat den FTDI-Controller bereits drauf, sodass man es direkt per µUSBKabel am Rechner (Linux, Windows, Mac) anschließen kann. Unter Windows braucht man vermutlich erst noch nen Treiber, unter Linux (und vermutlich auch OSX) funktioniert das Gerät als serielle Schnittstelle out-of-the-box.
Patchen der Multiwii Software
Nun die MultiWii Software runterladen, derzeit ist die Version 2.1 die letzte aktuelle und entpacken. Darin befinden sich 2 Ordner: MultiWii_2_1 (die eigentliche MultiWii Software) und MultiWiiConf_2_1 (ein grafisches Java-basiertes GUI-Tool). Nun muss ich 2 Dateien des Quellcodes anpassen, um statt 9 einzelnen Kabeln vom Empfänger mit je einem Signal pro Kabel, das komplette PPM_SUM Signal durch ein Datenkabel übertragen zu können.
[yellow_box]Dieser Hack / Patch seit Multiwii Dev 1232 nicht mehr nötig[/yellow_box]
Hierzu habe ich 2 Software Patches gedifft:
--- ../MultiWii_2_1/def.h 2012-07-15 19:21:38.000000000 +0200
+++ MultiWii_2_1 Hexa1024 ppm_sum def.h 2012-08-03 08:41:58.000000000 +0200
@@ -328,7 +328,14 @@
#define STABLEPIN_ON PORTC |= 1< <6;
#define STABLEPIN_OFF PORTC &= ~(1<<6);
- #define PPM_PIN_INTERRUPT attachInterrupt(4, rxInt, RISING); //PIN 19, also used for Spektrum satellite option
+ // #define PPM_PIN_INTERRUPT attachInterrupt(4, rxInt, RISING); //PIN 19, also used for Spektrum satellite option
+ #if defined(PPM_ON_THROTTLE)
+ //configure THROTTLE PIN (A8 pin) as input witch pullup and enabled PCINT interrupt
+ #define PPM_PIN_INTERRUPT DDRK &= ~(1<<0); PORTK |= (1<<0); PCMSK2 |= (1<<0); PCICR |= (1<<2);
+ #else
+ #define PPM_PIN_INTERRUPT attachInterrupt(4, rxInt, RISING); //PIN 19, also used for Spektrum satellite option
+ #endif
+
#define SPEK_SERIAL_VECT USART1_RX_vect
#define SPEK_DATA_REG UDR1
//RX PIN assignment inside the port //for PORTK
--- ../MultiWii_2_1/RX.ino 2012-07-15 19:21:38.000000000 +0200
+++ MultiWii_2_1 Hexa1024 ppm_sum RX.ino 2012-08-03 08:38:48.000000000 +0200
@@ -216,6 +216,11 @@
ISR(INT6_vect){rxInt();}
#endif
+// PPM_SUM at THROTTLE PIN on MEGA boards
+#if defined(PPM_ON_THROTTLE) && defined(MEGA) && defined(SERIAL_SUM_PPM)
+ ISR(PCINT2_vect) { if(PINK & (1< <0)) rxInt(); }
+#endif
+
// Read PPM SUM RX Data
#if defined(SERIAL_SUM_PPM)
void rxInt() {
Diese können wie folgt eingespielt werden (im Multiwii_2_1 Ordner):
$ patch def.h def.h.patch $ patch RX.ino RX.ino.patch
Der Quellcode ist nun für das Dekodieren vom PPM_SUM Signal auf einem Pin vorbereitet.
Anschluß der GPS und Bloothooth Empfänger
Zum Fliegen wird das GPS zwar nicht benötigt, ist für Komfortfeatures, wie ‚Position halten‘ oder ‚Komm zurück nach Hause‘ gerade für blutige Fluganfänger wie mich dennoch sehr praktisch und vllt. auch später noch von Nutzen, falls der Kopter die Position, Höhe und Ausrichtung halten kann, während ich gerade die angehängte Kamera für ein Foto einstelle – das muss er allerdings in der Zukunft erst noch unter Beweis stellen.
Ich habe mich bewusst gegen das via I2C kommunizierende Crius GPS Board entschieden und stattdessen ein einfaches serielles gekauft, weil das Crius Teil teurer ist als die ganze FC, der Warenwert dann die 150€ überstiegen hätte und ich zusätzlich zu EUSt auch noch Zollgebühren hätte bezahlen müssen. Die Funktionalität ist ohnehin die Gleiche.
[red_box]Blöderweise versorgt das Board VCC an den seriellen Ausgängen nur dann mit +5V Spannung, wenn es via „Extend Power in“ mit Strom versorgt wird, bezieht es den Strom über die Motorregler, gibts die 5V Strom nur am I2C Stecker“[/red_box]
Der Einfachheit halber, habe ich das Bluetooth Modul sowie das GPS beide über die Spannung am I2C Konnektor versorgt. Das GPS habe ich an Serial 1 (TX1/RX1) angeschlossen (und inter Config entsprechend eingestellt). Die Datenleitungen des Bluetooth Moduls kommen an die TX/RX Leitungen der FTDI Buchse. Dabei sollte man natürlich darauf achten, dass was am Bluetooth Adapter mit TX gekennzeichnet ist, mit RX am FC verbunden wird und umgekehrt. Dann funktioniert das Ganze auch direkt beim ersten und nicht erst beim 2. Versuch.
Flashen der Multiwii Software auf den Hexakopter
[red_box]Nun muss die Config-Datei an den eigenen Kopter und die verwendete Hardware angepasst werden sowie Voreinstellungen bei Bedarf geändert werden![/red_box]
Meine Hexakopter-Config (zum spicken): Hexa_AIOPRO_C_1024_GPS
Sind diese Vorbereitungen getroffen, kann der MultiWii_2_1 Sketch in die Arduino Software geladen werden. Unter Tools -> Board -> ‚Arduino MEGA 2560 or MEGA ADK‘ auswählen, dann kann der Sketch kompiliert / getestet und anschließend hochgeladen werden. Danach sollte das Flight Control automatisch neu starten und betriebsbereit sein.
Konfiguration der Steuereingangssignale (AUX)
Startet man nun die MultiWiiConf GUI Software, sollte man sich über USB zum Flight Control verbinden können und sollte eine Visualisierung der von den Sensoren gelieferten Daten, die ein- und ausgehenden Steuersignale von der Fernbedienung und für die Motoren sehen können.
Funktioniert das soweit, kann man die Kanalbelegung einstellen. Die Buttons L / M / H bedeuten niedrige, mittlere, hohe Signale und besagen, bei welchen Eingabewerten auf dem entsprechenden Kanal die angegebene Kopterfunktion aktiviert wird. So ist es möglich, aus den verbleibenden 4 Kanälen des FrSky Funksystems mehr als 4 Funktionen am Hexakopter zu steuern. Nachdem die Anpassungen an der AUX-Konfiguration in der Multiwii-Software erfolgt ist, muss natürlich die Fernsteuerung auch so programmiert werden, dass sie die entsprechenden Signallevel beim Umlegen der zugewiesenen Schalter ausgibt. In der er9x Software ist das Stichwort „Mixer“ zu finden in den modellspezifischen Einstellungen. Hier kann man solche Sachen konfigurieren, allerdings erschließt sich die Bedienung nicht direkt, weshalb ich erstmal das Handbuch zur Recherche empfehle, da mein Blog-Eintrag zur Turnigy 9X Fernbedienung auch noch nicht geschrieben ist.
Hallo Markus
Deine info ist sehr gut, ich habe genau den gleichen Fc und auch den gleichen hex6x , bin auch Anfänger auf dem gebiet. habe auch den selben Empfängerund Sender von frsky .
Mein problem ist das ich es nicht schaffe das der kopter sich nicht um seine eigene achse drehet.
Ich habe da schon viele versuche in meinem Sketch gemacht aber es hilft nicht .
Ich waere dir sehr dankbar wenn du mir deinen Sketch zeigen könntest um zu vergleichen wo der fehler sein könnte.
Vielen dank
Lars
Hallo Lars,
der Fehler könnte auch an der Bauart des Kopters liegen. Ich hatte mal das gleiche Problem, das lag dann an den zu dicht an der FC untergebrachten ESCs, die ein Magnetfeld erzeugt haben, was der MAG als Drehung interpretiert hat und die FC deshalb dagegen steuern wollte.
Man kann das softwareseitig beheben, indem man einfach den Code für den MAG löscht. Da muss man aber gut schauen, denn der Code verteilt sich auf mehrere Dateien. Allerdings funktionieren dann einige Dinge nicht mehr, wie z.B. der Headfree-Modus.
Die andere Lösung wäre bei mir gewesen: ESCs anders montieren oder einen externen MAG anzuschließen, der dann außerhalb des Störbereichs sitzt.
[…] habe ich in der warpzone nicht nur endlich meinen Artikel zum Flight Control und der Software des Hexakopters fertigstellen können, sondern vorher auch noch an diesem selbst […]