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