WSPR-RX V3 Documentation page
WSPR-RX Hardware Version 3 is a fixed frequency receiver with the following characteristics:
Built for one fixed frequency for one of the radio amateur bands .
Is designed to be "plug-and-play" with zero settings.
Powered from a USB port from a computer or using a USB charger.
Intended to be used with a computer running WSPR reception software like WSJT-X.
Frequency: Dependent on model.
10m model= 28.124,600MHz
12m model= 24.924,600MHz
15m model= 21.094,600MHz
17m model= 18.104,600MHz
20m model= 14.095,600MHz
30m model= 10.138,700MHz
40m model= 7.038,600MHz
80m model= 3.568,600MHz
160m model= 1.836,600MHz
-117dBm or better (3dB SN/N in 500Hz Bandwith)
Theory of operation:
The WSPR-RX V2 is a direct conversion double side band receiver that receives on one fixed frequency on a Ham band.
When connected to computer that runs a WSPR software it will form a system for trouble free WSPR reception on a single band.
Internally it uses a PLL controlled local oscillator (LO) that can be tuned to any frequency from 8kHz to 150MHz.
The LO is controlled from an Arduino that determines the frequency at start up.
The LO is feeding a mixer that mixes the incoming radio frequency (RF) from the antenna with the LO.
The output is a low frequency (LF) output that is amplified and low pass filtered by the LF amplifier.
The LF signal is output on the 3.5mm audio connector.
The RF signal is filtered out using a double tuned band pass filter that select the signals of interest.
This band pass filter is factory tuned to the WSPR frequency.
The band pass filter can only be tuned over a narrow range and there are therefore different models sold that has different band pass filters fitted.
To operate the WSPR-RX V2 do the following:
Connect it to a computer:
Connect the "Audio Out" from the receiver to a line-in or microphone input on a computer using an appropriate audio cable.
Connect an HF antenna to the SMA connector marked "Antenna Input".
Connect a 5V power source to the micro USB connector.
Configure the computer software
Start the appropriate WSPR receive software on the computer, e.g on a Windows based PC you may use the software "WSJT-X".
Configure the software to use the correct soundcard and adjust the volume using the windows sound mixer adjustment.
Select the appropriate Ham band and if you intend to send your report to the WSPR network make sure to enter you Ham radio call sign and position in the settings as well.
Tick the "Upload spots" option.
The receiver is designed to be maintenance free and "plug-and-play" so there are no settings or adjustments that needs to be done on it.
Once the computer program have ben properly set there is nothing to adjust.
The receiver will always be on frequency and should hopefully give many years of trouble free operation.
The Receiver Frequency is calibrated and trimmed at delivery but if the user wants to re-calibrate or change the LO frequency, the following procedures can be used.
Calibrating the reference oscillator.
The reference oscillator is a 25MHz or 26MHz Crystal.
The reference oscillator can not be adjusted but its frequency can be determined and if off it can be compensated for in software
The calibration procedure outlined below will determine its exact frequency and store it in the Arduino EEPROM.
Once the reference oscillator exact frequency is known then the LO frequency will be correct.
A frequency counter is needed for measurements and a USB to Serial converter is needed to issue commands to the Arduino.
Open the receiver by removing the top screws and the back screws on the USB side.
lift the lid and back plate off.
Connect a Serial to USB converter (sometimes called an FTDI converter)
The FTDI Converter can also power the board, in that case make sure it feeds 3,3V an not 5V as that will damage the receiver. This is because the FTDI adapter bypasses the built in voltage regulator on the receiver. If you are unsure what voltage is used, then plug in the adapter to the computers USB bus but not to the receiver. Use a voltage meter to measure the voltage between the pins marked GND and VCC. It needs to be between 3.0 and 3.4V
Use a terminal software to communicate with the Arduino Micro controller in the receiver. You may use a terminal software or use the Arduino IDE.
I use a nice freeware Windows software called "Terminal". link here.
I you use the Arduino development software open it's "Serial Monitor"from the "Tools" menu.
Set the baud rate to 57600 and 8N1.
Set CR+LF to be sent when enter is pressed.
In the "Terminal" Software tick the Cr+LF option, see picture.
In the Arduino Serial Monitor you can set this in the meny at the lower right of the Serial Monitor dialog, see picture.
Press the reset button on the Arduino and check that you can see startup message properly.
Here is an example output from a terminal software when the WSPR-RX boots:
Zachtek HF WSPR-RX Hardware version 2, Software version: 1.01Initializing..
Receive frequency set to is set to 14095600Hz
Type HELP for information on commands
If you don not see the startup message then trouble shoot your serial connection.
Type HELP and press enter.
If no help text is displayed then trouble shoot you serial transmission, especially the LF-CR setting setting described in step 5
Connect a frequency counter to test point 3 (TP3) and measure the frequency of the local oscillator.
Issue the command CALOUT.
The Local Oscillator will change it's frequency to around 10MHz.
Read the exact frequency on the counter, if it is low then increase the reference frequency, if it is high - lower the reference frequency.
Use the commands INCREF and DECREF to do this.
You may start by changing it by 100 Hertz or so e.g. INCREF 100.
When you get close to 10MHz use smaller changes to get on the exact frequency
Continue to increase or decrease the reference frequency until the LO frequency is exactly 10MHz. It should be possible to get to within 1Hz.
Set the LO back to it's WSPR frequency using the SETBAND command. E.g if your receiver is a 20m version issue the command SETBAND 20.
Save the reference frequency in EEPROM with the SAVE command.
Reset the Arduino.
Verify that the Startup messages are correct.
Measure the LO and verify that it is on frequency.
Changing the firmware.
With a serial adapter the Arduino can also be reprogrammed from the Arduino IDE.
This can be useful in a number of situations, for instance if you want to set the receiver to a different frequency than the predefined WSPR frequencies.
Changing the receive frequency from the predefined band frequencies.
If one wants to change the receive frequency it can be done using the following procedure:
Connect a Serial to USB converter as outlined earlier and connect to a PC or Mac that has the Arduino IDE installed.
Download the latest firmware from Github and open it in the IDE.
In the Arduino IDE, set the correct serial port using the menu "Tools, Port:"
Set the board type using the "Tools" menu and submenu "Board:"and choose the board "Arduino Pro or Pro Mini"
Use the "Tools" menu, submenu "Processor:" and set it to ATmega328P (3.3V, 8MHz)
Edit the source code and enter your desired frequency. The frequency is set by one of several #define statement in the beginning of the code.
#define RXFREQ17m 18104600ULL //17m 18.104,600MHz
#define RXFREQ20m 14095600ULL //20m 14.095,600MHz
#define RXFREQ30m 10138700ULL //30m 10.138,700MHz
#define RXFREQ40m 7038600ULL //40m 7.038,600MHz
#define RXFREQ80m 3568600ULL //80m 3.568,600MHz
#define RXFREQ160m 1836600ULL //160m 1.836,600MHz
#define RXFREQ630m 474200ULL //630m 474.200kHz
#define RXFREQ2190m 136000ULL //2190m 136.000kHz
Which one of these defines that are being used is determined by what band you choose with the SETBAND command
If for example you have the 20m version of the receiver you will change the RXFREQ20m define.
The Frequency is entered in Hertz, e.g if you want to use 14.100MHz you would write it as 14100000.The ULL at the end means "Unsigned Long Long" and helps the compiler to avoid lowering the precision of the stored value.
The local oscillator will use this exact frequency and as the receiver is a direct conversion type it will receive both the lower and upper side-band on this frequency. In case of WSPR reception set it 1500Hz lower than the WSPR transmit frequency.
Recompile and upload the modified source code to the on-board Arduino.
Check the boot messages in the Serial monitor and make sure the new frequency is used.
Optionally measure the LO frequency with a frequency counter on test point 3 as outlined in the Calibrate the reference oscillator paragraph.
If you moved the frequency far you might need to adjust the bandpass filters.
The bandpass filter has a bandwidth of 4% of the receive frequency so as a rule of thumb if you moved the receive frequency more than 2% you will have to readjust the bandpass filters.
Continuing with the 14,1Mhz as an example 2% of 14,1MHz is 282kHz.
Adjusting the bandpass filters.
Power the receiver with an external 5V power source.
Input a signal with a signalgenerator that is 1500Hz above the LO frequency and around -80dBm in amplitude.
Measure the LF signal on test point 4 (TP4) with an oscilloscope-
The frequency should be around 1500Hz. The amplitude of the LF signal will be in the tens or hundreds of mV peak-to-peak in amplitude depending on how far off the receiver bandpass is.
Adjust L2 and L3 for maximum signal on test point TP4.
Alternatively you might use an VNLA and adjust L2 and L3 for 50 input at the desired frequency.