HF-Generator und Morsegerät        


Elektronik-Labor  Lernpakete  Projekte  HF  



Mit dem RPi Pico und seinen PWM-Einheiten lassen sich brauchbare Hochfrequenz-Signalgeneratoren bauen. Damit kann man Empfänger testen, Frequenzskalen kalibrieren und auch Sender und Empfänger steuern. Für höchste Genauigkeit einer Ausgangsfrequenz von 10 MHz muss man die verwendete Systemfrequenz beachten. Im Normalfall verwendet MicroPython die Taktfrequenz 125 MHz, die über eine PLL und Nachteiler von der Quarzfrequenz 12 MHz abgeleitet wird. Wählt man aber ein ganzzahliges Vielfaches von 10 MHz, bekommt man genauere und reinere Signale. Hier wird  mit  machine.freq(80000000) eine Taktfrequenz von 80 MHz gewählt. Alle PWM-Frequenzen entstehen durch ganzzahlige Teilung von 80 MHz.


#HFgen.py Generator und Eichmarkengeber

from machine import Pin, PWM, Timer
import time

machine.freq(80000000)

pwm0 = PWM(Pin(0))
pwm0.freq(10000000) #10 MHz
pwm0.duty_u16(32000)

pwm1 = PWM(Pin(2))
pwm1.freq(1000000) #1 MHz
pwm1.duty_u16(5000)

pwm2 = PWM(Pin(4))
pwm2.freq(100000)  #100 kHz
pwm2.duty_u16(5000)

 
An GP0 entstehen 10 MHz. Hier wurde bei einem Pico eine Abweichung von nur 3 Hz gemessen. Das Signal lässt sich zur Überprüfung von Frequenzzählern verwenden. Zwei weitere Signale mit 1 MHz und 100 kHz dienen als Eichmarken. Die PWM-Impulse wurden dazu stark verkürzt. Während ein symmetri-sches Rechtecksignal nur ungerade Oberwellen besitzt, die mit steigender Ordnungszahl schwächer werden, liefern die kurzen Impulse auch gerade und ungerade Oberwellen bis zu sehr hohen Frequenzen. Man erhält damit einen Lattenzaun mit Signalen im Abstand 1 MHz bzw. 100 kHz, die im ganzen Kurzwellenbereich bis mindestens 30 MHz empfangen werden können. Damit lassen sich Empfänger überprüfen und ihre Skalen justieren.


Morsegerät im 80m-Band

Kleine Sender im Kurzwellenbereich verwenden oft einfache Quarzoszillatoren, wobei allerdings oft ein teurer Spezialquarz gebraucht wird. Will man diesen programmierbaren HF-Generator für einen Sender einsetzen, sollte man eine Frequenz wählen, die sich durch ganzzahliges Dividieren aus einer glatten Frequenz zwischen 12,000 MHz und  125.000 MHz ableiten lässt. Hier wurde die Frequenz 64 MHz / 18 = 3,555555 MHz eingestellt, die im CW-Bereich des 80-m-Amateurfunkbands liegt und sich für QRP-Sender eignet.


#HFgen2.py 3,555 MHz, 80 m

from machine import Pin, PWM, Timer
import time

machine.freq(64000000)

pwm0 = PWM(Pin(0))
pwm0.freq(3555000) #3555 kHz
#pwm0.freq(711000) #711 kHz
pwm0.duty_u16(33767)


Für einen ersten Test reicht es, einen Draht an GP0 anzuschließen, der als Berührungskontakt dient. Durch eine Berührung mit dem Finger wird der eigene Körper zu einer Antenne. Das Signal wird dann laut und deutlich in einem CW-Empfänger wie z.B. dem 80m-Direktmischer hörbar. Der Kontakt kann direkt als Morsetaste verwendet werden, um Texte zu übertragen.



Das Gerät kann als einfacher Morsegenerator zum Beispiel in Amateurfunk-Kursen verwendet werden, wobei der Einsatz üblicher Kurzwellenempfänger ein zusätzlicher Anreiz ist. Allerdings sollte in diesem Fall ein wirksames Tiefpassfilter zur Unterdrückung unerwünschter Oberwellen angefügt werden.

 


   
 





AM-Generator und Morsedekoder



Dieses Morsegerät ist zugleich ein Übungsgerät mit Morsetaste und Mithörton und ein Morse-Decoder, der den gemorsten Test erkennt und an den PC sendet. Auf der Steckplatine gibt es einen Taster als einfache Morsetaste. Noch besser kann hier eine richtige Morsetaste angeschlossen werden.
Das Programm enthält eine Zeichentabelle mit allen Zeichen, die in der Reihenfolge der erkannten Morsezeichen geordnet sind. Ein E besteht nur aus einem Punkt und wird an der Stelle 2 (00000010) der Tabelle. Ein T besteht aus einem Strich und steht an der Stelle 3 (00000011). Der Morsecode besteht aus Nullen für Punkte und Einsen für Striche. Zusätzlich ist eine 1 vorangestellt, um den Anfang der unterschiedlich langen Zeichen zu markieren.

