WSPR Transmitter LPF Control

The WSPR transmitter needs an LPF to help make the transmission clean with low-level harmonics. I chose an RV3YF LPF board which has LPFs for each ham band. The band to be filtered is chosen by raising the voltage on the correct pin in a row of pins. The WSPR transmitter uses a separate PIC controller to select the correct pin. I chose a separate PIC so that the LPF and its control could perhaps be put into a module together. I haven’t actually done that but it’s possible.

WSPR Tx LPF Control Overview

As you can see the D1 Mini tells the PIC which pin to select. The PIC uses a 4094 to convert from serial to parallel. 

I had intended that the interface between the D1 Mini and the PIC be an I2C connexion. But I couldn’t work out how to make the PIC act as an I2C slave. There are plenty of examples of I2C masters, but slaves are thin on the ground. So the interface is a home-brew protocol. Luckily I had just enough pins available on the PIC. The LPF_CONTROL line is raised by the D1 Mini when it is going to configure the LPF. It then raises and lowers the LPF_DATA line the appropriate number of times. Then the LPF_CONTROL line is lowered to denote the end of configuration. The PIC sits waiting for the LPF_CONTROL to go high and counts the number of transitions of LPF_DATA seen before LPF_CONTROL goes low.

On the output side of the PIC, my RV3YF LPF needs 14V to reliably switch the relays. So the 4094 has a 14V supply. When LPF_CONTROL goes low the PIC lowers the 4094 output enable pin. It then clocks out the number denoting the band to the 4094 thus selecting the correct LPF band. The PIC then raises the 4094 output enable pin and the band is selected on the LPF module.

I found it impossible to debug the D1/PIC interface on a breadboard as the signals were too noisy. So I decided to put the circuit straight to strip board. This solved the  debug problem and it worked happily when powered from the bench supply. I then added some circuitry to supply the 14V from an off-the-shelf buck converter. Unfortunately (or probably my own foolish fault), when I was adapting the power circuitry I managed to make (at least) the RTC module go up on smoke. I still don’t know why it did. 

I’ll post the code and the strip board layout next time.

Switchable LPF Response

The switchable LPF for my WSPR Transmitter finally arrived and I’ve made some response graphs to test how it performs.

Test setup for Switchable LPF

The obvious bit of test kit to check out the LPFs is my nanoVNA. I suggest you buy a nanoVNA from a reputable dealer as there are plenty of clones which don’t work as well as the original.

The test setup is above. The 27 V in the drawing can go as low as 13.8 V, but will not work at any lower voltage. 

As I’ve mentioned before I find the small screen on the nanoVNA difficult to control with my clumsy hands. So I wrote another simple MATLAB script ajfLogMagS21 to drive the nanoVNA to get the response charts. The calibration done as before using my ajfCalibrate MATLAB script. The LPFs will attenuate the harmonics by 25 dB which will be enough for my feeble WSPR output.

RV3YF LPF 1 9 MHz Response

RV3YF LPF 3 5 MHz Response

RV3YF LPF 7 10 MHz Response

RV3YF LPF 14 MHz Response

RV3YF LPF 18 MHz Response

 

RV3YF LPF 21 MHz Response

RV3YF LPF 24 28 MHz Response

The next step is work out how to drive the switching of the bands. First thoughts are to send commands via I2C and have something convert that to a 13.8-27 V signal on the appropriate pin. I2C is attractive as I already have an I2C bus in the WSPR Transmitter.

Yet Another WSPR Transmitter

I have joined the ranks of the many who have built a WSPR Transmitter. Why? Mostly so I can have a bit of fun. The problem is difficult enough to be interesting but not so complex as to become boring. Having said that there’s a lot involved.

I can transmit WSPR with my TS590S and presumably any other off-the-shelf transceiver. But these all have fan noise so I wouldn’t want to run them overnight. So the transmitter will be able to be used to test propagation overnight.

But mostly I’ve made it to have the fun of making it.

The transmitter cycles through the amateur bands from 80m to 10m optionally transmitting on each band. An RTC module (DS3231 I2C Real Time Clock Module) is used to keep track of the real time. An AD9850 DDS Signal Generator Module produces the RF signal. Both of these are controlled by a D1 Mini ESP8266 Dev Board. The ESP8266 does all the encoding of the WSPR tones and decides when to send them. The signal from the AD9850 is run through a power amp (10W linear HF PA from QRP Labs) then through an appropriate LPF to the aerial.

WSPR Transmitter Picture

