Tuesday, October 4, 2016

Amateur Radio - Building a 3 element yagi for 6 meters

I've been looking for a suitable replacement for the simple 6m rigid dipole.  Some of the designs that I've seen look flimsy and perhaps not well suited for high winds or snow.  I started ruling out all the designs that used dipole driven elements.  In looking for the perfect stout yagi I came across a gamma match driven design by ON6MU.  It boasted a good 2 Mhz bandwidth, with all the elements bonded directly to the boom without the need for isolation.  This appeared to be the ideal solution.

I bought a 1" square tube from the local hardware store cut to 2 meters in length, and obtained some surplus 1/2" and 3/8" aluminum tubing from my local club.  The tubing was quite old and corroded, so I had to polish the outside of the tubes.  I followed the dimensions precisely as given in the original design:

Reflector = 2940mm at 10mm spacing from the end
Driver = 2870mm at 985 mm spacing from the end
Director = 2660 mm at 1990 mm spacing from the end


I chose #10 stainless screws and nylock nuts to fasten the structure together.  I made spacers for the inner tubing as not to crush it out of solid 3/8" aluminum rod.  The holes are spaced at 0.700 inches so that the screws are directly against the walls of the square aluminum boom for maximum strength when tightening down.  I drilled the boom on the drill press prior to taking all the parts outside to insure all the holes were drilled perpendicular to the length.  Everything was assembled with Silicone Grease to prevent corrosion between the metal joints.
One screw was dropped in while the spacer was pushed down the length of the tube.  A dental pick helped align the pre-drilled holes.
Here is the reflector about to be fastened down.
The whole thing went together right well.  I used some strips of aluminum gutter for the shorting strap.  These were formed first, then drilled and sheet metal screwed used to fasten them together.  The first Gamma Tube I created was out of 1/4" copper with a RG-8 center conductor and dielectric.  This is where things started to go wrong later.
When I erected the antenna on a pole for tuning I couldn't get a good match.  Of course I wasn't using ON6MU's recommended dimensions for the Gamma Tube since I didn't have the right material.  I referenced a few other designs for Gamma Tubes on 6m Yagi antennas and finally created a new Gamma Tube made from 3/8" Aluminum at 12.75" long and a center conductor and dielectric from RG-213 coax at 14" long.  This proved to give a good reactive match.

Further difficulty presented itself when the antenna exhibited a 200 ohm resistance at 50.3 Mhz.  This meant that my driven element was too long and the antenna was resonating below what my analyzer could read.  I kept cutting each end till the resistance came down to 50 ohms, which was about 2.25 inches.  This could be the material I was using, or the way I attached the elements which may have differed from the original design.  So the final measurements ended up being:

Reflector = 2940mm at 10mm spacing from the end
Driver = 2870mm 2756mm at 985 mm spacing from the end (final tune by antenna analyzer)
Director = 2660 mm at 1990 mm spacing from the end
The Gamma Tube was easy to tune as it was almost completely pushed into the coax as far as it would go with 0.25" space at the end, and then the shorting strap was attached at about 1.5"" from the end.  Shrink tube was applied on both ends of the tube and around the coax section.  The SO-238 connector was sealed with first a layer of hot glue, and then coated with liquid electrical tape for a final seal.
A quick check SWR with the rig was done and I contacted my friend a few miles away.  Another friend (in the opposite direction) also chimed in saying that my signal was weak.  A quick twist of the "Armstrong Rotator" put the other station at S7 with minimal power, proving that the beam-width of the antenna was what it was designed to be.  I didn't worry too much about the director being proportionally longer than the driven element after being trimmed.  Some tests with the NL7XM/B beacon proved that the beam-width was satisfactory.  It won't be hard to lop off some of the director if I think the beamwidth is a problem later.  I can always insert some 3/8" tube into the elements if I need to lengthen any element.  I think the original design intended this, but I wanted to avoid points of corrosion by adding different pieces.  The aluminum tubing I am using was very old and internally quite corroded.
Hauling the antenna up to the roof was easy since it is so light.  It clamped right onto the pole along with my 2 meter slim JIM.  My antique Alliance Tenna Rotor model T-20 has no problem spinning it around.  While it doesn't have the claimed bandwidth of an M2, it tunes just fine with my external tuner.  The bottom end of the band is where the SSB weak signal work occurs anyway.  I can still point it at the local club 6m repeater and bring it up, so that makes me happy too.