Die Töne werden über ein PWM-signal mit 700 Hz gebildet. Das Programm misst die Tonlängen und die Pausenlängen und speichert kurze Töne als 0 und lange Töne als 1. An einer längeren Pause wird erkannt, dass ein Zeichen beendet ist. Dann kann mit dem dekodierten Zeichen die entsprechende Position der Zeichentabelle ausgelesen werden.

Die Morsegeschwindigkeit wird in Buchstaben pro Minute gemessen und ist hier mit BPM=60 angegeben. Daraus wird die Punktlänge berechnet. Bei 60 BPM hat jeder Punkt eine Länge von 100 ms und ein Strich von 300 ms. Die Pausen innerhalb eines Zeichens haben 100 ms, die zwischen wie Wörtern haben 300 ms. Die Geschwindigkeit kann leicht angepasst werden, indem man z.B. BPM=90 setzt.

#CW1.py
from machine import Pin, Timer, PWM
import time
import array

machine.freq(64000000)
pwm0 = PWM(Pin(0))
pwm0.freq(700)     #700 Hz
#pwm0.freq(3555000)     #3555 kHz
pwm0.duty_u16(0)
p15 = Pin(15, Pin.IN, Pin.PULL_UP)

x = array.array ('i',[32,32,69,84,73,65,78,77,83,85,82,87,68,75,71,79,72,86,70,32,76,32,80,74,66,88,67,89,90,81,32,32,53,52,32,51,32,32,32,50,32,32,32,32,32,32,32,49,54,32,32,32,32,32,32,32,55,32,32,32,56,32,57,48])
bpm=60
dot= 100*60/bpm

while (True):
    cw=1
    d=1
    while(cw):
        while(p15.value()):
            pwm0.duty_u16(0)
            time.sleep(0.002)
        t=0
        while(p15.value()==0):
            pwm0.duty_u16(20000)
            time.sleep(0.002)
            t=t+2

        d=d*2
        if(t>(2*dot)):
            d=d+1
        t=0
        while(p15.value() and t<(2*dot)):
            pwm0.duty_u16(0)
            time.sleep(0.002)
            t=t+2
        if t>=(2*dot):
            if d>63:
                d=1
            print(chr(x[d]), end='')
            cw=0
        t=0   
        while(p15.value()):
            time.sleep(0.002)
            t=t+2
        if t>=(2*dot):
            print(" ", end='')
            cw=0

 

An den PWM-Ausgang kann ein hochohmiger Lautsprecher oder ein Kopfhörer mit Vorwiderstand angeschlossen werden. Für erste Tests reicht der Taster, aber für echte Übungen sollte eine Morsetaste angeschlossen werden. Das Gerät eignet sich nicht nur für erste Übungen, sondern auch zur Überprüfung der eigenen „Handschrift“. Werden die Pausenlängen richtige eingehalten, oder werden Zeichen verschmiert? Die Ausgabe auf dem Bildschirm zeigt alle Schwächen. Das Bild zeigt einen dekodierten Morsetext, in diesem Fall einen typischen allgemeinen Anruf (CQ-Ruf) aus dem Amateurfunk. Hier wurde eine Morsetaste verwendet.



Statt eines Mithörtons kann man auch gleich ein HF-Signal ausgeben. Weil hier ein PWM-Signal erzeugt wird, lässt sich die Frequenz mit einer kleinen Änderung in den HF-Bereich verschieben, in diesem Fall in das 80m-Band. Der Ton kommt dann aus dem eigenen Empfänger.

pwm0.freq(3555000)     #3555 kHz



Analoge Amplituden-Modulation



Amplitudenmodulation wird vor allem von Rundfunksendern im Lang- Mittel- und Kurzwellenbereich verwendet. Allerdings sind in vielen Ländern bereits alle AM-Sender abgeschaltet. Wenn man ein schönes altes Röhrenradio besitzt und den angenehmen Klang dieser alten Geräte schätzt, kann ein eigener kleiner AM-Sender diese Lücke schließen.

#HFgen2.py 711 kHz, Mittelwelle

from machine import Pin, PWM, Timer
import time

machine.freq(64000000)

pwm0 = PWM(Pin(0))
pwm0.freq(711000) #711 kHz
pwm0.duty_u16(33767)


