Equipment

“Paddy” – Steuerung eines CW Transceivers mit Arduino

Ich möchte hier ein kleines Projekt beschreiben, mit dem ich vor einigen Wochen begonnen habe. Die Idee dafür kam mir als ich am Internet eine Beschreibung des Selbstbau-KW-Transceivers “Minima” von Ashhar Farhan, VU2ESE, fand. Dieser sehr einfach gehaltene Allband-Transceiver verwendet einen Arduino zur Steuerung, und da vor allem zur Kontrolle des VFOs, für welchen ein si570 von Silicon Labs verwendet wird, und der über einen I²C seriellen Bus gesteuert wird.

Besonders interessant fand ich Farhans Methode zur VFO-Steuerung: er verwendet nicht den im kommerziellen Bereich vorherrschenden Drehimpulsgeber als VFO-Knopf, sondern ein Potentiometer – in Mittenstellung (plus minus ein paar Grad) ändert sich die Frequenz nicht, dreht man das Poti nach links, beginnt sich die Frequenz nach unten zu ändern, und zwar umso schneller, je weiter man nach links dreht. Nach rechts aus der Mitte ändert sich analog die Frequenz nach oben. Um den VFO zu stoppen, dreht man entweder wieder in die Mittenstellung, oder drückt einen Taster.

Im Vergleich zum Drehgeber bietet das den Vorteil, dass man sehr rasch große Frequenzveränderungen erreichen kann, man daher keinen Bandumschalter oder kein Steptaste braucht, um z.B. in Megaherzschritten abzustimmen. Billig ist es natürlich außerdem (wobei Drehgeber heutzutage auch nichts mehr kosten).

Die Sache hat allerdings auch einen gewaltigen Nachteil (was manche Nachbauer dazu veranlasst hat, doch wieder zum Drehgeber zurückzukehren): es ist nicht so einfach, den VFO schnell zu stoppen, wenn man ein interessantes Signal hört – das Zurückdrehen in die Mittenstellung geht nicht so schnell, da ist der VFO schon längst über das Ziel hinausgeschossen. Auch das Drücken des zur Stopptaste umfunktionierten Push-Buttons braucht seine Zeit, ausser man hat den Finger schon drauf liegen.

Ich hab mir nun Gedanken gemacht, wie man so eine VFO Steuerung machen könnte, die den Nachteil des Potis vermeidet, dabei aber den gleichen Vorteil gegenüber einem Drehgeber hat, und habe schließlich die Idee gehabt, das mit zwei Drucksensoren zu realisieren (FSR – force sensitive resistor), einen zum Abstimmen der Frequenz nach unten und einen nach oben. Geringer Fingerdruck soll eine ganz langsame Frequenzveränderung bewirken, zur Feinabstimmung, und größerer Druck den VFO mit großer Geschwindigkeit über die Frequenzen “jagen”. Da man zum Stoppen nur den am Sensor liegenden Finger wegbewegen muss, sollte das auch recht flott und ohne Verrenkungen gehen.

Erste Versuche mit einem solchen Sensor verliefen recht erfolgversprechend, und so wurde ein funktionsfähiger Prototyp aufgebaut – das ganze Projekt nannte ich “Paddy” (da, wie wir gleich sehen, ein “Paddle” als Vorbild diente).

IMG_2808
Abb. 1 – linker Drucksensor, darunter Folientaster mit LED
IMG_2807
Abb. 2 – Konstruktion des Paddles. Links und rechts des vertikalen Halters für die Drucksensoren sieht man die beiden Taster.

Ich habe dazu die zwei Sensoren auf einer kleinen Holzkonstruktion aufgeklebt (für die Erstellung einer Produktionsversion wäre ein 3D-Drucker gut geeignet!) und mir dabei die Form eines Morsepaddles zum Vorbild genommen (Abb. 1 und 2), sodass man mit Daumen und Finger den VFO  bequem verstimmen kann. Und habe dabei natürlich gleich noch eine Idee gehabt: man müsste dieses Ding doch auch tatsächlich als Morsepaddle verwenden können?!

IMG_2806
Abb. 3 – “Laboraufbau” des Gerätes. Oben links Breadboard mit Arduino (und – kaum zu erkennen – einem Miniaturlautsprecher für den Morse Sidetone), darunter der Oszillatorbaustein, links vorne das Display, rechts das Paddle.

Mein Laboraufbau umfasst bisher folgende Komponenten (Abb. 3): einen Arduino Micro auf einem Breadboard, das sonst außer ein paar Widerständen nur einen Miniaturlautsprecher enthält, als programmierbaren VFO ein Breakoutboard von Adafruit mit dem si5351A von Silicon Labs (dieser Chip enthält gleich drei Oszillatoren, so dass man damit auch eine programmierbare BFO Frequenz erzeugen kann), ein billiges  vierzeiliges LCD Display (mit einem ” I²C backpack” Interface von Adafruit, so dass man auch das Display über den  I²C-Bus ansteuern kann – man braucht dann nicht so viele I/O-Ports am Arduino und auch der Drahtverhau wird etwas weniger), und schließlich mein drucksensitives Paddle, dem noch zwei Pushbuttons und eine LED zur Statusanzeige spendiert wurden. Das alles wurde mittels UHU Patafix Knete auf einem echten “Breadboard” (Schneidbrett) aus Glas “befestigt”.

