SwitchProp - Ein RC Encoder/Decoder Modul das einem RC-Proportionalkanal zwei Schaltfunktionen hinzufügt

Klick mich

SwitchProp Encoder Schaltung

Motivation

Für die Modernisierung unseres RC Modells Schlumpfo 4 wollte ich die unterschiedlichen Rotationsmodi und die Steuerung der Drehscheibe auf einem RC Kanal bündeln, damit ich nicht mehr als 4 RC Kanäle über den ESP32 Mikrocontroller auswerten muss. Da hierfür sowohl digitale Ein/Aus Informationen als auch analoge Steuerungsinformationen auszuwerten sind, habe ich in Anlehnung des bereits in unserem Amphibienmodell Strawap adaptierten Multiswitches YaMS einen Encoder/Decoder umgesetzt, der 2 Ein/Aus-Schalter dem Proportionalkanal hinzufügt. Der SwitchProp ist nur ein Teil unseres Modernisierungsprojektes des Schlumpfo 4 mit modularem Softwareaufbau. Daher kann man die benötigten Funktionen recht einfach aus dem Gesamtprojekt heraus kopieren, aber es stellt keinen fertigen Bausatz dar. Trotzdem könnte es auch interessant sein für Besitzer einer 4 Kanal RC Anlagen, dennen zwei Schaltfunktionen fehlen.

Funktionsumfang SwitchProp

Der SwitchProp komprimiert am Sender das verfügbare Wegstreckensignal eines Proportionalkanals auf gut 70% und lässt somit 30% für zwei Schalter übrig. Damit die zwei Schaltfunktionen mit dem Decoder sicher unterschieden werden können ist die Wegstrecke des Zweiten knapp mehr als doppelt so groß, wie die des ersten Schalters. Der Anteile von 10% für den kleineren Wert ist so gewählt um am Decoder ein sicheres erkenne auch bei nicht optimalen RC-Signalstärken zu haben. Der Decoder wertet per Software in einem Mikrocontroller das PWM Signal des Kanals aus und erkennt auf Basis der Signaländerungsgrösse das Betätigen eines der zwei Schalter. Der Proportionalanteil wird auch per Software wieder auf die vollen 100% des Wegstreckensignal extrapoliert. Eine Einschränkung dieser Umsetzung ist es daher, das nicht 2 oder gar alle 3 Steller gleichzeitig betätigt werden dürfen um ein sicheres Erkennen der Änderung zu gewährleisten.

Hardware

Klick mich

SwitchProp Encoder Umsetzung im Sender

RC Sender (Encoder)

Da bei RC-Kanälen die Wegstreckeninformation über zumeist 5 KΩ Widerstände ausgelesen werden ergeben sich die notwendigen Widerstandswerte für die zwei Schalter von 470 Ω und 1 KΩ quasi von selbst. Da die Widerstandswerte jeweils immer gegen Plus oder Minus geschaltet werden benötigen wir, wie auch beim YaMS, 2 polige Schalter und natürlich auch je zweimal die Wiederstände. Da es keine Potentiometer mit 3,5 KΩ gibt habe ich ein Standard 5 KΩ Drehpoti genutzt, das ich mit 12 KΩ parallel verschaltet habe, um den benötigten Wert zu bekommen.

RC Empfänger (Decoder)

Auf der Empfängerseite wird natürlich der Empfänger benötigt, an dem ein Mikrocontroller das PWM Signal des Kanals auswertet und decodiert. Für meine Umsetzung habe ich zuerst einen Arduino Nano genutzt, der das 5 Volt Signal des RC-Empfänger direkt auswerten kann. Im Einsatz ist der SwitchProp allerdings mit einem ESP32 Mikrocontroller, der noch einen Spannungsteiler zur Pegelanpassung benötigt. Da für meine Umsetzung die angedachten Schaltfunktionen innerhalb der Software erfolgen benötige ich hierfür keine weitere Hardware am Decoder und referenziere wieder auf den YaMS. Der Proportionalanteil wird in meinem Modell ja zur Steuerung einer Drehscheibe mithilfe eines Schrittmotors genutzt. Aber natürlich sind auch Ansteuerungen von klassischen Servos oder Fahrtreglern möglich. Beides läst sich bequem per Software über die Arduino Servo oder die ESP32Servo Library erledigen. Beim ESP32 ist dabei aber darauf zu achten, das der Servo oder Fahrtregler über den Empfänger mit Spannung versorgt wird und nur das PWM Signal über den Microcontroller geht.

