Hermeslite2-Transceiver mit 100W-LDMOS-PA

(Teil1)


Der in CQDL 2/21 vorgestellte Transceiver ist mit ca. 5W Output natürlich nur für QRP-Freunde gedacht. In diesem Artikel soll eine PA mit ca. 100W Output und entsprechendem Tiefpassfilter vorgestellt werden. Auch hier wird auf ein vorgefertigtes Konzept zurückgegriffen. So dass der Selbstbaugedanke ohne großen Aufwand verwirklicht werden kann. Ich benutze dazu die Grundidee von WA2EUJ, der damit den ersten Preis im NXP Design Challenge 2019 gewann.


Dieser Verstärker liefert bei einer Eingangsleistung von 1-2W eine Ausgangsleistung von 100W im Frequenzbereich von 1,8 – 54 MHz. Die einzige Spule, die hier verwendet wird, ist vorgefertigt erhältlich. Damit ist die PA eigentlich zu 100% nachbausicher. Das Einlöten der SMD-Bauteile dürfte mit einem passenden Lötkolben (ca. 60-80W mit feiner Lötspitze) kein Problem sein.

Die genauen Hinweise sind auf https://sites.google.com/site/rfpowertools/home/nxp-mrf-101 erhältlich.

Die folgende Übersicht zeigt die technischen Eigenschaften des Verstärkers:


Wie auf dem Bild ersichtlich, wird ein Kühlkörper benutzt, der vor ca. 10-20 Jahren als CPU-Kühler mit Lüfter in normalen PCs verwendet wurde.


Das hier vorgestellte Konzept besteht eigentlich aus drei Modulen: 100W-PA, Tiefpassfilter und Sende-Empfangsumschaltung (TR-Switch) mit SWR-Brücke. Zusätzlich erfolgt eine übergeordnete Steuerung durch einen Mikrocontroller (Arduino Nano).

Die Leiterplatten dazu sind einfach erhältlich auf der Seite von RF Power Tools. Dort sind auch alle Baugruppen kurz beschrieben mit Schaltplan und Bauteileliste usw. Siehe: https://sites.google.com/site/rfpowertools/home

Ich empfehle, die Bauteile z.B. von Mouser zu bestellen. Die Bauteilelisten (BOM) können direkt von der Website „rfpowertools.com“ auf mouser.com geladen werden. Bestellt man alle Bauteile auf einmal, so überschreitet man den Betrag von 50 € , dann liefert Mouser kostenlos. Dies soll keine Werbung für Mouser sein, es ist aber der einfachste Weg. Leider gibt es meines Wissens keinen Händler in Deutschland, der alle erforderlichen Bauteile liefert.


Im folgenden beschreibe ich kurz die drei Module.

1. Sende-Empfangsumschaltung:

Das Bild zeigt die wesentlichen Funktionen der Baugruppe.

D

ie beiden Relais schalten die Antenne bei Empfang (Ruhezustand) auf den Eingang des Transceivers durch. Beim Senden wird der Ausgang des Transceivers auf den Eingang der PA und der Ausgang der PA auf die VSWR-Brücke und damit an die Antenne gelegt. In der Praxis liegt natürlich zwischen PA-Ausgang und Relais-Kontakt das Tiefpassfilter. Die VSWR-Brücke liefert jeweils ein Gleichspannungssignal für Vorwärts-Leistung und die reflektierte Leistung. Diese Werte werden über einen Mikrocontroller (Arduino) angezeigt.



2. Tiefpassfilter:

Die derzeit gebräuchlichen Transistor-PAs sind alle für Breitbandbetrieb ausgelegt, hier von 1,8 MHz – 50MHz. Jede solche PA erzeugt Oberschwingungen, die durch geeignete Filter unterdrückt werden müssen. Dazu sind Tiefpassfilter notwendig. Bei RF Power Tools wird ein 7-Band-Filter angeboten, dass alle Amateurfunkbänder von 160m – 6m berücksichtigt und für 100W Leistung geeignet ist.

D

ie Umschaltung der Filterzweige kann entweder direkt oder BCD-kodiert über drei Leitungen erfolgen. Ich verwende hier die BCD-kodierte Version mittels des Mikrocontrollers, der über den I2C-Bus des Hermeslite2 das entsprechende Band auswertet. Eine manuelle Umschaltung des Filters ist ebenfalls möglich. Die Filterspulen müssen natürlich auf Amidon-Ringkerne gewickelt werden. Dies sollte eigentlich kein Problem sein. Windungszahlen usw. findet man auf der Website.

