A RPi controlled DDS-VFO for a Kenwood TS120S Transceiver from 1979
Copyright © Herbert Hanewinkel, DK7JJ
I own a Kenwood TS120S ham radio transceiver (with original PS30 power supply) built in 1979. It was one of the first inexpensive transceivers with PLL and digital frequency display. It weighs a few pounds but was called a mobile transceiver at the time. The service manual and a lot of informations about the transceiver were collected by radio amateurs and are available on the internet. Thanks to this information a faulty transistor could be located and replaced.
Because of the free running VFO, in the first hour of operation the frequency needs to be adjusted every few minutes. Therefore I decided to build a DDS VFO. A DDS VFO also improves FT8 operation because of split frequency support and remote frequency control.
- AD9850 DDS module
- 5V voltage regulator module
- remote control from an old DVB receiver
- small box for the VFO parts
- RPi with RASPIOS and Python3 and LIRC software (I use a RPi3)
- small OLED screen (ssd1306) for status display
- IR receiver
From the TS120S service manual an external VFO has to deliver a signal of 200mV rms at 500 Ohm in frequency range 5.5 Mhz - 6.0 Mhz This is exactly the voltage the chinese AD9850 DDS module produces. Therefore it should be no problem to adapt the module to the external VFO input of the TS120S transceiver.
The external VFO connector of the transceiver provides tho following lines:
Because in Germany AC voltage changed from 220V to 235V in the last decades the offical PS voltage of 13.8V increased to ~14.4V today. It should cause no problem because the manual says that the TS120S transveiver accepts a voltage up 15.5V.
- 9V, regulated, not specified but from docs limited to ~25-30 mA
- 14.4V, unregulated, directly from PS
- TX on (14.4V)
- TX-CW on (9V)
- shielded VFO signal input
The AD9850 DDS module needs 5V, ~130 mA. To power the module from the transceiver the 14.4V line must be used. To get the 5V a standard voltage regulator module is used (LM7805 + 2 capacitors). This results in a heat problem because the voltage regulator produces (14.4-5)V * 0,13A ~= 1.2W as heat. The standard cooling shield of the module was replaced by a larger shield of a DRAM module. Additionally 54 holes were drilled in the small box for better cooling.
Copper tape connected to ground is used on the inner side of the small box to shield the VFO.
The RPi runs a standard RASPIOS with Python3 and LIRC for IR handling.
The ouptut signal of the AD9850 DDS module is connected by a 10n capacitor to the VFO input line using a shielded cable. I made also experiments with an AD9833 module. It could be selected in my dds python code. For operation with the TS120S the output signal of the AD9833 module is too small and building a hf amplifier is another problem.
Simple voltage dividers are used to adapt the three lines TX on, TX-CW on, 5V to three GPIO-in input lines (max. 3.3V) of the RPi:
- RPi Pin29 GPIO5, 56k/15k 14.4V => 3.0V
- RPi Pin31 GPIO6, 47k/18k 9.0V=> 2.5V
- RPi Pin33 GPIO13, 33k/47k 5.0V => 2.9V
- RPi Pin30 Gnd
A TSOP IR receiver is connected to a GPIO-in pin, 3.3V and ground of the RPi:
The used remote control (Thomson from an old DVB receiver) sends non-standard signals and requires a raw LIRC input for operation. I prefer it because it could be switched to 3 different input sets (3in1 remote control).
- RPI Pin12 GPIO18 signal
- RPi Pin14 Gnd
- RPI Pin17 3.3V
The small OLED display uses SPI protocol and is connected to two GPIO-out pins, 3.3V and ground:
It is used by a RPi status display routine modified for an additional VFO frequency display.
- RPi Pin1 3.3V
- RPi Pin3 GPIO2 data
- RPi Pin5 GPIO3 clock
- RPi Pin9 Gnd
To program the DDS module three GPIO-out lines of the RPi are directly connected to the input lines of the AD9850 module:
- RPi Pin21 GPIO9 sync
- RPi Pin19 GPIO10 clock
- RPi Pin23 GPIO11 data
- RPi Pin25 Gnd
One GPIO-out line is connected to the PTT input line of my data box:
This is not required, but could replace the PTT control line (negative RTS signal from an USB-to-serial converter) from PC to the data box. I use a Windows netbook to control the HAMLIB server on the RPi via WiFi. There is only the audio cable from PC to the data box.
- RPi Pin37 GPIO26
- RPI Pin39 Gnd
Please note that the normal RTS signal is 5V or higher and negative (inverted), but the GPIO-out signal is 3.3V only and is positive. My home built data box can handle both signals using an opto coupler and an internal inverter.
The system worked fine on 20m, but on 10m band the system showed strange effects until the cover of the RPi was shielded. I used grounded copper tape as for the box.
There is still plenty of room in the box. It could be used by a RPi pico/wifi to replace the RPi3. But at moment an IR implementation as LIRC doesn't exist for the pico and I don't have experience with IP over wifi on a pico.
The DDS VFO itself has no controls. The RPi accepts IR input, mouse input and commands from a HAMLIB client for the VFO. (e.g. in WSJT FT8 software select HAMLIB as transceiver model and specify the HAMLIB port 4575 as declared in the python script)
The software consists of two Python scripts.
The Python script is independant of the remote control. LIRC converts remote control specific IR events to keyboard events handled by the Python script. Only LIRC configuration depends on the remote control. There are tutorials on how to setup LIRC on linux/RPi.
- dds.py for VFO control, IR input, mouse input and HAMLIB input. The software emulates two VFO's.
Supported keys by IR remote control and mouse:Band and mode selection must match the settings of the transceiver switches.
- left/right keys adjust the step size 10-100-1000-10000
- up/down keys change frequency based on step size
- 3 digit input for numeric frequency input 0-500 kHz
- OK key toggles VFO
- Colored key of remote are used for 5 memories to store/recall frequencies
- record key toggles ptt, switches tx on/off
- pause key toggles split mode
- forward/rewind keys select the band
- next/last keys select the mode
- mouse wheel changes frequency based on step size
- left/right mouse buttons adjust the step size 10-100-1000-10000
- wheel mouse button toggles VFO
- stats.py for the RPi status display
- irexec.lircrc The TUNER/AV key is used to start the VFO.
TS120S with DDS-VFO and RPi on top