Software

SW Komponenten pwmread_rcfailsafe / RcPWMRead

Zum Auslesen und auswerten der RC-PWM Signale nutze ich für den Arduino Nano die unter 2. referenzierte Umsetzung von kelvineyeone mit selbstgeschriebenen Zusatzfunktionen, die der RC-Signal-Streuungsprüfung dienen, welche sich mit in der pwmread_rcfailsafe.ino befinden. Für die Nutzung mit einem ESP32 setze ich auf die für diese Architektur passende Umsetzung von TheDIYGuy999, die unter 3. referenziert ist. Diese Funktionen sind in der RcPwmRead.ino zusammengefast. Auch hier habe ich Teile für unseren Strawap entfernt und Zusatzfunktionen eingefügt, die im Bericht zum DualDriveMixer beschrieben sind. Aus der Mainloop (Strawap38MVF_ESP.ino) dieses SW Projektes kann man sich auch die Einbindung der RC-Signalaufbereitung ableiten.

SW Komponente SwitchProp

Da der SwitchProp Decoder nur über Erkennung von Änderungen funktionieren kann braucht er beim Start des Systems eine definierte Referenzstellung. Dies wird in der Datei SwitchProp.ino über die Funktion SP_Calibaration überprüft und über die Konstante C_point definiert. Sie sollte den Wert von RC_in des SwitchProp-Kanals bei Mittelstellung des Potentiometers und beider Schalter auf aus haben. Erst wenn diese Kalibrierung abgeschlossen ist werden die Steller überwacht und Änderungen ausgewertet. Bei RC-Signalabbruch (failsafe) wird eine erneute Kalibrierung notwendig. Daher bietet es sich an den Rückgabewert der Funktion SP_Calibaration oder den Status der Variablen SPcalibrated optisch auszugeben. Hierfür nutze ich gerne RGB-LEDs die über eine Farbcodierung den Status von Modellfunktionen mitteilen.
Zum konfigurieren der anpassbaren Variablen empfiehlt es sich über #define DEBUG_SP die bedingte Kompilierung für die Werteausgabefunktion einzuschalten. Mit Hilfe des Seriellen Monitors der Arduino IDE lassen sich dann die benötigten Werte anzeigen. Über das Array S_delta werden die Signaldelta der beiden Schalter konfiguriert. Da die aufbereiteten Werte der RC-PWM-Signale vom Empfänger im Array RC_in von -1 bis 1 (also 200%) dargestellt werden sollte S_delta Werte in der Nähe von 0.2 und 0.4 haben, um die über die Hardware definierten Verhältnisse abzubilden. Um Bewegungen am proportionalen Wert, der zufällig im Rahmen der Schalterdeltas liegt besser ausfiltern zu können gibt es eine Hysterese zur Erkennung. Um Prell- und Übergangseffekte der Schalter robust auszufiltern ist diese Hysterese gestuft. Die dafür zu konfigurierenden Konstanten lauten S_trigger zum Einstieg der Erkennung und S_range zum verfeinern des Deltas.
Die SW arbeitet mit Erkennungszuständen, die über herunterzählende Semaphoren abgesichert werden. Erst wenn der Zustand über mehrere 20ms RC-Zyklen abgesichert ist, wird die Änderung des Zustandes freigegeben und aktiv. Somit wird bei gleichzeitiger Betätigung von zwei oder drei Stellern am SwitchProp ein fehlerhaftes Schalten verhindert. Über die Werte SP_S_threshold und SP_P_threshold lassen sich diese Totzeiten für Schaltvorgänge und proportionale Änderungen konfigurieren. Der Wert ist hierbei mit 20ms zu multiplizieren um auf die reale Sperrzeit zu kommen.

Referenzierungen

  1. RC Encoder und Arduino basierter Decoder eines Multi Switches:
    Yet another Multi Switch - YaMS von Dirk Wiedemann

  2. Einlesen von RC-Empfänger Signalen über eine Interrupt Routine mit Arduino:
    Read PWM, Decode RC Receiver Input, and Apply Fail-Safe © GPL3+ von kelvineyeone

  3. Einlesen von RC-Empfänger Signalen über Interrupt Routinen mit ESP32 inklusive einer Geräusch und Lichtsteuerung:
    ESP32 RC Sound & Light Controller von TheDIYGuy999