DIY Quadrocopter – Part5 – Basic Setup Multiwii 2.3

Hier werde ich mal versuchen die grundlegenden Einstellungen zu erklären:
Der Copter ist ein QuadX, SimonK Regler, AIO Board von HK und GPS.

SECTION 1 – BASIC SETUP:
Hier werden die Grundeinstellungen (wie der Coptertyp, die verwendeten Sensoren usw.) des Copters definiert. Diese Einstellungen müssen eingestellt werden, damit der Copter überhaupt funktionieren kann.

The type of multicopter:
Hier wird die Coptervariante oder die Funktion des zu programmierenden Boards (z.B. als Kameragimbal) ausgewählt. Für meinen Beispielcopter Quadrocopter wird QUADX definiert.

/**************************    The type of multicopter    ****************************/
//#define GIMBAL
//#define BI
//#define TRI
//#define QUADP
    #define QUADX
//#define Y4
//#define Y6
//#define HEX6
//#define HEX6X
//#define HEX6H  // New Model
//#define OCTOX8
//#define OCTOFLATP
//#define OCTOFLATX
//#define FLYING_WING
//#define VTAIL4
//#define AIRPLANE
//#define SINGLECOPTER
//#define DUALCOPTER
//#define HELI_120_CCPM
//#define HELI_90_DEG

Motor minthrottle:
Dies ist der Wert den der ESC bei minimaler Drehzahl = Leerlaufdrehzahl bekommt. Nach dem Starten und mit dem Steuerknüppel ganz unten drehen die Motoren mit der hier definierten Drehzahl. Bei der minimalen Drehzahl gibt es auch keine Korrekturwirkung des FCs, auch wenn der Copter ausgelenkt wird. Der FC beginnt zu korrigieren, sobald MinThrottle überschritten wird. Man kann die minimale Drehzahl je nach ESC Typ geändert werden. Die Motoren sollten im Leerlauf rund laufen, nicht vibrieren und nicht zu hoch drehen.
Man kann die Leerlaufdrehzahl auch individuell an den Copter anpassen. Dazu aktiviert man #define MINTHROTTLE 1150 // (*). Diese gilt universell und kann nach Belieben geändert werden. Dabei ist darauf zu achten, dass die Drehzahl nicht zu hoch ist. Wenn man eine recht hohe Leerlaufdrehzahl auf einen sehr leichten Copter einstellt, kann es passieren, dass der Copter schon bei minthrottle abheben würde. Dann könnte man nie sinken, da der Copter auch bei kleinster Drehzahl steigt. Die MinThrottle sollte so eingestellt werden, dass alle Motoren gleichmäßig drehen und nicht einer hinterherhinkt/einer viel höher dreht.
Da ich für den Beispiel QuadX Regler mit SimonK benutze, wird eine MinThrottle von 1064 (speziell für SimonK-ESCs) eingestellt.

/****************************    Motor minthrottle    *******************************/
/* Set the minimum throttle command sent to the ESC (Electronic Speed Controller)
This is the minimum value that allow motors to run at a idle speed  */
//#define MINTHROTTLE 1300 // for Turnigy Plush ESCs 10A
//#define MINTHROTTLE 1120 // for Super Simple ESCs 10A
    #define MINTHROTTLE 1064 //special ESC (simonk)
//#define MINTHROTTLE 1050 // for brushed ESCs like ladybird
//#define MINTHROTTLE 1150 // (*) (**)

Motor maxthrottle:
Dieser Wert ist der Wert der bei Maximaldrehzahl (bei vollem Knüppelausschlag) an den ESC geschickt wird. Je nach Coptergewicht und Motoren kann die Höchstdrehzahl bis auf 2000 erhöht werden. Normalerweise ist der Standartwert mehr als ausreichend.
Hier lasse ich meistens den Standardwert.

/**************************** Motor maxthrottle *******************************/
/* this is the maximum value for the ESCs at full power, this value can be increased up to 2000 */
#define MAXTHROTTLE 1850

Mincommand:
Die Zahl gibt den Wert an, der an die ESC gesendet wird, solange der Copter nicht scharf gestellt (armed) ist. Wenn die ESCs auf dem Multicopter beim Einschalten ununterbrochen Piepen, dann ist vermultich dieser Wert zu hoch und muss abgesenkt werden (teilweise hinunter bis auf 900). Normalerweise ist der Standartwert mehr als ausreichend.

