Inhoudsopgave:

HF-antenne-analyser met Arduino en DDS-module - Ajarnpa
HF-antenne-analyser met Arduino en DDS-module - Ajarnpa

Video: HF-antenne-analyser met Arduino en DDS-module - Ajarnpa

Video: HF-antenne-analyser met Arduino en DDS-module - Ajarnpa
Video: Arduino Antenna Analyzer Review 2024, Juli-
Anonim
HF-antenne-analyser met Arduino en DDS-module
HF-antenne-analyser met Arduino en DDS-module
HF-antenne-analyser met Arduino en DDS-module
HF-antenne-analyser met Arduino en DDS-module

Hoi

In deze Instructable laat ik je zien hoe ik een goedkope antenne-analysator heb gebouwd die een antenne kan meten en de VSWR kan weergeven over een of alle HF-frequentiebanden. Het zal de minimale VSWR en bijbehorende frequentie voor elke band vinden, maar zal ook een realtime VSWR weergeven voor een door de gebruiker geselecteerde frequentie om aanpassing van de antenne te vergemakkelijken. Als u een enkele frequentieband doorkruist, wordt een grafiek weergegeven van VSWR versus frequentie. Het heeft ook een USB-poort aan de achterkant voor het uitvoeren van frequentie- en VSWR-gegevens, om meer verfijnde grafieken op een pc mogelijk te maken. De USB-poort kan ook worden gebruikt om de firmware indien nodig te reflashen.

Ik ben onlangs begonnen met amateurradio (omdat ik het idee van peer-to-peer-communicatie over grote afstanden zonder infrastructuur leuk vond) en maakte snel de volgende observaties:

1. Alle wereldwijde communicatie die mij interesseerde, vindt plaats op de HF-banden (3-30 MHz)

2. HF-transceivers zijn erg duur en zullen kapot gaan als je ze niet in een redelijk goed passende antenne steekt

3. Over het algemeen wordt van u verwacht dat u uw eigen HF-antenne optuigt met stukjes draad die over de tuin zijn gespannen (tenzij u nog meer geld wilt uitgeven dan u in 2 hebt uitgegeven).

4. Uw antenne is misschien een slechte match, maar u weet het pas als u het probeert.

