Home 
Stabilisier. 
Kurs/Höhe 
Flieger 
PPM-Dec. 
Haupt-CPU 
Sensoren 
GPS 
Downlink 
Bodenst. 

 

 

Der PPM-Decoder stellt die Schnittstelle zwischen den einzelnen Fernsteuerkomponenten (Servos, Motorregler und Empfänger) und dem Hauptcontroller dar. Beim Design wurde besonderer Wert darauf gelegt, dass für den Piloten zu jedem Zeitpunkt die Möglichkeit besteht, auf manuelle Steuerung umzuschalten.

Die Abbildung zeigt den Abgriff des PPM-Signals in einem Schulze alfa 435 Empfänger:

 

 

Decodierung des im Empfänger abgegriffenen PPM-Signals:

Das PPM-Signal wird direkt auf den Input Capture Pin des Mega 8 gegeben. Sobald an diesem Pin eine steigende Flanke detektiert ist, wird der aktuelle Stand von Timer1 in das entsprechende Input Capture Register (ICR1) geschrieben und ein Interrupt ausgelöst. In der entsprechenden Interruptroutine wird die Differenz aus dem neuen Wert im ICR1 und dem der letzten Flanke berechnet. Diese Differenz ergibt die jeweilige Periodendauer für die einzelnen Servostellungen. Die  Synchronisationspause wird genutzt, um die einzelnen Werte den Servos richtig zu zuordnen. Der Takt des Prozessors und der Timer-Vorteiler sind so gewählt, dass die Servopositionen mit 8 Bit Auflösung erfasst werden.

Erzeugung der Servoimpulse für 6 Servos:

Zur Erzeugung der Servoimpulse wird der Output Compare Interrupt des Timer1 benutzt. Dieser wird ausgelöst, sobald Timer1 den Wert des Output Compare Register erreicht hat. In der Interruptroutine werden nacheinander die entsprechenden Bits von PortD gesetzt bzw. gelöscht und ein neuer Wert in das Output Compare Register geschrieben. Dieser Wert errechnet sich aus der Summe des aktuellen Timerstandes und der gewünschten Servoposition. Auch die Ausgabe der Servoimpulse erfolgt mit 8 Bit Auflösung. Sind alle 6 Impulse generiert worden, wird die oben genannte Synchronisierungspause eingefügt.

Speichern der Mittelpositionen der Servos:

Da bei einem Flugzeug z.B. durch leichten Verzug der Tragflächen oder ungenaues Auswiegen des Schwerpunktes ein leichtes Verstellen der Ruder notwendig ist (Trimmung), wird mit Hilfe von Schiebern am Fernsteuersender die Mittelpositionen der Servos solange justiert, bis das Flugzeug geradeaus fliegt und kein ständiges Korrigieren notwendig ist. Wird bei eingeschaltetem Sender und losgelassenen Knüppeln der Taster S2 gedrückt, wird die aktuelle Position als Mittelposition im Controller gespeichert. Um diesen Vorgang nicht bei jedem Flug wiederholen zu müssen, wird dies im EEPROM gespeichert und bei jedem Einschalten wieder ausgelesen.

Fehlererkennung im PPM-Signal:

Fehler im PPM-Signal werden erkannt, indem die Impulslängen auf Plausibilität überprüft werden. Ist z.B. die Zeit zwischen zwei steigenden Flanken größer als 2,3ms oder kleiner als 0,7ms, wird ein Fehler ausgelöst. Dies hat zur Folge, dass LED4 leuchtet und die Steuerung vom Hauptcontroller übernommen wird. Sind wieder 5 fehlerfreie Frames des PPM-Signals empfangen worden, wird der Fehler gelöscht und wieder auf manuelle Steuerung umgeschaltet.

Umschalten zwischen manuellem und automatischem Betrieb:

Die Umschaltung zwischen manueller Steuerung und autonomem Flug erfolgt durch einen Schalter am Sender, dessen Stellung genauso wie die der Knüppel im PPM-Signal übertragen wird. Alternativ kann auch der Sender ausgeschaltet werden, dadurch wird wie oben beschrieben, ein Fehler ausgelöst.

SPI-Schnittstelle zur Kommunikation mit dem Haupt-Controller:

Die Kommunikation mit dem Haupt-Controller erfolgt über eine Hardware-SPI-Schnittstelle, wobei der PPM-Decoder als Slave konfiguriert ist. Diese Schnittstelle wurde gewählt, da sie die Möglichkeit bietet, Daten durch ihren synchronen Aufbau schnell und sicher auszutauschen. Der Hauptvorteil liegt in der einfachen Implementierung: Sobald Slave Select auf low-Pegel angenommen hat, werden 6 Bytes vom Master übertragen, wobei jedes für eine Servoposition steht:

  • 0 Vollausschlag eine Richtung
  • 127 programmierte Mittelstellung
  • 255 Vollausschlag andere Richtung

Mit dem 6. Byte wird auch ein Byte zurück zum Master übertragen. Dieses hat bei ausgelöstem Fehler den Wert 1, ansonsten 0. Der Empfang läuft in einer Interruptroutine ab.