Software2

Es wurde für daedalusPilot auf die neueste MultiWii-Version 2.3 sowie auf die neueste MultiWii-GUI umgestiegen. Beides kann auf dieser Seite heruntergeladen werden.

Heartbeat (FailSave-Mode)

Falls der Atmega2560 nicht mehr einwandfrei funktioniert, soll automatisch der Atmega328 übernehmen. Um dies zu bewerkstelligen, sendet der Atmega2560 ein kontinuierliches Heartbeat-Signal an den Atmega328 (erkennbar an der HearbeatLED, digitalPIN 4).

Atmega2560:

Daher wird in MultiWii.cpp in der loop()-Funktion bei jedem Durchlauf die Funktion heartbeat aufgerufen.

void heartbeat(int hPin, float hDelay) {
   if(millis()-HeartBeatPrevMillis > hDelay) {
     HeartBeatState = !HeartBeatState;
     digitalWrite(hPin, HeartBeatState);
     HeartBeatPrevMillis = millis();
   }
}

Das Zeitintervall kann mit HeartBeatDelayTime eingestellt werden.

Atmega328:

Wird kein Hearbeat-Signal mehr empfangen, so soll der Atmega328 den Multiplexer umschalten und die Steuerung des Quadrocopters übernehmen. Der Select-Pin des MUX wird über A0 gesteuert. Zu Beginn der Initialisierung wird dieser Auf LOW gesetzt, wodurch die Motoren zu Beginn mit dem Atmega2560 angesteuert werden können. Wird kein Signal mehr empfangen wird der MUX-Pin auf HIGH gesetzt.

Daher wird in der loop-Funktion folgendes ergänzt:

if(digitalRead(HeartBeatPin) != HeartBeatState) {
   HeartBeatState = !HeartBeatState;
   HeartBeatPrevMillis = millis();
}
if(millis()-HeartBeatPrevMillis > MaxHeartBeatDelayTime) {
   /// FAILSAVE \\\
   digitalWrite(MUX_Select_Pin, HIGH); 
}

Damit die Steuerung des Quadrocopters sofort bei Umschalten des MUX übernommen werden kann, wird am Ende der Setup-Funktion die Funktion go_arm() aufgerufen.

Gimbal

Da die Standardpins für die Kamerasteuerung nicht herausgeführt wurden, müssen andere Pins verwendet werden. Ich habe mich für A5, A6 und A7 entschieden. Daher muss def.h durch folgendes ergänzt werden:

#define SERVO_1_PINMODE            pinMode(34,OUTPUT);pinMode(44,OUTPUT);pinMode(A5,OUTPUT); // TILT_PITCH - WING left
#define SERVO_1_PIN_HIGH           PORTC |= 1<<3;PORTL |= 1<<5;PORTF |=1<<5;
#define SERVO_1_PIN_LOW            PORTC &= ~(1<<3);PORTL &= ~(1<<5);PORTF &= ~(1<<5);
#define SERVO_2_PINMODE            pinMode(35,OUTPUT);pinMode(45,OUTPUT);pinMode(A6,OUTPUT); // TILT_ROLL  - WING right
#define SERVO_2_PIN_HIGH           PORTC |= 1<<2;PORTL |= 1<<4;PORTF |=1<<6;
#define SERVO_2_PIN_LOW            PORTC &= ~(1<<2);PORTL &= ~(1<<4);PORTF &= ~(1<<6);
#define SERVO_3_PINMODE            pinMode(33,OUTPUT); pinMode(46,OUTPUT);pinMode(A7,OUTPUT); // CAM TRIG  - alt TILT_PITCH
#define SERVO_3_PIN_HIGH           PORTC |= 1<<4;PORTL |= 1<<3;PORTF |=1<<7;
#define SERVO_3_PIN_LOW            PORTC &= ~(1<<4);PORTL &= ~(1<<3);PORTF &= ~(1<<7);

 

Da sich die Kamerastabilisierungseinstellungen in "config.h" nicht richtig einstellen lässt, wurde die Datei "output.cpp" manuell angepasst. Dabei wird sichergestellt, dass beim Einschalten des Quadrocopters die Kamerastabilisierung automatisch aktiviert wird, ohne dass diese durch die Fernbedienung aktiviert werden muss. 

  #if defined(SERVO_TILT)
    /*servo[0] = get_middle(0);
    servo[1] = get_middle(1);
    if (rcOptions[BOXCAMSTAB]) {
      servo[0] += ((int32_t)conf.servoConf[0].rate * att.angle[PITCH]) /50L;
      servo[1] += ((int32_t)conf.servoConf[1].rate * att.angle[ROLL]) /50L;
    }*/
    servo[0] = 1500 - ((int32_t)30 * att.angle[PITCH]) /50L; // PITCH
    servo[1] = 1550 + ((int32_t)50 * att.angle[ROLL])  /50L; //ROLL
  #endif

 

Im Anhang befinden sich die angepassten Arduino-Codes für die jeweiligen Mikrocontroller, sowie die MultiWii-GUI. Zusätzlich enthält "stabil.mws" die PID-Settings, die mit Hilfe der MultiWii-GUI auf den Quadrocopter geflashed werden.

 

Anhänge:
Diese Datei herunterladen (MEGA.rar)MultiWii Atmega2560[ ]%2014-%04-%04 %1:%Apr%+02:00
Diese Datei herunterladen (MINI.rar)MultiWii Atmega328[ ]%2014-%06-%02 %1:%Jun%+02:00
Diese Datei herunterladen (MultiWiiWinGUI.rar)MultiWii GUI[ ]%2014-%04-%04 %1:%Apr%+02:00
Diese Datei herunterladen (PID_Settings.zip)PID Settings[ ]%2014-%04-%04 %1:%Apr%+02:00