Nu zou een purist waarschijnlijk zeggen dat je de antenne eerst op een zeer laag vermogen moet testen op de gewenste frequentie en de VSWR op de meter van het tuig moet controleren om de kwaliteit van de match te beoordelen. Ik heb niet echt de tijd om met dat soort dingen te rotzooien voor elke frequentie die ik zou willen gebruiken. Wat ik echt wilde, was een antenne-analyser. Deze apparaten kunnen de kwaliteit van de antennematch op elke frequentie over de HF-banden testen. Helaas zijn ze ook erg duur, dus ik begon te overwegen of ik ze zelf zou kunnen maken. Ik stuitte op het uitstekende werk van K6BEZ (zie https://www.hamstack.com/project_antenna_analyzer.html), die het gebruik van een Arduino onderzocht om een goedkope directe digitale synthesizermodule (DDS) aan te sturen. Hij verliet de Arduino al snel om kostenredenen en gaf er de voorkeur aan een PIC te gebruiken. Nou, in 2017 kun je een Arduino Nano kopen voor ongeveer £ 3,50, dus ik dacht dat het tijd was om zijn werk opnieuw te bekijken, verder te gaan waar hij was gebleven en te zien wat ik kon bedenken (merk op dat ik niet de enige ben wie heeft dit gedaan: op internet zijn hele mooie voorbeelden te vinden).

Update (29/7/2018) - op dit werk is aanzienlijk voortgebouwd door bi3qwq, uit China, die een aantal hele mooie verbeteringen heeft aangebracht aan de gebruikersinterface, die hij zo vriendelijk heeft gedeeld. Hij heeft een zeer professionele PCB ontworpen (met een geweldige kalibratieweerstandsfunctie) en een echt goed uitziende build gedaan. Als klap op de vuurpijl heeft hij een schema opgesteld, waarvan ik weet dat het velen zal bekoren die eerder hebben gereageerd. Zie het opmerkingengedeelte voor meer informatie.

Update - Ik ben onlangs 60 m binnengekomen, wat de originele schets niet dekte. Dus nu heb ik firmwareversie 7 geüpload, die de 160 m- en 60 m-banden toevoegt. Dit zijn geen add-ons; ze zijn volledig geïntegreerd in de werking van de analyser. Het was een geluk dat ik een u8glib-lettertype kon vinden dat nog steeds leesbaar was, maar waarmee ik tien banden tegelijk op dat kleine scherm kon weergeven (hoewel het geen monospace was, wat voor wat verdriet zorgde). Ik heb geschatte kalibratiewaarden voor de nieuwe banden, gebaseerd op interpolatie / extrapolatie van de bestaande kalibratiewaarden. Ik heb deze vervolgens gecontroleerd met vaste weerstanden en ze geven behoorlijk goede resultaten.

Update - zoals verschillende mensen hebben gevraagd naar schema's, is het fundamentele Arduino / DDS / VSWR-brugcircuit grotendeels ongewijzigd van het oorspronkelijke werk van K6BEZ. Bekijk de bovenstaande URL voor zijn originele schema waarop ik dit project heb gebaseerd. Ik heb een encoder, een OLED-scherm en volledig ontwikkelde firmware toegevoegd voor een moeiteloze gebruikerservaring.

Update - Dit systeem gebruikt een DDS-signaalbron met een zeer laag voltage in combinatie met een resistieve brug met diodedetectoren. Dus de diodes werken in hun niet-lineaire regio's en mijn eerste versie van dit systeem had de neiging om VSWR te weinig te lezen. Een impedantiebelasting van 16 ohm of 160 ohm zou bijvoorbeeld een VSWR van ongeveer 3 moeten vertonen in een systeem van 50 ohm; deze meter gaf in deze situatie een VSWR aan die dichter bij 2 lag. Ik heb daarom een softwarekalibratie uitgevoerd met bekende belastingen, wat een effectieve oplossing voor dit probleem lijkt te zijn. Dit wordt beschreven in de voorlaatste stap van deze instructable en een herziene schets is geüpload.

Update - ingebouwde grafische faciliteit toegevoegd aan enkele sweeps omdat het te nuttig was om weg te laten, vooral bij het afstemmen van antennelengtes voor minimale VSWR: een grafiek geeft u een direct zichtbare trend.

Stap 1: Koop je spullen

Je hebt de volgende items nodig. De meeste van hen kunnen goedkoop worden verkregen van Ebay. Het duurste item was de doos, bijna £ 10! Het is misschien mogelijk om sommige items te vervangen (ik gebruikte bijvoorbeeld 47 Rs in plaats van 50 Rs). De diodes waren nogal ongebruikelijk (ik moest er 5 uit Italië kopen) en zouden de moeite waard zijn om te vervangen door gemakkelijker verkrijgbare items als je weet wat je doet.

  • Arduino Nano
  • DDS-module (DDS AD9850 Signaalgeneratormodule HC-SR08 Signaalsinusblokgolf 0-40MHz)
  • 1,3" i2c OLED-scherm
  • MCP6002 op-amp (8-pins)
  • 2 uit AA143-diode
  • Keramische condensatoren: 2 uit 100 nF, 3 uit 10 nF
  • 1 uF elektrolytische condensator
  • Weerstanden: 3 uit 50 R, 2 uit 10 K, 2 uit 100 K, 2 uit 5 K, 2 uit 648 R
  • 2,54 mm spoed schroefklemmenblokken: 3 uit 2-pins, 2 uit 4-pins
  • Enkeladerige aansluitdraad
  • 702 of soortgelijke aansluitdraad
  • Stripbord
  • Vierkante headerstrip (vrouwelijk) om de Arduino en DDS op aan te sluiten - koop niet per ongeluk de ronde socket-dingen!
  • SO-239 chassismontage-aansluiting
  • Draai-encoder (15 pulsen, 30 pal) met drukschakelaar en knop
  • Goedkope roterende encoder 'module' (optioneel)
  • Projectdoos
  • Tuimelschakelaar
  • Haakse mini-usb naar USB B schotmontagekabel (50 cm)
  • PP3 en batterijclip / houder
  • Zelfklevende montageposten / afstandhouders voor printplaten

Je hebt ook een soldeerbout en elektronica nodig. Een 3D-printer en een kolomboormachine zijn handig voor de behuizing, maar als je zou willen, zou je waarschijnlijk het hele ding op het stripboard kunnen monteren en geen moeite doen met een doos.

Uiteraard onderneemt u dit werk en exploiteert u de gegenereerde resultaten op eigen risico.

Stap 2: Leg het stripbord neer

Leg het stripbord neer
Leg het stripbord neer
Leg het stripbord neer
Leg het stripbord neer

Bedenk hoe je de onderdelen op het stripboard gaat rangschikken. U kunt het ofwel zelf doen, verwijzend naar het originele schema van K6BEZ (dat geen encoder of scherm heeft - zie pagina 7 van https://www.hamstack.com/hs_projects/antenna_analyzer_docs.pdf), of u kunt een hoop tijd en kopieer mijn lay-out.

Ik doe deze lay-outs op de eenvoudige manier, met behulp van ruitjespapier en een potlood. Elke kruising vertegenwoordigt een stripbordgat. De koperbanen lopen horizontaal. Een kruis staat voor een gebroken spoor (gebruik een boor van 6 mm of het juiste gereedschap als je dat hebt). Lijnen van cirkels met een vak eromheen vertegenwoordigen kopteksten. Grote dozen met schroeven duiden de aansluitblokken aan. Merk op dat er in mijn diagram een extra lijn is die horizontaal door het midden van het bord loopt. Laat dit weg als je het in elkaar zet (er staat 'laat deze regel weg').

Sommige componenten lijken misschien vreemd ingedeeld. Dit komt omdat het ontwerp is geëvolueerd zodra ik de basishardware had laten werken (vooral toen ik me realiseerde dat de encoder bijvoorbeeld hardware-interrupts nodig had).

Bij het solderen van componenten op het bord, gebruik ik Blu-Tak om ze stevig op hun plaats te houden terwijl ik het bord omdraai om de poten te solderen.

Ik heb geprobeerd de hoeveelheid draad die ik gebruikte te minimaliseren door de Arduino en de DDS-module uit te lijnen en alleen het stripbord te gebruiken om sleutelpinnen aan te sluiten. Ik realiseerde me op dat moment niet dat de hardware-interrupts die nodig waren om de encoder te lezen alleen werken op pinnen D2 en D3, dus ik moest DDS RESET van de oorspronkelijke D3-verbinding verplaatsen met een stukje draad:

DDS RESET - Arduino D7

DDS SDAT - Arduino D4

DDS FQ. UD - Arduino D5

DDS SCLK - Arduino D6

Arduino D2 & D3 worden gebruikt voor de encoderingangen A & B. D11 wordt gebruikt voor de encoderschakelaaringang. D12 wordt niet gebruikt, maar ik dacht dat ik er toch een schroefaansluiting voor zou maken, voor toekomstige uitbreiding.

Arduino A4 & A5 leveren de SDA & SCL (I2C) signalen voor het OLED-scherm.

Arduino A0 & A1 nemen de ingangen van de VSWR-brug (via de OPAMP).

Stap 3: Installeer de modules, bevestig de randapparatuur en flash de code

Installeer de modules, bevestig de randapparatuur en flash de code
Installeer de modules, bevestig de randapparatuur en flash de code

Het is de moeite waard om het bord te testen voordat u de moeite neemt om het in een behuizing te monteren. Bevestig de volgende componenten met behulp van flexibele draad aan het bord met behulp van de schroefklemmenblokken:

  • 1,3-inch OLED-display (SDA en SCL zijn respectievelijk verbonden met Arduino-pin A4 en A5; aarde en Vcc gaan uiteraard naar Arduino GND en +5V)
  • Roterende encoder (hiervoor heb je een aarde, twee signaallijnen en een schakellijn nodig - misschien moet je de schakellijnen omdraaien als de encoder verkeerd werkt - sluit deze aan op respectievelijk Arduino-aarde, D2, D3 en D11). Merk op dat ik voor mijn prototypingwerk de 15/30-encoder op een KH-XXX-encodermodulekaart heb gemonteerd, omdat de pinnen op de kale encoders erg dun zijn. Voor de laatste klus heb ik draden rechtstreeks op de encoder gesoldeerd.
  • 9V batterij
  • SO-239-aansluiting - soldeer de middelste pin aan de antennesignaallijn en gebruik een M3-ringterminal en schroef voor de antenneaarde

Flash de volgende schets op de Arduino. Zorg er ook voor dat je de zeer goede OLED-stuurprogrammabibliotheek van Oli Kraus hebt toegevoegd, anders zal de compilatie crashen en branden:

Als uw OLED-scherm iets anders is, heeft u mogelijk een andere configuratie-instelling nodig in u8glib; dit is goed gedocumenteerd in Oli's voorbeeldcode.

Stap 4: Stop alles in een mooie doos (optioneel)

Stop het allemaal in een mooie doos (optioneel)
Stop het allemaal in een mooie doos (optioneel)
Stop het allemaal in een mooie doos (optioneel)
Stop het allemaal in een mooie doos (optioneel)
Stop het allemaal in een mooie doos (optioneel)
Stop het allemaal in een mooie doos (optioneel)
Stop het allemaal in een mooie doos (optioneel)
Stop het allemaal in een mooie doos (optioneel)

Ik heb serieus overwogen om de analyser als een kaal bord te laten, omdat hij waarschijnlijk slechts af en toe zou worden gebruikt. Bij nader inzien dacht ik echter dat als ik veel werk aan een enkele antenne zou doen, deze uiteindelijk beschadigd zou kunnen raken. Dus alles ging in een doos. Het heeft geen zin om in details te treden over hoe dit is gedaan, omdat uw doos waarschijnlijk anders zal zijn, maar enkele belangrijke functies zijn het vermelden waard:

1. Gebruik zelfklevende PCB-afstandhouders voor het monteren van het stripboard. Ze maken het leven heel gemakkelijk.

2. Gebruik een korte USB-adapterkabel om de Arduino USB-poort naar de achterkant van de behuizing te brengen. Dan is het gemakkelijk om toegang te krijgen tot de seriële poort om frequentie versus VSWR-gegevens te verkrijgen en ook om de Arduino te reflashen zonder het deksel eraf te halen.

3. Ik heb een op maat gemaakt 3D-geprint onderdeel ontwikkeld om het OLED-scherm te ondersteunen, omdat ik niets op internet kon vinden. Deze heeft een uitsparing om een stuk acryl van 2 mm te plaatsen om het kwetsbare scherm te beschermen. Het kan worden gemonteerd met dubbelzijdig plakband of zelftappende schroeven (met de lipjes aan weerszijden). Zodra het display is gemonteerd, kunt u een hete draad (denk aan paperclip en blaaslamp) gebruiken om de PLA-pinnen op de achterkant van de printplaat te smelten om alles vast te zetten. Hier is het STL-bestand voor iedereen die geïnteresseerd is:

Stap 5: Kalibratie

Kalibratie
Kalibratie

Oorspronkelijk deed ik geen kalibratie, maar ontdekte dat de VSWR-meter constant laag aangaf. Dit betekende dat hoewel een antenne in orde leek te zijn, de autotuner van mijn rig er niet op kon matchen. Dit probleem doet zich voor omdat de DDS-module een signaal met een zeer lage amplitude afgeeft (ongeveer 0,5 Vpp bij 3,5 MHz, aflopend naarmate de frequentie toeneemt). De detectordiodes in de VSWR-brug werken daarom in hun niet-lineaire gebied.

Hiervoor zijn twee mogelijke oplossingen. De eerste is om een breedbandversterker aan te sluiten op de uitgang van de DDS. Mogelijk geschikte apparaten zijn goedkoop verkrijgbaar in China en ze zullen de output verhogen tot ongeveer 2 V pp. Ik heb er een besteld, maar moet het nog proberen. Ik heb het gevoel dat zelfs deze amplitude een beetje marginaal zal zijn en dat er enige niet-lineariteit zal blijven. De tweede methode is om bekende belastingen op de uitgang van de bestaande meter te zetten en de weergegeven VSWR op elke frequentieband te registreren. Hiermee kunt u correctiecurven construeren voor werkelijke versus gerapporteerde VSWR, die vervolgens in de Arduino-schets kunnen worden geplaatst om correctie on-the-fly toe te passen.

Ik nam de tweede methode over omdat het gemakkelijk was om te doen. Pak gewoon de volgende weerstanden: 50, 100, 150 en 200 ohm. Op dit 50 ohm instrument komen deze per definitie overeen met VSWR's van 1, 2, 3 en 4. In de schets staat een schakelaar 'use_calibration'. Stel dit in op LAAG en upload de schets (die een waarschuwing op het opstartscherm zal weergeven). Voer vervolgens metingen uit in het midden van elke frequentieband voor elke weerstand. Gebruik een spreadsheet om verwachte versus weergegeven VSWR te plotten. U kunt dan een logaritmische curve aanpassen voor elke frequentieband, wat een vermenigvuldiger en intercept geeft van de vorm TrueVSWR=m.ln(MeasuredVSWR)+c. Deze waarden moeten in de swr_results-array in de laatste twee kolommen worden geladen (zie de vorige opmerking in de schets). Dit is een vreemde plaats om ze neer te zetten, maar ik had haast en aangezien deze reeks drijft, leek het op dat moment een verstandige keuze. Zet vervolgens de use_calibration-schakelaar weer op HIGH, flash de Arduino opnieuw en u kunt beginnen.

Merk op dat bij het uitvoeren van de spotfrequentiemetingen de kalibratie wordt toegepast voor de initiële bandkeuze. Dit wordt niet bijgewerkt als u grove wijzigingen in de frequentie aanbrengt.

Nu leest de meter zoals verwacht voor de vaste belastingen en lijkt het logisch bij het meten van mijn antennes! Ik vermoed dat ik niet de moeite zal nemen om die breedbandversterker uit te proberen wanneer hij arriveert …

Stap 6: De analysator gebruiken

De analysator gebruiken
De analysator gebruiken
De analysator gebruiken
De analysator gebruiken

Bevestig een antenne via een PL-259-kabel en schakel het apparaat in. Het geeft een opstartscherm weer en voert vervolgens automatisch een sweep uit van alle belangrijke HF-banden. Het display toont de frequentie die wordt getest, de huidige VSWR-waarde, de minimale VSWR-waarde en de frequentie waarmee deze is opgetreden. Om meetruis te verminderen worden op elk frequentiepunt vijf metingen van VSWR gedaan; de gemiddelde waarde van deze vijf metingen wordt vervolgens door een negenpunts voortschrijdend gemiddelde filter geleid met betrekking tot de frequentie voordat de uiteindelijke waarde wordt weergegeven.

Als u deze all-band sweep wilt stoppen, drukt u gewoon op de encoderknop. De sweep stopt en een samenvatting van alle verzamelde bandgegevens wordt weergegeven (met nulls voor die banden die nog niet zijn geveegd). Een tweede druk zal het hoofdmenu oproepen. Keuzes worden gemaakt door aan de encoder te draaien en deze vervolgens op het juiste punt in te drukken. Er zijn drie keuzes in het hoofdmenu:

Sweep all bands zal de sweep van alle hoofd HF-banden herstarten. Als het klaar is, wordt het hierboven beschreven overzichtsscherm weergegeven. Schrijf dit op of maak een foto als je het wilt bewaren.

Met Sweep enkele band kunt u een enkele band selecteren met de encoder en deze vervolgens vegen. Tijdens het maken van de selectie worden zowel de golflengte als het frequentiebereik weergegeven. Wanneer de sweep is voltooid, wordt bij een tweede druk op de encoder een eenvoudige VSWR versus frequentiegrafiek weergegeven van de zojuist geveegde band, met een numerieke indicatie van de minimale VSWR en de frequentie waarmee deze is opgetreden. Dit is erg handig als u wilt weten of u uw dipoolarmen moet inkorten of verlengen, omdat het de VSWR-trend regelmatig laat zien; dit gaat verloren met het eenvoudige numerieke rapport.

Enkele frequentie stelt u in staat om een enkele vaste frequentie te kiezen en vervolgens continu een live VSWR-meting bij te werken, voor antenne-afstemmingsdoeleinden in realtime. Selecteer eerst de relevante frequentieband; het display toont dan de middenfrequentie van de gekozen band en een live VSWR-waarde. De relevante bandkalibratie wordt op dit punt toegepast. Een van de cijfers van de frequentie wordt onderstreept. Deze kan met de encoder naar links en rechts worden verplaatst. Door op de encoder te drukken, wordt de lijn aangemoedigd; door vervolgens aan de encoder te draaien, wordt het cijfer verlaagd of verhoogd (0-9 zonder wrap of carry). Druk nogmaals op de encoder om het cijfer vast te leggen en ga dan verder met de volgende. Je hebt met deze faciliteit toegang tot vrijwel elke frequentie over het hele HF-spectrum - de bandselectie aan het begin helpt je alleen maar om dichtbij te komen waar je waarschijnlijk wilt zijn. Er is echter een waarschuwing: de kalibratie voor de geselecteerde band wordt aan het begin geladen. Als u zich te ver van de geselecteerde band verwijdert door de cijfers te wijzigen, wordt de kalibratie minder geldig, dus probeer binnen de gekozen band te blijven. Als je klaar bent met deze modus, verplaats je het onderstrepingsteken helemaal naar rechts totdat het onder 'exit' staat en druk je vervolgens op de encoder om terug te keren naar het hoofdmenu.

Als u uw pc aansluit op de USB-aansluiting aan de achterkant van de analysator (dwz in de Arduino), kunt u de Arduino seriële monitor gebruiken om frequentie versus VSWR-waarden te verzamelen tijdens elke sweep-operatie (deze is momenteel ingesteld op 9600, maar u kunt dat veranderen gemakkelijk door mijn schets te bewerken). De waarden kunnen vervolgens in een spreadsheet worden geplaatst, zodat u meer permanente grafieken enz. kunt plotten.

De schermafbeelding toont de VSWR-samenvatting voor mijn verticale antenne van 7,6 m hengel met 9:1 UNUN. Mijn rig is geschikt voor een maximale SWR van 3:1 met zijn interne auto-tuner-eenheid. Je kunt zien dat ik het over alle banden kan stemmen behalve 80 m en 17 m. Dus nu kan ik ontspannen in de wetenschap dat ik een acceptabele multibandantenne heb en ik ga niets duurs kapot maken als ik op de meeste banden zend.

Veel succes en ik hoop dat je dit nuttig vindt.

Aanbevolen: