Avtor: dr. Simon Vavpotič
2019_272_52
Brez digitalnega procesiranja signalov ni hitrih brezžičnih komunikacij in visoke ločljivosti videa in zvoka. Zanimalo nas je, kako izdelati programsko orodje za PC in/ali PIC32 za hitro analizo z A/D pretvornikom vzorčenih signalov.
Čeprav imamo velikokrat občutek, da je domači PC namenjen predvsem preprostemu pisarniškemu delu in popoldanskim zabavnim aktivnostim, med katerimi zagotovo ne manjka računalniških iger, je z ustreznim programskim orodjem v veliko pomoč tudi pri digitalni analizi signalov, na osnovi katere lahko preverimo modele za digitalno obdelavo signalnih tokov in jih kasneje prenesemo v vgnezdeno programsko opremo mikrokontrolerjev. Digitalni analizator lahko uporabimo tudi pri diagnostiki napak v elektronskih vezjih.
Ta vsebina je samo za naročnike
V preteklem nadaljevanju smo se podrobneje lotili razvoja programske opreme za analizo digitalnih signalov za PC in PIC32 in med drugim spoznali tudi različne implementacije hitre Fourierove transformacije ter digitalnih filtrov. Vsekakor ni bil poudarek na matematičnih opisih, temveč na oblikovanju praktičnih programskih rešitev in povezovanju različnih programskih knjižnic, ki jih potrebujemo pri gradnji kompleksnejših algoritmov. Pri tem smo se lotili tudi mogočih napak in pasti, v katere se lahko zapletemo, če se napačno lotimo praktične implementacije.
Tokrat se bomo lotili še podrobnosti, med katerimi je gotovo izredno pomembna izdelava izjemno stabilnega napetostnega vira, ki bo omogočil natančno vzorčenje analognih signalov z ADS1263. Vsekakor velja premislek pri izbiri kakovosti napajalnega vira A/D pretvornika. Pri majhni ločljivosti (od 12 do okoli 16 bitov) navadno zadošča že sorazmerno enostaven napetostni regulator, s katerim ustvarimo referenčne napetosti. Za večje natančnosti pa je potreben izjemno stabilen napetostni vir (reda nV), saj še tako majhna izmenična komponenta pokvari meritev. Zanimiva možnost je tudi uporaba nastavljivega vira referenčnih napetosti, ki omogoča spreminjanje merilnega območja. Uporaben je predvsem pri A/D pretvornikih brez lastnega predojačevalnika.
V tokratnem nadaljevanju se nam ne bodo izmuznile niti nekatere ključne podrobnosti implementacije programske opreme v PC, s kateri izvajamo analize, kot so umetno-inteligenčne in statistične razširitve. Ogledali si bomo tudi implementacijo grafike programske aplikacije PC Digital Signal Analyzer in preverili možnosti za izdelavo avtonomnega analizatorja signalov na osnovi mikrokontorlerja PIC32MZ2048ECH144 in barvnega prikazovalnika TFT.
Stabilni napetostni vir
Za doseganje natančnosti meritev napetosti na več kot 16 bitov natančno potrebujemo tudi ustrezen napetostni vir, pri čemer lahko vsekakor pozabimo tako na računalniške napajalnike kot tudi na klasične napetostne regulatorje, kot so: LM317T, 7805, 7912, …, ki zgladijo napetost do ravni milivoltov. V našem primeru potrebujemo konstanten napetostni vir na ravni mikrovoltov, torej s tisočkrat manjšim šumom.
Če v Google vpišemo geslo »high precision psu«, kar v prevodu pomeni napajalnik visoke natančnosti, nas največ odgovorov usmeri v spletne trgovine, polne sorazmerno dragih laboratorijskih napajalnikov različnih zmogljivosti. K sreči v spletni trgovini AliExpress (dobavni rok za brezplačno dostavo je od 7 do 19 dni) najdemo tudi presenetljivo poceni in preprosto razvojno ploščico kitajskega izvora z dvema naprednima Texas Instrumetsovima regulatorjema, TPS7A4701 in TPS7A3301. Prvi uravnava pozitivno referenčno napetost, drugi pa negativno. Oba čipa sta majhna, vendar vseeno zmoreta tok do 1 A. Za večje tokovne obremenitve moramo dodati dodatna ojačevalna vezja, ki pa so sorazmerno enostavna za implementacijo, v kar se lahko prepričamo tudi iz primera TIDA-01371 iz Texas Instrumentsove spletne strani, saj moramo za vsako dodatno tokovno ojačitev dodati močnostno vezje CSD19533KCS, tako za pozitivne kot za negativne napetosti. Prve dobimo iz TPS7A4701, druge pa iz TPS7A3301. Omenimo še to, da CSD19533KCS povezujemo vzporedno z napetostnim regulatorjem.
Zaenkrat tokov, večjih od 1 A ne bomo potrebovali, za to se vrnimo k razvojni ploščici. V bistvu ne gre za nič drugega kot najpreprostejšo skupno implementacijo pozitivnega in negativnega napetostnega regulatorja, saj so poleg čipov le najnujnejši diskretni elementi, ki jih najdemo tudi v referenčnih vezjih za priklop napetostnih regulatorjev. Vsi so v SMD tehniki, ki omogoča implementacijo vezij z nižjim šumom kot pri klasičnih vezjih, pri katerih diskretne elemente prispajkamo skozi luknjice.
Nastavljanje izhodne napetosti
˝
TPS7A4701 in TPS7A3301 napetostna regulatorja omogočata širok nabor pozitivnih in negativnih izhodnih napetosti, medtem ko ju lahko napajamo z napetostima do 36 V oziroma do -36 V, vendar pa je natančna vrednost izhodne napetosti glede na želeno izhodno napetost pogojena z natančnimi vrednostmi uporov, iz katerih izdelamo napetostni delilnik. TPS7A4701 ima prav zato že serijsko vgrajene upornosti za stopenjsko nastavljanje izhodne napetosti. Zato nam ustreznih uporov s tolerancami 1% (ali celo 0,1 %, če hočemo še natančnejšo izbiro izhodne napetosti) ni potrebno iskati; seveda, če se zadovoljimo z eno izmed referenčnih napetosti, ki jih lahko nastavimo s pomočjo notranjih uporov.
Žal pri regulatorju negativnih vrednosti napetosti, TPS7A3301, ki ima dozdevno nekoliko starejši dizajn od TPS7A4701, vgrajene upornosti pogrešamo in moramo za nastavitev izhodne napetosti izdelati ustrezen uporovni delilnik. Kljub temu je za domače razvijalce prednost TPS7A3301 v tem, da ga lahko kupimo tudi v klasičnem ohišju TO-220, v katerem ima sicer nekoliko več šuma kot v ohišju VQFN s 30 priključki, kljub temu pa ga je veliko lažje ročno prispajkati.
No, na preizkusni ploščici sta oba čipa v ohišjih VQFN, kar zagotavlja najmanjšo mogočo mero šuma. Izhodno napetost TPS7A3301 nastavimo z baterijo vgrajenih preklopnih mikrostikal, medtem ko je izhodna napetost TPS7A3301 fiksno prednastavljena z miniaturnima uporoma R6 in R5. Slednja moramo zamenjati, če želimo spremeniti negativno izhodno napetost (-5V).
Poglejmo še, kako napajamo napetostni regulator. Na vhodne sponke moramo pripeljati pozitivno in negativno napetost vrednost med 3 do 36 V, oziroma med -3 V in -36 V. Pozitivna oziroma negativna napajalna napetost morata vsekakor biti nekoliko višji oziroma nižji od želenih izhodnih napetosti.
Napajanje ADS1263
Kot smo omenili, potrebujemo za optimalno napajanje analognega dela ADS1263 natančni simetrični napetostni vir s +2,5 V in -2,5 V. Pozitivno napetost +2,5 V lahko nastavimo tako, da vklopimo stikala 5, 7 in 8, ostala pa pustimo izklopljena. Za izhodno napetost -2,5 V moramo najprej na novo izračunati vrednosti uporov R6 in R5, kjer imamo več možnosti. Med lažjimi je tista, da izhajamo iz že izdelane tabele vrednosti, ki jo v podatkovni poli TPS7A3301 nudi proizvajalec in spremenimo R6 ali R5, ali pa namesto tega upoštevamo pravilo, da mora biti Vref(max)/R2 > 5 µA in določimo novi vrednosti uporov glede na to, katere upore imamo doma na že razpolago. Vsekakor obstaja pri domačih dizajnih v ospredju točnost in konstantnost izhodne napetosti, manj pa varčevanje s porabo energije.
Sam sem izbral lažjo pot in le nekoliko prilagodil vrednosti uporov R6 in R5, ki sta že izračunani za -3,3 V. Pri tem sem si pomagal z enačbo R6=R5*(Vout/Vref-1). Novi vrednosti za -0,25 V sta tako 190 kOhm in 167,8 kOhm. Z njima je potrebno zamenjati originalna upora R6 in R5 na prej omenjeni razvojni ploščici, saj sta originalna, kot je razvidno iz slik na spletni strani AllExpress, izbrana 332 kOhm in 102 kOHm. Namesto zamenjave obeh uporov, lahko v nekaterih primerih enega ohranimo, drugega pa izračunamo na novo in zamenjamo. Če, denimo ciljno upornost R5 sestavimo iz več uporov, ali uporabimo celo kak potenciometer moramo upoštevati, da lahko s tem povečamo precej šum na ravni mikrovoltov.
Opozorimo, le še, da sta v navodilih za uporabo TPS7A3301 upora R6 in R5 označena z R1 in R2; proizvajalec preizkusne ploščice je izbral druge oznake zato, ker je na isto tiskano vezje vgradil tudi TPS7A3301.
Kako napajati regulator napetosti?
Zdaj moramo rešiti še problem, kako natančnemu regulatorju napetosti zagotoviti dovolj visoki (ne nujno simetrični) napajalni napetosti. Tu se kar sam ponuja računalniški napajalnik z napetostmi -5 V, +5 V in -12 V, +12 V. Tudi če se odločimo za prvo možnost, bi ta za izhodno napetost -2,5 in +2,5 V zadoščala.
Če simetričnega napajalnega vira nimamo na voljo, ga lahko tudi ustvarimo s pomočjo napetostnega inverterja v enem čipu (npr. TPS54060), vendar pa potrebujemo tu še manjšo transformatorsko tuljavo z jedrom.
Baterijski vir napajanja
Kot dokaj stabilen enosmerni vir napajanja lahko uporabimo tudi navadne ali akumulatorske baterije. Tu se nam ni potrebno ubadati s filtriranjem ostankov nihanja omrežne napetosti v ritmu 50 Hz, ali drugih motenj iz omrežja. Regulirati moramo le višino napetosti, ki mora biti konstantna ne glede na izpraznjenost vira napajanja. Pri tem si lahko pomagamo s kakšnim enostavnejšim regulatorjem, vendar moramo pri tem dopustiti manjša časovna napetostna nihanja, ki jih ne more tako dobro odpraviti kot regulatorji visoke natančnosti. Malenkostno spreminjanje referenčne napetosti A/D pretvornika skozi čas lahko povzroči neenakost izmerjenih rezultatov enake vrednosti napetosti.
Kot sem obljubil, se bomo zdaj lotili še nekaterih podrobnosti implementacije programske opreme digitalnega analizatorja signalov.
Programska oprema: Umetno-inteligenčne razširitve
V preteklem nadaljevanju smo si ogledali nivoje programske opreme digitalnega analizatorja signalov. Tokrat nas bo zanimal predvsem najvišji nivo programske opreme, v katerem izvajamo končne analize signalov. Umetno-inteligenčne metode lahko dodamo prav na ta nivo. Z njimi želimo eliminirati velik del natančnega analitičnega dela pri analizah neznanih signalov, ki bi ga sicer morali opraviti sami.
Ena izmed zanimivih funkcionalnosti je detekcija značilnih signalih vzorcev v digitaliziranem signalu, ki jih lahko odkrijemo pri vizualnem pregledu grafa zajetih vzorcev. Vendar je to veliko lažje, če namesto tega zgradimo umetno-inteligenčni program, ki sam poišče najočitnejše značilnosti. Gradnje algoritma se lotimo s pomočjo koncepta časovnih vrst, v katerih so digitalizirane vrednosti signala skozi čas. Pri detekciji značilnih vzorcev opazujemo krajša podzaporedja vzorcev, v katerih iščemo ponavljajoči se vzorec. Pri tem lahko vsako podzaporedje obravnavamo kot vektorski vhod v samodejni oscilator, oziroma umetno-inteligenčno strukturo, ki zna sama klasificirati in razporediti podobne vzorce. Denimo, Kohonenova nevronska mreža je eden od mogočih tovrstnih klasifikatorjev.
Zanima nas še, kako določiti optimalno dolžino časovnih podzaporedij. To je vsekakor odvisno od hitrosti vzorčenja in od frekvenčnega obsega, v katerem želimo iskati ponavljajoče se časovne vzorce. Vsekakor izbira prekratkega časovnega podzaporedja onemogoča, da bi zajeli celotne vzorce, predolgo zaporedje pa bo pomenilo, da hkrati obravnavamo značilnosti, ki lahko pripadajo več vzorcem. Zato si lahko pomagamo z dinamičnimi prilagajanje dolžine iskalnih podzaporedij, ki jo vežemo na spektrogram, tako da preiskujemo le okoli najbolj izraženih frekvenc.
Programska oprema: Statistične metode in baze znanj
Vsekakor je tudi pri digitalni analizi signalov nesmiselno, da bi se računalnik s pomočjo umetno-inteligenčnih algoritmov sam učil splošno znane resnice o analizi signalov. Zato mu lahko pomagamo tako, da v programsko opremo vgradimo metode za statistične analize in bazo znanja. Statistične obdelave so lahko odvisne tudi od baze znanja, če vnaprej poznamo določene značilnosti signalov, ki jih iščemo. Lahko pa uporabimo tudi splošne statistične metode za iskanje značilnosti, kot je denimo ta, kakšna vrsta modulacije je uporabljena pri opazovanem signalu. Vsekakor velja, da se splača preden se lotimo umetni-inteligenčnih metod, preučiti, katere statistične metode so na voljo in če zadoščajo našim potrebam. Praviloma so umetno-inteligenčne metode uporabne predvsem tam, kjer standardne statistične in matematične metode odpovedo.
Programska oprema: Podrobnosti zajema podatkov s ADS1263 v aplikacijo
V preteklem nadaljevanju smo podrobno opredelili delovanje in nivoje programske opreme (priložena je bila tudi izvorna koda). Zdaj se lotimo še razlage implementacije v programski kodi. Osnovni program za komunikacijo je napisan v programskem jeziku Visual Basic, za potrebe razvoja programske opreme PC Digital Signal Analyzer pa je bil prenesen tudi v programski jezik Visual C#. Sintaksi obeh programskih jezikov sta dovolj enostavni, zaporedje proženja komunikacijskih ukazov pa enako. Zato bomo tu obravnavali samo primer za programski jezik Visual Basic.
Programska jezika Microsoft Visual Basic in Microsoft Visual C# podpirata objekte. Za naše razumevanje je dovolj, da si predstavljamo, da moramo za komunikacijo z vsakim od mikrokontrolerjev PIC32 (za digitalni analizator smo uporabili zgolj enega) zgraditi svoj objekt, kar lahko storimo takole: SVPICAPI PIC32 = new SVPICAPI(). Svoj objekt sem torej poimenoval PIC32, lahko pa bi ga tudi drugače. Natančni opisi primerov so v seriji člankov o programiranju PIC32, ki je izhajala v Svetu Elektronike v letih 2015 in 2016.
Komunikacijo z ADS1263 preko PIC32 vzpostavimo z ukazom PIC32.ADS1263_Init(), s katerim nastavimo delovanje vmesnika SPI v PIC32MZ2048ECH144. Sledijo ukazi za zagon samodejnega zajemanja vzorcev (digitalizacijo) in njihov prenos v osebni računalnik. Zajemanje vzorcev sprožimo z ukazom PIC32.ADS1263_Command(&HA), s katerim v ADS1263 prenesemo ukaz s šestnajstiško kodo 0xA, ki zažene glavni A/D pretvornik. PIC32MZ2048ECH144 nato vse zajete podatke shranjuje v svoj notranji krožni izravnalnik, iz katerega jih lahko preberemo s PC s pomočjo ukaza PIC32.ADS1263_ReadBuffer(), s katerim preberemo do 60 bajtov hkrati, oziroma do 15 4-bajtnih vzorcev hkrati. Branje posameznega vzorca izvajamo v programski zanki s pomočjo ukaza PIC32.ReadBufferDWORD_Lend(n*4 + 3), s katerim obenem pretvorimo zapis podatkov v način, neposredno berljiv z Intelovimi procesorji (oz. procesorji za PC). Pred branjem podatkov moramo sicer preveriti še statusni bajt, iz katerega zvemo, koliko vzorcev je bilo dejansko prebranih. Slednje je pomembno predvsem pri počasnih branjih podatkov, kjer lahko traja eno vzorčenje tudi desetinko sekunde, ali celo dlje. Večinoma sicer pri digitalnih analizah izberemo nekoliko hitrejše vzorčenje.
Pomemben je tudi ukaz PIC32.ADS1263_ReadStatus(), s katerim lahko v vsakem trenutku preverimo stanje podatkovnega izravnalnika v PIC32MZ2048ECH144. Ukaz vrne 4 štiribajtne celoštevilčne vrednosti, ki predstavljajo: kazalec na najstarejši neprebrani vzorec, kazalec na najmlajši neprebrani vzorec, število neprebranih vzorcev in velikost izravnalnika v bajtih. Tako je lahko aplikacija v PC vedno seznanjena s stanjem vzorcev, ki so še shranjeni v mikrokontrolerju. Pomembno je predvsem, da je njihovo branje v povprečju hitrejše od zajema, sicer se izravnalnik lahko prenapolni.
Povejmo še, kako nastavljamo hitrost vzorčenja. ADS1263 je samostojen A/D pretvornik z izhodom ~DRDY, ki ga lahko vežemo na zunanji prekinitveni vektor PIC32, ki je tako obveščen ob razpoložljivosti vzorca in lahko izvede njegov prenos v izravnalnik. Hitrost proženja prekinitve je odvisna od hitrosti zajemanja in vzorčenja podatkov, ki jo nastavimo z ukazom PIC32.ADS1263_WriteReg(reg, dta), tako da v spodnje štiri bite registra Mode 2 (register 5) zapišemo eno od mogočih hitrosti vzorčenja. Pri tem povejmo, da so v vseh registrih ADS1263 v osnovi 8-bitne vrednosti, vendar nekateri registri v parih ali trojicah tvorijo daljše vrednosti, iz 16 ali 24 bitov, ki so potrebne za nastavljanje določenih funkcionalnosti, denimo 24-bitne kalibracijske vrednosti. Natančni podatki o programiranju ADS1263 so na voljo v podatkovnih polah iz Texas Instrumentsove spletne strani.
Snovanje grafike za PC
Pri risanju oblike signalov v časovnem ali frekvenčnem prostoru moramo najprej imeti na voljo dovolj vzorcev. Nato moramo uporabiti API operacijskega sistema ali drugega, višje-nivojskega grafičnega sistema, preko katerega posredujemo podatke za izris krivulje ali stolpčnega diagrama računalniškem oknu. Sam sem uporabil okensko grafiko, ki jo ob vključitvi sistemskih programskih knjižnic Microsoft Windows v projekt nudi Microsoft Visual C#.
Za osnovi grafični objekt sem uporabil PictureBox, ki je na voljo preko levega izbirnega menija med izdelavo ali popravljanjem grafične postavitve okenske aplikacije. Nato sem v pomnilniku PC ustvaril objekt Bitmap in iz njega izpeljal objekt obj_graphics; takole: obj_graphics = Graphics.FromImage(obj_bitmap). Naslednji korak je bil risanje v novo ustvarjeni objekt, ki ga je mogoče izvajati z ukazi: obj_graphics.DrawLine(System.Drawing.Pens.Black, x1, y1, x2, y2).
Kot vidimo, celoten izris diagrama signala temelji na skupku premic, ki povezujejo posamezne diskretne vzorce. Zato je mogoče graf tudi poljubno povečevati. Vendar je potrebno v pomnilniku izrisano sliko periodično prenašati tudi na zaslon, kar lahko storimo z ukazom: PbDiagram.Image = obj_bitmap… Celotna izvorna koda aplikacije je bila objavljena v preteklem nadaljevanju.
Strojna oprema: Avtonomni analizator signalov
Doslej smo se analize signalov lotevali s pomočjo osebnega računalnika s zaslonom in tipkovnico, kateremu je bil mikrokontroler zgolj v pomoč pri neprekinjenem zajemanju toka digitaliziranih vzorcev. Če se lotevamo izgradnje avtonomne naprave, pa je prvi premislek o tem, kako izbrati dovolj zmogljiv zaslon.
Ena izmed poceni možnosti je uporaba manjšega barvnega zaslona s TFT tehnologijo dovolj visoke ločljivosti, na katerem lahko dovolj kakovostno prikazujemo grafe. Za domačo rabo si lahko na primer omislimo razvojno ploščo MicroElectronika Multimedia platform (MMB-MX4) s PIC32MX460F512L in barvnim TFT prikazovalnikom z ločljivostjo 320 x 240 pik, s katero moramo povezati le še ADS1263, kar pa ni pretirano težko (glej shemo). Na preizkusni ploščici so označeni celo priključki SPI vmesnika, ki ga potrebujemo za priklop A/D pretvornika.
Način komunikacije PIC32 s ADS1263 smo že omenili, tako nam preostane le še podpora za grafiko, oziroma izris diagramov in podatkov. Ker je razvojna plošča združljiva z Microchipovo grafično knjižnico v sklopu Microchip Harmony, tudi implementacija grafičnega prikaza ne bi smela predstavljati pretrd oreh za nekoliko bolj izkušenega programerja.
Bistveno je, da upoštevamo zmogljivost zaslona, kakor tudi da morda vedno ni potrebno osvežiti celotne slike na njem, s čemer lahko bistveno pohitrimo prikaz. Vsekakor pa je tudi res, da ločljivost 320×240 pik prav tako ne bi smela predstavljati velik zalogaj za PIC32.
Privlačnost omenjene rešitve je predvsem v tem, da jo lahko sorazmerno enostavno sestavimo iz poceni standardne razvojne plošče in z nekaj truda pri spajkanju čipa A/D pretvornika. Natančen postopek priprave tiskanina in spajkanja ADS1263 je opisan v SE267 v drugem delu članka oA/D pretvorniki z visoko ločljivostjo.
Vsekakor smo pri implementaciji analizatorja digitalnih signalov v strojni opremi omejeni tudi z zmogljivostjo izbranega PIC. Namesto omenjenega lahko uporabimo tudi kako dražjo razvojno osnovo s spletne strani Microchip Direct, ali pa napravo v celoti izdelamo sami na osnovi izbranega zaslona TFT. Opozorimo le, da utegnemo imeti največ dela, ne z digitalizacijo in obdelavo podatkov, temveč z njihovim ustreznim grafičnim prikazom.
Za konec
Digitalni analizatorji signalov so kompleksne naprave, katerih bistvo ni v analogno-digitalnem delu, oziroma zajemanju signalov, temveč predvsem v njihovem razumevanju in interpretiranju. Zmogljiva programska oprema lahko s pomočjo matematičnih, statističnih in umetno-inteligenčnih analiz poišče žele značilnosti, oziroma ugotovi prisotnost ali odsotnost določenih vrst signalov v signalnem spektru.
Za domačo rabo se pogosto omejimo na počasne signale, saj nas zanimajo, denimo vremenski pojavi, kot so udari strel, pri profesionalnem laboratorijskem delu pa nas pogosto zanima tudi pravilnost delovanja elektronskih naprav, ki jih razvijamo, zato pogosto želimo analizirati tudi hitre signale. Kakorkoli, kadar se lotevamo Fourierove transformacije, da bi lahko signal nadalje obdelovali v frekvenčnem prostoru, moramo imet na voljo dovoljšnjo količino digitaliziranih vrednosti opazovanega signala, da lahko dosežemo želeno frekvenčno ločljivost.
Vsekakor, je nazadnje pomemben tudi grafični prikaz rezultatov, za katerega potrebujemo grafično okolje, kot je denimo Microsoft Windows. Če se grafičnega prikaza lotevamo od bitne grafike naprej pa moramo vse grafične elemente (npr. gumbe) izdelati sami, kar nam lahko vzame celo več časa kot načrtovanje ostale strojne in programske logike digitalizatorja signalov…