3. 100W PA:

Das folgende Bild zeigt den Schaltplan der PA:

Die PA ist eigentlich verblüffend einfach aufgebaut. Herzstück ist ein LDMOS-Transistor der neuesten Generation, ein MRF101A von NXP. Diese Transistoren sind sehr unempfindlich gegenüber Fehlanpassungen, sie arbeiten im Bereich von ca. 1 MHz bis 230 MHz und liefern bei 50V Betriebsspannung eine Ausgangsleistung von 100 W. Das TO-220-Gehäuse, die Kühlfläche ist direkt mit Source und damit Masse verbunden, erleichtert ganz wesentlich die Montage. Ich verwende einen Kühlkörper mit ca. 1,7 K/W (100mm x 50mm) und einen 12V-Lüfter. Er wird wegen der Lautstärke nur mit 5V betrieben.

Etwas ungewöhnlich dürfte die Betriebsspannung von 50V sein. Wie vom Entwickler Jim Veatch WA2EUJ empfohlen, kann auch ein Schaltnetzteil z.B. von Meanwell EPP-200-48 benutzt werden. Es liefert auch eine Versorgungsspannung von 12V für einen Lüfter und/oder die zusätzlichen Baugruppen wie Tiefpassfilter, TR-Umschaltung und den Mikrocontroller. Ich habe ein spezielles Netzteil mit einem Ringkerntrafo 2x18V zur Erzeugung der 50V-Betriebsspannung und ein 12V-Schaltnetzteil verwendet. Wer die Endstufe auch portabel verwenden will, benötigt einen DC-DC-Converter, der die Batteriespannung von ca. 13,4V auf 50V erhöht. Der Entwickler empfiehlt auf seiner Website einen 1200W Boost-Converter. Er erklärt auch, warum der Converter eine solch hohe Leistung verkraften muss. Wer diesen Fall in Betracht zieht, sollte die Hinweise auf jeden Fall lesen.


Ohne Ansteuerung muss der Ruhestrom auf ca. 100mA eingestellt werden. Legt man an den Anschluss BIAS_OFF eine Spannung von 3,3 V an, wird der Ruhestrom abgeschaltet. Die PA sperrt.

Wichtig ist, die PA für Mess- und Testzwecke immer mit einem geeigneten Dummyload abzuschließen.

Auch empfehle ich für erste Testversuche die Ansteuerungsleistung von max. 2W zu beachten. Sollte die Ausgangsleistung des Transceivers nicht verringert werden können, ist ein Leistungsabschwächer notwendig. Bekanntlich verringert ein 6 dB Leistungsabschwächer die Leistung um den Faktor 4. Die Dimensionierung kann im Internet leicht gefunden werden, z.B. https://dl6gl.de/pi-und-t-abschwaecher-berechnen.html.


Damit kann eine manuell gesteuerte 100W-PA mit Tiefpassfilter aufgebaut werden. Im einem folgenden Artikel soll die automatische Steuerung mit einem Mikrocontroller (Arduino Nano) und die Software beschrieben werden.



Hermeslite2-Transceiver und 100W-PA

(Teil2)


4. Mikrocontroller (Arduino Nano)

Der Mikrocontroller dient vor allem zur Anzeige der Messwerte und zur Sende- Empfangsumschaltung. Ich verwende einen Arduino Nano mit einem TFT-Display, der die Betriebsspannung, den Strom, die Leistung Pfwd , das Stehwellenverhältnis VSWR anzeigen kann. Weiterhin steuert er das Tiefpassfilter über den I2C-Bus des Hermeslite, die Sende- Empfangsumschaltung und den Lüfter der PA .

Die Mikrocontroller-Steuerung ist zusammen mit dem Display auf einer kleinen Leiterplatte an der Frontplatte des PA-Gehäuses montiert. Den Schaltplan zeigt das folgende Bild.