/**************************** Mincommand *******************************/
/* this is the value for the ESCs when they are not armed
in some cases, this value must be lowered down to 900 for some specific ESCs, otherwise they failed to initiate */
#define MINCOMMAND 1000

I²C-Speed:
Je nachdem was ausgewählt ist (durch Entfernen der Schrägstriche) ist die Taktfrequenz des I²C Busses bei 400kHz (ist schneller -> mehr Daten = besser). Außer für Original WiiMotionPlus und Nunchuck können für fast alle Sensoren 400000L (400kHz) ausgewählt werden.

/********************************* I2C speed ***********************************/
//#define I2C_SPEED 100000L //100kHz normal mode, this value must be used for a genuine WMP
#define I2C_SPEED 400000L //400kHz fast mode, it works only with some WMP clones

Interne I²C Pull-Ups:
Die beiden Signalleitungen des I²C Busses benötigen Pul-Ups, um undefinierte Zustände zu vermeiden (siehe Bus-Systeme/I²C Bus). Interne Pull-Ups sind im Prozessor integrierte, zuschaltbare Widerstände und können durch diese Zeile aktiviert werden. Interne Pullups muss normalerweise nur für Original WiiMotionPlus Hardware aktiviert werden. Heute werden externe IMUs mit mehreren Sensoren oder AIO-Boards verwendet. Diese haben die Pull-Ups bereits auf dem Board integriert, wodurch man die internen Pull-Ups nicht aktivieren muss.
Das NanoWii als auch die 10DOF IMU haben Pull-Ups auf dem Board, wodurch die internen nicht aktiviert werden.

/*************************** Internal i2c Pullups ********************************/
/* enable internal I2C pull ups (in most cases it is better to use external pullups) */
//#define INTERNAL_I2C_PULLUPS

boards and sensor definitions:

Hier warden die benutzten Sensoren definiert. Es gibt einerseits fertige Sensorboards zur Auswahl, als auch jeden Sensor einzeln. Die Sensorauswahl wird mit jeder neuen Softwareversion ständig erweitert und neue Sensoren / Sensorboards in der Software aufgenommen. Also immer erst schauen ob das Board vorhanden ist. Wenn ja, dann brauchen die Sensoren nicht einzel aktiviert werden.

Kombinierte Sensoren/ Sensorboards:
In diesem Abschnitt können die bereits eingetragenen Sensorboards aktiviert werden. Dabei wir die Orientierung schon richtig eingestellt und man muss sich nicht um die Sensororientierung kümmern (am Sensorboard ist meist ein Pfeil drauf, der zur Copterspitze/nach vorne zeigen soll). Eine Kontrolle sollte aber dann doch in der GUI gemacht werden, da es auch mal Fehler geben kann bzw. das Board verdreht eingebaut ist.
Das NanoWii ist als fertiges Sensorboard aktivierbar, ebenso wie die CRIUS AIO (Beispielcopter) und einige weitere AIO-FCs. Wenn weitere Sensoren wie ein Baro oder ein MAG angeschlossen werden, müssen diese bei „Independent sensors“ aktiviert werden. Anmerkung: sowohl für das Crius AIO V1.1 und das Crius AIO V2.0 als auch die Hobbyking Kopie Multiwii and Megapirate AIO Flight Controller muss als Sensoren #define CRIUS_AIO_PRO_V1 aktiviert werden.
Als Beispiel wird hier das CRIUS_AIO_PRO_V1.

/************************** Combined IMU Boards *******************************/

//#define FLYDUINO_MPU       // MPU6050 Break Out onboard 3.3V reg
 #define CRIUS_AIO_PRO_V1
//#define DESQUARED6DOFV2GO  // DEsquared V2 with ITG3200 only
//#define DESQUARED6DOFV4    // DEsquared V4 with MPU6050
//#define LADYBIRD

Einzelne Sensoren:
Da nicht alle IMUs (Sensorboards) bereits eingetragen sind und laufend neue hinzukommen, gibt es die Möglichkeit, verschiedene Sensoren einzeln zu aktivieren. Falls ein Sensorboard benutzt wird, dass nicht bei Kombinierten Sensoren zu finden ist, muss jeder Sensor, der auf dem Board verbaut ist, einzeln aktiviert werden.

Als Beispiel: Es wird angenommen, die oben bei IMU-Boards aktivierte 10DOF (MPU6050, HMC5883, MS5611) nicht als kombinierter Sensor definierbar. Deshalb müssten alle Sensoren einzeln aktiviert werden.

