Fisch´s Projekte-Seite


Project start: December 2012

Multiwii



MultiWii hat seinen Namen von der Wii Fernbedienung, dessen Sensoren des Nunchucks und WiiMotion Plus für die Stabilisierung des Multicopters verwendet wurden.
Allerdings lassen sich bei weitem mehr und aktuellere Sensoren als die der Wii verwenden.
Meine Wahl fiel auf das "10DOF IMU Board" mit dem MPU6050 Gyro und Beschleunigungssensor, damit sollte der Copter nun wirklich stabil in der Luft "stehen", und nicht mehr von selbst wegkippen. Zudem kann das ungewollte Drehen durch das HMC5883L Magnetometer verhindert werden. Das MS5611 Barometer misst den Luftdruck, wodurch die Flughöhe bestimmt und diese somit fest eingestellt werden kann.
Mit einem USB UART Adapter lässt sich der Arduino per USB beschreiben, sowie die Daten des MultiWii in echtzeit per auslesen.

DIY Arduino Pro Mini


Da Arduino, genauer der Arduino Pro Mini im Grunde nur aus einem Atmega und dessen Grundbeschaltung besteht sollte dieser auch in nicht SMD nachzubauen sein.

Also den Schaltplan des Arduinos als Eagle file geladen ( arduino.cc/en/Main/ArduinoBoardProMini ) und alle Bauteile ausgetauscht. Dazu noch den 3,3V Spannungswandler und den Reset-Knopf weggelassen und fertig war der Arduino Pro (nicht) Mini. Hier der von mir Modifizierte Schaltplan vom Arduino Pro Mini für Eagle.


Das Board hab ich dann (im Chaostreff-Dortmund) geätzt.


Und die Löcher mit der CNC gebohrt.
Danach konnten dann die Bauteile angelötet werden. (Falls wirklich einer auf die Idee kommt, diese Platine nachzubauen: Der Quarz könnte ruig etwas näher an den Atmega. Insgesamt ließe sich auch noch etwas an Platz sparen)


Danach konnte der Arduino Bootloader (.hex Dateien sind bei der Arduino Software dabei, \hardware\arduino\bootloaders) auf den Atmega 328p mit dem USBASP geflasht werden.
Nach einem Restart des Atmega sollte die Status LED auf dem Arduino Board regelmäßig blinken


Ist dies der Fall läft der Bootloader warscheinlich richtig und das Multiwii Sketch kann per serieller Verbindung (USB UART Adapter, wie z.B. mit dem FTDI Breakout Board) mit der Arduino Software geuploaded werden.


Wie oben erwähnt möchte ich die 10DOF IMU von Flyduino verwenden.
Wo später was angeschlossen wird lässt sich dem jeweiligen connection diagram entnehmen.
Demnach habe ich VCC_IN und GND an die 5V Versorgungsspannung angeschlossen, und SCL mit A5 (Atmega Pin 28), sowie SDA mit A4 (Atmega Pin 27) des Arduino verbunden..
Das Ganze auf zwei Breadboards verteilt aufgebaut und per FTDI Breakout Board mit dem Rechner verbunden.


Doch bevor das ganze so Läuft, müssen noch die Einstellungen im MultiWii Sketch gemacht werden:
Dazu in den Code geschaut und in der config.h unter "SECTION 1 - BASIC SETUP" #define TRI "aktiviert" (// davor entfernen).
Desweiteren musste ich noch angeben, welche Sensoren angeschossen sind. In der neuesten Version ist die Drotek 10DOF MPU bereits eingetragen und konnte ebenso aktiviert werden, "#define DROTEK_10DOF_MPU" unter "Combined IMU Boards".
Allerdings funktioniert so bei mir nur das Barometer, da die I2C Adressen der anderen Sensoren noch nicht ganz stimmten. Dazu in der def.h den Eintrag zur DROTEK_10DOF_MPU gesucht, und wie im Sensoren Kompendium beschrieben den Code geändert. Zudem noch die MPU6050 Adresse auf "#define MPU6050_ADDRESS 0x68" angepasst.

