Common mode current and RF feed lines – an interesting thought exercise from WA7ARK

Mike (WA7ARK) recently posted details of an interesting experiment: Measuring currents in an unbalanced dipole.

Above is a diagram of his experiment, and several points at which he measured the magnitude of current with his RF current probe. Continue reading Common mode current and RF feed lines – an interesting thought exercise from WA7ARK

Common mode current and RF feed lines

At any one point along an RF feed line, there are currents in the conductors of sinusoidal waveform with magnitude and phase. These currents can be decomposed into differential and  common mode components to assist analysis of behavior which is often mode specific.

This article explains the composition of feed line current, and its decomposition into differential and  common mode components.

Over the length of the feed line, the differential and common mode components of current are typically standing waves each with different phase velocity, so the magnitude and phase of differential and common mode components may vary along the feed line, as will the phase difference between the components.

We will discuss the principles in two contexts:

  • two wire transmission lines; and
  • coaxial transmission lines.

The first is simpler and lays down important concepts for the second case. Continue reading Common mode current and RF feed lines

Microsemi AN1819: A 700W Broadband Amplifier Using VRF2944

Microsemi publishes an application note that includes design of a high power FET RF power amplifier: https://ww1.microchip.com/downloads/aemDocuments/documents/PSDS/ApplicationNotes/ApplicationNotes/1819_B.pdf.

This article calculates their design figures using Calculate initial load line of valve RF amplifier . Though the terminology in the calculator is oriented towards valves, it is applicable to designs using FET and BJT.

Above is the calculated solution. Some notes: Continue reading Microsemi AN1819: A 700W Broadband Amplifier Using VRF2944

Eico 723 reverse engineering

The Eico 723 was a 1961 tabletop A1 Morse transmitter with self contained ACpower supply and rated at 60W using 3x6DQ6-B valves.

