Difference between revisions of "HW-9 VFO"

From Land Boards Wiki
Jump to navigation Jump to search
 
(48 intermediate revisions by the same user not shown)
Line 1: Line 1:
This is a work in process - Gathering pieces.
+
'''This is a work in process - Gathering pieces.'''
  
 
[[File:HW-9.PNG]]
 
[[File:HW-9.PNG]]
Line 5: Line 5:
 
== Features ==
 
== Features ==
  
* Replace HW-9 internal VFO with a digital VFO
+
Replace HW-9 internal VFO with a digital VFO
** HW-9 VFO has legendary issues
+
 
*** Mechanical issues with vernier
+
* HW-9 VFO has legendary issues
*** Drift due to thermal
+
** Mechanical issues with vernier
*** Lack of resolution
+
** Drift due to thermal
 +
** Lack of resolution
 +
** Backwards dial
 
* Fits within HW-9 VFO Box
 
* Fits within HW-9 VFO Box
 
* Controls Tx/Rx/BFO frequencies with rotary encoder
 
* Controls Tx/Rx/BFO frequencies with rotary encoder
Line 30: Line 32:
 
** Low pass filters to turn square waves to sine waves
 
** Low pass filters to turn square waves to sine waves
 
** 27 MHz crystal
 
** 27 MHz crystal
 +
 +
== Schematic ==
 +
 +
[[File:VFO-001-SCHEMATIC.PNG]]
 +
 +
== Connections to Radio ==
 +
 +
* RIT pot
 +
** Connects to Analog input
 +
*** Polled occasionally while in receive
 +
* Band switch
 +
** SW1 9V
 +
* T/R - transmit/receive
  
 
== Parts ==
 
== Parts ==
Line 36: Line 51:
  
 
* [[STM32|Blue Pill Card]]
 
* [[STM32|Blue Pill Card]]
 +
 +
[[File:STM32F103C8T6-Blue-Pill-Pin-Layout.gif]]
 +
 
* 3.3V operation work without level shifters for I2C
 
* 3.3V operation work without level shifters for I2C
 
** OLED can run from 3.3V
 
** OLED can run from 3.3V
Line 47: Line 65:
  
 
=== 128x32 OLED ===
 
=== 128x32 OLED ===
 +
 +