Nun konnte ich das ganze zum ersten Mal richtig testen. Dazu MultiWiiConf gestartet und mit dem dem USB UART Wandler zugewiesenen Comport verbunden. Den bunten Graphen startet man mit einem Klick auf "Start". Danach hab ich noch testweise den Receiver der Fernsteuerung über das Breadboard verbunden und siehe da, es funktioniert alles.


Die insgesamt drei Platten (Verteilerplatine, Arduino und Sensoren) werden im Stockwerkbau übereinander mit 21mm langen Polyamid Distanzschrauben zusammengeschraubt.
Vom Arduino gehen so ziemlich alle Ausgänge nach unten an die Verteilerplatine, dafür hab ich schonmal die ganzen Stecker gelötet. Die Farben der Kabel sind selbstverständlich nicht willkürlich: Schwarz - Masse, Blau - zum Receiver, Rot - Ausgänge (Motoren, Servos) und Gelb - alles andere


Um die kleine Platine mit den Sensoren fest einzubauen hab ich aus 3mm dicken MDF Resten eine kleine Halterung gefräst:
Die Platine kommt in den kleinen Kasten, dessen Deckel (bestehend aus zwei Teilen) abgenommen werden kann.
Hier die Cambam Files dazu


Zwischen zwei Schaumstoffstücken und mit einer Schraube angeschraubt sind die Sensoren fest aber auch vor leichten Vibrationen geschützt.
Die Kabel von den Sensoren (5V, GND, SCL, SDA) laufen durch den Schlitz in der Holzplatte zwei Etagen tiefer unter der Arduino Platine zur Verteilerplatine


Verteilerplatine


Die Verteilerplatine soll u.a. alle benötigten Pins des Arduino an die ESCs, Servos, Receiver etc. Verteilen.
Dazu führen fünf Kabelbündel vom Arduino runter und werden auf die Steckerleisten "A","B","C","D" und "5V" gesteckt.
An die 4 an den Ecken angebrachten gewinkelten 3 Pin Stecker (LF, RF, R, SR) kommen die ESCs und der Yaw-Servo.
Durch die Jumper kurz hinter den ESC Steckern (ESCVCCJUMP1, 2 und 3) lässt sich die 5V Versorgungsspannung auf ein ESC begrenzen, da der Parallelbetrieb zu Problemen führen kann.
Die mittig unten liegenden Stecker (RECPWR und REC) werden mit dem Receiver verbunden.
An den nördlich befindlichen Stecker "I2C" kommen, wer hätte es gedacht, die Sensoren.
Desweiteren eine LED als 5V Indikator und einen NPN Transistor (T1), welcher eine oder mehrere LED´s am Pin "STAT_LED_OUT" parallel zur Status LED auf dem Arduino schaltet.
Rechts dann drei Servoanschlüsse für den Kamera Bewegungsausgleich, die Stromversorung dieser Servos lässt sich zudem frei auf eines der drei ESC´s brücken, da sonst ein ESC die komplette Elektronik versorgen muss ... und ich hab ja schließlig drei dadrauf.
Mit "LIPOALARM" und "AUX_IN" sind nun alle wichtigen Ausgänge des Arduino abgedeckt.

Download: Eagle Schaltplan und Board meiner Verteilerplatine
Update 23.1.2013: Eagle Files geupdated (Jumper für Servo VCC hinzugefügt) (siehe weiter unten für Erklärung)


Die Platine dann per Tonertransfer geätzt,...


... gebohrt ...


... und gelötet.


Die Multiwii Steuerung hab ich dann zum Testen auf den (alten) Tricopter geschraubt.


Soweit so gut, per USB Seriell Adapter mit dem Rechner verbunden, MultiwiiConf an und Strom drauf. Dem ersten Eindruck nach zu urteilen funktioniert es.


Nachdem erste Testflüge mit der neuen Steuerung größtenteils positiv verliefen konnte ich frohen Mutes weitermachen.



Was mir noch nicht ganz gefiehl war die Sensorhalteplatte, genauer das kleine Häuschen obendrauf.
Also hab ich eine neue entworfen und gefräst bei der die Platine unterhalb mit Kabelbinder befestigt wird.
Hier die dxf dazu: topplate v2.dxf