/*************************** independent sensors ********************************/
/* leave it commented if you already checked a specific board above */
/* I2C gyroscope */
//#define WMP
//#define ITG3200
//#define MPU3050
//#define L3G4200D
      #define MPU6050       //combo + ACC
//#define LSM330        //combo + ACC

/* I2C accelerometer */
//#define NUNCHUCK  // if you want to use the nunckuk connected to a WMP
//#define MMA7455
//#define ADXL345
//#define BMA020
//#define BMA180
//#define BMA280
//#define NUNCHACK  // if you want to use the nunckuk as a standalone I2C ACC without WMP
//#define LIS3LV02
//#define LSM303DLx_ACC
//#define MMA8451Q

/* I2C barometer */
//#define BMP085
     #define MS561101BA

/* I2C magnetometer */
//#define HMC5843
     #define HMC5883
//#define AK8975
//#define MAG3110

/* Sonar */ // for visualization purpose currently – no control code behind
//#define SRF02 // use the Devantech SRF i2c sensors
//#define SRF08
//#define SRF10
//#define SRF23

/* ADC accelerometer */ // for 5DOF from sparkfun, uses analog PIN A1/A2/A3
//#define ADCACC

Falls man das Sensorboard so eingebaut hat, dass die auf dem Board vorgegebenen Richtung nicht mit der tatsächlichen übereinstimmt, kann dies in der GUI kontrolliert und in der Software umgestellt werden. Man kann die Achsen beliebig negieren oder vertauschen, solange bis der Copter in der GUI immer gleich mit der Auslenkung reagiert, detailliere Anleitung siehe unten, Einstellungen mit der GUI. Deshalb kann man die Orientierung der Sensoren in der Software drehen, sodass sie die Einbaurichtung als Vorne erkennen.

/* enforce your individual sensor orientation – even overrides board specific defaults */
//#define FORCE_ACC_ORIENTATION(X, Y, Z)  {imu.accADC[ROLL]  =  Y; imu.accADC[PITCH]  = -X; imu.accADC[YAW]  = Z;}
//#define FORCE_GYRO_ORIENTATION(X, Y, Z) {imu.gyroADC[ROLL] = -Y; imu.gyroADC[PITCH] =  X; imu.gyroADC[YAW] = Z;}
//#define FORCE_MAG_ORIENTATION(X, Y, Z)  {imu.magADC[ROLL]  =  X; imu.magADC[PITCH]  =  Y; imu.magADC[YAW]  = Z;}

Falls eine Drehung von genau 45° um die YAW-Achse benötigt wird, kann diese auch direkt eingestellt werden.
Beispiel: Man baut seinen Copter in + Bauweise auf und kommt dann drauf, dass man eigendlich doch lieber im X-Modus fliegen würde. Man muss jetzt nicht den gesamten Aufbau ändern, man kann in der Software die Orientierung des Boards ganz einfach um 45° verdrehen, sodass man dann ganz einfach im X Modus fliegen kann (dazu muss noch bei Copter-Typ der X-Copter aktiviert werden).

/* Board orientation shift */
/* If you have frame designed only for + mode and you cannot rotate FC phisycally for flying in X mode (or vice versa)
* you can use one of of this options for virtual sensors rotation by 45 deegres, then set type of multicopter according to flight mode.
* Check motors order and directions of motors rotation for matching with new front point!  Uncomment only one option! */
//#define SENSORS_TILT_45DEG_RIGHT        // rotate the FRONT 45 degres clockwise
//#define SENSORS_TILT_45DEG_LEFT         // rotate the FRONT 45 degres counterclockwise

DIY Quadrocopter – Part4 – ESC Regler vorbereiten

Da ich natürlich beim Herstellen eines Multicopters immer auch auf die Optik schaue, hier mal eine bebilderte Anleitung zum Verschönern. Hier habe ich die Fotos gemacht für einen Quadrocoter der vorn Rot und hinten Schwarz wird. Dementsprechend die Farbgestaltung.

IMG_4587Original Regler aus der Tüte.IMG_4588

Hier sind schon mal die 3,5mm Goldkontaktbuchsen angelötet.IMG_4589

Die Ferritringe kneife ich ab. Benötige ich bei einer 2,4GHz Fernbedienung nicht mehr. Relikt aus der alten 35 MHzZeit.IMG_4590

IMG_4591Die benötigten Zusatzkabel in Rot und Schwarz.IMG_4592 IMG_4599

Entfernen des alten Schrumpfschlauches.IMG_4600

