Symmetrischer (und unsymmetrischer)
ferngesteuerter und bezahlbarer
Kilowatt KW AUTOMATIK Antennentuner

Firmware

als Microcontroller benutze ich den STM32F427VGT6. Die Software wurde mit der (auf Eclipse basierenden) STM32 Workbench erstellt.

Wenn man die ZIP Datei entpackt und diesen Ordner dann in der STM32 Workbench als Projektordner angibt, sollte es sofort kompilierbar sein.

Firmware-DOWNLOAD (komplettes Projekt mit sämtliche Quellen für STM32 Workbench, ausgenommen der Quellen des StdPreph_Driver, da diese evt. Copyright haben. Diese lassen sich aber aus der STM32 Workbench leicht selbst herunterladen).

Fertig compilierte Firmware zum flashen: DOWNLOAD

Zur Kontrolle des Tuners gibt es eine PC-Software (unter Linux mit mono laufen lassen), welche die volle Kontrolle, Setup und Überwachung des Tuners ermöglicht. Sie ist in C# mit dem Visual-Studio geschrieben.

PC-Software-DOWNLOAD (komplettes Projekt mit sämtliche Quellen, für Visual Studio)

Fertige EXE Datei: DOWNLOAD (unter Linux mit mono starten)

Überblick:

Der Tuner hat 2 Schnittstellen:

* eine normale serielle RS232 Schnittstelle (12V Pegel, kompatibel mit üblichen USB-Seriell Adaptern am PC)
* eine Icom CIV Schnittstelle

die serielle RS232:

diese wird mit einem PC (bzw. besser noch einem Raspberry PI, Odroid oder ähnlichem) verbunden. Auf dem Computer läuft eine Software, welche vollen Zugriff auf alle Funktionen des Tuners ermöglicht.
Man kann nicht nur den Tuning-Prozess starten, sondern man kann auch alle Relais einzeln schalten, Power/SWR ablesen, einzelne Tuning-Schritte ausführen usw.

die CIV Schnittstelle:

wenn hier ein Icom Transceiver angeschlossen ist, so kann der Tuner die Antenne vollkommen automatisch durchstimmen und alle 10 kHz einen Tuningvorgang ausführen. Via CIV stellt der Tuner eine Frequenz ein und stimmt diese dann ab, danach die nächste Frequenz 10 kHz höher usw, bis das Band fertig ist. Danach stehen alle Abstimmpunkte im EEPROM.

Im EEPROM hat man Platz für 6 komplette Abstimm-Sätze von 0 - 30 MHz. So ist es möglich eine Antenne bei Trockheit abzustimmen und zu speichern, und zusätzlich bei feuchtem Wetter, Schnee usw. Alle gefundenen Abstimmpunkte sind dann dauerhaft gespeichert, und das für alle Bänder und in 10 kHz Schritten.

Firmware:

Hier folgen ein paar Hinweise:

adc.c ... die Werte der ADCs werden per DMA automatisch in den Speicher kopiert, dort herausgenommen und in die gewünschten Werte umgerechnet.

bandcalc.c ... Funktionen für die Eckfrequenzen der Bänder und Speicherinhalt des EEPROMs

crc16.c ... die Datenübertragung mit dem PC ist CRC gesichert

eeprom.c ... alles was man braucht um Abstimmwerte im eeprom abzulegen und wieder zu finden

main.c ... Aufruf der Initialisierungsfunktionen, danach endloses Kreiseln in der Hauptschleife

ntc.c ... Temperaturberechnung für den NTC Sensor. Der ist ganz praktisch um die Temperatur innerhalb des Tuners zu kennen.

remote.c ... Kommunikation mit der PC Software

serial_tx_proc.c ... FIFO für die Kommunikation mit dem PC

setC.c ... Funktionen für die Platine mit den Kondensatoren

setL.c ...  Funktionen für die Platine mit den Spulen

swr.c ... Funktionen zur Leistungs und SWR Berechnung

t2_led.c ... Steuerung der LED (die man im eingebauten Zustand sowieso nicht mehr sieht)

t2_relais.c ... Steuerung der bistabilen Relais

tick1ms.c ... Timer, der eine Zeitbasis für alle möglichen Funktionen erzeugt

tune_storage.c ... Kümmert sich um Speicheradressen im EEPROM

tuner.c ... alle Funktionen um den Tuning-Vorgang anhand von Z und Phi sowie SWR durchzuführen. Das ist das Herz des ganzen Tuners und hier gehts ins eingemachte.

uart_civ.c ... serielle Schnittstelle für das CIV Interface

uart.c ... serielle Schnittstelle für RS232 zum PC

 

Auto-Tuning-Funktionen:

(siehe tuner.c)

grundstellung()

es werden alle C Relais eingeschaltet und alle L Relais ausgeschaltet. Damit hat man max.C und max.L. In dieser Stellung hat der Tuner die geringste Wirkung (weil es ein Serien-C und Parallel-L Tuner ist !). Daher wird diese Stellung als Grundstellung vor dem Tuningvorgang eingestellt. Die Spulen wird auf die Antennenseite geschaltet, was in den meisten Fällen erforderlich ist. Sollte man die Spule auf TRX Seite brauchen, so schaltet man sie per Hand dorthin.

seek50_plusphi_lower_l()

ausgehend von der Grundstellung wird das L reduziert, solange bis ein Z von 50 Ohm bei einem positiven PHI gefunden wird. Schafft man das nicht, so wird auch etwas C weggenommen solange bis es klappt. Damit es schnell geht wird zunächst grob und dann fein gesucht.

seek_phi0_lower_c()

es wird das C reduziert, solange bis PHI von positiv nach negativ umschlägt (dann sind wir also nahe Phi=0). Dabei wird darauf geachtet, die Z=50 bleibt. Falls das Z wegwandert (was es üblicherwise auch tut), so wird das L korrigiert um Z wieder zurück auf 50 Ohm zu bringen.

seek_adjL()

scannt nahe L Werte durch um das SWR Minimum zu finden

seek_phineg_lowerC()

verkleinere das C solange bis PHI negativ wird

seek_z50_lowerC()

verkleinere das C solange bis Z=50 ist

seek_phiplus_lowerL()

verkleinere das L solange bis PHI positiv wird. Dabei prüfe ob Z=50 Ohm ist. Falls nicht korrigiere das C um auf der 50 Ohm Linie zu bleiben. Diese Funktion wird benutzt, wenn das L auf der Transceiverseite angeschlossen ist.

seek_lowest_swr()

nachdem man mit Z=50 und PHI=0 so gut wie möglich an den Abstimmpunkt gekommen ist, wird noch der optimale Punkt gesucht. Dabei werden umliegende Werte gescannt. Damit das so schnell wie möglich geht wird der Bereich in 4 Quadranten aufgeteilt und jeder getrennt gescannt. Dabei wird das beste SWR gespeichert und nach dem Scanvorgang eingestellt.

die ganzen anderen Funktionen in dieser Datei dienen der Zusammenfassung obiger Funktionen. Obige Funktionen werden also der Reihe nach ausgeführt um einen kompletten Tuning-Vorgang zu machen.