Zwischen GND und 3.3V hab ich noch einen 100n Kerko und einen 4.7µF Siebelko gelötet, da ich hin und wieder die Sensoren beim Start nicht funktionierten
Die Platine in etwas Schaumstoff eingepackt unter die neue Halterung geklemmt und mit einer Schraube gegen verdrehen gesichert.


Ich dachte eigendlich ich hätte das Problem mit den Sensorausfällen behoben, naja dachte. Also erstmal den fehler suchen, ich vermute die Versorgungsspannung ist nicht ganz so sauber.

23.1.2013: Gestern hab ich hoffentlich den Fehler gefunden und behoben. Die Spannung bricht beim Bewegen des Servos bis zu 0,5V ein, da Servo und Multiwii am Selben ESC hängen. Daher hab ich auf der Verteilerplatine die Stromversorgung des Servos gekappt und einen Zusätzlichen Jumper angebracht (wie auch bei den Kamera Stabilisierungsservos). Somit hat der Servo nun eine eigene Stromversorung.


25.1.2013: Fehler besteht noch immer. Anscheinend hängt das Aussetzen der IMU mit der Temperatur draußen zusammen (zzt. unter 0 Grad). Kalte Lötstelle?
12.1.2013: Heute hab ich die IMU zurückgeschickt, da selbst das Reworken der MPU keine Änderung gebracht hat. Also entweder versteckt sich die kalte Lötstelle gut oder die MPU ist defekt.
28.2.2013: Die Imu ist vor ein paar Tagen angekommen. Scheint wohl jetzt zu funktionieren, kleiner Testflug ist auch schon geglückt.


Bluetooth

Einen nicht ganz unwichtiger Bestandteil beim Einstellen eines Multicopters ist das Anpassen der PID Werte.
Bis jetzt musste ich jedes mal den Copter per Kabel mit einem Rechner verbinden um die Werte anzupassen; dann Wieder kurz fliegen, landen, anschließen, anpassen.
Um sich zumindest das ewige an- abstecken des Kabels zu ersparen gibt es Bluetooth Module zur seriellen Datenübertragung.
Also kaufte ich mir solch eines bei Hobbyking.
Wie ich aber erst beim auspacken bemerkte besitzt das Modul zwar einen Spannungsregler, allerdings findet die Datenübertragung (TX und RX) mit 3.3V statt. Da mein Atmega auf dem Arduino mit 5V arbeitet, musste ich die Spannungen anpassen.
TX (vom Bluetooth Modul) kann ohne Probleme mit RX (an der Flight Control) direkt verbunden werden. Der High Pegel liegt dann zwar nur bei 3.3V wird aber vom Atmega als solcher erkannt, da die Grenze bei VCC*0,6 ( also 5V * 0,6 = 3V) liegt.
Andersrum (TX vom Atmega mit 5V richtung RX vom BT Modul) sieht es allerdings nicht so rosig aus. Da ich keine Angaben dazu gefunden hab ob das HB01 Modul 5V tolerant ist wollte ich es nicht riskieren und hab einen simplen Spannungsteiler dazuwischen gelötet.


Da auch noch die Pinbelegung nicht 1 zu 1 angeschlossen werden kann hab ich einfach eine kleine Lochrasterplatine genommen und dort die zwei Widerstände draufgelötet.


Mit etwas Schrumpfschlauch drüber siehts schon viel eleganter aus. Die kleine Kerbe an den Buchsenleisten kennzeichnet TX (zur FC) und RX (zum Modul).


Da nun aber das Modul auf dem "Adapter" steckt und somit weit nach oben herausragt ist es warscheinlicher, dass es im Flug abfallen kann.


Also hab ich die gewinkelten Pins am Modul ab- und eine neue eingelötet, diesmal aber in die andere Richtung.
Dadurch liegt der Adapter nun direkt an dem Modul.


Nun kann das Bluetooth Modul bei eingeschaltetem Copter mit einem Rechner oder Handy gekoppelt und wie eine normale serielle Verbindung benutzt werden. Einfacher gehts echt nicht.


Das wars dann soweit zum Aufbau der Multiwii Flightcontrol. Weiter gehts mit dem neuen Frame.