In the day, transmitters were commonly rated for plate DC input power, probably as it was thought by regulator authorities that it was too challenging to measure RF power output reliably (and for the same reasons the license limitations were cast in DC input. This inflated the capability in terms of todays practice of specifying RF output power.

So, the manual states it has a 500V power supply and to tune / load for 120mA DC plate current.

The operation goes beyond the curves given in the valve datasheet… so a bit of extrapolation is needed to construct a design load line. Continue reading Eico 723 reverse engineering

NEC model of 600mm a side square loop for field strength measurement

This article Reconciliation of transmitter power, EIRP, received signal strength, antenna factor, ground wave propagation etc @ 576kHz used a 600mm a side square loop which was originally designed for field strength measurements on the 40m in an effort to understand and document BPL (PLC) emissions.

As part of validation of the antenna, a free space NEC model with external excitation was developed. This article publishes a graphic summary of the antenna characteristic. The model antenna is loaded with 50+j0Ω and includes 10m of RG58A/U which was used for the BPL related measurements with FSM. Continue reading NEC model of 600mm a side square loop for field strength measurement

Crystal substitute using si5351 – part 3

Continuing the Crystal substitute using si5351 series…

Above is an example pair of inexpensive modules, less than $10 for the pair (incl shipping). Both boards are powered from 5V, the left hand module is a ATTiny85 dev board, it has a small 3.3V regulator on board. The dev board uses a DIP chip, so it can easily be programmed in a device programmer and then inserted in the socket. Continue reading Crystal substitute using si5351 – part 3

Crystal substitute using si5351 – part 2

Crystal substitute using si5351 – part 1 described the first part of a series on an inexpensive crystal replacement using a si5351-A / MS5351M PLL chip and an ATTiny controller.

Above is an example pair of inexpensive modules, less than $10 for the pair (incl shipping). Both boards are powered from 5V, the left hand module is a ATTiny85 dev board, it has a small 3.3V regulator on board. The dev board uses a DIP chip, so it can easily be programmed in a device programmer and then inserted in the socket.

Above is a cold start of the module, error settles around +137ppm.

Above is an Allan Deviation chart for this module referenced to a Trimble Thunderbolt (module freq=10M-137.5ppm). Short term stability is not too bad, the bigger problem is likely temperature response over hours and days. The crystal on this cheap module has 140ppm error, so specification accuracy would be worse than that, and temperature stability is probably about the same for 10-60°. So, that is quite likely around 3ppm/°.

Note that the Adafruit module that this appears to be cloned from is specified with a crystal of 30ppm accuracy and similar temperature stability over 10-60° (0.6ppm/°).

Development programming

 

Above is a screenshot of the EEPROM configuration data with two selectable configuration sets (burstsets) programmed. The ATTinyx5 has two pins for selection of one of four burstsets, the ATTinyx4 chips have four pins available for selection one of up to 16 burstsets, limited in both cases by the EEPROM available.

Bus Pirate v5

A Python script was written to parse the exported configuration from Clockbuilder Pro and create the Bus Pirate commands to be pasted into a terminal emulator (Teraterm v5). Bus Pirate 5 is not backwards compatible with v4 and v3, so the script accepts an argument to set the language version. The script also writes a binary file of the EEPROM image for use with a device programmer.

Teraterm was used as it allow specification of a pause at the end of each line to allow Bus Pirate to execute the command.

#!/usr/bin/env python
# coding: utf-8

from pathlib import Path
import csv
import os
import sys
import struct

print('\n'+Path(__file__).stem+' v1.03 20240330 Owen Duffy\n')

import getopt,sys

def usage():
  print(Path(__file__).stem+" [-a hexaddress] [-m mversion][-o outprefix][-b bfilename][-p pfilename][-t toclen] ifile1 [ifilen]...")
  sys.exit(2)

try:
  opts,args=getopt.getopt(sys.argv[1:],"ha:b:m:o:p:t:v:",["help","address=","bfilenane=","mversion=","outprefix=","pfilename=","toclen=","verbose="])
except getopt.GetoptError as err:
  # print help information and exit:
  print(err)  # will print something like "option -a not recognized"
  usage()
  sys.exit(2)

verbose=False

ifilesn=0
ifilenames=[]
if len(args)<1:
  usage()
for arg in args:
  ifilenames.append(arg)
  print(arg,ifilesn)
  ifilesn=ifilesn+1
chip=0xc0
toclen=ifilesn+3
bpv=5

p=Path(ifilenames[0])
pfilename=p.with_suffix('.pllldri')
bfilename=p.with_suffix('.bp')

for o, a in opts:
  if o == "-v":
    verbose = True
  elif o in ("-h", "--help"):
    usage()
    sys.exit()
  elif o in ("-a", "--address"):
    chip=int(a,16)
  elif o in ("-m", "--mversion"):
    bpv=int(a)
  elif o in ("-b", "--bfilename"):
    bfilename=a
  elif o in ("-o", "--outprefix"):
    prefix=Path(a)
    pfilename=prefix.with_suffix('.pllldri')
    bfilename=prefix.with_suffix('.bp')
  elif o in ("-p", "--pfilename"):
    pfilename=a
  elif o in ("-t", "--toclen"):
    toclen=a
    if toclen0):
          if row[0].startswith("#"):
            continue
          addr=int(row[0])
          data=int(row[1].rstrip('h'),16)
          if(addr-1==lastaddr):
            bfile.write(' 0x{:02x}'.format(data))
            burst=burst+struct.pack('B',data)
            burstlen=burstlen+1
          else:
            bfile.write('\n[ 0x{:02x} 0x{:02x} 0x{:02x}'.format(chip,addr,data))
            if(burstlen>0):
              burst=struct.pack('B',burstlen)+burst #prepend burstlen
              pbuf[i]=pbuf[i]+burst #write to file buffer
              burstsetlen=burstsetlen+burstlen+1
              burstn=burstn+1
            burst=struct.pack('BB',addr,data)
            burstlen=2
            #burstn=burstn+1
          lastaddr=addr
  #      print(row)
  #      print('burstlen2: ',burstlen,burstn)
    if(burstlen>0):
      burst=struct.pack('B',burstlen)+burst #prepend burstlen
      pbuf[i]=pbuf[i]+burst #write to file buffer
      burstsetlen=burstsetlen+burstlen+1
      burstn=burstn+1
      pbuf[i]=struct.pack('BB',burstn,burstsetlen)+pbuf[i] #prepend burst list hdr
  #    print('burstlen2: ',burstlen,burstn)
  bfile.write(' ]\np\nw\ni\n\n')

  i=i+1