[[File:Si5351_003_720px.jpg]]
  
 
* [https://www.ebay.com/itm/2pcs-0-91-128x32-IIC-I2C-White-OLED-LCD-Display-DIY-Module-For-Arduino/293688288048?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2057872.m2749.l2649 Ebay]
 
* [https://www.ebay.com/itm/2pcs-0-91-128x32-IIC-I2C-White-OLED-LCD-Display-DIY-Module-For-Arduino/293688288048?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2057872.m2749.l2649 Ebay]
Line 55: Line 75:
  
 
* [https://github.com/olikraus/u8g2 U8g2: Library for monochrome displays, version 2]
 
* [https://github.com/olikraus/u8g2 U8g2: Library for monochrome displays, version 2]
 +
** [https://github.com/olikraus/u8g2/wiki/u8g2reference Reference library]
 
** Constructor
 
** Constructor
 
<pre>
 
<pre>
 
U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);  // STM32, Ebay OLED
 
U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);  // STM32, Ebay OLED
 
</pre>
 
</pre>
* Font
+
* [https://github.com/olikraus/u8g2/wiki/fntlistall List of Fonts]
 
<pre>
 
<pre>
 
   u8g2.setFont(u8g2_font_ncenB14_tr);
 
   u8g2.setFont(u8g2_font_ncenB14_tr);
 +
</pre>
 +
 +
===== Hello World Code =====
 +
 +
<pre>
 +
U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);  // STM32, Ebay OLED
 +
 +
void setup(void) {
 +
  u8g2.begin();
 +
}
 +
 +
void loop(void) {
 +
  u8g2.clearBuffer(); // clear the internal memory
 +
  u8g2.setFont(u8g2_font_ncenB08_tr); // choose a suitable font
 +
  u8g2.drawStr(0,10,"Hello World!"); // write something to the internal memory
 +
  u8g2.sendBuffer(); // transfer internal memory to the display
 +
  delay(1000); 
 +
}
 
</pre>
 
</pre>
  
 
=== Rotary Encoder/Breakout Board ===
 
=== Rotary Encoder/Breakout Board ===
 +
 +
[[File:RotaryEncoderCAD.PNG]]
 +
 +
 +
[[File:Si5351_004_720px.jpg]]
  
 
* Includes pushbutton Switch
 
* Includes pushbutton Switch
 
* Includes Pull-Up resistors
 
* Includes Pull-Up resistors
 
* Needs R/C filter on output for debounce
 
* Needs R/C filter on output for debounce
 +
* [https://playground.arduino.cc/Main/RotaryEncoders/ Reading Rotary Encoders] - Arduino reference
 
* [https://github.com/mprograms/SimpleRotary Simple Rotary Encoder Arduino library]
 
* [https://github.com/mprograms/SimpleRotary Simple Rotary Encoder Arduino library]
 
* [http://www.mathertel.de/Arduino/RotaryEncoderLibrary.aspx Library for the Arduino environment for using a rotary encoder as an input]
 
* [http://www.mathertel.de/Arduino/RotaryEncoderLibrary.aspx Library for the Arduino environment for using a rotary encoder as an input]
  
=== Si5351 FrequencyGenerator ===
+
=== Si5351 Frequency Generator ===
 +
 
 +
[[File:Si5351_001_720px.jpg]]
  
 +
[[File:VFO3.PNG]]
 +
 +
* I2C Daisy-chain connector
 
* 3 outputs
 
* 3 outputs
 
** Tx
 
** Tx
** Rx
+
** Rx (may not need to use separate output)
** BFO
+
** BFO - could be adjusted
 +
 
 +
[[File:Si5351_002_720px.jpg]]
 +
 
 +
==== Measurements ====
  
 
==== VFO TX ====
 
==== VFO TX ====
  
* From 5.9993-5.7493 MHz
+
* 250 KHz range
 +
** From 5.9993-5.7493 MHz
  
 
==== VFO RX ====
 
==== VFO RX ====
  
* RIT knob is taken in through an A/D and adjusts the frequency plus/minus 1 KHz
+
* RIT knob is taken in through an A/D and adjusts the receive frequency plus/minus 1 KHz
  
 
==== BFO ====
 
==== BFO ====
Line 91: Line 146:
 
* 8.8314 MHz in receive
 
* 8.8314 MHz in receive
 
* 8.8307 MHz in transmit
 
* 8.8307 MHz in transmit
 +
* 700 Hz difference but could be adjusted
  
 
=== Low Pass Filters ===
 
=== Low Pass Filters ===
  
* 6 MHz
+
* Si5351 has square wave outputs
 +
* LP filter can be used to change squarewave into sinewave
 +
* [https://rf-tools.com/lc-filter/ LC Filters Design Tool] - calculator
 +
* [https://kitsandparts.com Kits and Parts dot Com]
 +
** [https://kitsandparts.com/lpf.1.5.php Build a 7-pole Universal Low Pass Filter for HF]
 +
** Butterworth
 +
** Replace with SMT card?
 +
 
 +
[[File:LPF.1.5.sch.png]]
 +
 
 +
[[File:LPF.1.5.pcb.png]]
  
 
* [http://toroids.info/FT37-43.php Toroid Calculator]
 
* [http://toroids.info/FT37-43.php Toroid Calculator]
** [https://kitsandparts.com Kits and Parts dot Com]
 
 
* [https://kitsandparts.com/PCBs/LPF/filter2.pdf A short guide to harmonic filter for QRP transmitter output]
 
* [https://kitsandparts.com/PCBs/LPF/filter2.pdf A short guide to harmonic filter for QRP transmitter output]
 +
** [https://www.mouser.com/ProductDetail/Pulse-Electronics/PE-0805CLH1R5STS?qs=82jvyl5dHWdaYiLrQ038Kg%3D%3D PE-0805CLH1R5STS Example 1 uH inductor]
 +
** [https://www.mouser.com/Search/Refine?Keyword=PE-0805CLH Search PE inductors]
 +
** [https://www.mouser.com/Passive-Components/Inductors-Chokes-Coils/Fixed-Inductors/_/N-wpczZ1yzvvqx?P=1yzvlksZ1z0wqjdZ1z0woesZ1z0wrifZ1z0wri6Z1z0wrhxZ1z0wrhoZ1z0wrhfZ1z0wpbo&Ns=Pricing|0 Broader search]
 +
** [https://www.mouser.com/Passive-Components/Capacitors/Ceramic-Capacitors/_/N-5g8mZ1yzvvqx?P=1z0z7ymZ1yxboka&Rl=5g8mZer3vZ1z0x74kZ1z0x7xwSGT&Keyword=0805&Ns=Pricing|0 0805 caps C0G]
 +
 +
 +
[[File:LCFilterValues.PNG]]
 +
 +
* VFO and BFO frequencies are outside the bands (deliberately to void collisions)
 +
 +
==== BFO Filter ====
  
== Schematic ==
+
* 8.8314 MHz in receive
 +
* 8.8307 MHz in transmit
  
[[File:VFO-001-SCHEMATIC.PNG]]
+
[[File:BFO_Filter.PNG]]
  
== Libraries ==
+
[[File:BFO_Filter_IL.PNG]]
  
 +
== Libraries/Example Code ==
 +
* [https://github.com/land-boards/lb-Arduino-Code/tree/master/STM32/VFO_Si5351 Land Boards Application]
 
* [https://github.com/pu2clr/VFO_BFO_OLED_ARDUINO VFO and BFO with Si5351A, OLED and Arduino]
 
* [https://github.com/pu2clr/VFO_BFO_OLED_ARDUINO VFO and BFO with Si5351A, OLED and Arduino]
 
* [https://github.com/olikraus/u8g2 U8g2: Library for monochrome displays, version 2]
 
* [https://github.com/olikraus/u8g2 U8g2: Library for monochrome displays, version 2]
Line 116: Line 195:
  
 
== Videos ==
 
== Videos ==
 +
 +
=== VFO Design ===
  
 
<video type="youtube">58G5atwBX2M</video>
 
<video type="youtube">58G5atwBX2M</video>
Line 128: Line 209:
  
 
* [https://www.youtube.com/c/CharlieMorrisZL2CTM/videos Charlie Morris YouTube channel]
 
* [https://www.youtube.com/c/CharlieMorrisZL2CTM/videos Charlie Morris YouTube channel]
 +
 +
=== Misc videos ===
 +
 +
<video type="youtube">rPM1vvGorTo</video>
 +
 +
=== Mods ===
 +
 +
<video type="youtube">rABYJi0vm7g</video>
 +
 +
* 4 Led's in the HW-9 taking only 5 MA when wired in series with a 2200 ohm 1/4 watt resistor.
 +
* A total of 20 MA to light the dial and meter.
 +
* The space between the front panel and the chassis here is very small so the tiny LED's are required to do the job .

Latest revision as of 10:38, 30 October 2020

This is a work in process - Gathering pieces.

HW-9.PNG

Features

Replace HW-9 internal VFO with a digital VFO

  • HW-9 VFO has legendary issues
    • Mechanical issues with vernier
    • Drift due to thermal
    • Lack of resolution
    • Backwards dial
  • Fits within HW-9 VFO Box
  • Controls Tx/Rx/BFO frequencies with rotary encoder
    • 10 Hz steps
  • DD1306 OLED Display
    • I2C Interface
    • "Curved" display
  • Uses RIT control on HW-9
    • +/- 1 KHz RIT
  • Blue Pill Microprocessor
    • Arduino compatible
    • 3.3V
  • Understands band switch for MHz displayed
  • Si5351 Oscillator
    • I2C Interface
    • 3 Outputs
      • Transmit frequency
      • Receiver frequency include offset plus RIT
      • BFO frequency
    • Low pass filters to turn square waves to sine waves
    • 27 MHz crystal

Schematic

VFO-001-SCHEMATIC.PNG

Connections to Radio

  • RIT pot
    • Connects to Analog input
      • Polled occasionally while in receive
  • Band switch
    • SW1 9V
  • T/R - transmit/receive

Parts

Blue Pill Card

STM32F103C8T6-Blue-Pill-Pin-Layout.gif

  • 3.3V operation work without level shifters for I2C
    • OLED can run from 3.3V
    • Si5351 can only run from 3.3V
  • Used right angle headers and Dupont cables
  • Replaced BOOT 0,1 jumpers
    • Jumper on BOOT1
    • Switch on BOOT0 - easier to download code
  • Download via serial
  • Arduino IDE

128x32 OLED

Si5351 003 720px.jpg

OLED128x32.PNG

Arduino Library for OLED

U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);   // STM32, Ebay OLED
  u8g2.setFont(u8g2_font_ncenB14_tr);
Hello World Code
U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);   // STM32, Ebay OLED

void setup(void) {
  u8g2.begin();
}

void loop(void) {
  u8g2.clearBuffer();			// clear the internal memory
  u8g2.setFont(u8g2_font_ncenB08_tr);	// choose a suitable font
  u8g2.drawStr(0,10,"Hello World!");	// write something to the internal memory
  u8g2.sendBuffer();			// transfer internal memory to the display
  delay(1000);  
}

Rotary Encoder/Breakout Board

RotaryEncoderCAD.PNG


Si5351 004 720px.jpg

Si5351 Frequency Generator

Si5351 001 720px.jpg

VFO3.PNG

  • I2C Daisy-chain connector
  • 3 outputs
    • Tx
    • Rx (may not need to use separate output)
    • BFO - could be adjusted

Si5351 002 720px.jpg

Measurements

VFO TX

  • 250 KHz range
    • From 5.9993-5.7493 MHz

VFO RX

  • RIT knob is taken in through an A/D and adjusts the receive frequency plus/minus 1 KHz

BFO

  • 8.8314 MHz in receive
  • 8.8307 MHz in transmit
  • 700 Hz difference but could be adjusted

Low Pass Filters

LPF.1.5.sch.png

LPF.1.5.pcb.png


LCFilterValues.PNG

  • VFO and BFO frequencies are outside the bands (deliberately to void collisions)

BFO Filter

  • 8.8314 MHz in receive
  • 8.8307 MHz in transmit

BFO Filter.PNG

BFO Filter IL.PNG

Libraries/Example Code

Videos

VFO Design

Misc videos

Mods

  • 4 Led's in the HW-9 taking only 5 MA when wired in series with a 2200 ohm 1/4 watt resistor.
  • A total of 20 MA to light the dial and meter.
  • The space between the front panel and the chassis here is very small so the tiny LED's are required to do the job .