ERK'2020, Portorož, 82-85 82 Nizkocenovna avtomatizacija visokofrekvenˇ cnih meritev Peter Miklavˇ ciˇ c, Boštjan Batagelj Univerza v Ljubljani, Fakulteta za elektrotehniko, Tržaška cesta 25, 1000 Ljubljana E-pošta: peter.miklavcic@fe.uni-lj.si Low-cost automatization of radio-frequency measurements In this paper a Python library in-development is presented that enables low-cost automatization of radio-frequency measurements using different instruments. The library supports instruments with omnipresent buses such as RS- 232, USB and Ethernet/LXI. A cheap and practical so- lution for connecting legacy instruments with the GPIB bus is also discussed and identified. In the beginning, the background for the proposed solution is discussed and general software and hardware proposals are laid out. The proposed approach is then presented in detail, dis- cussing the core library and its topics first and the devel- oped measurement scripts are discussed next, followed by the postprocessing and graphing scripts. Remote and embedded execution are discussed as well. 1 Uvod Avtomatizacija meritev v smiselni meri je pri raziskoval- nem delu vedno dobrodošla. Poleg multiplikativnega pri- hranka ˇ casa pri ponavljajoˇ cih meritvah, jasna avtomatiza- cijska skripta omogoˇ ca boljšo ponovljivost in manj napak tako pri posameznih serijah meritev, kakor tudi pri znan- stveni ponovljivosti poskusov na dolgi rok. Radiofrekvenˇ cne meritve pogosto zahtevajo zajem in obdelavo veˇ cje koliˇ cine meritev in to iz razliˇ cnih enoka- nalnih ali veˇ ckanalnih merilnih instrumentov (na primer visokofrekvenˇ cnega merilnika moˇ ci, faznega detektorja, spektralnega analizatorja, ...). Profesionalne rešitve avto- matizacije takih meritev so poleg visoke cene programske in strojne opreme podvržene tudi nekompatibilnosti med programsko opremo razliˇ cnih proizvajalcev ter razliˇ cnimi namenskimi vodili. Pri delu z najrazliˇ cnejšimi merilnimi instrumenti in pripomoˇ cki za potrebe meritev v visokofrekvenˇ cni, op- tiˇ cni in antenski tehniki imamo v laboratoriju potrebo po prilagodljivi, vsestranski in preprosti avtomatizaciji za- jema, poobdelave ter prikaza meritev. V nadaljevanju je predstavljen predlog rešitve, naši dosedanji poskusi ter ugotovitve. Predlagana kombinacija programske in strojne opreme omogoˇ ca tekoˇ ce delo z razliˇ cnimi merilnimi in- strumenti, od profesionalnih komercialnih, do roˇ cno iz- delanih, kot so na primer nizkocenovni doma izdelani VF generatorji [1] in detektorji [2, 3] prof. dr. Matjaža Vid- marja. Z nekaj dodatne programske logike in obdelave meritev so taki eksperimentalni instrumenti primerni za grobe visokofrekvenˇ cne meritve. Za meritve smernega diagrama antene se pri svojem delu v veliki meri zana- šamo na roˇ cno izdelane merilne vrtiljake, objavljene v [3]. Tudi v ˇ clanku opisana programska oprema je pri- marno namenjena antenskim meritvam, tako da je bilo najveˇ c razvoja opravljenega v to smer. 2 Podatkovna vodila Starejši merilni instrumenti tipiˇ cno omogoˇ cajo krmiljenje naprave in branje izmerjenih vrednosti po 8-bitnem vzpo- rednem vodilu IEEE 488, standardiziranem leta 1975. V o- dilo je bilo razvito kakih 10 let prej pod imenom HP-IB (ang. Hewlett-Packard Interface Bus), po standardizaciji in splošni uporabi pa je postalo znano kot GPIB (ang. General Purpose Interface Bus). Danes GPIB nadome- šˇ ca LXI (ang. LAN eXtensions for instrumentation), ki temelji na vodilu Ethernet, IP in protokolu IEEE 1588 za psevdo-realnoˇ casovno uro, omogoˇ ca pa tudi pravo re- alnoˇ casovno signalizacijo z uporabo dodatnih povezav. Pri napravah s podporo LXI je možno hitro in poceni avtomatizirati tudi kompleksnejšo meritev z veˇ c instru- menti, in to z uporabo le Ethernet stikala in nadzornega raˇ cunalnika ali sorodne naprave ter ustrezne programske opreme. Veˇ cje težave so pri komercialno dostopnih vme- snikih med vodilom GPIB in modernimi vodili (na pri- mer USB ali Ethernet), ki stanejo nekje od 100C dalje, kar v doloˇ cenih primerih lahko predstavlja previsok stro- šek. Poleg razmeroma visoke cene veˇ cina takih vmesni- kov potrebuje namenske, vˇ casih slabo podprte gonilnike, ki ne delujejo nujno na obeh glavnih družinah operacij- skih sistemov, ki poganjata osebne raˇ cunalnike in soro- dne naprave. Nekateri instrumenti omogoˇ cajo priklop preko dru- gih standardnih vodil, od katerih zagotovo velja omeniti RS-232 in USB. Pri teh vodilih za razliko od namenskih GPIB in LXI aplikacijska raven (protokol nadzora instru- menta in kodiranje podatkov) ni standardizirana, tako da nekateri instrumenti kljub uporabi standardnega vodila ne omogoˇ cajo preprostega in odprtega povezovanja z raz- liˇ cno programsko opremo, paˇ c pa v tem primeru zahte- vajo (bolj ali manj dobro podprto) namensko program- sko opremo z razliˇ cnimi programskimi vmesniki in mo- žnostmi za nadaljnjo avtomatizacijo meritev. 83 3 Programska oprema Med poplavo komercialnih in odprtih programskih orodij ter množico programskih jezikov je bil s ciljem nizko- cenovne rešitve izbran pristop z odprtokodnim tolmaˇ ci- tvenim programskim jezikom Python [4]. Ta z odprtim pristopom in široko (tudi akademsko) skupnostjo že leta doživlja hiter razvoj in ponuja vrsto kvalitetnih knjižnic za najrazliˇ cnejša opravila. Pri takih možnostih je v luˇ ci cilja znanstvene ponovljivosti danes verjetno smotrno iz- brati tako ali primerljivo odprto okolje, kakor ga ponuja jezik Python. 4 Strojna oprema ˇ Ceprav bi bilo zaradi znanstvene ponovljivosti verjetno prav, da bi bila odprtokodna strojna oprema v znanosti standard, je realnost toliko drugaˇ cna, da so bili kriteriji za primerne merilne instrumente (za razliko od rigoroznega pristopa pri izboru programske opreme) bolj pragmatiˇ cno zastavljeni. Primerna naprava naj podpira vsaj enega iz- med danes razširjenih vodil (RS-232, USB, Ethernet/LXI, in podobno), za naprave z vmesnikom GPIB pa se splaˇ ca preveriti morebitne nizkocenovne in odprtokodne rešitve pretvornika. Naprava mora imeti dokumentirano ali vsaj znano komunikacijo na aplikacijski ravni. Na dolgi rok je smiselno stremeti k ˇ cim bolj odprtim in ponovljivim strojnim rešitvam, za dosego cilja nizkocenovnih pono- vljivih meritev pa verjetno v smeri ˇ cim bolj univerzalnih merilnih instrumentov. 4.1 Povezava naprav z vmesnikom GPIB Preizkušenih je bilo veˇ c razliˇ cnih komercialnih in neko- mercialnih rešitev pretvornikov za GPIB. Kot pomembna šibka toˇ cka so se pokazali že prej omenjeni slabo podprti in pomanjkljivo zasnovani gonilniki, ki onemogoˇ cajo za- nesljivo delo. Tudi sicer pogosto uporabljena knjižnica PyVISA na primer ni polno podprta na kartiˇ cnih raˇ cu- nalnikih s procesorji ARM. Kot robustna in preprosta re- šitev so se izkazali vmesniki USB-GPIB, ki za povezavo na aplikacijski ravni uporabljajo navidezna serijska vrata. Obstajajo tudi odprtokodni projekti razvoja takih vmesni- kov, od katerih se je dobro izkazal vmesnik AR488 [5], zasnovan na mikrokrmilniških razvojnih plošˇ cah Ardu- ino. Ponuja zmogljiv nizkocenoven vmesnik z odprtoko- dno strojno in programsko opremo. 5 Jedrna knjižnica Pri razvoju predlagane programske rešitve so glavni ci- lji preprostost zasnove in uporabe, pravilna in ponovljiva uporaba okolja Python ter kompaktna in modularna pro- gramska koda, ki se ravno v pravi meri zanaša na zmo- gljive zunanje knjižnice. Rešitev naj ne vsebuje nepotreb- nih funkcionalnosti, potrebne pa naj abstrahira na smi- selnem nivoju za ponovljivo uporabo v razliˇ cnih meril- nih skriptah. Za veˇ cino opravil zadostuje tekstovni vme- snik (CLI, ang. command-line interface), ki je na voljo povsod, grafiˇ cni vmesnik (GUI, ang. graphical user in- terface) pa se naj uporablja tam, kjer je to potrebno ozi- roma smiselno. Knjižnica je namenjena uporabi v okolju Python, zato se ji ni potrebno izolirati in razen kjer je to nujno potrebno ne poskuša ujeti napak, ampak se zanaša na Pythonov izpis in postopanje ob napakah. Za dosego zadanega cilja je v razvoju nabor skript, od katerih glavna (z delovnim imenom liblab.py) vse- buje razliˇ cne nizkonivojske in visokonivojske funkcije z namenom ˇ cim bolj praktiˇ cne modularizacije programske (merilne) kode. Za shranjevanje meritev je bil izbran ber- ljiv in vseprisoten format CSV (ang. comma-separated values), ki pri pravilni implementaciji dela s tekstovnimi datotekami ne predstavlja ozkega grla, poleg tega za delo s tem formatom obstaja standardna knjižnica csv. Te- kom razvoja se je pokazalo tudi, da se ni smiselno ome- jevati na eno izmed obeh trenutno aktualnih razliˇ cic je- zika Python, ampak je programsko kodo dokaj trivialno napisati tako, da deluje z obema razliˇ cicama, s tem pa je možno tudi izkoristiti prednosti posamezne. V pra- ksi je pri pisanju programske kode za obe razliˇ cici je- zika potrebno najti naˇ cin izpisa poljubnega niza, ki de- luje enako pri obeh. V predstavljeni knjižnici je ome- njeno rešeno z uporabo funkcij stdout.write() in stdout.flush(), za kateri je potrebno vkljuˇ citi stan- dardno knjižnico sys. Jedrna knjižnica liblab.py med drugim vsebuje: 1. Uporabljene matematiˇ cne in fizikalne konstante. 2. Funkcije za izpis razhrošˇ cevalnih informacij. 3. Funkcije za delo s serijskimi vrati: • neblokirno (ang. non-blocking) branje serijskih vrat z medpomnilnikom delnih branj, • sprejem in obdelava identifikacijskih podatkov naprave, poslanih po serijski povezavi (detekcija tipa in/ali posamezne naprave), • doloˇ citev unikatnega identifikacijskega niza (se- stavljenega iz VID, PID, serijske številke in po- slanih identifikacijskih podatkov), • izpis serijskih vrat in njihovih lastnosti (name- njen razhrošˇ cevanju). 4. Splošne funkcije za delo z merilnimi instrumenti: • iskanje želenih naprav med zaznanimi serijskimi vrati, • vzporedno ˇ cakanje med koncem strojnih in za- ˇ cetkom programskih inicializacij naprav, • branje medpomnilnika delnih branj, • vpis v medpomnilnik posameznega kanala meri- tev (s poljubnim povpreˇ cenjem posameznega ka- nala), • osnovna obdelava vpisanih meritev (preverjanje obmoˇ cja, normalizacija vrednosti, detekcija ovoj- nice - minimalnih in maksimalnih vrednosti), • programska zakljuˇ citev (zapiranje odprtih serij- skih vrat in povezav). 5. Namenske funkcije za delo z merilnimi instrumenti: • razˇ clenjevanje vhodnih parametrov meritev (glede na tip instrumenta), • inicializacija strojnega in programskega nivoja (glede na tip instrumenta), • filtriranje (s pomoˇ cjo knjižnicere) in razˇ clenje- vanje prebranih vrstic v koristne meritve (glede na tip instrumenta), 84 • nastavljanje uporabljenih visokofrekvenˇ cnih iz- vorov in sintetizatorjev, • nadzor frekvenˇ cnega preleta VF generatorja, • nastavljanje uporabljenih merilnih vrtiljakov, • nadzor vrtenja in korakanje koraˇ cnega vrtiljaka, • splošna omejitev hitrosti zajema. 6. Obdelava meritev (anten): • izraˇ cun veliˇ cin, potrebnih za uspešne meritve an- ten (impedanˇ cna prilagoditev, Fraunhoferjeva raz- dalja, premer prve Fresnelove cone, izgube za- radi razširjanja v praznem prostoru), • analiza smernega diagrama ter integracija smer- nosti. 7. Funkcije za delo z datotekami CSV: • branje glave in razˇ clenjevanje stolpcev, • tekstovni vmesnik za izbor želenih stolpcev. 8. Funkcije za generiranje zvoka (samo v Python 3): • vkljuˇ citev zunanje knjižnicesimpleaudio, • (ne)blokirno igranje poljubnega tona, • opozorilni pisk. Ob izvršitvi skripte liblab.py je na voljo nekaj osnovnih razhrošˇ cevalnih funkcij: izpis serijskih vrat in zaznanih naprav, poskusno branje podprtih instrumentov, preizkus zvoka, sicer pa je skripta (knjižnica) namenjena vkljuˇ citvi v višjenivojske merilne skripte. Pri idealno mo- dularizirani kodi te tako vsebujejo le za posamezno meri- tev pomembno programsko logiko. 5.1 Vhodni podatki in nastavitve Jedrna knjižnica in pripadajoˇ ce merilne skripte za svoje delovanje potrebujejo doloˇ cene podatke, kot na primer identifikacijske nize vseh instrumentov, parametre vodil in povezav, privzete nastavitve instrumentov (na primer moˇ c izvora, hitrost vrtenja vrtiljaka, ...), seznam meril- nih kanalov posamezne naprave s pripadajoˇ cimi meril- nimi enotami in obmoˇ cji, in podobno. Našteti podatki so zapisani v datotekiconfig.py, ki je namenjena vklju- ˇ citvi s strani jedrne knjižnice. Na ta naˇ cin so uporab- niški podatki zelo preprosto loˇ ceni od programske kode. Pri zagonu katerekoli merilne skripte uporabnik poda le še obvezne (in neobvezne) vhodne parametre posamezne skripte, ki jih skripte nato razˇ clenijo s standardno Python knjižnicoargparse. 6 Zbiranje meritev Zaenkrat je bilo razvitih le nekaj osnovnejših merilnih skript, ki pa s svojim nastavljivim pristopom in modula- rizirano kodo omogoˇ cajo že kar nekaj razliˇ cnih merilnih scenarijev v visokofrekvenˇ cni tehniki. 6.1 ˇ Casovni prelet: recorder.py Merilna skriptarecorder.py je namenjena dolgotraj- nemu zbiranju meritev iz razliˇ cnih merilnikov, amplitu- dnih in faznih detektorjev, dodatno pa omogoˇ ca še zajem podatkov iz senzorja Bosch Sensortec BME280, ki zna meriti temperaturo okolice, relativno zraˇ cno vlažnost in zraˇ cni pritisk. Senzor je na raˇ cunalnik moˇ c priklopiti z uporabo katere izmed mikrokrmilniških razvojnih plošˇ c [6] in preprostim programom, ki prebrane vrednosti poši- lja po (navidezni) serijski povezavi po vodilu USB. Skriptarecorder.py ima z namenom dolgoroˇ cne stabilnosti preprosto zasnovo in uporablja POSIX funk- cijoos.fork() za dvonitno delovanje, s katerim uskla- juje zajem meritev iz razliˇ cno hitrih instrumentov. Nare- jena je kot avtomat konˇ cnih stanj (ang. finite-state ma- chine). V primarni niti programa se vrši branje vseh in- strumentov, razen najbolj poˇ casnega, tekstovni vmesnik, pisanje izhodnih datotek, morebitna omejitev hitrosti za- jema in komunikacija s sekundarno nitjo (za kar je upora- bljena knjižnicammap). V sekundarni niti se vrši branje najpoˇ casnejšega instrumenta, ki po konˇ canem branju z medprocesno komunikacijo da takt vpisa v izhodno dato- teko primarni niti. Skripta se izvaja dokler uporabnik ne pošlje prekinitve (ujete s pomoˇ cjo standardne knjižnice signal), nakar zakljuˇ ci izhodno datoteko in zapre po- vezave do instrumentov. Omogoˇ ca tudi nastavljivo pov- preˇ cenje posameznih kanalov, zajete meritve pa poskuša ˇ casovno ˇ cim bolj poravnati in jih po potrebi oznaˇ ci z mi- lisekundno uro. 6.2 Frekvenˇ cni prelet: sweeper.py Skriptasweeper.py je namenjena zajemu meritev pri diskretnem frekvenˇ cnem in/ali amplitudnem preletu na- stavljivega visokofrekvenˇ cnega generatorja. Omogoˇ ca za- jem meritev individualno izbranih in povpreˇ cenih meril- nih kanalov v vsaki toˇ cki preleta in jih zapiše v izhodno datoteko, med izvajanjem pa izpisuje stanje preleta. Te- kom preleta spremlja stanje VF izvora in opozarja na ne- dosegljive toˇ cke merjenja izven frekvenˇ cno-amplitudnega obmoˇ cja generatorja, preverja pa tudi merilno obmoˇ cje izmerjenih vrednosti posameznih merilnih kanalov. 6.3 Prostorski prelet: rotator.py Skripta rotator.py je namenjena meritvam z meril- nim vrtiljakom. V našem primeru gre najveˇ ckrat za me- ritve smernega diagrama antene, katerim je skripta pri- marno namenjena. Glavna zanka programa upravlja in spremlja vrtenje vrtiljaka, povezanega preko vodila USB. Omogoˇ ca nastavljiv korak in sektor preleta. Med vrte- njem skripta zbira želene meritve (kanali se izbirajo enako kot pri skriptisweeper.py) in po potrebi nastavlja tudi visokofrekvenˇ cni izvor ali ustavi vrtiljak (na primer za opravljanje frekvenˇ cnega preleta). Poleg zajema meri- tev v izhodno datoteko in tekstovnega izpisa stanja, pa rotator.py za razliko od drugih opisanih skript, vse- buje tudi grafiˇ cni vmesnik s polarnim izrisom za lažje spremljanje meritve v živo (prikazan na sliki 1) ter zvoˇ cno opozorilo ob zaˇ cetku in koncu meritve. Grafiˇ cni vmesnik poleg spremljanja izmerjenih vre- dnosti izbranih kanalov (podobno kot tekstovni) izpisuje nastavitve in stanje vrtiljaka, preteˇ ceni in preostali ˇ cas ter kotno hitrost vrtenja. Na koncu meritve prikaže na ma- ksimalno vrednost poravnan snop in rezultate analize iz- merjenega snopa. Ti obsegajo širino glavnega snopa (v primeru usmerjene antene), odklon maksimalne vredno- sti od sredine izbranega sektorja in smernost izmerjenega smernega diagrama. 85 Slika 1: Grafiˇ cni prikaz meritve s skriptorotator.py. 7 Obdelava in prikaz meritev Knjižnica liblab.py v osnovi ni namenjena poobde- lavi in prikazu meritev, saj v ta namen obstajajo primerni ter zmogljivi odprtokodni programi, kot je na primer Li- breOffice Calc. Prav tako v ta namen jezik Python že ponuja razliˇ cne zmogljive knjižnice, kot je na primer Ma- tplotlib. Ta omogoˇ ca tudi risanje kvalitetnih polarnih gra- fov, kar se v praksi pokaže kot šibkost drugih odprtoko- dnih rešitev. Ker se v praksi kaže potreba po programski opremi za risanje polarnih grafov, je bil del razvoja opra- vljen tudi v to smer. Skriptacsvplot.py (podobno kot grafiˇ cni naˇ cin skripterotator.py) omogoˇ ca izpis vre- dnosti analize izmerjenih smernih diagramov ter polarni izris poljubnih meritev z uporabo knjižnice Matplotlib. Dodatno omogoˇ ca tudi grobo in fino rotacijo prikazanih smernih diagramov ter polarni kurzor za hitro odˇ citavanje meritev. V drugem naˇ cinu delovanja skriptacsvplot.py iz- riše karteziˇ cni graf, namenjen hitremu vpogledu v daljše datoteke CSV (na primer pri dolgotrajnem zajemu s skripto recorder.py). Pri tem vsak kanal (stolpec) izriše na skupni ali svoji ordinatni osi in le-te oznaˇ ci z glavo posa- meznega stolpca v datoteki CSV . Posebnost tega naˇ cina je možnost delovanja s hitro knjižnico za branje tekstov- nih datotekcStringIO, kar omogoˇ ca hiter izris (nekaj sekund za veˇ c milijonov vrstic). Poleg zajema, obdelave in prikaza meritev, je bila za potrebe dela na doktorski nalogi razvita tudi skripta za naprednejšo analizo smernega diagrama kot primarnega vira za osvetlitev simetriˇ cne paraboliˇ cne antene za satelit- ske komunikacije. Skriptaillumer.py zaenkrat omo- goˇ ca branje, sintezo in prikaz smernega diagrama vira, poleg tega shematsko prikaže tudi zrcalo glede na nasta- vljene vhodne parametre (gorišˇ cna razdalja, premer zr- cala, elevacija nad obzorjem) in približen izraˇ cun konˇ c- nega smernega diagrama zrcala. Vmesnik je prikazan na sliki 2. Upošteva tudi vhodne izkoristke, faktorje in tem- perature za izraˇ cun šumnih veliˇ cin. Poleg analize smer- nega diagrama vira in zrcala zna izraˇ cunati tudi slabljenje na robu zrcala, izkoristek osvetlitve zrcala, šumno tempe- raturo antene, spektralno gostoto moˇ ci sprejetega termiˇ c- nega šuma in razmerje G/T (dobitek antene proti šumni temperaturi sprejemnega sistema). Slika 2: Grafiˇ cni vmesnik programa za analizo osvetlitve zrcalne antene (illumer.py). 8 Oddaljen dostop Ker je primarni uporabniški vmesnik razvitih skript uka- zna vrstica, lahko knjižnicaliblab.py in pripadajoˇ ce merilne skripte teˇ cejo na najrazliˇ cnejših napravah. Teks- tovni vmesnik hkrati omogoˇ ca trivialen oddaljen dostop in zagon na katerikoli primerni napravi, na primer s po- moˇ cjo SSH (ang. secure shell), ki tipiˇ cno omogoˇ ca tudi oddaljeno kopiranje datotek s SCP (ang. secure copy). Možnost poganjanja avtomatizirane meritve iz manjše na- prave, kot na primer kartiˇ cnega raˇ cunalnika Raspberry Pi, omogoˇ ca dodatno svobodo pri postavitvi merilnih instru- mentov in ne okupira uporabnikovega raˇ cunalnika med zajemom meritev. 9 Zakljuˇ cek V tem delu je predstavljen koncept knjižnice za odprtoko- dno avtomatizacijo zajema ter obdelavo in prikaz meritev v radiofrekvenˇ cni tehniki. Predstavljene so programske smernice in ugotovitve pri povezovanju merilnih instru- mentov preko standardnih vodil kot na primer RS-232, USB, Ethernet/LXI in GPIB. Taka knjižnica skupaj s pri- meri merilnih skript je trenutno še v fazi razvoja, z objavo dosedanjih poskusov razvoja pa se preverja odziv znan- stvene skupnosti, ki bo usmerjal nadaljnje delo. Zahvala Raziskovalni program št. P2-0246 je sofinancirala Javna agen- cija za raziskovalno dejavnost Republike Slovenije iz državnega proraˇ cuna. Literatura [1] M. Vidmar: Visokofrekvencni vir z ulomkovno zanko, 2017, http://lea.hamradio.si/~s53mv/fpll/fpll.html [2] M. Vidmar: Lock-in sprejemnik z virom do 12GHz, 2017, http://lea.hamradio.si/~s53mv/lockin/lockin.html [3] M. Vidmar: Amaterska antenska merilnica, 2017, http:// lea.hamradio.si/~s53mv/aam/aam.html [4] Python.org - Documentation, https://www.python.org/doc/ [5] AR488 Arduino GPIB Interface, https://github.com/ Twilight-Logic/AR488/ [6] J. Ivkovi´ c in J. L. Ivkovi´ c: Analysis of the performance of the new generation of 32-bit Microcontrollers for IoT and Big Data Application, Proc. of the International Conference on Information Society and Technology (ICIST), 2017