Ein FT8-QRP-Transceiver    

Elektronik-Labor  Lernpakete  Projekte  HF  




Mein neues FSK-Modulationsverfahren ist so einfach, dass es geradezu nach einem QRP-Projekt schreit. Ich möchte deshalb versuchen, einen kleinen FT8-Transceiver für das 40m-Band auf einer 100 mm x 80 mm großen Platine zu bauen. Ich verwende dazu eine durchgehende Kupferfläche und kleine Abschnitte einer Streifenrasterplatine, die mit Drahtstücken aufgelötet werden. Damit erreicht man eine gute Masseführung und die nötige mechanische Stabilität. Außerdem ist der Aufbau sehr flexibel. Ich kann einfach mal anfangen, auch wenn ich noch nicht alle Stufen genau überblicke. Bisher ist nur festgelegt, dass ein Ardunino-Nano-Clone zum Einsatz kommen soll und das SI5351-Board von Adafruit. Zum Start wurden die Audiobuchsen und der Arduino montiert.



Das Blockschaltbild zeigt alle Stufen des Transceivers. Als erstes habe ich den PLL-Baustein SI5351 mit dem Arduino verbunden. Dazu werden nur drei Leitungen gebraucht, zwei für den I2C-Bus und eine für die Betriebsspannung 5 V. Auf der Platine von Adafruit ist ein 3,3-V-Spannunsgregler für den PLL-Chip. 



USB-Stecker rein, ein vorhandenes Beispiel in den Arduino geladen, erster Test. An CLK1 messe ich ein Signal. Soweit funktioniert es. Als nächstes folgt nun der Modulationseingang mit seinem Tiefpassfilter.




Die Dimensionierung ist nicht kritisch und wurde entsprechend den vorhandenen und gut passenden Bauteilen geändert. Die Hilfsspannung von 3,3 V zur sichern Erkennung des Endes einer Übertragung habe ich mir vom SI5351 und seinem Spannungsteiler geliehen. Ein RC-Filter mit 10 k und 10 nF hat eine Grenzfrequenz von 1,6 kHz. Zwei zusammen liegen dann knapp über 1 kHz. Das bedeutet, dass höhere Frequenzen nahe 2,5 kHz bereits 5-fach geschwächt werden. Wegen der hohen Empfindlichkeit des Komparators ist das jedoch unproblematisch. Bei 2,5 kHz reicht eine Modulationsspannung von 100 mV zur Ansteuerung des Senders.



Jetzt fehlt nur noch die Firmware. Dazu brauchte ich nur mein Programm für das SDR-Shield passend kürzen. Zusätzlich habe ich die LED am Pin 13 auf dem Arduino verwendet, um den Sendebtrieb anzutzeigen.

//FT8QRP

#include "si5351.h"
#include "Wire.h"

Si5351 si5351;
unsigned long  freq;

void setup(void)
{
  freq= 7074000;
  word cal_factor = 0;
  si5351.init(SI5351_CRYSTAL_LOAD_8PF, 0, 0); 
  si5351.set_correction(cal_factor, SI5351_PLL_INPUT_XO);
 
  si5351.set_pll(SI5351_PLL_FIXED, SI5351_PLLA);
  si5351.set_freq(freq*100ULL, SI5351_CLK1);
  si5351.output_enable(SI5351_CLK1, 1);
 
  si5351.set_freq(freq*100ULL, SI5351_CLK0);
  si5351.drive_strength(SI5351_CLK0, SI5351_DRIVE_8MA);
  si5351.output_enable(SI5351_CLK0, 0);
  TCCR1A = 0x00;
  TCCR1B = 0x01; // Timer1 Timer 16 MHz
  TCCR1B = 0x81; // Timer1 Input Capture Noise Canceler
  ACSR |= (1<<ACIC);  // Analog Comparator Capture Input
  pinMode(7, INPUT); //PD7 = AN1 = HiZ, PD6 = AN0 = 0
  pinMode(13, OUTPUT);
}


