fcisotta / smart-vfo

A smart DDS VFO firmware, based on Si5351
GNU General Public License v3.0
0 stars 0 forks source link

This is a flexible multi-band VFO firmware running on the Arduino platform, driving a Skyworks (formerly SiliconLabs) Si5351 DDS.

This work started from the Multifeatured VFO project by Jason Milldrum (NT7S) and Przemek Sadowski (SQ9NJE), and moved to the goal of implementing a set of features generally available in commercial-grade transceivers, while keeping focus on performance and maintainability.

It relies on

This project is licensed under the terms of the GNU General Public License v3.0.

Initial authors: Giovanni Caracuta (I7IWN) and Francesco Cisotta (IZ2QPV).


[!NOTE]
A fork of this project is available, addressing single band RTX operations. While one band only is supported in this variant, this allowed featuring complete band configuration at runtime (band limits, along with conversion design, power levels, etc. may be set in the calibration menu, with the front-end controls). Thus, no coding is required to set up firmware for the RTX project.



Table of contents


Hardware requirements

Component Description Datasheet
Arduino Nano board This firmware is designed to run on an Arduino Nano board (any version). It supports Arduino Uno as well, though with minor adjustment to cope with the fewer ports available. Arduino Nano
Si5351 module A DDS in the Si5351 series of clock generator ICs from Skyworks (formerly SiliconLabs) Si5351
Two PCF8574 modules I2C modules to serialize control of a number of parallel output signals. TI PCF8574

Other components are outlined in the circuit schematic below.


Circuit connections

Schematic

PCF8574 configuration

module I2C address
PCF8574/1 32
PCF8574/2 33


User Interface controls

                UI panel

Blue-labeled button functions may be activated by a long press (> 1 s).

Red-labeled button functions are enforced at boot time.


Build control

Library dependencies

Library Author Description
Etherkit_Si5351 1 Jason Milldrum (NT7S) Driving the Si5351 DDS
Rotary Ben Buxton Controlling a rotary encoder
LiquidCrystal_I2C Frank de Brabander (maintainer Marco Schwartz) Driving a I2C display

The adopted version of each library is bundled with the firmware, for ease of build.

[!NOTE] 1 The following patch is applied on the embedded Etherkit library code, in order to succesfully set a new PLL freq after crossing the SI5351_MULTISYNTH_MAX_FREQ threshold downwards: in the uint8_t Si5351::set_freq(uint64_t freq, enum si5351_clock clk) method, at line 314, the call to pll_reset() is uncommented.


Operation information

The firmware may drive frequency synthesis according to the transceiver design, among the following:

You configure the hardware design, along with other design parameters, in the Calibration menu.

Whichever the design is, the following band limits are pre-configured, matching IARU/ITU bandplan for Region 1.

[!CAUTION] You are required to amend frequency constraints according to current regulations at the time of operation, or when a different Region applies. (For this purpose, update band limits in smart-vfo.ino at line 282, and adjust default entry frequencies accordingly in memory.ino at line 266. Finally increase EEPROM_DATAMODEL_VERSION in smart-vfo.ino at line 298, for changes to apply.)

Band Lower limit Upper limit Default entry frequency Default mode
160m 1.800.000 Hz 1.860.000 Hz 1.840.000 Hz LSB
80m 3.500.000 Hz 3.800.000 Hz 3.650.000 Hz LSB
60m 5.300.000 Hz 5.380.000 Hz 5.360.000 Hz LSB
40m 6.995.000 Hz 7.250.000 Hz 7.100.000 Hz LSB
30m 10.100.000 Hz 10.150.000 Hz 10.130.000 Hz USB
20m 13.995.000 Hz 14.500.000 Hz 14.200.000 Hz USB
17m 18.050.000 Hz 18.200.000 Hz 18.120.000 Hz USB
15m 20.995.000 Hz 21.500.000 Hz 21.200.000 Hz USB
12m 24.850.000 Hz 25.000.000 Hz 24.940.000 Hz USB
10m 28.000.000 Hz 30.000.000 Hz 28.950.000 Hz USB
6m 50.000.000 Hz 52.000.000 Hz 50.100.000 Hz USB
2m 144.000.000 Hz 146.000.000 Hz 144.500.000 Hz USB