Die Mikrocontroller-Steuerung erhält die Betriebsspannung von ca. 12V über den Anschluss J1, damit wird der Arduino Nano gespeist und liefert über seinen +5V-Anschluss die Betriebsspannung für das Display und den Temperatursensor LM35. Abhängig von der Temperatur des PA-Transistors wird der Lüfter über den Digital-Ausgang D12 des Arduino Nano gesteuert. Der LM35 wird im Gehäuse TO-92 geliefert, er gibt eine Spannung proportional zur Temperatur ab. Diese wird am Eingang A6 gemessen, ist die Temperatur des PA-Transistors über 300C, wird der Lüfter über D12 eingeschaltet. Um einen guten Wärmekontakt zum PA-Transistor zu erreichen, habe ich eine 10mm2-Aderendhülse in der Mitte mit der Laubsäge halb aufgesägt. Eine Hälfte habe ich flach zusammengequetscht und ein 4mm Loch gebohrt zur Befestigung am PA-Transistor. In die andere Hälfte habe ich den LM35 - umschmiert mit Wärmeleitpaste - gesteckt und mit einer Zange festgedrückt. Der Transistor Q2 steuert den Lüfter, da der Arduino zu wenig Strom liefert. Ebenso wurde die 5V-Stromversorgung über einen zusätzlichen 1W-DC/DC-Wandler aus der Betriebsspannung von 12V erzeugt. Der von mir verwendete 12V-Lüfter (50x50mm, 10mm hoch) braucht ca. 20-30mA bei 5V, er ist dabei sehr leise.



Das Strom- und Spannungsmessmodul INA169 von Sparkfun (am Anschluss J5) misst die Betriebsspannung und den Strom der PA. Dieses kleine Modul stellt einen Strom- /Spannungssensor dar, der die Messwerte mit Bezugspunkt Masse zum Mikrocontroller liefert. Dies kann auch auf der sog. high-side also zwischen Spannungsquelle und Verbraucher erfolgen. Der Strom wird über den Spannungsabfall an einem Shunt-Widerstand RS gemessen. Ich verwende einen 0,1 Ω Widerstand mit 3W. (Näheres auf sparkfun.com, nach INA169 suchen). Die oft angebotenen Stromsensoren AC712 usw. sind zwar preisgünstiger, eignen sich aber weniger, weil sie bei kleinen Strömen unter 1-2A ungenaue Messergebnisse liefern. Die Betriebsspannung von 50V wird über den Spannungsteiler R1 und R2 auf einen Wert heruntergeteilt, der für den Arduino ungefährlich ist.

Über den Anschluss J6 bzw. J7 wird die Sende-Empfangsumschaltung und das Tiefpassfilter gesteuert.

Das Display wird an J12 angeschlossen, ich verwende hier ein 1,54“-TFT-Display mit einer Auflösung von 240x240 Pixel (Grafik-Chip ST7789) von Adafruit. Dies ist zwar etwas teurer als andere Displays dieser Größe, dafür gibt es aber bei Adafruit ein komplettes Tutorial mit gut dokumentiertem Beispiel-Code, so dass man praktisch sofort eine brauchbare Anzeige am Bildschirm erhält. Den Code beschreibe ich in Auszügen weiter unten. Andere Displays sind natürlich auch verwendbar.

Die Verbindung von der PA zum Hermeslite erfolgt über zwei Leitungen. Ein Koax-Kabel verbindet die SMA-Buchse Ant am Hermeslite wird mit dem HF-Eingang der PA ( im Schaltplan der Steuerung nicht eingezeichnet).

Die Steuersignale laufen über ein 9-poliges Sub-D Kabel (Sub-D-Buchse an der PA (Anschluss J10) zum Sub-D-Stecker (Anschluss J8) an der Rückwand des Hermeslite). Diesen 9-poligen Sub-D-Stecker habe ich an der Rückwand des Hermeslite montiert und über die 4 gezeichneten Leitungen mit der 20-poligen Stiftleiste (zwischen N2ADR-Tiefpass und Mainboard) im Hermeslite (siehe Foto) verbunden. Ich verwende nur die Anschlüsse für Masse (Pin 1), Sende-/Empfangsumschaltung (Pin 13) und I2C-Bus (Pin 16 u. 17) zur Tiefpassumschaltung.



Noch ein Tipp: Wer mit der Stiftbelegung von Sub-D-Buchsen bzw. Steckern nicht gut vertraut ist, sollte sich im Internet informieren (z.B. Wikipedia)! Die Pin-Nummern auf den Steckern sind oft nur mit sehr guten Augen zu erkennen. Im Zweifel hilft immer ein Durchgangsprüfer und genaue Kontrolle.