Neue Kabel angelötet bzw. untereinander getauscht.IMG_4601 IMG_4602 IMG_4603

Schrumpfschlauch über die Kontakte und über den kompletten Regler. Ich finde das Ergebnis kann sich sehen lassen.

ESC Regler mit SimonK Software flashen

Warum die Software des Reglers flashen? Es gibt doch Programmierkarten für fast alle Regler zu kaufen mit denen es möglich ist die bestimmte Daten zu verändern. Das ist grundsätzlich richtig nur lassen sich nicht alle Werte ändern. Hier greift die veränderte Firmware die speziell für Multicopter entwickelt wurde.
Die Regelfrequenz z.B. sollte veränderbar sein. Ein SimonK-ESC verarbeitet das 490kHz-PWM-Signal von der Flugsteuerung locker, was ein normaler „Serien-ESC“ nicht schafft (die schaffen das nicht und steigen irgendwann aus).
Die meisten der „Serien-ESCs“ steuern den Motor mit 8kHz an, der geflashte ESC hingegen mit 18kHz. Dadurch entfällt das nervige Sirren/Pfeifen der Motoren und es kommt zu einem lineareren, präziseren Regelverhalten (der ESC sagt dem Motor 18000-mal in der Sekunde, was er tun soll, der Serien-ESC nur 8000-mal).
Die Serien-ESCs haben 125 Stellschritte (d.h. zwischen Vollgas und min. Drehzahl gibt es 125 Schritte, in denen die Drehzahl stufenweise (1/125) erhöht wird), ein geflashter SimonK-ESC hat 800 Stellschritte. Um diese Funktion nutzen zu können, muss der FC jedoch mit einem ATmega 2560 oder einem ATmega32u4 arbeiten, da diese 11 Bit PWM unterstützen (siehe oben).
Vorsicht: nach dem Flashen kann die Programmierkarte NICHT mehr verwendet werden. Dies spielt aber keine Rolle, da in der SimonK-Firmware die wichtigsten Einstellungen enthalten sind (z.B. der Unterspannungsschutz ist deaktiviert, ..)

Fazit ist aber das der Multicopter nach dem Flashen einfach viel genauer und viel feinfühliger zu fliegen ist. Wer einmal den Unterschied geflogen ist, wird nur noch mit geflashten Reglern fliegen.
Es gibt mittlerweile so viele Anleitungen im Netz, das ich hier nur eine kurze bzw. oberflächliche Anleitung für meine immer wieder benutzten 20A Regler vom Chinamann beschreibe.

Was wird benötigt:
IMG_4596– USBasp AVR Programming Device for ATMEL proccessors
Treiber für den USBasp Programmer
– wer nicht löten will nimmt einen Adapter für den Prozessor
– Benötigte Regler ESC 20A
– Nach dem Flashen zum Testen und Regler anlernen einen Empfänger und eine Stromversorgung für den Regler – am besten unter 1A und 7-9V. Damit geht dann nichts schief falls mal die falsche Datei geflasht wurde.IMG_4597

IMG_4595

Das Programm zum Flashen der Software auf den Regler heißt KKmulticopter Flash Tool. Dieses Programm wurde mal zum Flashen von KK Multicopterboards geschrieben und um den Part für die Regler erweitert. Vor dem Flashen kann die aktuellste Firmware durch Klick auf einen Button direkt heruntergeladen werden.
Hier findet Ihr die Seite bzw hier gleich das momentan aktuelle Programm.
Das Programm benötigt eine installierte Java auf dem PC.
So, nun geht es aber loskkmulticopterflashtool_0.76..

Entweder je nach System die 32 oder 64Bit Variante starten.kkMulticopter Flash Tool 0.76 beta 1 - online

So sieht die unveränderte Oberfläche aus.kkMulticopter Flash Tool 0.76 beta 1 - online_2

Im Bild sind die Änderungen zu sehen. Unter Programmer den USBasp von Fischl auswählen. Bei Controller ATmega8 plus Bootloader. Jetzt noch einmal kurz auf den Button mit den Orange/Grünen Pfeilen zum aktualisieren klicken. Nun hat man die Möglichkeit das passende Hex File BS N-FET und BS N-FET V2013-09…auszuwählen.
Das war es mit den Einstellungen. Nun wird der Adapter angesetzt:

IMG_4593IMG_4594Nun nur noch mit einem Klick auf die grüne Kugel starten.kkMulticopter Flash Tool 0.76 beta 1 - online_3

Wenn alles geklappt hat sieht das Ergebnis dann so aus.