Saturday, June 16, 2018

A simple arduino controlled 630 meter CW transmitter for amateur radio.

   This year, two new experimental bands became official,  the 2200 meter band and the 630 meter band.

   I wanted to start experimenting with the 630 meter band, 472kHz to 479kHz, but I don't have a radio capable of transmitting on that band.  So I decided to build one.

Where to begin?  Well, a CW transmitter is the easiest choice.  All you need to do is turn a carrier on and off with a Morse code key, so you only need an oscillator and a power amplifier.

   While searching around for other projects on that band, I found a wonderfully simple power amplifier circuit already designed by Rog, GW3UEP over in Whales.  His original write up can be found here:


   I've also been looking for a use for an Si5351 clock generator break-out board I was given last year.  It's a versatile little chip, capable of generating up to three simultaneous outputs from 100kHz up to 200Mhz.  It generates a square wave, and the power amplifier expects a square wave, so they should work well together.

   After a couple of weeks of work, I had a completed and working transmitter capable of producing around 6 watts of power.


Theory of operation:

    The arduino and Si5351 will generate a signal within the band, from 472 to 479 kHz.  A Morse code key or electronic keyer will be used to switch the signal on and off. 

    Frequency selection is accomplished by a single potentiometer and a spot tuning push button.  When you press the button, a low level signal will be sent out of the receiver output jack, allowing you to dial the transmitter to your desired frequency.  The band is so narrow, only 7kHz wide, that this tuning method is very quick and easy.

   Keying of the transmitter is accomplished by first switching a relay that grounds the receiver output jack to protect your receiver, waiting a microsecond, switching a T/R relay that powers up the amp and switches the antenna jack to the amplifier, waiting a microsecond, and finally turning on the Si5351 output at the desired frequency.

   Releasing the Key will turn off the Si5351 output.

   A timer is employed for a 'tail',  waiting 1 second before releasing the relays to switch back into receive mode.  This is to prevent the relays chattering away with every dit and dah while sending.  That timeout can be changed in the software, and could theoretically allow for full break-in operation if you don't mind banging your relays constantly.  That's up to you, I like having a bit of a tail.  Since this timer is software controlled, there's nothing stopping you from adding an additional pot and modifying the software to make the tail adjustable if you choose.

Here is the schematic of the completed unit.

   Circuit description:
       12-13.6 volts DC comes in and is immediately filtered by a .01uf capacitor to prevent RF leaking back out the power line.  There's also a large diode right at the power connector in reverse bias to protect the radio from reverse polarity connection.  You should have a 2-3 amp fuse in your power cord for safety.

       The power is routed directly to the two relays and a power switch.  I ran it directly to the relays due to the physical layout in my unit, but you could run the relay feed through the power switch as well if you choose.

       Beyond the power switch we have a 7805 regulator to provide 5V to the arduino nano and Si5351 board.  You should put a small heat sink on the 7805, it will get pretty warm.

       The arduino is the brains of the machine, providing frequency control and keying.  It takes input from three items.  The spot tuning push button,  a pot for tuning, and a jack for connecting your Morse code key or electronic keyer output.   The tuning pot can be any value from 1K up to 10K.

       Connected to the arduino we have an Si5351 break-out board.  These are available from etherkit or adafruit at a low cost.

Etherkit link

Adafruit link

       The output of the Si5351 is low, around 3.3 volts.  Not enough to switch on the power MOSFET in the amplifier, so I needed a simple driver to bring that voltage level up to around 11 volts.  This is accomplished through a single NPN transistor.  You can use any generic switching transistor like the 2N3904 or 2N2222.

       Additionally, the second output of the Si5351 is used for spot tuning and runs to a wire that's wrapped around the receiver output's center conductor.  When that output is enabled, plenty of signal couples to the receiver out for you to hear it and tune to your frequency.

      Keying is accomplished by simply switching the CLK0 output of the Si5351 on and off.

      The power amplifier is a class E amp.  The incoming signal switches the MOSFET on and off at frequency.  The resulting high power square wave is smoothed by L2 and C2 into a sine wave.   The low pass filter provided by L3 and C3-C4 will suppress the second order and above harmonics by more than 50db as required by the FCC's rules.   The second order harmonic falls around 900kHz, within the AM broadcast band, so it's important to suppress that to prevent interference.

     I built it as the author designed it, Manhatten style on a flat piece of PCB.  There is a small heat sink on the MOSFET and I cut the copper around the sink to isolate it from ground.  This is IMPORTANT since the MOSTFET's tab is at V+ and would cause a short if not isolated.  Also be sure to isolate the mounting screw on the back side of the board.

    The three coils are easy to wind.  Use magnet wire and follow the turn counts listed in the schematic.   If you have a 3D printer, I designed coil forms at the correct dimensions that can be downloaded from thingiverse at the link below.

3D printable coil forms.

     Two relays are employed.  RLA1 is a DPDT type.  One half of it switches power on to the MOSFET, the other half switches the antenna jack from the receiver output to the amplifier output.
RLA2  is a DPST type that grounds the receiver output jack during transmit in order to protect your receiver from excessive RF from the amplifier.

    NOTE:   It should be possible to adapt this transmitter to any of the amateur bands by changing L2, L3, and C2-C5, then modifying the arduino software for the different frequency range.  You'll have to research class E RF amplifiers to calculate the appropriate values.


   The arduino software can be downloaded from github here:

630 meter arduino sketch

   You WILL need to add the etherkit Si5351 library in your arduino IDE.  Go to the sketch menu and select 'Include Library' 'manage libraries'.  In the library manager, type 'etherkit' into the search box and add the Etherkit Si5351 library.   This library will work with the adafruit break out board as well.  I chose this library since it allows you to pass a direct frequency rather than the complicated method adafruits library requires.

   I have liberally commented the software to make it easier to follow. 

   The first section and setup routine define variables that are used through the program,  setup the hardware I/O pins, and defines an interrupt routing.

   The rest of the program can be broken down into three sections.   The main loop,  the interrupt routine,  and a tuning function.

   The main loop handles the keying and tuning.   It checks the spot button and if pressed, calls the tuning function.   I ONLY change the tuning while the button is pressed.  This is to prevent 'jitter' of your frequency while transmitting.   It then checks for key down or key up and switches the relays, turns the Si5351 output on or off as needed.

   The tuning function reads the tune pot and calculates a number from 0 to 7000, the width of the 630 meter band.  The resulting number is added to 472000, the bottom edge of the band, and stored in the variable 'freq'.  'freq' is then multiplied by 100 to bring it to the value the etherkit library expects, in 1/100ths of a Hz.

   The interrupt routine is set to run 1000 times a second and is used to decriment a counter for the tail delay.  I used an interrupt routine for precision since I know it will run exactly 1000 times a second.  I can then use a variable as a timer within the program.

Video:  (please watch these before you ask questions, you'll probably find your answers.)

   I produced a series of videos on the transmitter.  You can follow the entire process, my trials and errors through the project.   Skip right to the last video if you just want to see the finished design.

Video #1 is me talking about the idea and initial design of the transmitter
Video 1,  the design.

Video #2 is my initial hardware build in a small case.
Video 2. hardware nearly done. (or so I thought!)

Video #3 is a talk about the arduino software and a demo of the operation of the hardware.
Video 3. The software is done.

Video #4 is the final hardware build of the complete and working unit.
Video 4. The hardware redesign and demo

   This little transmitter performs extremely well and I'm very happy with the results.  If you choose to build it, I'm sure you'll find it to be a nice little workhorse. 

73, and maybe see you on the air sometime.

Kevin,  KB9RLW