Die Software für den Mikrocontroller habe ich aus dem entsprechenden Tutorial von Adafruit entwickelt (https://www.adafruit.com/product/3787). Am besten folgt man der dort beschriebenen Vorgehensweise.

Wichtig ist: Zuerst erfolgt die Installation der notwendigen Bibliotheken (Adafruit_GFX.h, Adafruit_ST7735.h, Adafruit_ST7789.h, gewünschte Fonts) mit Bibliotheksmanager der Arduino-IDE. Diese werden über include ins Programm eingebunden, zusätzlich die SPI-Library (SPI.h) und für den I2C-Bus die Library Wire.h.

Damit müsste eigentlich schon das Testprogramm für die verschiedenen Schriftgrößen, Farben Linien usw. ablaufen. Aus diesem Grundgerüst kann das Programm relativ leicht erstellt werden.


Zunächst werden die Variablen definiert:

int i;

const int pina0 = A0; //Pfwd

const int pina1 = A1; //Prev

const int pina2 = A2; //Current PA

const int pina3 = A3; //Voltage PA

const int pina6 = A6; //Temperatur PA

int rt = 0; //Sende-/Empfangsmodus

String band1 = "xxxxx"; //Bandanzeige

int band = 0;


Dann folgt der Einstellungsteil setup:

void setup(void) {

Serial.begin(9600);

Serial.print(F("Hello! ST77xx TFT Test"));


tft.init(240, 240); // Init ST7789 240x240


pinMode(2, INPUT); //PTT vom Trcv

pinMode(3, OUTPUT); //PTT zum TR-Switch

pinMode(4, OUTPUT); //BIAS_OFF zur PA

pinMode(5, OUTPUT); //Umschaltung LF-Filter

pinMode(6, OUTPUT); //Umschaltung LF-Filter

pinMode(7, OUTPUT); //Umschaltung LF-Filter

Wire.begin(0x20); //i2C aufrufen

Wire.onReceive(receiveEvent); //Abfrage des i2B-Bus

Serial.println(F("Initialized"));


tft.fillScreen(ST77XX_BLACK);

tft.setRotation(3);

tft.setFont(&FreeSansBold9pt7b);


Serial.println("done");

delay(1000);

tft.setCursor(0, 30);

tft.fillScreen(ST77XX_BLACK);

tft.setTextColor(ST77XX_GREEN);

tft.setTextSize(2);

tft.println("DK6RH PA");

}

Hier wird zunächst die Kommunikation zum seriellen Port (Monitor) gestartet. Die digitalen Ports werden für Ein- oder Ausgang(pinMode..) konfiguriert. Dann wird die Abfrage des i2C-Bus auf Adresse 0x20 gestartet, die Abfrage wird an das Unterprogramm Wire.onReceive geleitet. Schließlich erfolgen die Grundeinstellungen für das Display, Hintergrundfarbe, Zeichensatz, Überschrift.


Es folgt das eigentliche Hauptprogramm, das der Mikrocontroller immer wieder zyklisch abarbeitet.

void loop() {

int sensorpina6 = analogRead(pina6); //PA Temp

float temp = (sensorpina6/1024.0*500.0);

if (temp > 30) {

digitalWrite(12,HIGH); // PA-Fan on

}

else {

digitalWrite(12,LOW); // PA-Fan off

}

rt = digitalRead(2);

if (rt==HIGH) {

digitalWrite(4,HIGH); //BIAS off

digitalWrite(3,LOW); //PTT RX

tft.setCursor(0, 70);

tft.setTextColor(ST77XX_RED);

tft.print("RX");

delay(500);

tft.fillRect(0,40,120,220,1);

}

Als erstes wird die PA-Temperatur gemessen. Wird der Wert von 300 C überschritten, schaltet der Lüfter ein. Dann wird über Pin2 festgestellt, ob der Hermeslite sendet oder empfängt. Ist rt HIGH, also Empfang, wird der Ruhestrom der PA (BIAS) und das Sende-Empfangsrelais abgeschaltet. Nur der Text „RX“ wird angezeigt und das Hauptprogramm neu durchlaufen.


Andernfalls (else), also im Sendefall (rt == LOW), liest der Controller zunächst die Messwerte ein und rechnet sie um. Der Hermeslite gibt über den I2C-Bus das gewählte Frequenzband aus, dies wird ausgewertet (switch (band)). Über die Pins 5,6,7 wird das Tiefpassfilter entsprechend angesteuert.

else {

int sensorpina0 = analogRead(pina0); //Pfwd

int sensorpina1 = analogRead(pina1); //Prev

int sensorpina2 = analogRead(pina2); //Current

int sensorpina3 = analogRead(pina3); //Voltage

float vfwd = (sensorpina0/1024.0)*5.0;

float pfwd = 2*(vfwd*1.54+0.05)*(vfwd*1.54+0.05);

float vrev = (sensorpina1/1024.0)*5.0;

float vswr = (1+vrev/vfwd)/(1-vrev/vfwd);

float id = (sensorpina2/1024.0)*5;

float volt = (sensorpina3/1024.0)*60;


switch (band) {

case 1:

band1 = "80m" ;

digitalWrite(5,LOW);

digitalWrite(6,LOW);

digitalWrite(7,LOW);

break;

case 2:

band1 = "40-60";

digitalWrite(5,LOW);

digitalWrite(6,HIGH);

digitalWrite(7,LOW);

break;

case 3:

band1 = "20-30";

digitalWrite(5,HIGH);

digitalWrite(6,HIGH);

digitalWrite(7,LOW);

break;

case 4:

band1 = "15-17";

digitalWrite(5,LOW);

digitalWrite(6,LOW);

digitalWrite(7,HIGH);

break;

case 5:

band1 = "10-12";

digitalWrite(5,LOW);

digitalWrite(6,LOW);

digitalWrite(7,HIGH);

break;

default:

band1="6";

digitalWrite(5,HIGH);

digitalWrite(6,LOW);

digitalWrite(7,HIGH);

}


Im 2. Teil des Hauptprogrammes werden die Messwerte angezeigt.

tft.setTextSize(2); //Messwert-Anzeige

tft.setTextColor(ST77XX_YELLOW);

tft.setCursor(0, 75);

tft.print("Band");

tft.setCursor(100, 75);

tft.print(band1);

tft.setCursor(0, 110);

tft.print("Pfwd");

tft.setCursor(100, 110);

tft.print(pfwd);

tft.setCursor(0, 145);

tft.print("SWR");

tft.setCursor(100, 145);

tft.print(vrev);

tft.setCursor(0,180);

tft.print("Ub");

tft.setCursor(100,180);

tft.print(volt);

tft.setCursor(0,220);

tft.print("Id");

tft.setCursor(100,220);

tft.print(id);

delay(1000);

tft.fillRect(100,40,120,220,1); //Textfeld löschen


Zur Erläuterung: Der Befehl tft.setCursor(0, 75); setzt die Anzeige auf x-Wert 0 u. y-Wert 75. Ab hier wird mit dem Kommando tft.print gedruckt. Bitte beachten: Wie bei vielen Displays ist der Koordinaten-Ursprung links oben, die y-Koordinate zeigt nach unten! Mit tft.fillRect(….) wird das angegebene Rechteck mit Hintergrundfarbe überschrieben, also gelöscht. Andernfalls wird bei jedem Durchlauf ein neues Zeichen auf den Bildschirm geschrieben. Damit wäre die Anzeige nach mehreren Durchläufen fast komplett gelb.


Schließlich ist noch das Unterprogramm zum Verarbeiten der Kommandos auf dem I2C-Bus erforderlich. Zunächst wird ein Array vom Typ byte deklariert, hier: byte c[10]. Mit while (0 < Wire.available()) {….. werden die Werte vom Bus eingelesen. Zur Kontrolle können sie mit Serial.println(c[1]); über den Monitor angezeigt werden. Nur das erste Byte c[1] trägt die Bandinformation. Dieses wird mit switch (c[1]) ausgewertet und an das Hauptprogramm zurückgegeben.

Wichtig: Der serielle Monitor der Arduino-IDE zeigt die Werte von c[1] als Dezimalzahlen an. Im Programm werden sie aber als Hex-Zahlen verarbeitet. Darum erscheint z.B. beim 15m-Band auf dem Monitor der Wert 16 auf dem Monitor , programmintern ist er logischerweise im Hex-Format 10.

void receiveEvent(int howMany){

byte c[10];

int i = 0;

while (0 < Wire.available()) {

c[i] = Wire.read();

i++;

}

Serial.print("BusData");

Serial.println(c[1]);


switch (c[1]) {

case 0x1:

band = 0;

break;

case 0x2:

band = 1;

break;

case 0x4:

band = 2;

break;

case 0x8:

band = 3;

break;

case 0x10: //Hex-Zahl!

band = 4;

break;

case 0x20:

band = 5;

break;

default:

band = 6;

break;

}


Die Steuerung der PA habe ich recht ausführlich beschrieben, weil ich glaube, dass daraus viele zum Selbstbau hilfreichen Informationen entnommen werden können.


Links:

https://learn.adafruit.com/adafruit-gfx-graphics-library


home