#write pfile header
buf=b'\x01\x03\x00'+struct.pack('B',chip)+struct.pack('B',len(pbuf))
#append toc
offs=5+toclen*2
i=0
for x in pbuf:
  buf=buf+struct.pack('<H',offs) #append toc entry
  offs=offs+len(x)
  i=i+1
for j in range(i,toclen):
  buf=buf+b'\xff\xff' #append empty toc records
#append burst sets
for x in pbuf:
  buf=buf+x
pfile.write(buf)
pfile.close
bfile.close()

Above is the Python script.

HiZ> m

Mode selection
 1. HiZ
 2. 1-WIRE
 3. UART
 4. HDUART
 5. I2C
 6. SPI
 7. 2WIRE
 8. DIO
 9. LED
 10. INFRARED
 x. Exit
Mode > 5

Use previous settings?
 I2C speed: 100 kHz
 Clock stretching: OFF

y/n, x to exit (Y) > n

I2C speed
 1kHz to 1000kHz
 x. Exit
kHz (400kHz*) > 100
Clock stretching
 1. OFF*
 2. ON
 x. Exit
OFF (1) > 1
Mode: I2C
I2C> W
Power supply
Volts (0.80V-5.00V)
x to exit (3.30) > 3.3
Maximum current (0mA-500mA),  for none
x to exit (none) > 100
3.30V requested, closest value: 3.30V
100.0mA requested, closest value: 100.0mA

Power supply:Enabled
Vreg output: 3.3V, Vref/Vout pin: 3.3V, Current: 28.4mA

I2C> P
Pull-up resistors: Enabled (10K ohms @ 3.3V)
I2C> i

This device complies with part 15 of the FCC Rules. Operation is subject to the following two conditions: (1) this device may not cause harmful interference, and (2) this device must accept any interference received, including interference that may cause undesired operation.


Bus Pirate 6
https://BusPirate.com/
Firmware main branch @ 8e51eb6 (2024-10-31T11:09:12Z)
RP2350B with 512KB RAM, 128Mbit FLASH
S/N: 2EAE869F8943242C
Storage:   0.10GB (FAT16 File System)

Configuration file: Loaded
Available modes: HiZ 1-WIRE UART HDUART I2C SPI 2WIRE DIO LED INFRARED
Active mode: I2C
 I2C speed: 100 kHz
 Clock stretching: OFF

Display format: Auto
Data format: 8 bits, MSB bitorder
Pull-up resistors: ON
Power supply: ON (3.3V/3.29V)
Current limit: OK (36.9mA/100.0mA)
Frequency generators: OFF

1.Vout  2.IO0   3.IO1   4.IO2   5.IO3   6.IO4   7.IO5   8.IO6   9.IO7   10.GND
36.9mA  SDA     SCL     -       -       -       -       -       -       GND
3.3V    3.3V    3.2V    3.2V    3.3V    3.3V    3.2V    3.2V    3.2V    GND

