Schon seit längerem in meinem Besitz – das preiswerte SWR-Kreuzzeigerinstrument RX-200. Nun brauchte ich für den Remotebetrieb meines SDR an der Klubstation DF0BAU in Wilthen noch eine Lösung, um den Output und das SWR aus der Ferne überwachen zu können. Es lag also nahe, ein ähnliches Projekt auf Basis eines ESP32-SoC zu starten wie ich das bereits mit meiner XPA125B hier im Home-QTH seit längerem in Betrieb habe, wo ich Leistung messe und die Bandumschaltung der XPA125B damit umgesetzt habe.
Webinterface eines ESP32-SoC, der per WiFi am lokalen Netzwerk verbunden ist und mittels Websockets in Echtzeit die aktuellen Werte wie Leistung oder ausgewähltes Bandfilter der XPA125B zeigt
Umbau und Modifikation des RX-200
Es lag also nahe, für das RX-200 ein ähnliches Prinzip anzuwenden, denn der Code war bereits von mir geschreiben und ausreichend getestet, also leicht zu adaptieren und anzupassen. Also kurzerhand das RX-200 aufgeschraubt und von innen begutachtet und ein paar Umbauten und Erweiterungen vorgenommen.
RX-200 von innen
Neu eingebaut habe ich:
- 5V-Regler für den ESP32 zur Spannungsversorgung
- TRRS-3.5mm Buchse („Klinkenbuchse 4pol.“) zum Herausführen der Spannungen vom Richtkoppler
Das RX-200 hat den Vorteil, das die SWR-Messbrücke getrennt von der Elektronik für das Analoganzeige-Instrument montiert ist.
Außerdem besitzt es einen Spannungsanschluß für 12V, um das Display beleuchten zu können. Diese habe ich gleich genutzt, um einen kleinen Spannungsregler einzubauen, der den ESP32 mit +5V versorgen kann – Platz ist ja genug im Gehäuse des RX-200.
LILYGO T-DISPLAY V1.1
ESP32-SoC mit WiFi/BT und TFT-1.14″-Farbdisplay
4 MB
andere ESP32 können ebenfalls verwendet werden
Es lag also nahe, die beiden Spannungen für vorlaufende und rücklaufende Leistung „anzuzapfen“ und nach außen zu führen.
ESP32 und seine ADC – eine nicht ganz optimale Sache
Leider sind die ADC der ESP32 nicht die allerbesten, vor allen Dingen ist eine Linearität nicht über den gesamten Messbereich gegeben. Auch sind die Messbereiche nicht 0-5V, sondern in etwa 0-3.1V, denn auch die 3.3V können nicht ganz erreicht bzw. gemessen werden.
Eine wesentlich genauere Messung wäre mit einem Zusatzmodul auf Basis des ADS1115, einem 4-Kanal 16bit ADC, möglich. Dieser wird muss dann allerdings per I²C an den ESP32 angebunden werden.
ADS1115-Modul [Analog-Digital-Converter]
– 4-Kanal 16bit ADC
– Anschluß erfolgt per I²C-Bus
– für Messungen bis 5V ist auch eine Betriebsspannung von 5V erforderlich
– kann auch für andere SoC verwendet werden, u.a. auch am Raspberry Pi
Allerdings reicht mir die Genauigkeit der ADC des ESP32 für dieses Projekt völlig aus. Meine Testmessungen nach entsprechender Kalibrierung ergaben eine Abweichung von +/- 2W gegenüber den eingebauten Zeigerinstrumenten des RX-200, was mir für den geplanten Einsatzzweck völlig ausreicht. Auch eine Wiederholgenauigkeit war ausreichend gegeben, zumindest bei dem von mir verwendeten ESP32-TTGO T-DISPLAY v1.1. Andere ESP32-Varianten können möglicherweise
andere (u.U. schlechtere) Ergebnisse liefern.
Die digitale Messung des SWR soll ausserdem ausschließlich per Carrier (= „CW“)-Signal erfolgen, eine Zusatzschaltung bzw. Softwareimplementation mit Sample & Hold (S&H) für PEP habe ich nicht vorgesehen und werde es auch nicht. Das RX200 selbst kann das, die Umsetzung erfolgt jedoch nicht in der Messbrücke selbst, sondern in deren Auswerteelektronik für die Zeigerinstrumente. Ich entnehme allerdings nur die Messspannungen direkt an der Messbrücke und lasse die „Zeigerelektronik“ außen vor.
Eine Beeinflussung der Messergebnisse am Kreuzzeigerinstrument konnte ich nach der Abzweigung der beiden Spannungen für den ESP32 nicht feststellen. Hier die Schaltung, welche ich verwendet habe:
Das RX-200 hat 3 Messbereiche 30W – 300W – 3kW. Für mich ist nur der Messbereich 300W interessant, denn durch das Umschalten ändern sich die Spannungsteiler und damit die Messpannung. Bei ca. 100W war die Messspannung etwas über 3V, deswegen habe ich noch einen 1kOhm-Widerstand eingefügt, bevor die Messpannung weiter verarbeitet wird. Das ergab dann etwa 2,4V, der gemessene Lastwiderstand liegt bei ca. 5kOhm. Damit lässt sich also ein entsprechender Spannungsteiler berechnen. Der max. Input am ADC des ESP32 kann 3.3V (oder besser 3.1V) betragen, wir müssen also unter 3.1V bleiben. Bei 2.4V / 100W passt das, theoretisch erreicht man 3.3V bei 300W. Mangels größerer PA konnte ich das allerdings nicht aus- bzw. nachmessen, durch Änderung der Spannungsteiler liesse sich das aber an höhere Leistungen anpassen.
ESP32 (hier: TTGO T-DISPLAY V1.1) montiert auf dem Deckel des RX-200, weil das Gehäuse ja Metall ist und wir natürlich für WiFi möglichst gute Bedingungen schaffen wollen
Der Einfachheit halber ist der ESP32 auf einer Streifenraster-Leiterplatte verbaut und mittles Abstandshaltern mit dem Gehäuse des RX-200 verschaubt worden
Ich führe also die beiden Spannung Uvorlaufend und Urücklaufend zwei der Analog-Digital-Converter des ESP32 zu und messe die Spannungen mit den ADC. Zwei Kondensatoren mit 100nF gegen GND, möglichst nahe an den ADC-Inputs des ESP32, sorgen an den beiden ADC-Inputs für einen gewissen Schutz vor HF oder sonstigen Störungen auf den zu messenden Gleichspannungen.
Gemessen werden die Eingangsspannungen pro Messung am ADC 16x und dann daraus ein Mittelwert gebildet, das vehindert „Spikes“ bei den Messungen und glättet die Werte etwas, gemessen wird aller 500ms, also 2x pro Sekunde. Das ist hinreichend genau.
Einbindung ins Netzwerk per WiFi mittels Webserver und Websockets
Anhand einer aufgenommenen Messreihe Spannung – Leistung habe ich eine entsprechende Berechnung in die Software implementiert. Die Abweichung zu einem anderen Referenz-SWR-Meter beträgt in meinem Fall lediglich +/- 2W, das ist sicher etwas den Linearitäts-Problemen des ADC eines ESP32 geschuldet, ist aber für meine Zwecke völlig akzeptabel.
Der ESP32 ist per WiFi mit meinem Netzwerk verbunden und es läuft ein kleiner Webserver mit Websockets auf dem ESP32:
Ich „pushe“ also mittels Websockets-Technologie (siehe Darstellung – Websocket benötigt kein Reload der angezeigten Webseite, denn anzuzeigende Werte werden live und in Echtzeit aktualisiert) die gemessenen Werte in den Browser:
Anzeige des RX-200 im Web-Browser
Zum Einsatz kommt auf dem ESP32 folgende zusätzliche Bibliotheken:
- AsynTCP
- ESPAsyncWebServer
- WiFi
- TFT_eSPI (zur Ansteuerung des TFT-Displays des TTGO T-DISPLAY, Achtung – es gibt inzwischen verschiedene Versionen dieser Library TFT_eSPI, ich verwende hier die etwas ältere des Herstellers LILYGO, mit neueren hatte ich bereits einige Probleme. Diese hier funktioniert jedenfalls 100% mit dem T-DISPLAY V1.1)
Entwickelt habe ich das alles mit der Arduino IDE und den entsprechenden ESP32-Erweiterungen von Espressif Systems, die Ausgabe auf dem TFT-Display des ESP32 parallel zum Webinterface ist natürlich nur als Gimmick zu verstehen, hier hatte ich aber gerade einen ESP32 mit Display zur Hand. Notwendig ist es aber nicht, auch die kleineren ESP32, z.B. D1 mini ohne Display, eignen sich natürlich genauso. Wichtig ist WiFi-Unterstützung, aber das haben sie ja (fast) inwischen fast alle, meist in Kombination mit Blutooth.
Fast alle ESP32 besitzen zwei ADC, ADC1 und ADC2. Es ist zu beachten, das der ADC2 bei Aktivierung von WiFi nicht mehr genutzt werden kann ! Das ist leider so „by-design“ dieser ESP32. Schaut also bei der Auswahl der Pins -also den ADC-Inputs, das diese dem ADC1 zugeordnet sind, das lässt sich meistens aus dem entsprechenden Datenblatt entnehmen.
Zu einem späteren Zeitpunkt wird der Quellcode dieses Projekts auf meinem Github-Account veröffentlicht.
Der Umbau war „non-destruktiv“, das Messinstrument kann also weiterhin als Zeigerinstrument genutzt werden, aber zusätzlich ist es eben per Webbrowser via Netzwerk zugänglich, also genau das, was ich im Remote-Betrieb ja letztlich benötige.
Hardware-Upgrade 12.3.2024
Nachdem ich mir wegen einer kleinen Unaufmerksamkeit einen meiner ESP32-D1 mini leider zerschossen hatte (und leider keinen identischen Ersatz mehr hatte), bin ich nochmal auf die Suche nach was Neuem gegangen. Dabei kam mir dieser neue ESP32-S3-Zero von WAVESHARE in die Finger (Preis ca. 11€):
WAVESHARE ESP32-S3-Zero
Wie man im Foto erkennen kann, ist er nicht nur klein, sondern schon fast Miniatur – siehe den Vergleich mit einer MicroSD-Card. Er ist trotzdem voll ausgestattet: WiFi, Bluetooth – also alles was für die Kommunikation mit Netzwerken benötigen und eben schon mit dem neueren ESP32-S3 SoC ausgestattet. Als kleines Gimmick ist eine RGB-LED onboard, die man nach seinen Wünschen über den GPIO21 farbig programmieren kann.
Pinout des ESP32-S3-Zero
Alle Pins lassen sich frei programmieren, also je nachdem, was man nun benötigt, Digital In/Out, ADC, UART, PWM, I2C, I2S oder SPI.
Dieses Stück Miniatur-ESP32 gefiel mir so gut, das ich das RX-200 nochmals ein wenig umgebaut habe und jetzt diesen kleinen Miniatur-ESP32 verwende.
Hier die Installation des RX200 beim Einsatz in der Klubstation DF0BAU, wo es meine PA und den nachgeschaltenen ATU überwacht und fernabgefragt werden kann – also perfekt für den Remotebetrieb meines dortigen zweiten Hermes-Lite 2. Die Beschaltung des ESP32 wie schon beim LILYGO T-DISPLAY bleibt die gleiche.