Sunday, July 10, 2016

Amateur Radio - callsign lookup via voice command

I've been thinking about writing this Tasker + Autovoice project for a while. I finally got a little time to work out the details. This profile is a voice command to look up the station operator's name when the callsign is provided.
(If you haven't heard of Tasker it is a smartphone app for automating tasks). The XML api service on QRZ.com allows simple database queries. The XML file I posted needs edited with your callsign and password for the text mycallsign and mypassword. Just put your QRZ credentials in and then import the project into Tasker. You can see how I used the Variable Splitter function to parse the returned text from the HTTP GET query. (I'll probably add the feature for reporting the station's grid square in the future.) My internet is a little slow, so it takes a moment for the task to run and speak the results to me.Here's the improved XML code.  You will need Tasker and Autovoice installed on your smartphone before importing this script.
Search for mycallsign and mypassword (on line 121 of the script) and replace them with your login credentials from QRZ.com.
When the script is run by speaking "OK Google" then say
"qrz callsign" with the callsign that you want to look up... like W1AW for instance.

"OK GOOGLE, QRZ W1AW"

<TaskerData sr="" dvi="1" tv="4.8u5m">
<Profile sr="prof86" ve="2">
<cdate>1468014494157</cdate>
<edate>1468073555161</edate>
<id>86</id>
<mid0>87</mid0>
<mid1>88</mid1>
<State sr="con0" ve="2">
<code>1402352892</code>
<Bundle sr="arg0">
<Vals sr="val">
<Contains>false</Contains>
<Contains-type>java.lang.Boolean</Contains-type>
<DisableCommand>&lt;null&gt;</DisableCommand>
<DisableCommand-type>java.lang.String</DisableCommand-type>
<DisableCommandExact>false</DisableCommandExact>
<DisableCommandExact-type>java.lang.Boolean</DisableCommandExact-type>
<DisableCommandRegex>false</DisableCommandRegex>
<DisableCommandRegex-type>java.lang.Boolean</DisableCommandRegex-type>
<LastCommandIdInvert>false</LastCommandIdInvert>
<LastCommandIdInvert-type>java.lang.Boolean</LastCommandIdInvert-type>
<LastCommandIdRegex>false</LastCommandIdRegex>
<LastCommandIdRegex-type>java.lang.Boolean</LastCommandIdRegex-type>
<NotCancelSearchGoogleNow>false</NotCancelSearchGoogleNow>
<NotCancelSearchGoogleNow-type>java.lang.Boolean</NotCancelSearchGoogleNow-type>
<NotOnContinuous>false</NotOnContinuous>
<NotOnContinuous-type>java.lang.Boolean</NotOnContinuous-type>
<NotOnNormal>false</NotOnNormal>
<NotOnNormal-type>java.lang.Boolean</NotOnNormal-type>
<Precision>&lt;null&gt;</Precision>
<Precision-type>java.lang.String</Precision-type>
<ProfileName>&lt;null&gt;</ProfileName>
<ProfileName-type>java.lang.String</ProfileName-type>
<Source>&lt;null&gt;</Source>
<Source-type>java.lang.String</Source-type>
<Substitutions>&lt;null&gt;</Substitutions>
<Substitutions-type>java.lang.String</Substitutions-type>
<TriggerWord>&lt;null&gt;</TriggerWord>
<TriggerWord-type>java.lang.String</TriggerWord-type>
<TriggerWordExact>false</TriggerWordExact>
<TriggerWordExact-type>java.lang.Boolean</TriggerWordExact-type>
<TriggerWordRegex>false</TriggerWordRegex>
<TriggerWordRegex-type>java.lang.Boolean</TriggerWordRegex-type>
<VariableNames>&lt;null&gt;</VariableNames>
<VariableNames-type>java.lang.String</VariableNames-type>
<VariableValues>&lt;null&gt;</VariableValues>
<VariableValues-type>java.lang.String</VariableValues-type>
<com.twofortyfouram.locale.intent.extra.BLURB>Event Behaviour: true
Command: "qrz (?&lt;callsign&gt;.+) (regex)"
Last Cmd Id Regex: false
Last Cmd Id Invert: false
Not on Normal: false
Not on Continuous: false
Contains All: false
Use Regex Replacements: false
Do Google Now Search: false</com.twofortyfouram.locale.intent.extra.BLURB>
<com.twofortyfouram.locale.intent.extra.BLURB-type>java.lang.String</com.twofortyfouram.locale.intent.extra.BLURB-type>
<configcommand>qrz (?&lt;callsign&gt;.+)</configcommand>
<configcommand-type>java.lang.String</configcommand-type>
<configcommandid>&lt;null&gt;</configcommandid>
<configcommandid-type>java.lang.String</configcommandid-type>
<configcommandinvert>false</configcommandinvert>
<configcommandinvert-type>java.lang.Boolean</configcommandinvert-type>
<configexactsub>false</configexactsub>
<configexactsub-type>java.lang.Boolean</configexactsub-type>
<configinstant>true</configinstant>
<configinstant-type>java.lang.Boolean</configinstant-type>
<configlastcommand>&lt;null&gt;</configlastcommand>
<configlastcommand-type>java.lang.String</configlastcommand-type>
<configregexsub>true</configregexsub>
<configregexsub-type>java.lang.Boolean</configregexsub-type>
<net.dinglisch.android.tasker.RELEVANT_VARIABLES>&lt;StringArray sr=""&gt;&lt;_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES0&gt;%avcomm
First recognized Command
&lt;/_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES0&gt;&lt;_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES1&gt;%avcommnofilter
First Command Without Filter
&lt;/_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES1&gt;&lt;_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES2&gt;%avcomms()
All recognized commands
&lt;/_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES2&gt;&lt;_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES3&gt;%avcommsnofilter()
All recognized commands without filter
&lt;/_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES3&gt;&lt;_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES4&gt;%avsource
Source of the Voice Command
Can be normal, continuous, test or googlenow&lt;/_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES4&gt;&lt;_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES5&gt;%avword()
Word Array
&lt;/_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES5&gt;&lt;_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES6&gt;%callsign
First "callsign"
First match for group "callsign"&lt;/_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES6&gt;&lt;_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES7&gt;%regexgroups()
Regex Groups
Regex Groups&lt;/_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES7&gt;&lt;_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES8&gt;%regexmatch
Regex Match
Regex Match&lt;/_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES8&gt;&lt;/StringArray&gt;</net.dinglisch.android.tasker.RELEVANT_VARIABLES>
<net.dinglisch.android.tasker.RELEVANT_VARIABLES-type>[Ljava.lang.String;</net.dinglisch.android.tasker.RELEVANT_VARIABLES-type>
<net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS>configcommand plugininstanceid plugintypeid </net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS>
<net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS-type>java.lang.String</net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS-type>
<net.dinglisch.android.tasker.subbundled>true</net.dinglisch.android.tasker.subbundled>
<net.dinglisch.android.tasker.subbundled-type>java.lang.Boolean</net.dinglisch.android.tasker.subbundled-type>
<plugininstanceid>bf5bbf3d-9859-41b4-bc61-8e2d6f9e2a92</plugininstanceid>
<plugininstanceid-type>java.lang.String</plugininstanceid-type>
<plugintypeid>com.joaomgcd.autovoice.intent.IntentReceiveVoice</plugintypeid>
<plugintypeid-type>java.lang.String</plugintypeid-type>
</Vals>
</Bundle>
<Str sr="arg1" ve="3">com.joaomgcd.autovoice</Str>
<Str sr="arg2" ve="3">com.joaomgcd.autovoice.activity.ActivityConfigReceiveVoice</Str>
</State>
</Profile>
<Project sr="proj0" ve="2">
<cdate>1467978939203</cdate>
<name>QRZ Look</name>
<pids>86</pids>
<tids>88,87</tids>
</Project>
<Task sr="task87">
<cdate>1467979303743</cdate>
<edate>1468073445011</edate>
<id>87</id>
<nme>Qrz Db Query Call</nme>
<pri>100</pri>
<Action sr="act0" ve="7">
<code>118</code>
<Str sr="arg0" ve="3">online.qrz.com</Str>
<Str sr="arg1" ve="3">/bin/xml?username=mycallsign;password=mypassword</Str>
<Str sr="arg2" ve="3"/>
<Str sr="arg3" ve="3"/>
<Str sr="arg4" ve="3"/>
<Int sr="arg5" val="20"/>
<Str sr="arg6" ve="3"/>
<Str sr="arg7" ve="3"/>
<Int sr="arg8" val="0"/>
</Action>
<Action sr="act1" ve="7">
<code>547</code>
<Str sr="arg0" ve="3">%qrzgetkey</Str>
<Str sr="arg1" ve="3">%HTTPD</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
</Action>
<Action sr="act10" ve="7">
<code>590</code>
<Str sr="arg0" ve="3">%qrzcallsigndat</Str>
<Str sr="arg1" ve="3">&lt;name&gt;</Str>
<Int sr="arg2" val="0"/>
</Action>
<Action sr="act11" ve="7">
<code>590</code>
<Str sr="arg0" ve="3">%qrzcallsigndat2</Str>
<Str sr="arg1" ve="3">&lt;/name&gt;</Str>
<Int sr="arg2" val="0"/>
</Action>
<Action sr="act12" ve="7">
<code>547</code>
<Str sr="arg0" ve="3">%lname</Str>
<Str sr="arg1" ve="3">%qrzcallsigndat21</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
</Action>
<Action sr="act13" ve="7">
<code>559</code>
<Str sr="arg0" ve="3">%callsign is</Str>
<Str sr="arg1" ve="3">default:default</Str>
<Int sr="arg2" val="3"/>
<Int sr="arg3" val="5"/>
<Int sr="arg4" val="5"/>
<Int sr="arg5" val="1"/>
<Int sr="arg6" val="0"/>
<Int sr="arg7" val="0"/>
</Action>
<Action sr="act14" ve="7">
<code>559</code>
<Str sr="arg0" ve="3">%fname %lname</Str>
<Str sr="arg1" ve="3">default:default</Str>
<Int sr="arg2" val="3"/>
<Int sr="arg3" val="5"/>
<Int sr="arg4" val="5"/>
<Int sr="arg5" val="1"/>
<Int sr="arg6" val="0"/>
<Int sr="arg7" val="0"/>
</Action>
<Action sr="act15" ve="7">
<code>548</code>
<Str sr="arg0" ve="3">%callsign is %fname %lname</Str>
<Int sr="arg1" val="0"/>
</Action>
<Action sr="act2" ve="7">
<code>590</code>
<Str sr="arg0" ve="3">%qrzgetkey</Str>
<Str sr="arg1" ve="3">&lt;Key&gt;</Str>
<Int sr="arg2" val="0"/>
</Action>
<Action sr="act3" ve="7">
<code>590</code>
<Str sr="arg0" ve="3">%qrzgetkey2</Str>
<Str sr="arg1" ve="3">&lt;/Key&gt;</Str>
<Int sr="arg2" val="0"/>
</Action>
<Action sr="act4" ve="7">
<code>547</code>
<Str sr="arg0" ve="3">%qrzkey</Str>
<Str sr="arg1" ve="3">%qrzgetkey21</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
</Action>
<Action sr="act5" ve="7">
<code>118</code>
<Str sr="arg0" ve="3">xmldata.qrz.com</Str>
<Str sr="arg1" ve="3">/xml/current/?s=%qrzkey;callsign=%callsign</Str>
<Str sr="arg2" ve="3"/>
<Str sr="arg3" ve="3"/>
<Str sr="arg4" ve="3"/>
<Int sr="arg5" val="20"/>
<Str sr="arg6" ve="3"/>
<Str sr="arg7" ve="3"/>
<Int sr="arg8" val="0"/>
</Action>
<Action sr="act6" ve="7">
<code>547</code>
<Str sr="arg0" ve="3">%qrzcallsigndat</Str>
<Str sr="arg1" ve="3">%HTTPD</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
</Action>
<Action sr="act7" ve="7">
<code>590</code>
<Str sr="arg0" ve="3">%qrzcallsigndat</Str>
<Str sr="arg1" ve="3">&lt;fname&gt;</Str>
<Int sr="arg2" val="0"/>
</Action>
<Action sr="act8" ve="7">
<code>590</code>
<Str sr="arg0" ve="3">%qrzcallsigndat2</Str>
<Str sr="arg1" ve="3">&lt;/fname&gt;</Str>
<Int sr="arg2" val="0"/>
</Action>
<Action sr="act9" ve="7">
<code>547</code>
<Str sr="arg0" ve="3">%fname</Str>
<Str sr="arg1" ve="3">%qrzcallsigndat21</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
</Action>
<Img sr="icn" ve="2">
<cls>com.apklabs.android.calllog.CallLog</cls>
<pkg>com.apklabs.android.calllog</pkg>
</Img>
</Task>
<Task sr="task88">
<cdate>1467979303743</cdate>
<edate>1468073330847</edate>
<id>88</id>
<nme>Qrz Db Query Qth</nme>
<pri>100</pri>
<Action sr="act0" ve="7">
<code>547</code>
<Str sr="arg0" ve="3">%qrzcallsigndat</Str>
<Str sr="arg1" ve="3">%HTTPD</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
</Action>
<Action sr="act1" ve="7">
<code>590</code>
<Str sr="arg0" ve="3">%qrzcallsigndat</Str>
<Str sr="arg1" ve="3">&lt;addr2&gt;</Str>
<Int sr="arg2" val="0"/>
</Action>
<Action sr="act10" ve="7">
<code>547</code>
<Str sr="arg0" ve="3">%state</Str>
<Str sr="arg1" ve="3">%qrzcallsigndat21</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
</Action>
<Action sr="act11" ve="7">
<code>559</code>
<Str sr="arg0" ve="3">State of %state</Str>
<Str sr="arg1" ve="3">default:default</Str>
<Int sr="arg2" val="3"/>
<Int sr="arg3" val="5"/>
<Int sr="arg4" val="5"/>
<Int sr="arg5" val="1"/>
<Int sr="arg6" val="0"/>
<Int sr="arg7" val="0"/>
</Action>
<Action sr="act2" ve="7">
<code>590</code>
<Str sr="arg0" ve="3">%qrzcallsigndat2</Str>
<Str sr="arg1" ve="3">&lt;/addr2&gt;</Str>
<Int sr="arg2" val="0"/>
</Action>
<Action sr="act3" ve="7">
<code>547</code>
<Str sr="arg0" ve="3">%city</Str>
<Str sr="arg1" ve="3">%qrzcallsigndat21</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
</Action>
<Action sr="act4" ve="7">
<code>590</code>
<Str sr="arg0" ve="3">%qrzcallsigndat</Str>
<Str sr="arg1" ve="3">&lt;country&gt;</Str>
<Int sr="arg2" val="0"/>
</Action>
<Action sr="act5" ve="7">
<code>590</code>
<Str sr="arg0" ve="3">%qrzcallsigndat2</Str>
<Str sr="arg1" ve="3">&lt;/country&gt;</Str>
<Int sr="arg2" val="0"/>
</Action>
<Action sr="act6" ve="7">
<code>547</code>
<Str sr="arg0" ve="3">%country</Str>
<Str sr="arg1" ve="3">%qrzcallsigndat21</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
</Action>
<Action sr="act7" ve="7">
<code>559</code>
<Str sr="arg0" ve="3">from %city %country</Str>
<Str sr="arg1" ve="3">default:default</Str>
<Int sr="arg2" val="3"/>
<Int sr="arg3" val="5"/>
<Int sr="arg4" val="5"/>
<Int sr="arg5" val="1"/>
<Int sr="arg6" val="0"/>
<Int sr="arg7" val="0"/>
</Action>
<Action sr="act8" ve="7">
<code>590</code>
<Str sr="arg0" ve="3">%qrzcallsigndat</Str>
<Str sr="arg1" ve="3">&lt;state&gt;</Str>
<Int sr="arg2" val="0"/>
</Action>
<Action sr="act9" ve="7">
<code>590</code>
<Str sr="arg0" ve="3">%qrzcallsigndat2</Str>
<Str sr="arg1" ve="3">&lt;/state&gt;</Str>
<Int sr="arg2" val="0"/>
</Action>
<Img sr="icn" ve="2">
<cls>com.apklabs.android.calllog.CallLog</cls>
<pkg>com.apklabs.android.calllog</pkg>
</Img>
</Task>
</TaskerData>

Friday, April 29, 2016

Amateur Radio - Building the VK5JST Aerial (Antenna) Analyzer

I've been wanting an antenna analyzer for a while.  The capital investment was a little too much to substantiate for a commercially produced unit capable of HF through VHF.  I stumbled across a few home-brew solutions, but none really seemed professional enough until I found the VK5JST Aerial Analyzer.  The device comes in a kit form from the Adelaide Hills Amateur Radio Society in Australia.  For under $125 USD shipped, it was almost too good to be true.  The kit consists of all the parts required and an enclosure.  The user experience is similar to the MFJ device which is more than twice the price.  All that is required is some sweat equity and some good soldering skills.  I placed the order and within a week I had a kit delivered to my doorstep.
Figure 1 - unpacked

The kit arrived complete with all the required parts, a high quality circuit board, adhesive labels, a battery holder and some assembly directions.

The first step was to lay out the enclosure, cut some holes, and drill some bolt holes.  The printed directions had a well dimensioned drawing, alas it was not to scale.  No worries.  I set forth laying out the front panel by using the board as a template, with an accurate metric scale to verify the measurements.  A set of drafting dividers provided pinpoint accuracy when marking the cutouts and holes.
Figure 2 - Laying it out

The double-sided board is very high quality with a great ground plane.

Figure 3 - cutting the holes

The tricky parts were making the square holes in the plastic project box.  This was done using a roto-zip bit in my Dremel tool.  Marking out the limits with blue painters tape gave a good contrast when routing out the shapes.  The holes had to be absolutely accurate to allow everything to line up.

Figure 4 - Cutouts

Figure 5 - Completed cutouts

The side adjustment for the tuning capacitor was the most difficult part.  I used a "flapper wheel" emory tool for the Dremel to smooth the shape of the cutout.


Figure 6 - Connector board to Main Board

The connector board is conveniently marked with centering tracks to aid in getting the boards to mate just right.  Following the directions, tacking the boards together first is critical before applying a drafting square to to insure a 90 degree match between the surfaces.  The first components to be added were the surface mount devices, which go on the trace side of the board.  These SMT components are very small and just a little heat is needed to put them in place while holding them steady with a pair of forceps.  It should be noted that reading the directions closely is imperative while positioning the surface mount transistor, since the label on the part goes DOWN towards the board.

 Figure 7 - Resistors

Each resistor was carefully verified with my trusty DVM (Digital Volt Meter) before soldering it carefully in place.  The leads could then be clipped off on the track side.  The directions recommend doing the smaller components first and then following up with the larger and higher components.  This makes very good sense so that the clearance of placing the smaller components is easier without the larger components in the way.

Figure 8 - Track side of the board with resistors

Adding the diodes and capacitors came next.  I was confused at first because the kit came with two extra 100nF caps.  I double checked the inventory count to make sure I wasn't missing something.  There are only the ones called for required and indeed the kit had two extra.

Figure 9 - Capacitors

The kit instructions were careful to mention that the caps should be tight against the board with no lead length above the board surface.  This reduces stray capacitance.  There is a note to actually leave the 68pF cap above the board surface for a better result and along with R31, R32, diodes D2, and D3.  I actually went back later and read the errata notes, and raised them up more.  I'll mention that again further on in the build report.

Figure 10 - Sockets

Adding the sockets for the IC's was a bit tricky while holding them flush and tacking one pin on each side.  Once they start going wampus its hard to correct it, so I made sure they were flush before soldering each pin in place.

Figure 11- Transistors

The FET's (Field Effect Transistors) that came with the kit were selected as matched sets, so the test circuit provided in the instructions was not needed.  The BJT's (Bipolar Junction Transistors) were also tested with the transistor checker gain feature on my DVM.  The kit noted that all are not created equal and the position of the pins should be verified on each device.  This was easily done after pre-bending the transistor leads carefully with a set of sharp needle-nosed pliers.  Adding the trimmer pots was also an easy task since they are all the same value, with the exception of the display contrast adjustment, which can't be mistaken since it has a different form factor.  The 6 multi-turn pots should be installed per the included assembly diagram.  This is important per the direction so that an increase in measured voltage on the Test Point terminal increases with Clockwise rotation and decreases with Counter Clockwise rotation.

Figure 12 - Inductors

The last tricky part was the inductors which were thankfully packaged separately in the kit!  Since I'm colorblind it was hard enough telling the resistors apart.  The inductors were also verified with my inductance adapter for my DVM.  This little adapter is a great tool.  I've had it for years and totally takes the guesswork out of inductors.

Figure 13 - Selector switch

Reading the directions for the selector switch was actually the least clear point of the directions.  I had to read it over and over to make sure I was doing it right.  To aid posterity, the ALPHA selector switch is marked with pins 1 - 12 around the edges.  Set the stop pin per the instructions at pin 6.  This is done by removing the nut from the shaft, and re-positioning the stop into the number 6 hole.  Looking at the selector Pin 12 goes to the 12 o'clock position with the antenna connector at the top.  I verified it all twice with the continuity checker before soldering in place.  The little wire inductor is a stretch across the center common pins.  I bent the switch pins and carefully fit the inductor and the small connector lead at the 10:30 position using a piece of clipped component lead.  Once again make sure everything is flush against the board before tacking the switch into place.

Figure 14 - Switch in place

Figure 15 - Tuning Capacitor

The tuning capacitor threw me for a loop at first.  The leads were coming out the wrong side.  You must remove the plastic cover from the back and put the leads out the bottom away from the shaft, before putting the plastic cover back on.  They are VERY thin, so be careful that they don't break when turning them 180 degrees.

Figure 16 - Mounting the Display

I don't trust double-sided tape, so I made four additional holes to mount the display.  The directions assume that you know which way is UP on the display.  The terminals 1 to 14 go down towards the selector switch.  I used 3mm bolts and spacers to set the display permanently in the front panel.  The last think you want is for double-sided tape to fail and short the display into the main board!

 
Figures 17, 18 - Display Mounted permanently

To my annoyance the wire that was intended for the display did not accept solder readily.  I tossed it aside and used some nice CAT-5 wire for the 9 connections from the display to the main board.  A few pins are common on the main board, which conveniently allowed for less wires to be run.  The pins 7,8,9,10 on the display were shorted with a bare wire and a jumper from 1 to 5 installed.

Figure 19 - Mounting Check

The board was then test-mounted to the front panel to check the spacing.  21mm listed in the instructions wasn't quite the right reference point.  I determined the actual distance based upon the thumb wheel clearance to the front panel.  The measurement was actually 21mm from the nut securing the bolt to the front panel with reference to the board's track surface.

Figure 20 - Test Fit

Patience and careful measuring paid off.  Everything lined up.  I used the soldering iron to melt the locating ring of the power switch into the front panel.  It was more easier than drilling a hole.  The selector switch shaft had to be cut off with a Dremel plastic cutting disk as it was far too long.

Figure 21 - Watch for smoke

While this photo doesn't capture it, the directions say to only insert IC1 and test it first.  The output was verified with the 'scope to insure that a nice sine wave was being generated at the correct specifications.  Setting the corresponding pot was also done.  The other chips are added per the instructions setting each corresponding pot.  Here's where the first problem arose.  I could not obtain a 5v full scale on pot P3.  I fiddled with the components associated with that circuit and discovered that if they were raised more from the board's ground plane an appropriate reading could be obtained.

Figure 22 - Success

While I didn't have exactly the right adapters to get a 50 ohm dummy load onto the antenna connector some quick scrounging in the parts bin yielded a workable solution.  A few more tweaks on the calibration procedure got a perfect 50 ohm digital (and analog meter) reading with 1.0:1 SWR and 0.0 reactance.  I was breathing a little better at this point.  This simple verification made me feel that the build was successful.  The front label could be safely applied.  The label had to be cut out to accommodate the display, which was done with a straight-edge and a razor blade.  The selector and power-switch holes were clearly marked.  I punched them through with a set of leather punches and used them to locate the label roughly.  The final precision location was done by the display cutout before pressing the label down permanently.

Figure 23 - Finished Product

This is a sharp-looking instrument.  The last build aspect is to add the battery pack.  Once again I don't trust double-sided tape.  The battery holder has mounting holes, and really should be bolted in.  Non-Skid feet on the back side of the instrument is probably needed to keep the instrument sitting level on the table.

The final test would be to compare the performance of the VK5JST analyzer against a commercial unit to verify the accuracy.  There are issues with the build however, and I haven't been able to resolve them presently.

Remember the adjustment of P3 that I could not obtain full scale?  I cannot obtain much more than half scale with the pot fully clockwise.  I went back again and this time removed the components from the ground plane side of the board.  After verifying them, I re-installed them on the trace side of the board.  There was no significant change here, so the problem must be elsewhere.  More study and research is needed on this subject.  This is what is happening.  I got a good N-Connector to BNC adapter so I could put a good terminating resistor on the instrument.  With some reasonable tuning on P3, P4, P5 and P6 the instrument DOES indicate a reasonably reliable reading of about 50 ohms across all the band settings (with no reactance).  A little fiddling with the P3 adjustment while the 50 ohms was installed, I could obtain a 50 ohm reading on the analog meter.  Feeling rather pleased with myself, I then swapped the 50 ohm BNC terminating resistor with a 75 ohm BNC terminating resistor.  The instrument reads approximately 30 ohms.  I'm defeated at this point on this subject and have to admit failure.

The second issue was discovered while tuning around in the 10meter band.  The display cuts out to zero and does not indicate any frequency above approximately 21 Mhz.  However, I know the oscillator continues to function, since I can detect an RF signal from the unit once the display goes to zero frequency reading.  Strange.  Something had to be wrong.  This device has rave reviews and should work!

At this point, I consulted with VK5JST Jim, the designer of the analyzer.  Jim got back to me right away and developed a checkout plan for testing a few points in the circuit.  At first we couldn't make sense of why the output of D3 diode was low.  It should have been approximately the same as the voltage at TP1.  I was still unable to get the Full Scale calibration out of Test Point 3.

I double and triple checked many of the components around the IC5 detector sub-circuit.  All the components were in tolerance.  Still it was not functioning.  Jim had me do another test as he suspected that TR5 transistor was mis-behaving in a way that it was oscillating in the UHF range.  It turns out that TR5 was not the exact part used in the original design.  The exact part should have been a Phillips brand BRF96.  Whatever part was included in the kit was not exactly a Phillips component and was not behaving as expected.  The use of a well calibrated finger was used to stop the UHF oscillation by touching the emitter lead of TR5.  This clinched the situation and we knew what had to be done.  Jim instructed me to ignore the errata note about re-positioning the components on the opposite side of the board, and put them back on the ground plane side.  I did so and at the same time lifted the lead of C14 from the emitter terminal of TR5.  To simulate the "calibrated finger" I soldered a test point pin to the board in place of where C14 would have been soldered.  This upset was enough to stop the UHF oscillation of TR5 and allow it to operate normally.



I then went through another calibration process, obtaining FSD on TP3 adjusting P3.  P4 was adjusted once again for 4.4v at TP4.  TP5 and TP6 obtained 2.06v easily.  I ended up tweaking P5 and P6 to get the closest 50 ohm reading across all the bands.

The permanent solution will be to get an authentic Phillips BRF96 transistor and insure that the instrument is stable as designed.  I couldn't have worked through this little issue without Jim's assistance.  The man is a RF design wizard.  Praise to VK5JST !

So how does this kitted marvel compare against the commercial instruments that my friends spent a lot more money on?  I've only two comparisons at present.

The first comparison was of my HF Unbalance-Unbalance 9:1 End Fed antenna.  I borrowed a MFJ analyzer some time ago.  So these readings weren't taken at the same time.  Scientifically they should have been.  Everything is reasonably close except for the 80m band.   The calibration tuning of the VK5JST was done so that it gave the best readings across all the bands.


The second comparison was done simultaneously with two other high-end analyzers.  All the SWR measurements taken in the band were reasonably close.  The magnitude readings were the closest, but for some reason the VK5JST didn't start registering reactive impedance till it was way out of the band.  The other analyzers were fairly close, but not always the same as we saw when we went out of band  (data not recorded here).

So how good is it?  Good enough for me.

Sunday, January 31, 2016

Ham Radio - Reworking the Workman CX-3 coaxial antenna switch

I picked this Workman brand model CX-3 antenna switch up at a local hamfest.  It was a total impulse buy.  I really didn't need it, but it was inexpensive.... and it turns out to be cheap as well.
If you see one for sale consider it a source of parts.  I'd never consider running a kilowatt through this switch.

The design is dreadful, and in its original configuration probably only worth the price in parts.
The switch isn't really an RF type switch.  The wiring links between the UHF connectors and the switch was just regular stranded wire.  These connections are also unreasonably long.




I figured I could make this switch at least usable on my wide band Discone antenna, that won't be used for transmitting.  I stripped out the original wiring, and replaced it with pieces of coax which are JUST long enough to reach their destinations.  This approaches a better design, without addressing the glaring issue of the switch itself.

The result looks much more reasonable, but without any analysis I can't prove that I've made any real improvements to the device.