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

Motivation

Klick mich

SwitchProp Encoder Schaltung

Für die Modernisierung unseres RC Modells Schlumpfo 4 wollte ich die unterschiedlichen Rotationsmodi 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 im Modell Strawap adaptierten Multiswitches YaMS ein 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önte 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. Den 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 erkennt das betätigen der zwei Schalter. Der Proportionalanteil wird auch wieder per Software auf die vollen 100% Wegstreckensignal extrapoliert. Eine Einschränkung diese Umsetzung ist es allerding, das nicht 2 oder gar alle 3 Steller gleichzeitig betätigt werden sollten um sicher 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 &Omega und 1 K&Omega 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&Omega gibt habe ich ein Standard 5 K&Omega Drehpoti genutzt, das ich mit 12KOhm 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 Adriano 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 keine weitere Hardware am Decoder und referenziere hierfür wieder auf den YaMS.

Software

SW Komponenten pwmread_rcfailsafe / RcPWMRead

Zum Auslesen und auswerten der RC-PWM Signale nutze ich für den Adriano 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 SwitchPropkanals 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. Zum konfigurieren empfiehlt es sich über #define DEBUG_SP die bedingte Kompilierung die Werteausgabefunktion einzuschalten. Mit Hilfe des Seriellen Monitors lassen sich dann die benötigten Werte anzeigen.
über das Array S_delta werden die Signaldelta der beeiden 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