I maintain a set of simple ARDF (amateur radio direction finding, or “fox hunting”) receivers of the type Compact 3,5F from OK2BWN for use by beginners. A problem with some of the receivers is that the gain cannot be set low enough, which means that the audio becomes unbearably loud close to a transmitter. I could not find any schematics online, so I decided to reverse-engineer the receiver so that I could figure out what to change to allow lower gain.
The receiver is built on a single-layer board using some through-hole components on the top side and surface mount components on the bottom. The discrete SMD components are large (1206 size), so the resistors have their values printed on them. This all makes the tracing of the circuitry relatively simple. I photographed both sides, flipped the photo of the top side and overlayed them. Then it was “just” a matter of sketching out the circuitry, a process that involved a couple of false starts before it all converged to something that looks like a direct conversion receiver.
Even before starting, I had a good idea of the general architecture as the receiver contained a single SA612 mixer with an analog VCO and an LM386 audio amplifier, but no crystal or ceramic IF filters (so it was not a superheterodyne). Since there was only one mixer it also could not be an image reject receiver, hence receiving both the desired and undesired sideband, which is also evident when tuning the receiver as a CW signal appears for two different tuning settings close to each other. Another thing that was obvious from using the receiver and looking at the parts inside, was that the signal from the E-field antenna was combined with the signal from the H-field antenna by a few turns on the ferrite core when the “antenna selector” switch was pushed to power the E-field amplifier located on a separate board.
Below are the photos of the top and the bottom of the board, as well as a combined photo where the flipped top side components are shown somewhat transparently over the bottom side photo.
Below is the schematics I came up with. As far as I know, it is correct, but I give no guarantees.
An annotated photo of the bottom of the board is shown below.
I have not bothered to desolder and measure unmarked components like capacitors, so apart from the electrolytics, I do not know their values. I wrote 100 nF on capacitors I think only serve the function of DC-blocks, supply decoupling or low-pass filtering of the varactor bias, but this is just a guess. They could have some other value, although that is unlikely to be critical. The capacitors in series with the varactors might theoretically have some low value to adjust/reduce the tuning range, so there the 100 nF guess could be more wrong.
There are a few mystery components in the circuit. The four-pin through-hole part (Q1A, Q1B in the schematic) near the antenna is unmarked, except for a white stripe. Based on its place in the circuit and the components around it, I have guessed it is a double JFET in cascode configuration. While there are indeed dual JFETs available today, I could not find one with this package. My guess is that it is an obsolete part. Also, the varactors are unmarked, but the conclusion they are varactors is more solid than the guess regarding the dual JFET.
A JFET cascode amplifier is a good choice as a low-noise-amplifier for a ferrite antenna as it has high input impedance and low noise. Here it has a tuned drain circuit which increases the gain at the cost of some added complexity (and risk of oscillation?). The Q is limited by the 1.5 kohm input impedance of the SA612.
I suppose having a tuned RF amplifier was necessary to get enough gain for weak signals. The other gain elements are the mixer (nominally 14 dB) and the LM386. The RF amplifier is the only adjustable gain element in the receiver, which is perhaps an unusual choice. The input gate is DC-biased to 0 V via the ferrite antenna while the source is connected to a decoupled (C35) resistive network around the gain potentiometer, which allows changing the operating point of the JFET to select a suitably steep part of the ID-VGS curve to get the desired gain.
Adjusting the minimum gain
Now that we have the schematics, what do we need to do to allow more attenuation/less gain? The obvious place to look is near the existing gain control circuit. When potentiometer R4 is at its maximum counter-clockwise (CCW) position, the gate-source of JFET Q1A is maximally back biased to operate at the shallowest ID-VGS point and thus lowest gain. But we need it to be lower still.
VGS(off), i.e. the (negative) voltage from gate to source of a JFET required to turn the transistor fully off is not a well-controlled parameter. It can easily vary by a factor larger than two (sometimes larger than five) between devices with the same part number. As discussed the way gain is adjusted in this receiver is largely by adjusting VGS, so it is no surprise that different receivers will have different minimum gains.
To reduce the minimum gain for a receiver, it is fortunately quite easy to make a modification that results in a more negative VGS when the gain pot is maximally turned CCW. Just reduce R1 that together with the gain pot R4 (and R3 and R6) forms a voltage divider from +5V. A lower R1 value means the source will be biased to a higher voltage when the gain pot is at max CCW, but it will have very little effect when the pot is at the opposite end.
I found that parallelling the 33 kΩ R1 with 100 kΩ to get 24.8 kΩ resulted in a decent minimum gain for most receivers I modified. One receiver that was not quite as bad received 130 kΩ across R1 (26.3 kΩ total).
Below is a photo of a board with a blue 100 kΩ resistor soldered on top of the 33 kΩ R1 that was there originally.
Further comments and observations
The antenna is wound using two parallel and mirrored windings. This is supposed to eliminate any possibility of direction error. A direction-finding ferrite antenna should have a null exactly when the magnetic field-lines enter perpendicular to the core, but if there is a single winding on the core with some distance between the start and end of winding, there will be one effective turn over a part of the broadside ferrite core, leading to a slight offset in the null. How big a problem this is in practice is a bit unclear, but it generally is considered good practice to use two windings in parallel, wound symmetrically in opposite directions to cancel this parasitic broadside turn.
There are three varactor-tuned circuits in the receiver that need to be simultaneously tuned to the same frequency as set by the tuning knob: The antenna, the low-noise amplifier and the local oscillator. Getting all three circuits to agree on the frequency for all settings of the tuning dial might have been a challenge when designing the receiver. There is a trimmer capacitor across the antenna that can be adjusted to ensure the antenna agrees with the LO for at least one frequency and the two inductors are also trimmable to allow alignment on at least one (mid-band) frequency. And maybe it is not a big problem if the stages are slightly out of tune near the band edges.
The shielding of the receiver is a bit relaxed. There is a copper clad board acting as shields on each side of the circuit board and ferrite antenna. The shield at the front panel is only connected to the electronics via a thin wire and the shield in the bottom of the box does not seem to have any secure connection at all to the rest of the circuitry. This is not good shielding practice, but perhaps it is good enough at 3.5 MHz. The PCB seems to have provisions along the edges for better shield connections, but maybe this turned out to be unnecessary.
There are shield walls above and below the ferrite antenna, solidly soldered to the copper clad board. Having a good electric shield around the ferrite antenna is crucial for getting distinct nulls in the antenna pattern.
The way the front-back ambiguity of the figure-eight pattern of the ferrite is resolved in this kind of receiver is a bit shaky. When pressing the “antenna selector” button, the E-field antenna signal is injected into the ferrite core and picked up by the ordinary receiver chain. If it is in phase with the signal from the H-field antenna, the total signal gets louder, but if there is close to a 180 degree phase difference, the signal gets weaker, at least if the signals have close to the same amplitude. So by comparing the signal strength with one broadside of the ferrite towards the transmitter with the signal strength with the receiver rotated 180 degrees (which gives a 180 degree phase shift/inversion of the H-field signal, but does not affect the E-field signal), one can figure out if the transmitter is ahead or behind. The big problem however is that the signal strength from the E-field antenna is highly dependent on e.g. the height above ground, so it may not have close to the ideal amplitude and thus not be close to cancelling out the H-field signal when they have opposing phase. And particularly in close vicinity of the transmitter (in the near-field), the two parts of the field may have an unexpected phase and amplitude relationship. This may make it hard to distinguish which orientation of the receiver produces the strongest signal. Trying this at different heights, from knee level to above head level, to get different E-field strengths is often necessary. It would be better if the phase could be compared more directly, but this would add significantly to the complexity of the receiver, which is not an option for a low-cost receiver like this.
The LC-oscillator built with the (now obsolete) SA612 mixer is a configuration I have not seen before. It is not one of the topologies suggested in the data sheet.
A somewhat dubious component choice is the 10-V rated electrolytic C26 connected across the 9-V battery. This is a little too little voltage margin for my taste. A cap with a rating of at least 16 V should be used in that position in my opinion.
There is a through-hole 78L05 5-V regulator on the board, powering parts of the circuitry that benefits from a stable (not dependent on battery discharge level) voltage and also circuits that are not 9-V-tolerant.
This article describes a Yagi antenna I have designed for use in a “fox hunting” receiver for the 2 m band (144 MHz). The antenna uses 25 mm wide steel tape measure for the elements, 16 mm PVC pipe as the boom and 3D-printed parts to keep it all together. Models for the 3D-printed parts are available for download.
Link to a zip-file with 3MF models of the parts:
Several Yagi antenna designs for the sport of fox hunting (or ARDF, amateur radio direction finding) have been published and can be found by some searching on the web. I decided to have a go at designing such an antenna myself and used the free YagiCAD program to do so. After a number of rounds of optimization starting from different base designs, I ended up with the following:
The shortest element is the director (towards antenna main lobe) while the longest is the reflector. The “driven” element is the one in the middle.
According to YagiCAD, the radiation pattern of the antenna is as follows:
Front-to-back ratio is simulated to be above 40 dB.
While I have not measured the real antenna diagram, the subjective assessment is that the antenna performs well. Using a network analyzer, I have found that it’s impedance is around 40 -j0 ohms at 145 MHz.
For the beam, I used a piece of 16 mm outside diameter PVC electrical conduit pipe (“VP-rör” in Swedish).
For the elements, I used 25 mm wide steel tape measure from Biltema, e.g. part number 16-2931.
To mechanically connect the elements to the beam, I designed various clamps that I printed on my 3D printer. The antenna needs to be made smaller for storage and transportation, so I also designed spools and clamps to allow the elements to be rolled up and kept securely in that state. Furthermore, I have designed a handle that can grip on the pipe and be secured by a screw pulling a wedge. Pictures of all these parts are shown below.
Det här blogginlägget är andra och avslutande delen i en artikelserie där jag beskriver en mottagare (“rävsax”) för radiopejlorientering på 80m-bandet. En snarlik variant av artikeln publicerades i Sveriges Sändaramatörers, SSA:s, tidskrift QTC i nummer 10 och 11, 2022.
Denna andra del beskriver elektroniken, mekaniken och mjukvaran.
Blockschema
Figur 16 visar ett blockschema över mottagaren. Utöver vad som framgår av denna bild så händer en hel del intressanta saker i mjukvaran i processorn. Mer om det senare.
Som synes finns det två identiska mottagarkedjor, en för H-fältet och en för E-fältet. Antennsignalerna förstärks något av lågbrusförstärkare (LNA), filtreras och mixas med två lokaloscillatorsignaler som är fasvridna 90 grader från varandra. Detta möjliggör att man senare undertrycker det oönskade sidbandet.
Efter nedmixning till nära basband (nominellt 13 kHz) så bandpassfiltreras signalerna och förstärks med antingen 22 eller 52 dB innan de digitaliseras av 24-bitars audio codecs i en takt av 44.1 kHz. Inbyggt i AD-omvandlarna finns mycket effektiva antivikningsfilter med minst 60 dB dämpning från halva samplingsfrekvensen upp till åtminstone tredubbla samplingsfrekvensen. En tämligen kraftfull mikro-controller i form av en i.MX RT1062 från NXP sköter sedan resten av signalbehandlingen samt användargränssnittet i form av en grafisk display, en ratt och några knappar. Den färdigbehandlade signalen skickas till audio-DAC:ar med inbyggda hörlursförstärkare. För tillfället skickas samma signal till både höger och vänster kanal, men man skulle kunna tänka sig någon annan lösning i framtiden.
Konstruktionen innehåller även ett LiPo-batteri med laddarkrets, en USB-kontakt för laddning och programmering och en IMU, inertial measurement unit, som består av en magnetometer, en accelerometer och ett gyro för att kunna avgöra i vilken kompassriktning som antennen för tillfället pekar.
Processorn
Processorn sitter på en liten s.k. Micro Module som görs av SparkFun [3]. Genom att använda en färdig modul istället för att sätta processorn och tillhörande komponenter direkt på kortet slipper man dels löda en ganska besvärlig 196-bollars BGA-kapsel och dels får man på köpet en trevlig boot loader som gör att man enkelt kan programmera den via en USB-kabel. Det visade sig också lättare att få tag på denna modul än att köpa en lämplig lös processor i den bedrövliga halvledarbrist som råder. Modulen ansluts i en liten ytmonterad kontakt liknande de som används för moderna solid-state-diskar i M.2-format. Kontakten har 67 anslutningar fördelade på två rader med 0,5 mm centrumavstånd mellan benen och modulen är ca 22×22 mm, vilket gör det hela till en kompakt lösning.
i.MX RT1062 är en 32-bitars ARM Cortex-M7-processor som kan klockas i upp till 600 MHz, har stöd för flyttal och massor av periferienheter, såsom interface för I2S, I2C, SPI samt DMA, realtidsklocka, timers mm. Den har också mycket minne för att vara en mikrocontroller; 1 MB RAM och 16 MB flash finns på MicroMod-kortet. Att processorn är så kraftfull gör att programutvecklingen blir mycket enklare än om man ständigt behöver optimera och kompromissa med varje liten funktion man lägger till. Det finns också gott om färdiga programpaket, både från PJRC som utvecklar Teensy-familjen, från Arduino-världen, från ARM och från alla möjliga andra utvecklare och företag som släpper öppen källkod på t.ex. GitHub.
Elektroniken
Kopplingsschemat är uppdelat på flera olika sidor. Figur 17 visar hur de hänger ihop med ett grönt block per schemasida.
I figur 18 visas de två identiska lågbrusförstärkarna som buffrar, förstärker och filtrerar signalerna från de två antennerna. Jag beskriver här den övre kretsen.
P1 är en hylslist för anslutning mot antennerna där de flesta benen är skärmande jord. D1 och D2 skyddar mot överspänningar och ESD. Genom att ha två dioder i serie blir kapacitansen mindre och påverkan på antennens resonansfrekvens inte lika stor. C8 och C9 monteras inte (gäller alla komponenter märkta ”NM”, Not Mounted). Q4, 2SK3557-6, är en JFET med lågt brus och hög inimpedans. När jag letade lämpliga lågbrusiga FET:ar att använda i denna position tyckte jag det här såg ut att vara bästa alternativet, även om det inte finns tydliga data för bruset vid 3,5 MHz i databladet. Förhoppningsvis är spicemodellen inte alltför missvisande. J310 brukar annars vara ett populärt val i sådana här sammanhang, men den ser ut att vara brusigare. Jag har inte gjort några systematiska mätningar för att försöka ta reda på verkliga brusprestanda, men jag har gjort väldigt många simuleringar i den kraftfulla gratissimulatorn LTSpice.
Q4 utgör tillsammans med Q3 ett folded-cascode-steg. Basen på Q3 är RF-jordad och därmed är även emitterspänningen (nästan) konstant, vilket gör att man inte får någon millereffekt som ökar ingångskapacitansen hos Q4. Genom att Q3 sitter ”bredvid” Q4 och inte ovanför som i en vanlig cascode så behöver man inte lika hög matningsspänning. Priset man betalar är att de två transistorerna behöver separata biasströmmar, vilket ökar strömförbrukningen.
R4 och L1 fungerar som strömkälla till cascodesteget. Utan L1 hade brus från R4 signifikant bidragit till förstärkarens brus och med enbart L1, men utan R4, hade biasströmmen blivit väldigt känslig för temperatur och komponenttoleranser. När Q4 vill ha mycket ström (positiv amplitud från antennen) blir det mindre över till Q3 och vice versa, så i princip flyter lika mycket signalström genom Q4 som ut från kollektorn på Q3, om än med omvänd fas.
L4/R14 utgör last till första förstärkarsteget. R14 såg inte ut att behövas i simuleringar, men i praktiken var det bra att ha för att undvika resonansproblem. Brusbidraget från R14 är tämligen begränsat. Även R7 har som syfte att minska risken för självsvängning.
Q2 är en emitterföljare som buffrar den högimpediva utgången från cascodesteget för att kunna driva ett lågpassfilter med 75 ohms impedans (mer lättdrivet/strömsnålt än 50 ohm och det finns inget i den här delen av kretsen som tvingar fram användandet av just 50 ohms impedans) och sedan mixrarna.
Spänningsförstärkningen (det är svårt att tala om effekt här eftersom impedanserna på många ställen inte är väldefinierade) är ca 7 gånger från gaten på Q4 till kollektorn på Q3 och efter dämpningen som orsakas av främst den impedansanpassande R9 så är den nere på totalt ca 3,2 gånger vid filtrets utgång.
Enligt simuleringar med en modell av ferritantennen som är resonant under 3 MHz så är det brus från J1 som dominerar vid 3,5 MHz (vid antennens resonansfrekvens är det lustigt nog istället förluster i antennen som dominerar, följt av brus från Q3).
Q1 filtrerar matningsspänningen för att undvika att störningar kommer in den vägen. En något enklare variant av detta matningsfilter används på flera ställen i [4]. R3/C3 ger ytterligare filtrering av matningen till ingångssteget.
Figur 19 visar de fyra balanserade mixrarna.
Som mixrar används de klassiska SA612 av gilbertcelltyp. Det finns två par av mixrar, ett för H-mottagaren och ett för E-mottagaren för att skapa I- (in phase) och Q- (quadrature phase) versioner av de nedblandade signalerna. Här beskrivs bara H-mottagaren (övre delen av figur 19).
Eftersom mixrarna dels har en ganska hög inimpedans på minst 1.5 kohm och dels är balanserade passade jag på att använda 4:1-transformatorer mellan ingångsförstärkarna och mixrarna. De höjer impedansen från 75 ohm till 300 ohm och gör samtidigt signalen differentiell och med dubbla spänningsamplituden. R80 tillsammans med mixrarnas inimpedans terminerar signalen och ser därmed till att det föregående filtret jobbar i önskad impedans. Det går att driva mixrarna single-ended (så som i 80m12), men signalkvaliteten blir rimligen bättre om man driver dem differentiellt.
Den föregående förstärkningen ser till att bruset från mixrarna (brustal ca 5 dB) inte dominerar. Man vill såklart att första förstärkarsteget, där signalerna med nödvändighet är svagast, ska dominera bruset.
Utsignalen från mixrarna är också differentiella och det utnyttjas för bästa signalkvalitet i de följande MF-förstärkarna på bekostnad av en del komplexitet. De aktiva mixrarna förstärker för övrigt signalen 5–7 gånger. Frekvensen hos MF-signalen är nominellt 13 kHz. Ytterligare nedblandning till under 1 kHz sker senare i mjukvara.
Kondensatorerna C58 etc. tvärs över utgångarna på mixrarna bidrar till lågpassfiltrering tillsammans med utimpedansen på ca 1,5 kohm.
LO-signalerna i fas och kvadratur skapas på en annan schemasida, se längre ned i artikeln, och termineras av 75-ohmsmotstånd vid mixrarna.
Q11 filtrerar matningsspänningen på samma sätt som Q1 gör vid ingångsförstärkaren.
De fyra mixrarnas utsignaler går till varsin MF-förstärkare. Se figur 20 och 21.
Q14 skapar en lämplig nivå på den förstärkningskontrollerande signalen. Q13 filtrerar matningen till förstärkarna. U12 skapar en ganska lågimpediv flytande ”jord” på halva förstärkarnas matningsspänning.
Varje MF-förstärkare har flera uppgifter:
att konvertera den differentiella signalen från mixrarna till en single-ended signal
att bandpassfiltrera signalen
att kunna förstärka antingen lite (13 gånger) eller mycket (400 gånger) beroende på hur stark signalen är.
Detta åstadkoms med en instrumentförstärkarkoppling med tre operationsförstärkare (opampar) av typ TS971. Valet av dessa beror på att de dels var tillgängliga (ingen självklarhet i dessa tider av komponentbrist), dels hade lämpliga prestanda och dels fanns i en liten SC70-5-kapsel så att lösningen inte skulle ta så stor plats. Med tre opampar per kanal och tillhörande kringkomponenter tar det hela ändå ganska mycket utrymme på kortet.
C148 gör att DC-förstärkningen är låg. Om Q17 slås på kopplas R117 in och ökar AC-förstärkningen med 30 dB jämfört med om bara R118 bestämmer förstärkningen. 47-pF-kondensarorerna i återkopplingen runt varje opamp begränsar förstärkningen av oönskade höga frekvenser. R120/C147 ger ytterligare en aning lågpassfiltrering och D8 ser till att klippa om signalen blir alltför stark.
I figur 22 visas de två ”audio codecs” av typ WM8731, U17 och U18, som omvandlar de analoga MF-signalerna till digital form, omvandlar tillbaka basbandssignalen till analog form och innehåller förstärkare som kan driva hörlurar. Tyvärr har WM8731 hunnit bli obsolet sedan jag påbörjade konstruktionen och i framtida versioner borde den ersättas med något modernare.
I figur 22 visas de två ”audio codecs” av typ WM8731, U17 och U18, som omvandlar de analoga MF-signalerna till digital form, omvandlar tillbaka basbandssignalen till analog form och innehåller förstärkare som kan driva hörlurar. Tyvärr har WM8731 hunnit bli obsolet sedan jag påbörjade konstruktionen och i framtida versioner borde den ersättas med något modernare.
Varje codec innehåller två 24-bitars AD-omvandlare och två DA-omvandlare för att hantera stereoljud. I det här fallet används stereokanalerna hos AD-omvandlarna för att digitalisera I och Q från mixrarna.
Eftersom det bara behövs ett par hörlurar så används inte DA-omvandlare och hörlursförstärkare i U18. Förstärkarna kan leverera ohälsosamt starka signaler, så R108/R109 samt D6 och D7 begränsar den maximala ljudnivån till säkrare nivåer. Ännu en idé lånad från 80m12.
U19 är en liten spänningsregulator som förser U17 och U18 med en ren matningsspänning på 3,1 V. Det kan tyckas lite märkligt att använda 3,1 V istället för traditionella 3,3 V, men codecarna är specificerade att fungera bra med denna spänning och strömförbrukningen borde bli aningen lägre. Det var också lättare att få tag på 3,1-V-regulatorer än 3,3-V-regulatorer i den pågående komponentbristen.
Kontaktdonen P10 och J3 passar i varandra om man sågar isär kortet i två delar. Så länge man inte sågat isär kortet så är signalerna ihopkopplade och kontaktdonen behövs inte. På detta vis kan hela konstruktionen tillverkas, monteras och testas på ett 100 x 100 mm stort kort, medan slutprodukten kan bli betydligt smalare när kortet har sågats av ungefär på mitten och de två halvorna lagts ovanpå varandra. Se foton senare i artikeln.
Lokaloscillatorn baseras på den populära Si5351 som kan skapa tre olika fyrkantsvågor mellan några få kHz upp till 200 MHz med så gott som obegränsad frekvensupplösning. I det här fallet skulle vi vilja ha två sinusvågor på ca 3,5 MHz (sändarens frekvens plus MF-frekvensen som är 13 kHz) i kvadratur, dvs med 90 graders fasskillnad. Si5351 kan skapa signaler med inställbar fasskillnad, men vid så låg frekvens som 3,5 MHz så räcker den inställbara tidsskillnaden inte till för att uppnå 90 grader.
Lösningen jag tänkte ut framgår av figur 23. Si5351 (U1) skapar en 3,5-MHz-signal, CLK3M5, samt två signaler med fyrdubbla frekvensen, dvs ca 14-MHz. CLK3M5 går dels via en schmittrigger-inverterare (U3A) till D-ingången på en vippa (U2) och dels fördröjs den lite via RC-länken R45/C41 innan den passerar en annan schmittrigger (U3B) som snyggar till signalen innan den når D-ingången på vippan U4. Båda vipporna klockas med väsentligen samma 14-MHz-klocka, men RC-fördröjningen gör att U2 fångar en förändring av CLK3M5 en 14-MHz-cykel tidigare än U4. En 14-MHz-cykel är 90 grader av en 3,5-MHz-cykel, så på detta sätt får man en perfekt 90 graders fasvridning. I schemat finns ett tidsdiagram för de olika vågformerna.
R75 centrerar RC-vågformen på ingången till U3B så att den hamnar ungefär mitt för omslagspunkterna för inverteraren vilket gör att fyrkantsvågen på utgången blir så gott som symmetrisk.
Man kan finjustera fasskillnaden genom att skruva på fasfördröjningen hos de två 14-MHz-klockorna, men det är inget jag skrivit mjukvara för ännu.
Fyrkantsvågorna från D-vipporna dämpas av R35/R38 och R46/R49 samt omvandlas till sinusvågor genom två lågpassfilter med 75 ohms impedans (ingen anledning att använda 50 ohm här heller). Därefter förgrenas signalerna med varsin resistiv splitter innan de skickas vidare till mixrarna.
Efter att jag konstruerat denna lösning läste jag i byggbeskrivningen till QRP Labs mottagare QDX [5] (se sida 42 i Rev 1.12 av byggbeskrivningen) att det på något sätt verkar gå att få till kvadratursignaler även vid 3,5 MHz med Si5351. Hur detta görs i QDX verkar dock inte vara publicerat, men om man lyckas med det kan man förenkla den här kretsen och bli av med vippor, RC-länk och schmittriggrar.
Eftersom upplösningen i frekvens är fenomenal så kan man ganska lätt kalibrera frekvensen hos mottagaren så att man tar hänsyn till kristallens tolerans och får bättre än 1 ppm frekvensnoggrannhet vid rumstemperatur. I en eventuell framtida version av mottagaren kommer jag nog att förbättra detta ytterligare genom att ersätta kristallen med en TCXO (temperaturkompenserad kristalloscillator) så att inte heller temperaturvariationer ger något nämnvärt bidrag till frekvensfelet.
Så långt den analoga signalkedjan från antenn till AD-omvandling.
Figur 24 visar schemat med processormodulen, displayen, USB-porten, knapparna och kompasskretsarna.
Här följer en beskrivning av signalerna motsols runt symbolen för processormodulen.
Liksom en del andra kretsar matas processorn med 3,1 V istället för 3,3 V för minskad strömförbrukning och bättre tillgänglighet på lämpliga regulatorer. Man får också fördelen att batterispänningen kan sjunka lägre innan kretsens matningsspänning påverkas. Detta är dock inte så viktigt i praktiken eftersom batterispänningen knappt sjunkit under 3,9 V även efter en och en halv timmes användning.
En standby-spänning, VRTC, som inte styrs av huvudströmbrytaren, förser realtidsklockan med matning så att tiden hålls även när resten av mottagaren är avstängd.
Fyra membrantangenter är inkopplade på signalerna BTN1-4 och avstudsas i mjukvara. Tangenterna är köpta på Electrokit (artikelnummer 41012140) och ansluts via en stiftlist med 2,54 mm delning.
Teensy-korten har en liten extraprocessor för att hantera programmering av den stora processorn och i vissa fall måste man innan programmering skicka en puls på pinnen Program till den. Därför finns en tryckknapp, SW1, kopplad till Program. I de allra flesta fall går det dock bra att programmera om även utan tryck på denna knapp, varför den sitter direkt på kortet och inte är åtkomlig med mindre än att man skruvar isär lådan.
USB-anslutningen sker via en intern kabel till ett separat litet kort med USB-kontakt och lysdioder för att indikera laddning/fullt batteri.
En signal för vardera mottagarkedjan (IFE_ATT_30 och IFH_ATT_30) avgör vilket av de två förstärkningarna med 30 dB skillnad som MF-förstärkarna ska bidra med.
Signalerna från AD-omvandlarna kommer in på I2S-bussen via I2S_ADCDATA1 och I2S_ADCDATA2. Denna buss kräver för övrigt tre klocksignaler (MCLK, BCLK och LRCLK) som skapas av processorn. Ytterligare en datasignal, I2S_DACDATA, går till DA-omvandlarna. I2S-utgångarna från processorn är försedda med serietermineringsmotstånd för bästa signalintegritet.
I2C-bussen används för att prata med Si5351, IMU-kretsarna och för att konfigurera audio-codecarna.
TFT-färgskärmen ansluts via en 40-polig FPC-kontakt och för att spara pinnar så används SPI-interfacet istället för det alternativa parallella interfacet. Bakgrundsbelysningen kontrolleras via pulsbreddsmodulering från processorn av U23, en AP2502. Jag lyckades få tag på den, men om den är otillgänglig så kan man även driva bakgrunds-LED:arna via några motstånd och Q9. Detta har dock nackdelen att ljusstyrkan blir beroende av batterispänningen som sjunker under användning. Det är viktigt att man väljer pulsbreddsmoduleringsfrekvensen så att inga övertoner hamnar i 80-m-bandet. Annars lär man höra det om man skulle tuna in övertonens frekvens.
En nerskalad version av batterispänningen är kopplad till en pinne med ADC-funktion så attman kan hålla koll på batteristatus.
En viktig del i användargränssnittet är en ratt kopplad till en ”encoder”. Ratten styr menysystemet, inställning av dämpning/förstärkning, frekvens mm. Ratten har även en tryckfunktion. Signalerna heter ENC_A, ENC_B och ENC_SW och de avstudsas i mjukvara.
U6 är en kombinerad 3-axlig accelerometer och 3-axligt gyro och den används av mjukvaran tillsammans med den treaxliga magnetometern U7 för att räkna ut en gyrostabiliserad kompassriktning hos antennen. De här två kretsarna var de komponenter jag var mest rädd för att de skulle orsaka lödproblem. U7 har en galet liten kapsel, bara 0,8 x 0,8 mm med fyra BGA-bollar på 0,4 mm centrumavstånd från varandra medan U6 är en 3 x 3 mm liten LGA med 16 anslutningar på ett avstånd av 0,5 mm. Som tur var gick lödningen bra (mer om det nedan) och jag slapp försöka rätta till besvärliga lödproblem. Ett tag övervägde jag att såga bort delen av kortet med dessa kretsar och placera på en bättre plats i lådan för att undvika störande magnetiska material, men det visade sig inte behövas och kontaktdonen P5 och P6 som var tänkta för detta fall är alltså onödiga.
Kontaktdonen som ansluter USB och knappar till huvudkortet valdes baserat på tillgänglighet (många av de populära JST-kontakterna är t.ex. svåra att få tag på för tillfället) och liten storlek. De tillverkas av Cvilux och har 1,25 mm delning. För att göra passande kablage var jag tvungen att investera i en lämplig crimptång. Efter lite googlande föll valet på en PAD-11 från Engineer. Att crimpa så här små hylsor kräver lite övning, men efter några mindre lyckade försök så gick det ganska bra att göra under mikroskop.
Det enda som återstår av schemat är spänningsmatningsdelen som visas i figur 25.
LiPo-batteriet med en kapacitet på 1500 mAh och en nominell spänning på 3,7 V ansluts till P7. Batteriet är köpt på Electrokit, artikelnummer 41016064. U15 hanterar laddningen av batteriet när USB-kabeln är inkopplad. Laddströmmen är satt till ca 300 mA via R104. Två lysdioder (monterade på det separata kortet med USB-kontakt) indikerar om laddning pågår eller är klar.
Regulatorn U16 har ganska låg egenförbrukning och matas alltid av batteriet. Den skapar stand-by-spänningen till realtidsklockan i processorn. I en tidigare version av mottagaren hade jag en regulator med ännu lägre egenförbrukning, men den gick inte att få tag på när jag konstruerade denna version.
För att inte behöva dra all ström från batteriet via kontaktdon, kablar och potentiellt korroderande strömbrytare så används PMOS-transistorn Q16 för att slå av eller på strömmen till resten av mottagaren. Den styrs i sin tur av en vippströmbrytare via signalen POWER_SW#.
Linjärregulatorn U13 skapar 3,1-V-matningen till bland annat processorn. Avkopplingskondensatorerna är mestadels på 100 nF eftersom regulatorn vill se max 10 µF på utgången. Utan denna begränsning hade jag använt 1-µF-kondensatorer.
U14 är en boost-omvandlare som skapar den högre råspänning på 6 V som behövs för att driva analoga kretsar i radiodelarna. Nominell switchfrekvens är 1,6 MHz, så om det stämmer så hamnar inga övertoner i 80-m-bandet. Tyvärr är undre toleransen för switchfrekvensen 1,15 MHz, vilket gör att tredje övertonen skulle kunna komma inom bandet. Övre toleransen är 1,85 MHz, vilket gör att andra övertonen också skulle kunna göra det. I den mottagare jag byggt så var kretsen väluppfostrad och höll sig närmare nominell frekvens, men om man skulle bygga fler så är detta något att hålla ögonen på. Helst skulle man vilja ha en krets som går att synka till en väl vald extern, exakt, frekvens (kanske skapad av processorn), men jag har inte hittat någon lämplig krets för detta. Komponentbristen gör det inte lättare att hitta något passande.
SDR-mjukvara
Även om elektronikkonstruktionen, antennen och mekaniken tog en hel del tid att utveckla så är det mjukvaran jag lagt klart mest tid på.
Teensy-familjen har ett väletablerat system (audio-paketet) för att smidigt koppla ihop olika mjukvarublock som behandlar audiosignaler och i princip är detta väldigt lämpligt för att sätta ihop en signalkedja för låg mellanfrekvens och basband i en SDR-mottagare som denna där digitaliseringen sköts av audio codecs. En svaghet som jag ville undvika var dock att audio-paketet jobbar med 16-bitars fixtal, vilket kanske inte räcker för att få ut mesta möjliga signaldynamik i ett SDR-system som detta. Som tur är finns även en användarutvecklad variant som jobbar med 32-bitars flyttal [6] och som jag nyttjade. En hel del anpassningar behövde också göras i exempelvis kod för att prata med WM8731 och I2S-mottagarblocken så att 24-bitarsformat används och konverteras till flyttal.
För vanliga audiotillämpningar är det kanske inte så noga om olika audioströmmar hamnar någon millisekund fel relativt varandra, men här måste vi ha perfekt repeterbarhet på fasen mellan de två audioströmmarna. Det visade sig att audiopaketet inte var så noga med denna detalj när C++-objekten i signalkedjan skapas vid uppstart, så kod fick läggas till för att få en välkontrollerad och synkron initialisering av objekten. Tur att källkoden är öppen så att sådana ändringar är möjliga.
Själva SDR-funktionerna görs i huvudsak av ett annat färdigt mjukvarupaket, AudioSDR [7]. Detta behövde också modifieras; bland annat för att ta emot flyttal och för att lägga till några nya alternativa MF-filter. Dessa filter designas ganska smidigt med hjälp av gratismjukvara från Iowa Hills, men någon gång nyligen verkar hemsidan där alla filterdesignprogrammen fanns att ladda ned ha försvunnit. Det finns dock ett GitHub-repo där man kan ladda ned källkoden [8]. Många av finesserna i AudioSDR är inte nödvändiga i denna pejlmottagare. T.ex. är AGC och AM-mottagning inte av intresse, men MF-filtreringen, den komplexa nedblandningen till basband och Hilbertfiltreringen som gör att man kan undertrycka det oönskade sidbandet passar perfekt för applikationen. Hur undertryckning av sidband går till med denna metod (”phasing”) går jag inte närmare in på, utan hänvisar till avsnitt 9.2 i [4] som ger en gedigen genomgång av inte bara matematiken bakom, utan även av analyserar olika felkällors inverkan på resultatet. En framtida förbättring av mottagaren vore att införa rutiner som möjliggör finjustering av signalnivå och fas före Hilbertfiltreringen för optimal sidbandsundertryckning.
Efter att basbandssignalerna för de två mottagarkedjorna vaskats fram är det dags för lite mer specialiserad och hemsnickrad signalbehandling för att analysera framförallt fasskillnaden mellan signalerna från de två antennerna. Denna signalbehandling går till som följer:
Först kastas vartannat sampel bort för att minska beräkningsbördan något. Detta kan göras eftersom signalen redan är bandbegränsad av MF-filtret till långt under en fjärdedel av samplingstakten (44,1 kHz), så en halvering av samplingstakten till 22,05 kHz orsakar ingen nämnvärd vikningsdistorsion.
Nästa steg är att göra överlappande ”FFT:er” (Fast Fourier Transform, samma matematiska beräkning som används vid vattenfallsdisplayer och alltså delar upp signalen i olika frekvenskomponenter) av längd 1024 på signalen från E-fältsantennen (eftersom den alltid finns tillgänglig, medan H-fältsignalen är väldigt svag vid sitt minimum). Det ger en frekvensupplösning på 22,05 kHz/1024 = 21,53 Hz. Före FFT:n läggs ett Gauss-fönster på signalen för att inte få ”kjolar” och för att den följande frekvensuträkningen ska bli mer exakt.
FFT:n söks igenom för att se om det någonstans finns en topp som sticker ut och om det gör det så behöver frekvensen för den tonen beräknas. Det görs genom att väga samman styrkan hos det starkaste facket i FFT:n och de omedelbart närliggande facken enligt metoden i [8], vilket ger ett mycket noggrannare estimat av frekvensen än att rakt av välja mittfrekvensen för det fack som hade starkast signal.
Nu vet vi vilken frekvens som vi har tagit emot och som fasjämförelsen ska göras vid. Fasjämförelsen görs i tidsdomänen på följande vis: Först skapas syntetiska sinus- och cosinussignaler av längden 1024 med den uppmätta frekvensen. Därefter multipliceras 1024 sampel av vardera signalen från E-mottagaren och H-mottagaren, sampel för sampel, med dessa syntetiska signaler och resultaten ackumuleras. Det handlar alltså om att räkna ut korrelationen mellan respektive signal och sinus- samt cosinus-signalerna. Dessa två korrelationer, låt oss kalla dem sincorr_E, coscorr_E samt sincorr_H och coscorr_H, visar vilken fas som signalen har relativt den påhittade sinussignalen. Nu är det bara att räkna ut arctan(sincorr_E/coscorr_E) och arctan(sincorr_H/coscorr_H) för att få fram respektive fasvinkel. Dessa vinklar i sig säger inte något intressant, men skillnaden mellan dem är precis vad vi är ute efter. Så en enkel subtraktion mellan dem visar nu den önskade fasskillnaden mellan E-fält och H-fält!
Om antenn och mottagare fungerar som de ska så är det nu bara att svepa med mottagaren i ungefärlig riktning mot sändaren och se i vilken riktning denna fasskillnad gör ett hopp på 180 grader, samtidigt som H-signalen har ett minimum. Beroende på fasvinklarna till vänster och till höger om hoppet kan man avgöra om man har sändaren framför eller bakom sig, så separat sidbestämning blir överflödig.
Figur 26 visar hur displayen kan se ut när man pejlar först bort från sändaren och sedan mot den. De violetta staplarna visar signalstyrkan från H-antennen i olika kompassriktningar man svept över, medan de vita markeringarna visar fasskillnaden mellan E och H. Bredden på displayen täcker i detta fall 80 grader av kompassvarvet. Som synes finns ett minimum i mitten av bilden i båda fallen, men i vänstra fallet är fasskillnaden låg till vänster om mitten och hög till höger om mitten, medan förhållandet är det omvända i högra bilden. Om man vet att mottagaren mäter upp en hög fas när man pekar till vänster om sändaren och en låg när man pekar till höger så kan man genast avgöra om minimat/fashoppet man hittat är det önskade, eller om man måste rotera ett halvt varv för att vara vänd mot sändaren.
Övrig mjukvara
Det går att få in mycket mer än de rena SDR-funktionerna i mjukvaran och en del av finesserna som lagts till kan anas i skärmbilderna i figur 26. Under en tävling tittar man normalt inte på någon annan vy än den i figuren, men före en tävling kan man göra ett antal inställningar, kalibreringar och även titta på olika typer av debuginformation som kan vara intressant under utvecklingen.
En av de mer komplexa funktionerna är hanteringen av IMU:n, dvs kompassen. Ett s.k. Kalmanfilter väger samman informationen från accelerometer, gyro och magnetometer för att estimera hur mottagaren är orienterad relativt jordytan och magnetiska norr. Som tur är finns det färdiga bibliotek som utför denna komplexa matematiska algoritm och jag valde att använda Kalmanfilterkod utvecklad av NXP, men ompaketerad av Adafruit, se [10]. I princip ser man bara till att förse Kalmanfiltret med periodiska uppdateringar (ca 100 gånger i sekunden i detta fall) av mätvärden från sensorerna och kan sedan när som helst fråga det i vilken riktning som antennen pekar.
Själva användargränssnittet kräver lite omtanke för att fungera bra i en tävlingssituation. Som nämnts tidigare så består det förutom av skärm och hörlurar av fyra knappar plus en encoder med knappfunktion. När man slår på strömmen startar den upp på en förprogrammerad frekvens och ratten styr förstärkningen. Vad de fyra membranknapparna gör framgår av text i nederkanten av skärmen. I figur 26 är funktionerna i tur och ordning: centrera plotten i nuvarande pejlriktning, rensa innehållet i plotten, lås till sändarens frekvens, respektive växla mellan olika filterbandbredder från 100 Hz till 3 kHz.
På skärmen visas förutom pejlingsplotten, även lite annan information som nuvarande frekvens, förstärkning, signalstyrkor, batterispänning, aktuell fasskillnad mellan E och H (phi), kompassbäring, aktuell tid, vilken räv som sänder och ett färgat fält som anger vilken färg på penna jag valt att använda för aktuell räv. Jag brukar springa omkring med fem olika pennor runt halsen och i hastigheten kan man lätt ta fel när man ska rita in en bäring på kartan. Speciellt på SM i 80 m när sju olika rävar är igång och det bara finns fem färger att välja på kan det vara bra med detta stöd.
Vid sprinttävlingar programmerar jag in de fyra aktuella frekvenserna i förväg och Lock-funktionen ersätts då av en funktion för att växla mellan de fyra frekvenserna.
Kretskort
Mönsterkortet har fyra lager för att inte behöva kompromissa med jordplan och signalintegritet. Det är tillverkat hos JLC PCB till en rimlig kostnad tillsammans med en pastastencil som möjliggör att man applicerar lodpasta på alla lödytor. Alla ytmonterade komponenter förutom två kontaktdon sitter på en och samma sida av kortet. Figur 27 visar det bestyckade kortet.
Antennsignalerna kommer in uppe till vänster, förstärks och skickas vidare nedåt där de mixas i de fyra SO8-kretsarna. Under rutan med mixrar och MF-förstärkare finns en ruta med lokaloscillatorn. På högra delen av kortet finns längst ned kontaktdon för USB, encoder, hörlurar och batteri. Nere i högra hörnet sitter IMU-komponenterna. Högre upp finns Program-knapp, de två audio-codecarna, laddkrets, displaykontakt och den röda modulen med processorn.
Montering och lödning av kortet gick till som så att jag först tryckte på lodpasta med hjälp av stencilen, sedan tillbringade runt fyra timmar med att med pincett under mikroskop plocka på de över 300 komponenterna och sedan värma upp kortet underifrån via en tjock stålplåt ovanpå induktionshällen i köket. I förväg hade jag testat fram ett recept med tider och effektinställningar som gav en vettig temperaturprofil. Lödningen gick riktigt bra och det enda jag behövde åtgärda var ett par lodbryggor vid display- och processorkontakterna.
När en hel del av funktionerna var provkörda var det dags att såga isär kortet mellan de vertikala linjerna och montera ihop det som en dubbelmacka via ytmonterade kontaktdon på undersidan av kortet. Se figur 28.
Mekanik
Jag valde att tillverka lådan för mottagaren genom att rita ihop 3D-modeller och skriva ut på 3D-skrivare. Det har blivit några iterationer och nuvarande utseende är kanske inte det slutgiltiga. För att skärma av elektroniken i mottagaren så att störningar från elektroniken inte kopplas in i antennen så är lådan skärmad invändigt med hjälp av koppartejp. Skarven mellan lådhalvorna överbryggas av en ledande packning. Kretskorten är jordade till koppartejpen på många punkter via små fjäderbelastade pogo-pinnar. Se figur 29.
Rent allmänt är en slutsats från experiment med en tidigare prototyp att det lönar sig mycket mer att försöka skärma in störande kretsar än att skärma känsliga kretsar.
Antennerna är ju avsiktligt gjorda för att plocka upp svaga signaler och de är kopplade till de känsligaste punkterna i signalkedjan, så att inte skicka ut störningar som når antennerna är högsta prioritet. Processorkort och display är två av de värsta störgeneratorerna och av den anledningen får plattformen som displayen är monterad på göra dubbel nytta genom att även vara bas för koppartejp som omsluter processormodulen och utgör ett jordplan nära displayen.
Med korten färdigbestyckade kan det hela monteras i lådan, se figur 30.
En liten utmaning var genomföringen av antennsignalerna genom lådväggen. Valet föll till slut på en 12-polig hylslist på RF-kortet med de flesta benen jordade för skärmning och använda en lång stiftlist uppe vid antennerna som fick sticka in via utskrivna hål i lådan. Detta gör monteringen av olika delar enkel och oberoende. Specialkonstruerade lådor utskrivna på 3D-skrivare ger sådana trevliga möjligheter. Att ha kontaktdon mellan antennen och RF-kortet har den extra fördelen att det blir lätt att direkt koppla in en signalgenerator eller nätverksanalysator för att göra mätningar på kortet.
För att få bra läsbarhet på displayen även i solljus valde jag att bygga upp skuggande väggar runt den. Det möjliggör också att man sätter koppartejp runt dessa väggar och förhoppningsvis får lite mindre läckage av störningar via detta nödvändiga hål i skärmningen.
Ratten som styr menysystemet sitter mitt på nederdelen av lådan och under den sitter de fyra membranknapparna. Se figur 31.
Ytterligare en idé jag lånat från 80m12 är att ha ett handledsband fäst i mottagaren så att man kan släppa den och låta den dingla t.ex. när man vrider in en kompassriktning och ritar bäringar på kartan.
För att få skruvarna att fästa i plasten användes gängade insatser av mässing som värmdes ned i lämpliga hål med hjälp av en lödpenna inställd på knappt 300 grader. Enbart rostfria skruvar användes för att störa magnetometern så lite som möjligt. Även muttrarna till strömbrytare och hörlursuttag valdes för att vara omagnetiska.
Antennerna sitter ihop i en ganska komplex 3D-utskriven modul som håller dem på bra positioner och skyddar mot stötar.
Det hela är såklart inte perfekt vattentätt, men om det väntas regn kan man förbättra situationen något genom att tejpa skarven mellan lådhalvorna.
Nuvarande hölje är utskrivet i materialet PETG, vilket är ganska segt och tåligt. En tidigare version var utskriven i PLA, men den plasten är ganska skör och gick delvis sönder när jag snubblade på en tävling.
Slutord
Med en till stora delar mjukvarubaserad mottagare så går det att införa nya finesser och förbättringar utan omfattande omkonstruktion. Även på hårdvarusidan finns det såklart förbättringar att göra och nuvarande version måste nog ses som en prototyp med förbättringspotential, även om jag i princip uppnått i stort sett allt jag tänkte mig när jag drog igång det här projektet och har tävlat med den med viss framgång.
Att utveckla den här mottagaren har varit lärorikt och kul (och tämligen tidskrävande) och jag hoppas att redogörelsen kan inspirera andra att ta fram nya innovativa pejlmottagare eller låna idéer och lösningar till mer traditionella mottagare.