void loop(void)
{
 // Modulationsfrequenz messen über Analog Comparator Pin7 = AN1

 unsigned int d1,d2;
 int FSK = 10;
 int FSKtx = 0;
 while (FSK>0){
  TCNT1 = 0;
  while (ACSR &(1<<ACO)){
    if (TCNT1>65000) {break;
  }
  }  while ((ACSR &(1<<ACO))==0){
    if (TCNT1>65000) {break;}
  }
  TCNT1 = 0;
  while (ACSR &(1<<ACO)){
    if (TCNT1>65000) {break;}
  }
  d1 = ICR1;  
  while ((ACSR &(1<<ACO))==0){
    if (TCNT1>65000) {break;}
  } 
  while (ACSR &(1<<ACO)){
    if (TCNT1>65000) {break;}
  }
  d2 = ICR1;
  if (TCNT1 < 65000){
  unsigned long codefreq = 1600000000/(d2-d1);
    if (codefreq < 350000){
      if (FSKtx == 0){
          digitalWrite(13,1);
          si5351.output_enable(SI5351_CLK1, 0);   //RX off
          si5351.output_enable(SI5351_CLK0, 1);   // TX on
      }
      si5351.set_freq((freq * 100 + codefreq), SI5351_CLK0);  
      FSKtx = 1;
    }
  }
  else{
    FSK--;
  }
 }
  digitalWrite(13,0);
  si5351.output_enable(SI5351_CLK0, 0);   //TX off
  si5351.output_enable(SI5351_CLK1, 1);   //RX on
  FSKtx = 0;
}


Der Direktmischer



Der Empfänger in diesem QRP-Transceiver soll ein einfacher Direktmischer werden. Dafür würde man üblicherweise eine NE612 nehmen, aber dieses IC ist nur noch schwer zu bekommen. Ein Balancemischer dieser Art ist aber auch in vielen Radio-Chips eingebaut. Ich habe mich für den CD2003 entscheiden, den ich gut kenne, weil ich ihn auch für den Fledermausdetektor eingesetzt habe. Man kann sich am Datenblatt orientieren und muss sich nur alles wegdenken, was man nicht braucht.



Im ersten Versuch habe ich den CD2003-Direktmischer auf einer Steckplatine aufgebaut ...



... und provisorisch mit dem PLL-Chip SI5351 verbunden. Der Test zeigt gute Empfangseigenschaften.



Dann habe ich den Empfänger möglichst kompakt auf zwei Rasterstreifen aufgebaut...



... und schließlich in das Gerät eingesetzt.



Der Eingangskreis verwendet die Spule aus dem Franzis KW-Radio. Die Antenne ist über einen kleinen Kondensator angeschlossen. Zusätzlich gibt es einen Diodenbegrenzer. Damit soll es später möglich werden, den Antennenanschluss direkt an den Ausgang der Sendeendstufe anzuschließen und kein Antennenrelais einzusetzen. Das Oszillatorsignal mit 7074 kHz wird an einen 100-R-Widersatnd am AM-Oszillatoreingang des Radio-ICs gelegt. Am Mischerausgang Pin 4 würde normalerweise ein ZF-Filter angeschlossen. Beim Betrieb als Direktmischer erscheint hier das NF-Signal. Der Pegel passt gut zum direkten Anschluss an die Soundkarte.



Ein Empfangsversuch zeigt, dass der Empfänger gut funktioniert. Gegen Mittag waren zwar weniger Stationen zu empfangen als am Abend, aber alle Ergebnisse sehen aus wie gewohnt. Damit die die Empfängerstufe des Transceivers einsatzbereit.





Die Sendeendstufe



In der Sendeendstufe will ich den bewährten Power FET IRF720 einsetzen. Zusätzlich ist allerding noch eine Treiberstufe nötig. Ich wollte schon länger mal ausprobieren, ob man dazu einen MOSFET-Treiber MCP14E8-E/P einsetzen kann. Das IC habe ich eigentlich mal für einen Motortreiber gekauft, und es ist eigentlich nicht für HF gedacht. Aber es hat Anstiegszeiten von 23 ns bei einer Lastkapazität von 1000 pF. Da müsste es bei 7 MHz gerade noch gehen. VDD darf maximal 20 V sein, mehr als genug, um einen Power-FET anzusteuern.



Der erste Vorversuch lief wieder auf einer Steckplatine. Ich konnte feststellen, dass das Treiber-IC sich redlich mühen musste, um die 7 MHz zu schaffen. Der Betriebsstrom steigt mit der Frequenz und der Betriebsspannung. Mehr als 9 V sollte man vermeiden. Aber schon ab 6 V wird der FET sauber durchgesteuert. Der MCP14E8 enthält einen invertierenden und einen nicht invertierenden Treiber. Nur mit dem invertierenden Treiber war die Ansteuerung optimal. Der andere produzierte längere High-Signale als Low-Signale. Für die Versuche habe ich verschiedene Widerstände im Drain-Kreis des FETs verwendet. Einer ging völlig in Rauch auf, was für eine HF-Endstufe ein gutes Omen ist.