Currently I’ve only had it on air on the 40m band as I only have a home-brew 40m LPF to hand. This works fine and the signals are being picked up in Europe ok. I’m getting a switchable LPF for the other bands but it’s taking a while to arrive from Russia. However the transmitter works on every band as my TS590S close to the transmitter can pick up the stray signals when I run it into a dummy load. The signals are decoded fine using WSJT-X.

More details later.

Tuning a loop with nanoVNA

One of the aerials I use is a small transmit loop. These loops have a really narrow bandwidth which is good and bad. Good in that you get much less noise, bad in that you have to keep retuning. If you stick to one frequency such as with some digital modes it is ok as you don’t have to retune too much. Other modes such as SSB and CW are less easy to use with a loop.

You can tune the loop by transmitting into it and tuning the loop until the SWR is good. This is a bit anti-social as you can be transmitting for quite some time as you tweak the tuning. I used to use a noise bridge which works quite well as long as your ears don’t get tired. The nanoVNA offers easier, more visual way of tuning. 

nanoVNA loop tuningThe nanoVNA sweep is quite slow so you need to have a fairly wide sweep span so that you can see the dip in SWR when you are tuning the loop. So you set the centre frequency and then the span and then tune until you see the dip disappearing off one end. Then you fine-tune the loop and end up with the dip at the centre frequency. The loop is now tuned as in the photo above.

This works fine with the nanoVNA GUI, but as I am nearly always running a Mac when I’m on the radio I wrote a Matlab script to do the tuning. The script is run and sets the centre frequency and span for you.

Here’s a sample tuning transcript (user input in green):

>> ajfTuneLoop
connect: Serial-/dev/tty.usbmodem4001
status:  open
press RETURN when loop is connected to ch0
Frequency to tune to (MHz) ? 7.074
tune loop for dip at the marker, press RETURN when tuned ok
close
>> 

The script is ajfTuneLoop.m.

Cebik Moxons in the Attic

I now have both 2m and 70cm Cebik Moxons in the attic separated using a HA8LFK diplexer. After trying out the 70cm aerial it is clear that it needs a preamp to pick up any signals. Partly this is due to the poor coax I’m using and I should replace it with something better. So I’ve added an M-100 preamp powered from a shack PSU through a pair of bias-tees.

I tried bypass the M-100 with a relay but I haven’t been able to source a relay that works well at UHF. Usually the non-connected path is only 20 or 30 dB down on the connected path. This is not safe enough to protect the preamp, so that’s another reason for giving up transmitting for now. I’m pretty sure the aerials will not be good enough for decent transmissions and I would end up being the recipient of pleas from an OM: “I got the Mike, Zero and Yankee, your callsign again again please…”.

The setup looks like this scribble from my lab book:

Scribble form lab book

Unfortunately the M-100 draws 55mA which is 5mA too high for the built-in bias-tee in the SDRplay RSP2. The RSP2 is my receiver of choice at the moment. More on that later.

Cebik Moxons, SDRplay and satellites

There was a pass of the AO-91 satellite over my location today and I listened to the ham radio operators operating through it.

I used my home-built Cebik Moxon aerials which are located in my attic and the nice SDRplay RSP2.

Cebik Moxon in attic

Here’s a screenshot of SDRuno displaying the AO-91 signals for those of you who don’t think the Doppler effect is real.

Doppler on Waterfall

You can easily see the received signal changing frequency as the satellite hurtles past.

This is what it sounds like. 

AO-92-12.09-Wednesday-May-8-2019-20190508-1209.m4a

It was recorded using Audio Hijack Pro from a Microsoft Remote Desktop session of SDRuno on a Dell XP workstation. Apologies for the over-driven audio — I was concentrating on receiving rather than recording.

HA8LFK Diplexer Characterisation

I decided to build or buy a diplexer to communicate with LEO (low earth orbit) satellites that use cross-band operation.

Some of the satellites in LEO are U/V or V/U. U/V means the satellite receives at UHF but transmits at VHF. V/U is the other way around.

My space aerials are in the attic and there are only two cables going from the shack to the attic. One thick cable is used solely for HF, and the other thinner cable is used for higher bands, 6m, 2m and 70cm.

A diplexer allows the use of different frequencies on the same cable. In this case it allows both VHF and UHF aerials to be used on the same cable. The diplexer has one input (from the transceiver) and two outputs (one to the VHF aerial and one to the UHF aerial) when transmitting. The diplexer blocks VHF signals going to the UHF output, and also blocks UHF signals going to the VHF output. In this way the transmit power goes where it is most wanted, that is, to the appropriate aerial. 

On receive the same ports are used but there are two inputs (one from each aerial) and one output (to the transceiver).