Hier wird der HF-Rechteckgenerator 711 kHz umgestellt. Mit einer Diode und einem Spanungsteiler wird die Amplitude im Ruhezustand halbiert. Eine zugeführte NF-Wechselspannung moduliert dann die Betriebsspannung und damit die Amplitude. Man erhält auf diese eine sehr saubere Modulation und einen guten Klang, der dem der alten AM-Rundfunksender nicht nachsteht.
 
 

Um Oberwellen zu dämpfen wird ein Tiefpassfilter mit einem Kondensator von 1000 pF angefügt. Die eigentliche Antenne ist eine Drahtschleife mit einem Durchmesser bis zu einem Meter, die nahe an der Ferritantenne des Radios platziert wird. Die abgestrahlte Leistung und die Reichweite sind so gering, dass der kleine Sender alle gesetzlichen Bestimmungen einhält.


AM-Automatiktaste



Eine automatische Morsetaste (EL-Bug) besitzt zwei Kontakte, einen für Punkte und einen für Striche. Eine elektronische Steuerung macht daraus perfekte Morsezeichen. Punkt-, Strich- und Pausenlängen innerhalb eines Zeichens werden genau eingehalten. Bei der so genannten Squeeze-Taste kann man Punkte und Striche gemeinsam drücken und erhält dadurch eine Punt-Strich-Folge. Einige Zeichen wie zum Beispiel das C (-.-.) kommen dadurch mit weniger Bewegung aus. Mit einer Automatiktaste kann ein geübter Funker wesentlich schneller morsen als mit einer konventionellen Morsetaste.
Hier wird eine automatische Morsetaste mit zwei Kontakten gebildet, die auch den Squeeze-Betrieb ermöglichen. Der Ablauf ist ganz einfach: Man fragt in einer Endlosschleife zwei Taster ab. Wenn der eine gedrückt ist, wird ein Punkt erzeugt, wenn der andere gedrückt ist ein Strich. Falls beide gedrückt bleiben, ergibt sich eine Punt-Strich-Folge.

#CW2.py AM-ELBUG 711 kHz
from machine import Pin, Timer, PWM
import time

machine.freq(64000000)
pwm0 = PWM(Pin(0))
pwm0.freq(711000) #711 kHz
#pwm0.freq(700)
pwm0.duty_u16(20000)
p8 = Pin(8, Pin.IN, Pin.PULL_UP)
p10 = Pin(10, Pin.IN, Pin.PULL_UP)
p13 = Pin(13, Pin.IN, Pin.PULL_UP)
p15 = Pin(15, Pin.IN, Pin.PULL_UP)


bpm=60
dot= 50*60/bpm

while (True):
    if(p8.value()==0):
        for t in range (dot):
            pwm0.duty_u16(0)
            time.sleep(0.001)
            pwm0.duty_u16(20000)
            time.sleep(0.001)
        time.sleep(dot*0.002)
       
    if(p15.value()==0):
        for t in range (3*dot):
            pwm0.duty_u16(0)
            time.sleep(0.001)
            pwm0.duty_u16(20000)
            time.sleep(0.001)
        time.sleep(dot*0.002)

Die PWM-Ausgabefrequenz ist auf 711 kHz eingestellt, also in den Mittelwellenbereich. Ein normales Mittelwellenradio kann allerdings keinen unmodulierten Träger (continuous wave, CW) hörbar machen, weil ein Überlagerungsoszillator (BFO) fehlt.  Deshalb wird hier ein AM-Signal gebildet. Der Träger wird im Abstand einer Millisekunde abwechselnd ein- und ausgeschaltet. Dabei entsteht ein aufmodulierter Ton von 500 Hz.  Wichtig ist, dass im Ruhezustand der Träger eingeschaltet bleibt. Damit steuert die ALC im Radio die Empfindlichkeit herunter und unterdrückt das Rauschen im Radio.

Die Schaltung und der Aufbau der Antenne entspricht weitgehend dem des kleinen AM-Senders. Weil aber die Modulation diesmal per Software erzeugt ist, braucht man keinen Modulator. Der Widerstand von 1 kΩ reduziert den Antennenstrom, sodass mit einer Antennenschleife von einem Meter Durchmesser die gesetzlichen Grenzwerte eingehalten werden. Der Kondensator von 1000 pF parallel zur Schleife schwächt die Oberwellen.

Dieses einfache Mose-Übungsgerät erzeugt einen gut hörbaren Klang im Radio. Die drahtlose Übertragung erhöht den Reiz der Übungen. Wenn man die Drahtschleife etwas weiter vom Radio platziert, bleiben ein Restrauschen und eventuell Reste anderer Sender hörbar. Das macht die Sache noch realistischer. Möglich ist auch die Verwendung von zwei Picos mit eigenen Antennen, sodass zwei Personen einen regulären Funkverkehr üben können.





Elektronik-Labor  Lernpakete  Projekte  HF