Jetzt ist die Endstufe in den Transceiver eingebaut. Der Power-FET hat zwei kleine Kühlkörper bekommen, die eigentlich mal für einen Raspberry vorgesehen waren. Zur 12V-Stromversorgung gibt es eine Netzteilbuchse. Ein Spannungsregler 7808 liefert stabile 8 V für den FET-Treiber. Weil der invertierende Treiber im Ruhezustand ein High-Signal liefert, ist eine C-Kopplung nötig. Ein Spanungsteiler mit 4,7 k und 6,8 k legt die Vorspannung beim Senden auf +2 V. Die Vorspannung wird beim Senden vom Ausgang D13 des Arduino eingeschaltet.



Der Ausgangsübertrager der Eintakt-Endstufe verwendet einen Doppellochkern. Primär hat er drei Windungen aus dickem Draht mit 0,6 mm, sekundär sechs Windungen mit dünnerem Draht. Damit wird die Spannung im Verhältnis 1 : 2 und die Impedanz im Verhältnis 1 : 4 transformiert. Bei einer Ausgangslast von 50 Ohm sieht der Transistor 12,5 Ohm.

Nachfolgend sorgt ein Tiefpassfilter für die nötige Oberwellendämpfung. Die Filterspulen haben ca. 0,5 µH. Ich habe zehn Windungen CuL 0,2 auf eine LED als 5-mm-Wickeldorn gewickelt und dann eine elfte Windung so um das Bündel geschlungen, dass die Wicklung mechanisch stabil bleibt. Die  äußeren Kondensatoren haben 560 pF, der mittlere 1500 pF. Diese Werte sind nicht berechnet, sondern im Vergleich zu vorher gebauten Filtern geschätzt. Eine Messung zeigte, dass das Filter für 7 MHz gut funktioniert.



Am Ausgang liegt der dreipolige Pfostenstecker, der inzwischen zu einem Quasi-Standard für meine HF-Experimente geworden ist. Die äußeren Pinne liegen an Masse, der mittlere trägt das Signal. Der Stecker ist damit unverpolbar. Der Antenneneingang des Empfängers liegt direkt am Ausgang des Übertragers. An der Stelle steht beim Senden eine HF-Spannung bis ca. 20 V, die am Empfängerkreis durch zwei Dioden auf ca. 0,6 V begrenz wird, Weil der Koppelkondensator nur 4,5 pF hat, fließt nur ein geringer HF-Strom, sodass kaum Leistung verloren geht. Im Empfangsmodus ist der Power-FET vollständig gesperrt und für den Empfänger ohne Wirkung. So kommt man ohne einen eigentlichen Antennenumschalter aus.



Zur Messung der Ausgangsleistung habe ich mir eine kleine Dummy Load gebaut. In der Bastelkiste fanden sich mehrere Widerstände mit 75 Ohm. Jeweils drei Widerstände parallel und zwei Blöcke in Reihe kommen auf 50 Ohm. Mit dem Oszilloskop konnte ich dann die Spannung am Lastwiderstand messen. Gemessen wurde eine Amplitude von 15 V. daraus ergibt sich eine Leistung von 2,25 W. Eigentlich hatte ich etwa 5 W angezielt. Aber 2 W reichen auch, wie ich schon mit dem SDR-Transceiver feststellen konnte.



Hier das Zielfoto des ersten erfolgreichen QSOs, das ich mit diesem QRP-Transceiver gefahren habe. Die erreichte Station steht in England, zwischen Liverpool und Manchester, 689 km von Essen entfernt. Der kleine Transceiver hat damit seinen ersten Praxistest bestanden.




Der Aufbau von Richard DL9OBU


Vielen Dank für deinen Bauvorschlag zu einem FT8 QRP Projekt. Ja, ich habe es sofort nachgebaut. Er läuft ufb, ich habe viele Europa-QSOs geführt und wieder viel Spaß am Amateurfunk gefunden. RX schon bis Argentinien, und QSOs bis 2000km an einer Fuchskreis-Antenne.  Dieser Qrp TXRX ist der einfachste den ich je gebaut habe. Ich habe wohl einen schlechten Doppellochkern und bekomme nur 750 mW, egal geht trotzdem superklasse.