I2C> [ 0xc0 0x02 0x53 0x00 0x20

I2C START
TX: 0xC0 ACK 0x02 ACK 0x53 ACK 0x00 ACK 0x20 ACK
I2C> [ 0xc0 0x07 0x00

I2C REPEATED START
TX: 0xC0 ACK 0x07 ACK 0x00 ACK
I2C> [ 0xc0 0x0f 0x00 0x0c 0x8c 0x8c 0x8c 0x8c 0x8c 0x8c 0x8c

I2C REPEATED START
TX: 0xC0 ACK 0x0F ACK 0x00 ACK 0x0C ACK 0x8C ACK 0x8C ACK 0x8C ACK 0x8C ACK
    0x8C ACK 0x8C ACK 0x8C ACK
I2C> [ 0xc0 0x1a 0xb5 0xa7 0x00 0x0f 0xf3 0x00 0x24 0xfb

I2C REPEATED START
TX: 0xC0 ACK 0x1A ACK 0xB5 ACK 0xA7 ACK 0x00 ACK 0x0F ACK 0xF3 ACK 0x00 ACK
    0x24 ACK 0xFB ACK
I2C> [ 0xc0 0x2a 0x00 0x04 0x00 0x2a 0xe0 0x00 0x00 0x00

I2C REPEATED START
TX: 0xC0 ACK 0x2A ACK 0x00 ACK 0x04 ACK 0x00 ACK 0x2A ACK 0xE0 ACK 0x00 ACK
    0x00 ACK 0x00 ACK
I2C> [ 0xc0 0x5a 0x00 0x00

I2C REPEATED START
TX: 0xC0 ACK 0x5A ACK 0x00 ACK 0x00 ACK
I2C> [ 0xc0 0x95 0x00 0x00 0x00 0x00 0x00 0x00 0x00

I2C REPEATED START
TX: 0xC0 ACK 0x95 ACK 0x00 ACK 0x00 ACK 0x00 ACK 0x00 ACK 0x00 ACK 0x00 ACK
    0x00 ACK
I2C> [ 0xc0 0xa2 0x00 0x00 0x00 0x00

I2C REPEATED START
TX: 0xC0 ACK 0xA2 ACK 0x00 ACK 0x00 ACK 0x00 ACK 0x00 ACK
I2C> [ 0xc0 0xb7 0x92 ]

I2C REPEATED START
TX: 0xC0 ACK 0xB7 ACK 0x92 ACK
I2C STOP
I2C> p
Pull-up resistors: Disabled
I2C> w
Power supply: Disabled

I2C> i

This device complies with part 15 of the FCC Rules. Operation is subject to the following two conditions: (1) this device may not cause harmful interference, and (2) this device must accept any interference received, including interference that may cause undesired operation.


Bus Pirate 6
https://BusPirate.com/
Firmware main branch @ 8e51eb6 (2024-10-31T11:09:12Z)
RP2350B with 512KB RAM, 128Mbit FLASH
S/N: 2EAE869F8943242C
Storage:   0.10GB (FAT16 File System)

Configuration file: Loaded
Available modes: HiZ 1-WIRE UART HDUART I2C SPI 2WIRE DIO LED INFRARED
Active mode: I2C
 I2C speed: 100 kHz
 Clock stretching: OFF

Display format: Auto
Data format: 8 bits, MSB bitorder
Pull-up resistors: OFF
Power supply: OFF
Frequency generators: OFF

1.Vout  2.IO0   3.IO1   4.IO2   5.IO3   6.IO4   7.IO5   8.IO6   9.IO7   10.GND
OFF     SDA     SCL     -       -       -       -       -       -       GND
0.1V    0.1V    0.1V    0.0V    0.0V    0.0V    0.0V    0.0V    0.0V    GND

I2C>

Above is a console log of Bus Pirate v6 programming of the PLL for development testing.

… more to follow.

Crystal substitute using si5351 – part 1

Crystals have become very expensive (or so it seems), and the cost consigns some older radios to scrap. That said, I do recall buying crystals for $6 from Jan Crystals around 1967, which with Australian inflation over the period equates to $90 in 2023.

This article looks at an inexpensive substitute for the 1647kHz LSB crystal in a Codan 8525 transceiver which shipped as USB only in commercial service (yep, hams are out of step with the commercial comms world).

Above is a ‘si5351 module’ from Aliexpress for less than $3, about a tenth the price of the Adafruit module. Only one output will be used, the SMA jacks need not be used, but one was attached to channel 0 for testing the prototype. Continue reading Crystal substitute using si5351 – part 1

Try this quick quiz on directional wattmeters – answers

Directional wattmeters are used in lots of ham stations, yet we see evidence in social media posts that many people do not understand them and the measurement context.

We have an RF source connected via a Bird 43 directional wattmeter with an appropriate 50Ω measurement element directly to a load resistance.

We measure the load voltage to be 100Vrms and the current to be 1Arms.

1. What is the power in the load?

100W

2. What does the directional wattmeter indicate for Pfwd?

112.5W

3. What does the directional wattmeter indicate for Prev?

12.5W

What is the implied VSWR?

2

4. Can the load power in this scenario be ‘measured’ using this instrument?

Yes, since the calibration impedance is a purely real value, measure Pfwd and Pref and calculate P=Pfwd-Prev.

Any surprises there?

Explanations to follow in the coming days.