I decided not to built a diplexer for VHF/UHF operation as fiddling with inductors at those frequencies can be a bit hit-or-miss unless you use SMD components. It’s much easier to buy one, especially for those of us who are challenged when building VHF and UHF inductors. There are a few diplexers on offer, and I chose one on eBay from HA8LFK. It seems well built and works fine. The 50W limit certainly won’t affect me just now as the highest power I can send on VHF/UHF is 5W. One drawback may be that the sockets are SMA and my shack mostly uses BNC for VHF and above.

Diplexer

I have characterised this diplexer by sending sine waves of various frequencies through its transmit path and measuring the outputs. The signals came from my WaveTek model 1062 sweep generator and were measured at my HP 54615B scope. I used SMA/BNC adapters and short BNC cables to connect the diplexer to the test equipment.

Ha8lfk diplexer graph

As you can see the sweep generator signal is almost flat. The VHF port peaks a little lower than the 2m band. The UHF port peaks a little lower than the UHF band. Neither seems significant.

The insertion loss on transmit is 1.45dB at 2m, and 1.79dB at 70cm.

I didn’t make a graph for receive but did measure the insertion losses: 0.72dB at 2m, and 1.24dB at 70cm. This surprised me as I would have thought the diplexer would be symmetric, but it appears not.

Now to use it in anger …

70cms Cebik Moxon Aerial for LEO Satellites

The 70cms (435MHz) version of the Cebik Moxon is now built and shows an SWR of 1.1 in the shack as measured with my AW07A antenna analyser. Hopefully this SWR will not change too much when I put in in the attic.

The elements are made out of #12 AWG wire from RS Components. The sizes are as specified in Cebik’s original article published in the ARRL QST in August 2001 “A Simple Fixed Antenna for VHF/UHF Satellite Work”. The phasing line is built as for the 2m version using RG59U coax cable from BitsBox only using a length for the 70cm band. The matching line is made from old 75Ω cable TV cable again at 70cm band length. The elements and lines are explained in my earlier post about ‘Building the 2m Cebik Moxon’.

The elements are stapled to an old wooden curtain pole to keep the driven elements and reflectors apart. At the ‘floating’ end they are kept apart using the insulation from old multi-core telephone cable and the shaft from cotton buds. I’ll hot-glue these in place once the aerial is in the attic. The distance between these floating ends is the most critical in the whole aerial.

LL0foAdTSrmGQ6ghONMY2A

I plan to use this aerial with the 2m version and suitable diplexers to communicate with U/V or V/U LEO satellites. Watch this space!

Satellite Aerial Link Budget

I’ve had a little luck transmitting to a satellite. I’m using packet as I can use the 2m Cebik Moxon aerial for both transmit and receive. To see if the ISS should be able to hear my signals I wrote a link budget program in Racket. There’s a few assumptions in it but it seems to confirm the ISS should have no problem hearing me on 2m. The program shows:

Transmit power (W)?
5
Frequency (MHz)?
145.825
Elevation (°)?
40
Transmit power:   5 W (36.99 dBm)
Frequency:        145.825 MHz
Satellite height: 403 km
Elevation angle:  40°

Satellite is 5396 km away
Signal at satellite is 9 dB above noise

This seems borne out as I do receive what seem to be digipeated packets just after I transmit them. But I can’t confirm on the ISS site that they are real and not just an echo from somewhere.

70cms doesn’t look as good:

Transmit power (W)?
5
Frequency (MHz)?
435.255
Elevation (°)?
40
Transmit power:   5 W (36.99 dBm)
Frequency:        435.255 MHz
Satellite height: 403 km
Elevation angle:  40°

Satellite is 5396 km away
Signal at satellite is -0 dB above noise

Increasing the power to 25W might work:

Transmit power (W)?
25
Frequency (MHz)?
435.255
Elevation (°)?
40
Transmit power:   25 W (43.98 dBm)
Frequency:        435.255 MHz
Satellite height: 403 km
Elevation angle:  40°

Satellite is 5396 km away
Signal at satellite is 7 dB above noise

I’m currently building the 70cms version and will try some FM voice contacts.

Here’s the link budget program:

#lang racket
; link budget for Cebik Moxon in attic
; Andy Fletcher Jan 9, 2019 

;
; definitions
;
(define (get_user_input prompt)
  (begin
    (displayln prompt)
    (string->number (read-line))))

(define (log10 n)
  (/ (log n) (log 10)))

(define (watts2dbm w)
  (* 10 (log10 (* w 1000))))

(define (degrees2radians d)
  (* (/ pi 180) d))