Zum Artikel in CQDL 3-2021



Den FT8-QRP-Transceiver habe ich in der CQ-DL vorgestellt. Nach dem Erscheinen im März-Heft 2021 ist das Projekt auf reges Interesse gestoßen. Heiko, DL2VER schrieb mir dazu: Beim TX ergibt sich bei mir die Frage, inwieweit sich die Vorspannung des FET auf die Leistung auswirkt? Im Text im CQ DL steht 4,7 k/6,8 k, im Schaltplan sind es dann 5,6 k/4,7 k. Jetzt schreibt ja DL9OBU, dass er "nur" auf 0,5 Watt Output kommt. Ist das evtl. die Ursache? Bzw. sollte eher auf 2 V Vorspannung eingestellt werden? Im Probeaufbau wäre ja probeweise ein Widerstandstrimmer für die Festlegung des Arbeitspunktes leicht einzubauen.

Tatsächlich ist die Vorspannung kritisch und beeinflusst die Ausgangsleistung deutlich. Man muss aufpassen, dass man nicht zu hoch geht und der Transistor heiß wird. Ein Trimmer wäre sinnvoll, auch um Streuungen der Transistoren auszugleichen. Übrigens habe inzwischen mit gutem Erfolg auch mal den IRF510 eingesetzt.


 CAT control support by  Lajos Höss, HA8HL




Download ft8qrp_cat11.ino


I tried your code and it works and I have made many QSOs successfully. Not only FT8 but WSPR and JT65 too. The Covid 19 lock down has been a big problem for me, I cannot go to my main QTH and I do not have access to my main rig either. It is also quite difficult for me to source proper components, I mainly salvage parts from old PCBs. I built a very simple direct receiver based on https://www.qsl.net/pa2ohh/09qrx1.htm. The vfo was modified to use a SI5351A and your code. This receiver is using Polyakov's mixer where the RX VFO is driven by half of transmit frequency.

 

The transmitter stage is my own design based on BD329 transistor Class A amplifier and 74AC14. It was extremely difficult to make the stage output signal clean enough to comply with legal limits. I tried many designs with MOSFET but without any success. Ringing, instability occurred all the time with low pass filter and dummy load. The transistor-based transmitter is stable and clean with low pass filter. All harmonics and spurs bellow 50 dbc. This transmitter is very basic and experimental but works. The output power of my transmitter with BD329 on different bands are: 80m – 3.4 watt, 40m – 3.4 watt, 30m – 1.8 watt, 20m – 1.4 watt.Currently I only have low pass filter for these bands, I made them plug-in style. No relays involved.

 

I have a problem with your code, at low audio frequency or high audio frequency it does not work. I do not understand enough your code. I think low frequency overflows the timer counter and the carry is not used. With high frequency I think the resolution of one cycle sine wave is not enough for precise frequency measurement. I am not a programmer, I cannot verify/modify the frequency measuring routine. Any help is highly appreciated. I think many other FSK based mode is supportable if low / high frequency problem is solved. At around 1500 Hz the original code works fine.  (B.K.: My trx works between 500 Hz and about 2 kHz. Below 500 Hz there will be an overflow resulting in a completely wrong output. And at higher frequencies it will work less exactly.)

 

Partially working CAT control support added to your code. The fake split mode is working now and the audio frequency is always between 1500-2000 Hz. The Arduino code emulates basic Kenwood TS-2000 TRX now. It works with Wsjtx hamlib and Flrig. Flrig requires disabling many unused CAT command polling. I have simple computer controllable VFO now. SSB voice receive is also supported.

 

See attached code. The code based on this (http://wa6pzb.blogspot.com/2015/03/prototype-radio-iv-cat-control.html?m=1), but modified to TS-2000 and your design + half frequency receiver. I have many problems, I tried to debug it with logic analyser and the help of the TS-2000 reference manual. I think wsjtx hamlib code has some bugs or I have a mistake somewhere in my code, which I could not figure out yet. The code works, but sometimes it crashes or a bad frequency shift is being computed. Sometimes the frequency measuring code on TX start or stop becomes invalid data, so I lowered with the code the limit frequency range. For example 100 Hz is not an acceptable modulation frequency input.

 






Elektronik-Labor  Lernpakete  Projekte  HF