VK2ETA automatic L-match using separate arduino nano

John VK2ETA has uploaded an updated folder to the BITX20 IO Group list files section.   This adds new schematics for his Antenna Tuning Unit (ATU).

ATU Design objective

1. Fits in the limited space of my Jameco case (Jaycar case here in Oz), on my second level board.

2. Tunes long wire and EFHW (worst case with the help of a 9:1 balun).

3. Works 80m to 10M.

4. Memory tune to save power and time.

5. Negligible power consumption when not tuning.

6. Must integrate with the extra (planned) features like SWR measurements, Finals’ current limiting, and power supply monitoring, and more


John settled on using a second Arduino and an L-Tuner network despite some limitations when compared to T or Z-match networks that seem to require three adjustable elements for 80 to 10M coverage.

The 2nd Arduino has the following advantages: at around US$3-5 it is much cheaper than extra I2C analogue and digital I/Os, plus it gives another 30K of programming space and 1K of EEPROM for memory tuning. It can be put in low power mode when not tuning,  as John uses the Mini Pro version (no USB port), and communication is via the I2C bus to the Raduino.

John needed an SWR meter.  He chose the Don Cantrell (ND6T) circuit as a perfect match.  He made it on a daughter board that plugs directly into the connector after the LPFs.

Browsing the internet and looking at previous solutions like the SLT+ and the Altoid Long Wire Tuner, I settled on 6 inductance values.

Switching the inductance could be done with relays, but that means 5 bi-stable relays and ten digital outputs. Same issue with the variable capacitors.

I decided to use an RC servo controlling a mylar variable capacitor and another one controlling a rotary switch for the coils.

The first challenge was to have a way of switching the capacitor from the antenna side to the transceiver side to match both high and low impedance antenna loads.  One option was a bi-stable relay.   The solution John settled on was to use a double wafer rotary switch with 12 positions and dedicated 6 of them to the capacitor on the input and 6 on the output.

He needed two digital outputs for the PWM generation for the servos and one for cutting the power off to the servos (using a common positive supply).

His main concern was the possibility of the servos not handling RFI. But in the end they were easy to tame.

The next challenge was to find a servo that could do 360 degree rotation (or at least 345 degrees) to cover all 12 contacts on the rotary switch.  There are quite a few servos that manage 180 degrees, but he was unable to find one that did a full 360 degrees. Please note there are many so-called “360 degree” servos available but they are “continuous rotation” servos and do not move to a position, just rotate at a certain speed, with no position feedback.

The first solution he tried was to use a 2:1 gearing and a 180 degree servo. It worked but was not very reliable due to the additional backlash, even with a larger servo to compensate for the power loss in the gears.

Luckily there are now “Sail Winch Servos” available in 1, 1.5, 2 and more turns, but that retain a position control. John chose the 1 turn version, which worked successfully.  It is a “GWS S125 1Turn 2BB Sail Winch Servo”.

The key challenge he faced was to ensure that the servo would settle pretty much centred on the rotary switch contacts. The angular resolution of the servo is sufficient for this but he needed repeatability. Otherwise he would destroy the contacts through arcing.

Since John controls the supply of RF power to the antenna, he can cut the power off when he changes contacts on the rotary switch.   He used a digital input on the Arduino to measure whether the contacts had been established or not, and thereby form a map of the location of the contacts relative to the angular position of the servo. When the contact is established you should get a short to ground through the coils. A pair of 1 M Ohm resistors to feed the 5V and connect to the Arduino pin,  worked very well.

He  builds the contact map once, at first tune, and uses it thereafter until the rig is powered down. It may be possible to store the map in EEPROM, but stability over time and with temperature changes hasn’t been checked.

When the servo is moved from one contact to the next you can again check at what angle the contact is established or lost to compensate exactly for the backlash. A bit of software does this, and it works quite reliably.

John has shielded the ATU with sides made from PCU board to prevent stray RF.  Apart from the capacitor servo, which occasionally displayed small jitters, the rest did not really need shielding and worked quite well without additional effort.

The main components are:

  • Arduino mini pro or nano
  • Variable capacitor and micro servo’
  • Rotary switch 12 positions with two wafers (it could be one wafer and less positions and a bi-stable relay)
  • A “one turn sail servo”
  • a P-Channel Mosfet for servo supply
  • a 5V regulator dedicated to the servos’ power,
  • the components for the ND6T SWR and Power bridge.
John uses the following I/Os on the 2nd Arduino:
  • 4 digital I/Os of which 2 are PWM
  • two analogue inputs
  • the I2C (A4/A5) lines.

John found he had enough I/Os left for the other functions that he wanted to implement on the second arduino.

Performance: With a 21m (69′) long wire and a 10m (33′) counterpoise on the ground John found he coul  tune all bands ( 60M wasn’t tested, as VK still doesn’t have access to this band), with an SWR of under 2 at all times.

A full tune sequence takes 32 seconds if the matching coil is in position 12, and a memory tune is around 3 seconds. At first tune after power-up, there is an additional delay of 15 seconds for the rotary switch contact mapping process to complete.

Total parts cost is around AU$130 (US$100 approx.), but a lot cheaper in the USA and other countries I am sure and quite a few items could already be in the junk box.


1. A complete view of the unit with the shields in place. Also the Android hands free headset (with modified software for push-on/push-off PTT).

2. Second Board (double sided fibreglass as a ground plane, plus sections of vero board) with the MAX9814 AGC, the SSM2167 mic compressor, the ATU circuit and Arduino.

3. The back of the unit with the ATU toroids, variable capacitor (the angling is to align it with the servo’s angular range), the SWR/Power bridge. Note that three toroids are used to minimise losses and prevent high voltages since the unused turns are not shorted out as in some designs.

4. A top view of the coupling of the micro servo and mylar variable capacitor.

5. A top view of the rotary switch, toroids and the contact detection circuit.

6. The SWR bridge daughter board’s back with it’s female header to provide solid ground connection and mechanical rigidity.

7. Tuning completed . P = forward power, R = SWR …. front panel labels to come!

A critique  

John provides his own crritique of the design, now that is is completed:

  • the winch servo adds 50g plus coupling of around 30g, which is a fair amount of weight, but the total build is still under 2Kg at 1.25Kg or 2.8 Pounds.
  • a single bi-stable relay instead of the second wafer for switching the capacitor over may be a simpler solution, and leave more steps for the inductance.


John has now also provided the two parts of the schematic. Part 1, the L-Network:

And the Control part:

The software can be found separately.

Reference #1
Reference #2