PowerPoint style Presentation, Building Instructions and Firmware source code available at the bottom of this Webpage
Yahoo discussion group: loopController
A Magnetic Loop Antenna is basically just a resonant circuit using an oversized inductor and an adjustable capacitor. If the inductor has a circumference of much less than, say, 1/10th of a wavelength, then the efficiency of the antenna will suffer. If the inductor circumference approaches ¼ of a wavelength or more then the antenna would more accurately be characterized as an electrical loop antenna, with characteristics similar to those of a dipole.
An efficient Magnetic Loop Antenna has a very high Q. In other words, the antenna has a very narrow bandwidth, if you move by a few kHz then you need to retune the antenna. This quickly becomes very frustrating, especially if you, like me, like to tune up and down the bands to see what is going on.
The Magnetic Loop Controller tunes the antenna in real time, tracking every movement of the Transceiver VFO. In other words, unlike other magnetic transmitting loop antenna controllers, there is no need to transmit and re-tune for minimum SWR every time the frequency has been changed.
The controller receives frequency information from the Transceiver and calculates an appropriate Capacitor position accordingly. Initial programming of the Controller is an easy Tune and Store operation, one position per 50 or 100 kHz. 200 memory presets can be stored, but in practice much fewer are needed. The Controller tunes in a linear fashion between the stored presets.
The Controller can communicate with the following Radios:
A serial port <==>USB port passthrough mode can be enabled for computer control of the transceiver, passing data through the Controller.
A typical Stepper Motor gives a resolution of 1.8 degrees per step. Each step can be divided into 8 microsteps, hence a 1.8 deg/step motor will give 1600 distinct positions per each full revolution. In other words, the Controller can keep track of a frequency/position pair with an accuracy of 1600th of a revolution, over a range of hundreds of revolutions. This is more than sufficient resolution to tune a multi turn vacuum variable capacitor. If you are using a butterfly or similar air variable capacitor, then you will probably need at least 5 to 1 gear reduction for to get sufficient resolution of the capacitor positioning.
Prototyping fixture:Figure 3 (click on image to enlarge)
The stepper controller circuit used in this project is capable of driving up to 1.5A per phase. Microstepping is achieved by providing current to both phases at the same time, but in different proportions for each microstep. In other words, the Stepper Motor controller circuit provides accurate current limitation. This current limitation feature can also be used to adjust for the minimum torque necessary to reliably turn the capacitor - thus ensuring no damage if we accidentally try to go beyond the end stops.
I have used several types of Nema-17 format two-phase Stepper Motors, here are a couple that work well with the controller:
Here is a picture of my most recent capacitor fixture. A Jennings 5 – 465 pF vacuum variable specified at 5kV, mounted on a plexiglas base. The sprocket gear attached to the capacitor shaft is not used, the capacitor came with it.
If end stop switches will not be used, then there is no need for D2, D3, R25, R26, C19-C22 and T3.
Figure 6 (click on image to enlarge)
U2 and U3 are the stepper motor controllers, Allegro A4975, available at www.digikey.com (Digikey 620-1435-5-ND).
I use a 128 ppr optical encoder (attached to the big black knob on the front plate, see Figure 1), a 64 ppr optical encoder with a builtin pushbutton (Digikey EM14A0D-C24-L064S-ND) for the Menu/Enact switch (SW1) may also be a good choice.
The three common mode chokes are necessary to squash any RF being picked up from the antenna by the stepper motor control cable, potentially locking up the controller. Conversely they also ensure that the controller is not radiating RFI into the antenna. The chokes are 2x 51 uH common mode type, surface mount (in the prototype they are mounted on the underside of the printed circuit board). One could also use FT37-43 ferrite cores, 2x 10 or more turns, bifilar wound.
RV1 is used to adjust the contrast of the LCD.
RV2 is used to adjust the torque of the Stepper Motor. Together with RV2, R2 and R3 at 0.22 ohms and R6 at 2200 ohms provide for current adjustment between 0 and 1.4A, enabling use of stepper motors specified at up to 2A per phase.
Backplane connections, Stepper motor connections and Radio connections:
The top diagram in Figure 7 above, shows one possible way of wiring the Controller to a Stepper Motor (and end stop switches if used) through a DB9 connector on the Controller back plane.
The middle diagram shows the power connector.
The bottom diagrams in Figure 7 show the serial connection to the backplane and several serial cable versions for the various types of Radios that the Controller can communicate with. When wiring for Kenwood or Yaesu RS232, don't forget to connect pins 7 and 8 together on the RS232 connector.
Note that the Controller does not output proper RS232 levels, however this should not cause any problems unless the serial cable is very long. If proper RS232 levels are desired, then the simplest way is to use a MAX232 converter circuit. There is no need to build one, these circuits can be purchased for approx three dollars on eBay.
The USB port is used to upload firmware updates. It is also used as a second serial port providing for functions such as storing and recalling setup data. The USB port can also be configured for Serial port <==>USB port passthrough mode, enabling computer control of the transceiver.
The original printed circuit board for the Controller, as shown in Figure 2 is a single sided home brew affair. The red traces on the X-ray view below show wire jumpers. Please refer to the bottom of this webpage to download PDF files fit for using as an etch mask. Two files, one normal - the other mirrored.Figure 8 (click on image to enlarge)
Due to demand I finally broke down and designed a proper two sided PCB and had a bunch of those fabricated :)
The below picture shows the PCB, front and back:
Figure 9 (click on image to enlarge)
I have these PCBs available for USD $20 each, please contact me by email: lofturj -at- gmail -dot- com
I will not be providing kits or sourcing components for the controller, however, at the bottom of this webpage there is a "Building Instructions and Bill of Materials (BOM)" document, to assist with pulling the components together for the project.
Here is a picture of an assembled PCB undergoing test:Figure 10 (click on image to enlarge)
In other words - not really any need for SWR based auto-tuning.
Having said that, the latest version of the Controller can now also do SWR based auto-tuning. This simplifies the initial calibration/store of frequency+position memories and is useful for one-click recalibration. It also facilitates using this controller with Transceivers that cannot provide frequency information. This Option also implements a dual-bargraph Power / SWR meter, similar to the one described here (normally not implementing the AD8307 log amp circuitry, however this option is also supported in the firmware).
Actually it is quite amazing to see the SWR autotune in action, it is blazing fast, takes a couple of seconds or less. Full description of the SWR Autotune function can be found in the file AutomaticMagneticLoopController_presentation_XXXXXX.pdf, at the bottom of this webpage.
Here are a couple of pictures of the Controller, with the Power/SWR meter and SWR Autotune option added:
The firmware is is free software, released under the GNU General Public License.
The complete source code and 3 pre-compiled HEX files are available at the bottom of this webpage, see ML_vXXX.zip.
Note that certain firmware features can be tailored through modification of parameters in the ML.h file included in the source code for the firmware.
The firmware source code is commented throughout and should hopefully be relatively easy to understand/modify/expand/adapt by those who wish to contribute to this project.
The controller can be described as a manager of memorized capacitor positions, using frequency information from the Radio Transceiver to calculate an appropriate position between any two memorized frequency/positions.
Each memory contains a frequency/position pair, the frequency is stored with a resolution of 1Hz, the position is stored with a resolution of 1600 positions per full revolution, within a range of up to thousands of revolutions (just in case you happen to be in possession of a 1000 turn capacitor :-) 200 frequency/position pairs can be memorized, but you won't need to store more than 10 - 15.
The controller uses a serial connection to the Radio (TTL or RS232 levels) to enquire once every second which frequency the Radio is tuned to.
The USB port enumerates as a second, virtual Serial port. If set up for serial<==>USB passthrough mode, then this port can be used for Computer control of the Radio. If not in passthrough mode then several USB commands are available. See list of USB commands further down on the page.
A rotary encoder (acts like a VFO knob) and Up/Down switches can be used to initially tune the capacitor when storing the presets or when doing any after the fact adjustments. The rotary encoder/push switch combo is also used to navigate a menu of functions, such as storing/managing/deleting memory positions and Setup options; such as the selection of Radio serial protocol and levels, backlash/slop compensation on/off, number of microsteps, etc...
At compile time, End Stop functionality can be set up in three ways, see configuration in file ML.h:
In all my own loop builds so far, I use method 1, soft end stops.
Power/SWR Meter + SWR Autotune can be enabled by setting #define PSWR_AUTOTUNE as 1 in ML.h. In case you will be implementing this option, you may also need to tailor other #define[s] to the VSWR bridge that you are using. See #define[s] BRIDGE_COUPLING and VALUE_R15, VALUE_R17.
(ToDo: Need to Update the Config Menu diagram below. Several new menu items have been added since Firmware version 2.07, including:
The below description assumes that the Soft End Stop mode is used. If not Soft End Stops, then the Up/Down switches will always be active unless End Stop switches have been closed.
Tune using Rotary Encoder or Up/Down switches. In Soft End Stop mode the Up/Down switches will not work unless within an already configured range of saved memory positions.
Long push of the Menu/Enact Switch enters a Menu of 12 to 17 choices (depending on options selection), selectable by turning the Rotary Encoder.
Memories can be stored in any order, they will be automatically sorted from the lowest to the highest. Once you have stored a couple or more memories, then you have a working range within which the capacitor will tune automatically according to the frequency data from the Radio. If you tune the Radio outside of the lowest/highest memory, then the Controller will not attempt to tune.
You can always fine tune a position by turning the encoder (or Up/Down switches). The fine tune offset (delta) will continue to be valid when the frequency input changes, in other words the new auto-tuned position will maintain the same offset. If you want to enter the offset permanently against all the stored memories, then short push of the Enact Switch.
For a detailed description of how to calibrate the controller, please refer to one of the PDF documents available at the bottom of this webpage.
When adjusting the capacitor with a sub-degree precision, any backlash or slop in the coupling mechanism will cause huge inaccuracies depending on whether the capacitor is being tuned in an upward or a downward direction. To battle this, a backlash compensation function can be enabled.
I would recommend using the backlash compensation function for improved positioning reliability, without it the positioning accuracy of the capacitor will be rather poor. The backlash function works in the following manner:
When the controller receives frequency information from the Radio which is lower than the most recent previous frequency information, then it does:
A harmless but weird looking side effect of the backlash compensation function is that whenever you tune the VFO down in a slow manner the backlash will be triggered every time new frequency information is received from the Radio. This looks a bit disturbing, but it actually works very well.
With the backlash compensation function enabled and when using the Down Switch to fine tune for resonance, this is best done with short pulsing of the Switch.
To shorten the time it takes to tune, especially when switching between frequency bands, the Controller implements a variable capacitor tuning rate based on the distance of travel.
The maximum rate is set at four times the normal rate, but can be defined differently through the Menu Function "5-Stepper Settings". More detailed description is given in one of the PDF files available at the bottom of this webpage.
The Controller is on and indicating the Radio Transceiver frequency on its LCD.
Now when you turn the transceiver VFO down by 25 kHz, the Stepper will go counterclockwise by half a turn... etc...
The uppermost line, “Radio:” indicates the frequency information received from the Radio.
The second line “Tuned:” indicates the calculated frequency of the closest matching stepper motor position. The resolution you see with the "Tuned frequency" matches the stepper motor tuning steps. 1600 steps per full revolution. If you are seeing 250 Hz jumps per step, then a full revolution is 1600 * 250 Hz = 400 kHz. To put this into perspective, with my 24 foot loop, using a 16 turn 5 - 465pF capacitor; between 3.5 and 3.6 MHz I am seeing a step resolution of 157 Hz.
The third line shows the calculated position based on the frequency received from the Radio and the actual current position. These may differ if the Encoder or Up/Down switches have been used to fine tune resonance.
The fourth line shows the active range (between which two stored frequency/position pairs we are) and whether the Stepper Motor is active or powered down. The stepper motor automatically turns off 5 seconds after every use.
If the USB port on the Controller is connected to a PC then it enumerates as a serial (COM) port. This serial port has two selectable modes (Menu Item 8, Serial Port Mode):
Below is an example of the commands available when not in Passthrough mode (firmware version 4.03). The list of commands keeps growing with new versions of the firmware.
The USB commands are case insensitive and can be terminated with <cr> <lf> or ';' - for example:
to get the below list.
Available USB commands:
$frqget Retrieve running frequency.
$frqset mmkkkhhh Update running frequency (equivalent to Transceiver serial input).
Frequency is entered in Hz, e.g. 14100000 is 14.1 MHz.
$memoryget Retrieve all memory presets.
Format of retrieved values is:
A FFFFFFFF PPPPPPP
A is memory position
F is frequency in Hz
P is stepper motor position (relative value)
0 14000000 1000000
1 14100000 1000100
2 14200000 1000200
$memoryset A FFFFFFFF PPPPPPP
Enter new memory preset.
Format is same as in $memoryget, however only one preset
is entered at a time. The Presets MUST be entered with the
Frequency memories in an ascending order and the highest
preset memory entered MUST not be higher than the maximum
number of presets available.
$version Report version and date of firmware.
Commands for managing SWR Tuning over USB:
$swrtune Request an SWR Tune.
$swrtuneup Request an SWR Up Tune.
$swrtunedown Request an SWR Down Tune.
$swrtunestatus Request result of latest SWR Tune command.
Results are: SWR Tune in progress
SWR Tune unsuccessful
SWR Tune unsuccessful, no power
SWR Tune success
$toggleautotune Toggle SWR Autotune On or Off
$recalibrate Position Recalibrate
Power and SWR Meter related commands (if enabled at compile time):
$ppoll Poll for one single USB serial report, inst power (unformatted).
$pinst Poll for one single USB serial report, inst power (human readable).
$ppk Poll for one single USB serial report, 100ms peak power (human readable).
$ppep Poll for one single USB serial report, pep power (human readable).
$plong Poll for one single USB serial report, actual power (inst, pep and avg)
as well as fwd power, reflected power and SWR (long form).
$pcont USB serial reporting in a continuous mode, 10 times per second.
$ppoll, $pinst, $ppk, $ppep or $plong entered after $pcont will
switch back to single shot mode.
$sleeppwrset x Power above the level defined here will turn the display into meter mode.
x = 0.001, 0.01, 0.1, 1 or 10 mW (milliWatts).
$sleeppwrget Return current value.
$tuneset x x = 1.1 to 4.0. SWR tune threshold.
$tuneget Return current value.
$pepperiodget x x = 1, 2.5 or 5 seconds. PEP sampling period.
$pepperiodset Return current value.
$calset cal1 AD1-1 AD2-1 cal2 AD1-2 AD2-2
Write new calibration values to the meter.
$calget Retrieve calibration values.
Format of calibration values is:
cal1 AD1-1 AD2-1 cal2 AD1-2 AD2-2
cal1 and cal2 are calibration setpoints 1 and 2 in 10x dBm
ADx-1 and ADx-2 are the corresponding AD values for
AD1 (forward direction) and AD2 (reverse direction).
normally the AD1 and AD2 values for each setpoint would be the same,
however by doing reverse calibration through the Controller Menu functions
it is possible to balance any small differences there might be between the
two AD8307 outputs.
Note that I have not found this to be necessary at all :)
$scaleget Retrieve user definable scale ranges.
$scaleset Write new scale ranges.
The scale ranges are user definable, up to 3 ranges per decade,
e.g. 6, 12 and 24 gives:
... 6mW, 12mW, 24mW, 60mW ... 1.2W, 2.4W, 6W 12W 24W 60W 120W ...
If all three values set as "2", then
... 2W, 20W, 200W ...
The third and largest value has to be less than ten times the first value.
All the below debug assist commands are off by default:
$debug This one may provide unexpected results !!! :-)
$swrdebug Toggle (On/Off) Print/Debug the last 32 SWR measurements found if SWR Tune success.
$trxdebug Toggle (On/Off) Debug Radio serial communications, ASCII - send to USB.
$hexdebug same as above, HEX.
$addebug read raw AD input - also works with $pcont, same as $ppoll etc...
These two are useful to establish whether serial communicaitons in the direction from the Controller
to Transceiver are working:
$settx Command Transceiver into Transmit Mode.
$setrx Command Transceiver into Receive Mode.
Select active Transceiver Profile, may be useful for remote operation:
$profileset x Select active Transceiver Setup Profile, where x is 1 to 4.
$profileget Retrieve active Transceiver Setup Profile.
$memoryclear clear all frequency/position memories, same as Menu command (4).
$memorywipe full EEPROM wipe - clar all frq/pos memories and all settings to default.
$help Display the above instructions.
At the bottom of this page there is a zip file containing a couple of very simple Windows command line scripts (work under cmd.exe) that can be used to talk to the Controller:
The backup/restore functions will not work if Passthrough mode is selected.
Here is link to a six and a half minute Youtube video of the Magnetic Loop Controller.
The first 50 seconds show 13.5 MHz and 29.999 MHz being peaked for maximum noise and stored as the outermost positions. This involves a lot of hand cranking the Encoder.
Minute 0:50 - 1:40 shows 3 positions being SWR Autotuned and stored in the 20m band.
Minute 1:40 - 2:00 shows 18.069 MHz failing an Auto SWR tune (default is hunt mode - tuning around a center point), and then being successfully Autotuned when doing an Up-Tune.
Minute 2:00 - 4:25 shows the rest of the autotune and store process, storing positions in the 17, 15, 12 and 10m bands.
Minute 4:25 - 6:00 shows the core function of the Controller, automatically tracking the Transceiver without any need to tune for minimum SWR.
Here is a demo of switching bands and moving the VFO to various frequencies and transmitting, always with good SWR (ok, the antenna has rather poor SWR on 15m, but this has nothing to do with the Controller though :)
Minute 6:00 - 6:20 shows the antenna tuning from 20m to 15m, and then back.
Minute 6:25 to end shows 2x SWR Autotune.
Yes - I am running 200W into the antenna - not very healthy I'm sure, hanging on a book case only 3 meters away from me. However the Autotune commands the transceiver to output only approx 3.5W
The Capacitor fixture (see Figure 4, above) was built to fit into a 3 inch PVC tube which also doubles as a mast. As seen on some of the pictures further below, the PVC tube was spray painted black for aesthetics.Figure 13 (click on image to enlarge)
The connector fixture. The loop feed is done with a hairpin/gamma match. See my Magnetic Loop Antenna Exercises webpage for a picture of the feed :
Figure 14 (click on image to enlarge)
Ready to be assembled:
A 12 foot loop and the new 24 foot loop side by side. This is of course a bit too close for comfort, there is considerable interaction between the two antennas. To be moved apart later :)
Figure 17 (click on image to enlarge)
The new 24 foot loop tunes from below 3.5 MHz and up beyond 14.350 MHz, which was a bit of a surprise - this indicates that the minimum capacitor value actually goes down below 2.5 pF. Of course at 14 MHz (20m band), the circumference of the loop being 1/3rd of a wavelength, the antenna is more akin to a shortened Quad loop.
At 3.5 and 7 MHz having the antenna mounted on a Rotator is very efficient to battle QRN. The noise floor has been observed to go down by up to 3 S units by rotating the loop.
Page last updated:
2017-01-21 Firmware version 4.05. Bugfix: Some displays showed garble when version 4.04, Endstop Option 2 had bugged logic around upper endstop. Added SWR Alarm output on pin/pad 33. Changed Backlash Compensation Select function to Backlash Compensation Adjust with a range of 0 to 400 steps. Minor updates to BOM and Building Instructions file in line with Backlash Comp functionality change.
2016-11-22 Firmware version 4.04. Pushbutton function rewritten, now no false readings. Kenwood TS2000 "TX;" issue addressed. Improvement for endstop features 2 and 3. Switch-in/switch-out capacitor feature improvement.
2016-09-03 Firmware version 4.03. USB commands are now case insensitive. Also, ';' added as a terminator for USB commands.
2016-09-03 Firmware version 4.02. Pushbutton debounce improvement, Added USB commands for remote tune, Screensaver disable feature added and further LCD handling improvements. Some bug fixes.
2016-08-16 Firmware version 4.01. Improved handling of certain OLED displays.
2016-07-30 Firmware version 4.00. Main additions: Triple Antenna change-over feature, Transceiver Profiles and tune power level management, Yaesu FT-1000 Mk-V, Kenwood TS-440/450
2016-06-01 Firmware version 3.07. Added Yaesu FT-990 functionality. Added a couple of USB commands. A number of small bug fixes.
2016-05-06 Firmware version 3.06. More Kenwood / Flex bug fixes. Now confirmed to work OK with Kenwood TS-480/590/2000 and Flex 5000/6000 series with DDUtil
2016-05-01 Firmware version 3.05. Kenwood / Flex bug fixes.
2016-04-23 Updated Operation Instructions and Notes with setup instructions for Flex Radios, and explanation of ICOM and Elecraft Auto vs. Poll modes.
2016-04-09 Updated "BOM and Building Instructions". A detailed description of the dual antenna changeover feature was added.
2016-04-08 Firmware version 3.04. ICOM bug fixes. Updated Operation Instructions and Notes.
2016-03-25 Updated "BOM and Building Instructions" with some minor improvements.
2016-03-19 Firmware version 3.03 Added Yaesu FT-990,Yaesu FT-1000MP, Yaesu FT-1000MPmkV. Pseudo VFO bug fix.
2016-02-07 Firmware version 3.02. ICOM CI-V protocol bug fix.
2016-01-17 Firmware version 3.01. Various bug fixes. Yaesu FT747 added. Improved Passthru serial mode for Yaesu FT100/FT8x7
2015-06-14 Firmware version 3.00. Open-drain style TXD when connected to ICOM CI-V. Dual Antenna control capability added.
2015-05-23 Firmware version 2.08. Bug fixes.
2015-04-30 Firmware version 2.07. A couple of bug fixes.
2015-04-26 Firmware version 2.06. A number of new features and a couple of bug fixes.
2015-02-28 Firmware version 2.04. Serial port<=>USB port passthrough mode added to enable Rig control by Computer.
2015-02-13 Firmware version 2.03. A new Transceiver type has been added: Transceiver type 11, Pseudo-VFO, providing an alternate mode of entering frequency information if Radio is not serial connected (uses new pushbutton SW6)
2015-02-08 Added a link to a Youtube Video showing the Controller in action.
2015-02-06 Firmware update. Version 2.02. Bugfix, Recover position when Radio Information back on line after Off-liine operation.
2015-02-02 Firmware update. Version 2.01, More logical soft endstop behaviour, improved pushbutton scan etc...
2015-01-28 Updates to BOM and Building instructions.
2015-01-24 Firmware update, version 2.00 - Includes a number of improvements and the new SWR Autotune functionality
2015-01-24 Added description of SWR Autotune Option
2015-01-18 Minor modification of LCD display for more logical indication of Position
First publication of page 2014-04-30
To download any of the files below, please click on the down arrow ďat the right hand side of the file.