(define (square x)
  (* x x))

; distance to satellite in km
(define (satellite_distance e_degrees height)
  (let* ([e (degrees2radians e_degrees)]
         [earth_radius 6371]    ; kms
         [r (+ height earth_radius)] ; distance between geocentre and satellite
         )
    (sqrt (+ (square (* earth_radius (cos e))) (square r) (- (square earth_radius)) (- (* earth_radius (cos e)))))))

; free space path loss
(define (fspl f d)
  (- (+ (* 20 (log10 f)) (* 20 (log10 d)) 32.45)))

;
; execute
;
(let* (
       [ptx_watts (get_user_input "Transmit power (W)?")]
       [f         (get_user_input "Frequency (MHz)?")]
       [e_degrees (get_user_input "Elevation (°)?")]
       [h 403]               ; satellite height in kms
       [cable_loss -3.55]    ; measured dB
       [tx_gain 6.0]         ; Cebik Moxon modelled gain in dB
       [roof_loss -6.0]      ; assumed loss of signal going through the roof in dB
       [rx_gain 2.0]         ; assumed receive gain at satellite in dB
       [sat_max_sens 124.0]  ; assumed satellite maximum sensitivity in dBm
       [distance_to_satellite (satellite_distance e_degrees h)]
       [ptx (watts2dbm ptx_watts)]
       )
  (begin
    (printf "Transmit power:   ~a W (~a dBm)\n" ptx_watts (~r ptx #:min-width 1 #:precision 2))
    (printf "Frequency:        ~a MHz\n" f)
    (printf "Satellite height: ~a km\n" (~r h #:min-width 1 #:precision 0))
    (printf "Elevation angle:  ~a°\n" e_degrees)
    (printf "\nSatellite is ~a km away\n" (~r distance_to_satellite #:min-width 1 #:precision 0))
    (printf "Signal at satellite is ~a dB above noise\n"
            (~r  (+ ptx cable_loss tx_gain roof_loss (fspl f distance_to_satellite) rx_gain sat_max_sens) #:min-width 1 #:precision 0))))

Building the 2m Cebik Moxon

The Cebik Moxon is made up of four driven elements, two reflectors, a phasing line and a matching line.

The matching line is needed to match the 25Ω impedance presented by the aerial to the 50Ω impedance expected by the coax feed to the radio. It is made up of parallel quarter-wave lengths of 75Ω cable. I modelled this in an excellent application SimSmith by AE6TY to see how critical its length is (the answer being not very much). The SWR is 1.125 at 351mm, and only rises to 1.13 at 330mm and 354.5mm.

I worked out the velocity factor of the RG59U 75Ω cable (bought from Bitsbox who were very prompt and helpful but didn’t know its velocity factor) by building a TDR out of a circuit to make a fast pulse and my HP54615B scope. As usual Alan, W2AEW came to the rescue with this video #88: Cheap and simple TDR using an oscilloscope and 74AC14 Schmitt Trigger Inverter.

Here are my sums to work out the velocity factor of the RG59U cable measured with the TDR circuit.

5m takes 48.8ns between peaks, so the signal takes \frac{48.8}{2} = 24.4ns  to go 5m which is 4.88ns/m, so the speed is  \frac{1}{4.88ns/m} = 204.918 \times 10^{6} m/s, so the Velocity Factor, VF = \frac{204.918 \times 10^{6}}{c} = 0.683.

Using EE Toolkit on iPhone, in air ¼ \lambda is 513.7mm at 145.9MHz.

So ¼ \lambda should be 513.7 x VF = 350.857mm.

SmithMatching37z5line
SimSmith Matching Line

The phasing line is just a quarter wavelength of 50Ω cable which feeds the other element 90° out of phase from the first. Here’s an XY scope picture of the phasing.

Lissajous of phasing

It should be a bit more upright but I think that is probably due to the way I’m connecting it to the scope rather than the phasing line itself.

Now the bit I am particularly bad at: putting it all together.

I made the elements out of 6mm aluminium round tube. The tube is easy to cut with a hacksaw and to bend using a pipe bender. The matching section and phasing line are connected to the rods using solder tags and screws. The driven elements and reflectors are kept apart by whittled pea sticks. This distance between the driven elements and the reflectors is the most critical measurement. The pea sticks are held in place with shrink wrap and friction. The elements are hot-glued to a plastic drain pipe. This is not very robust, but works as long as the aerial isn’t disturbed too much. I’ll have to fix this properly if I want to move the aerial from the attic to the garden.

Cebik in attic
Aerial in attic