Jetzt musste “nur mehr” programmiert werden! Ich implementierte 9 logische VFOs (eine sehr willkürliche Zahl – aber es gibt ja derzeit neun für uns zugelassene Kurzwellenbänder, so dass man jeden VFO in einem dieser Bänder stehen lassen kann), zwischen denen man mit einem der Taster rasch umschalten kann. Jeder VFO kann in 10 Hz-Schritten (möglich wären auch 1 Hz, ja sogar 1/10 Hz-Schritte) über den gesamten Kurzwellenbereich abgestimmt werden, wobei die Durchstimmgeschwindigkeit je nach Druck auf den Sensor zwischen ca 80 Hz/sec und 6 MHz/sec variiert werden kann (d.h. der gesamte Kurzwellenbereich kann in unter 5 Sekunden durchgestimmt werden).

Außerdem wurde für jeden logischen VFO die Möglichkeit des Split-Betriebes vorgesehen, d.h. Sende- und Empfangsfrequenz können voneinander (beliebig) abweichen, wobei auch Tx- und Rx-Frequenz rasch getauscht werden können, aber auch zwischen Gleichwellenbetrieb und Splitbetrieb (mit dem zuletzt eingestellten Versatz) rasch gewechselt werden kann.

IMG_2811
Abb. 4 – Display. Oberste Zeile: Name das VFOs (hier gerade E) und (Rx) Frequenz. Dritte Zeile: Modus des Morsegebers, Geschwindigkeit und Tastenpolarität (hier gerade: links Striche, rechts Punkte). In der zweiten Zeile steht bei Splitbetrieb die Tx Frequenz, die unterste Zeile wird zur Ausgabe für den Morsedecoder verwendet.

Das funktioniert alles soweit sehr zufriedenstellend.

Es wurde dann noch ein Morsegeber programmiert, damit man das Paddle auch für den CW Sendebetrieb verwenden kann. Dazu wird mit einem der Taster zwischen Abstimm-Modus und Morsegeber-Modus umgeschaltet, der gerade aktuelle Modus wird mit der LED am Paddle angezeigt.

Die größte Herausforderung bei der Verwendung als Morsegeber war es, exakte Ein- und Ausschaltflanken zu definieren (vergleichbar dem Entprellen mechanischer Schalter), da natürlich der gemessenen Druck relativ “langsam” zu- bzw. abnimmt (Daumen und Finger sind weich, und so bildet sich der Druck eben langsam auf). Es geht dabei natürlich nur um Millisekunden, aber für einen Morsegeber sind auch 20 ms schon viel, wenn man höhere Gebegeschwindigkeiten sauber erreichen will. Da liegt sicherlich bislang der größte Nachteil dieser Methode: ein viel größeres Tempo als 25-30 wpm (125 – 150 Buchstaben pro Minute) lässt diese Art des Paddles derzeit kaum zu – da ist also noch Raum für Verbesserungen (ein paar Ideen für weitere Versuche habe ich schon – ich bin selber allerdings ohnedies weit von solchen Geschwindigkeiten entfernt, hi!).

Implementiert wurde beim Morsegeber bisher Folgendes: Betriebsarten Iambic A und B (sowie improved Curtis Mode B), Ultimatic-Modus (der leider etwas in Vergessenheit geraten ist, aber eigentlich etwas effizienter ist als der Iambic Modus). Die Geschwindigkeit kann – ebenfalls über das Paddle – eingestellt werden, auch kann die Polarität umgestellt werden (Punkte links oder rechts). Es ist aber auch die Verwendung als Sideswiper bzw. als “normale” Morsetaste (mit allerdings waagrechter Anordnung) vorgesehen!

Alle Einstellungen (sowohl der VFOs als auch des Morsegebers) können im EEPROM des Arduino permanent gespeichert werden und gehen damit beim Abschalten nicht verloren.

Da ich am Display (sieh Abb. 4) noch genug Platz hatte, habe ich auch einen Morsedecoder implementiert, der die im Iambic oder Ultimatic Modus gegeben Zeichen im Klartext am Display anzeigt – eine Erweiterung zum Darstellen von im Rx empfangenen Morsezeichen ist natürlich schon angedacht (was für CW Anfänger – und vielleicht nicht nur für diese – sicherlich seinen Reiz hat).

Ursprünglich meinte ich, für den Morsegeber und den Decoder schon vorhandene Software verwenden zu können – im Laufe meiner Experimente kam ich davon ab, da alles was ich fand nicht meine Erwartungen an die Funktionalität erfüllte – es blieb also nur übrig, alles selbst zu programmieren (“alles” stimmt nicht ganz – für die Steuerung des si5351 gibt es eine gute Library von Jason Milldrum, NT7S, und auch sonst wurden diverse Standard Arduino Libraries zum Entprellen der Taster und zur Steuerung des LCD Displays verwendet).

Alle bisher implementierten Features werden alleine durch das Paddle mit den zwei Drucksensoren und den zwei Tastern bedient!

Funkamateur seit 1967 (Lizenzprüfung ohne Morsen) bzw. 1968 (Morseprüfung). 1st QSO 20.7.1968. Nach vielen sehr interessanten Berufsjahren in IT und Informationssicherheit (in sehr internationalem Umfeld) nun im Ruhestand, wo mehr Zeit bleibt für die diversen Hobbies. Neben dem Amateurfunk sind das u.a. Photographie, Malen, Singen, Reisen, Camping & Wandern.

0 Kommentare zu ““Paddy” – Steuerung eines CW Transceivers mit Arduino

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*

banner