Two independent VFO tuners (VA and VB) and 40 memory channels are available, persisting each:

Tuning parameter Range
TX frequency Relevant band limits
Modulation mode LSB, USB, AM, CW
RIT offset ± 5.000 Hz

VFO tuners persist individual operating data for each band.


Operation workflow

During an operating session, the user moves around the following operating states, which are described in the sections below.

stateDiagram-v2
    [*] --> CMNU
    CMNU: Calibration menu
    MENU: Operating menu
    VFO_DIAL: VFO dial
    MEM_DIAL: Memory dial
    [*] --> VFO_DIAL
    VFO_DIAL --> MEM_DIAL
    MEM_DIAL --> VFO_DIAL
    VFO_DIAL --> MENU
    MEM_DIAL --> MENU
    MENU --> MEM_DIAL
    MENU --> VFO_DIAL

At boot time, the firmware enters the VFO dial state, where tuning is allowed on either of the two VFOs.


Calibration menu

The display shows the available configuration items on the first line, and editable values on the second one.

The following settings may be customized under this menu. They are persisted into the EEPROM, and may always be reset to factory defaults as described in the section above.

Setting Description Range Factory default
Design Controlled transceiver design [Single conversion, direct conversion, Freq x 4] Single conversion
IF Intermediate Frequency value to result out of the first mixer (applies to Single conversion design only) 10 Hz - 90 MHz 9.999 KHz
Conversion Whether first mixed should be fed with sum or difference between RF and IF (applies to Single conversion design only) [LO=IF+RF, LO=IF-RF] LO=IF+RF
SSB offset IF offset for SSB modulation (applies to Single conversion design only) 10 - 10.000 Hz 1.500 Hz
CW offset IF offset for CW modulation (applies to Single conversion design only) 10 - 10.000 Hz 800 Hz
DDS calibration Frequency correction value for Si5351 (in Hz units) -9.000 - 9.000 Hz 0 Hz
CLK0 power Si5351 power level at CLK0 output 2 - 8 mA current out 8 mA
CLK2 power Si5351 power level at CLK2 output (applies to Single conversion design only) 2 - 8 mA current out 8 mA

DDS calibration is allowed at runtime, since the Si5351 is powered and CLK0 set to a reference frequency of 10,000 MHz while editing the correction factor. Please tune this parameter until the output measured on CLK0 is as close to 10 MHz as possible. Then press ENTER.

Features


VFO Dial

The display shows current VFO and tuned frequency, active modulation mode and possible RIT.

During operation, other flags are displayed to report for active features.

Features


Memory Dial

The display shows current memory channel, along with its frequency, mode and possible RIT currently tuned.

During operation, other flags are displayed to report for active features.

Features


Operating menu

The display shows the available configuration items on the first line, and editable values on the second one.

The following settings may be customized under this menu. They are persisted into the EEPROM, and may always be reset to factory defaults as described in the section above.

Setting Description Range Factory default Comments
Sound Whether sound is produced while completing selected actions OFF, ON ON This menu item is unavailable from v0.9.5, with sound feature removed in favour of the new 2m band (see CHANGELOG).

The second to last menu item allows monitoring the Si5351 device status, through the following runtime params (refer to Etherkit release notes for their meaning):

Param Symbol on display
SYS_INIT I
LOL_A A
LOS O
REVID R

The last menu item shows current firmware version and date of release.

Features


Contributions and future updates

Please feel free to report issues and submit pull requests with improvements and new features, and stay tuned for fixes and updates!

Giovanni Caracuta (I7IWN) and Francesco Cisotta (IZ2QPV)