• Rezultati Niso Bili Najdeni

Grafična predstavitev omejitev za common mode napetosti pri

Iz ojačevalnika gre signal direktno na pretvornik, ki je delta sigma (ΔΣ) AD-pretvornik.

62 Praktični del

Iz AD-pretvornika dobimo digitalne kode, ki jih preko SPI vmesnika pošiljamo na mikroprocesor (Arduino).

Izbirati je možno med štirimi referenčnimi napetostmi. Prva (00) je notranja 2,048 V referenca, druga (01) je napetost med priključkoma REFP0 in REFN0, tretja (10) med priključkoma REFP1 in REFN1, četrta (11) pa je kar napajalna napetost (AVDD – AVSS).

Čip ima vgrajen tudi temperaturni senzor, ki ga lahko beremo, in notranji oscilator.

Izbiramo lahko tudi med vzorčnimi frekvencami, ki pa so odvisne od načina delovanja, ki ga prav tako lahko izberemo.

Tabela 5: Vzorčne frekvence in načini delovanja

Vrednost Navadni način (Hz) Duty-cycle način (Hz) Turbo način (Hz)

000 20 5 40

111 Rezervirano Rezervirano Rezervirano

Izbiramo lahko tudi med enkratno meritvijo in neprekinjenim merjenjem.

Pomembna nastavitev je še FIR-filtra, kjer lahko nastavimo zaporni filter za 50 Hz in 60 Hz signale, da se torej znebimo motenj iz omrežja. Ta nastavitev pa na žalost deluje samo v navadnem načinu vzorčenja pri 20 Hz ali duty-cycle načinu pri 5 Hz. Ostale nastavitve za nas niso pomembne.

2.3.5 Mikrokrmilnik

Za mikrokrmilnik smo se odločili na podlagi dveh pogojev: enostavnost implementacije in velikost. Namesto celotne razvojne plošče bi lahko na tiskano vezje dodali samo mikrokrmilniški čip z USB povezavo. Enostavneje se nam je zdelo uporabiti Arduino razvojno ploščo, ki vse to že vključuje. Arduino Nano je dimenzij 18 × 45 mm, zaradi česar je primeren za vgradnjo v miško. Vhodno-izhodnih priključkov ima več kot dovolj, saj potrebujemo samo priključke za SPI komunikacijo ter dva V/I priključka za izbiro čipa (CS – chip select) in pripravljenost podatkov (DRDY – data ready). Poleg tega potrebujemo še napajanje, ki ga Arduino dobi preko USB-priključka.

Konstrukcija merilnega sistema 63

Slika 22: Arduino Nano

Slika 23: Arduino Nano V/I priključki [12]

Arduino vsebuje tudi analogne vhode, ki bi jih lahko načeloma uporabili namesto namenskega AD-pretvornika, a so ti vhodi samo 10-bitni, kar bi pomenilo preveliko zmanjšanje točnosti meritve in kakovosti izhodnega signala.

64 Praktični del

2.3.6 Končno vezje

Po vseh meritvah in eksperimentih smo razvili preprosto vezje, ki je dovolj dobro za zahteve merjenja prevodnosti kože. Vezje izgleda tako:

Slika 24: Končno vezje za merjenje prevodnosti in temperature

Zaradi zahtev AD-pretvornika smo morali vezje nekoliko prilagoditi. Napetost na vhodih mora biti namreč zaradi PGA-ojačevalnika v določenih mejah. Te meje znašajo pri vhodni napetosti 0,5 V in ojačenju 8 od 2,2 V do 2,8 V. Prvotni načrt, torej priklop na 0 V in 0,5 V, je bilo potrebno nekoliko posodobiti, da je maksimalna napetost na koži še vedno 0,5 V, hkrati pa so zadovoljene tudi zahteve PGA-ojačevalnika, da ta deluje v linearnem režimu. To smo rešili tako, da smo dvignili napetosti tako, da je spodnja napetost 2,25 V, zgornja pa 2,75 V. Razlika napetosti se torej ohrani, hkrati pa je napetost na PGA-ojačevalniku znotraj meja linearnega delovanja.

Konstrukcija merilnega sistema 65

Upore R1, R2 in R3 smo določili programsko tako, da smo upoštevali dejanske vrednosti uporov po lestvici uporov E24 in iskali čim manjšo napako izhodne napetosti. Dodaten pogoj je bil, da je skupna upornost najmanj 10 kΩ. Tako smo dobili vrednosti, ki se zelo dobro ujemajo s predvidenimi. Dejanska (preračunana) spodnja napetost z izbranimi upori znaša 2,2423 V, zgornja pa 2,7506 V. Preračunana razlika napetosti je torej 0,5083 V. Na izhodu iz uporovnega delilnika s tremi upori sta dva sledilnika napetosti, ki imata visoko vhodno upornost in nizko izhodno upornost, kar omogoča, da se napetosti ne spreminjajo v odvisnosti od priključene upornosti.

Ker ima AD-pretvornik štiri vhode, smo se odločili, da bomo merili napetosti na referenčnem uporu R0,K in napetost na koži (GK) diferencialno. AD-pretvornik s konfiguracijo omogoča merjenje napetostne razlike med dvema vhodoma z ojačenjem preko PGA-ojačevalnika. Tako znotraj programa ne dobimo napetosti UAN1, UAN2 in UAN3, ampak direktno UAN1-AN2 in UAN2-AN3. Tako lahko preprosto izračunamo

referenčna napetost AD-pretvornika, AU pa napetostno ojačenje AD-pretvornika (oziroma PGA-ojačevalnika v pretvorniku). Če oznako za digitalno kodo AD-pretvornika za napetost UAN1-AN2 zapišemo kot AN12, za UAN2-AN3 pa AN23, lahko enačbo za izračun prevodnosti zapišemo tako:

𝐺𝐾 =

Enačba 27: Izračun prevodnosti iz vrednosti AD-pretvornika

66 Praktični del

V enačbi se torej okrajša referenčna napetost, ojačenje in maksimalna vrednost za n bitov. Predpostavka je seveda, da se za merjenje obeh napetosti uporabi isto ojačenje in ista napetostna referenca. To nam nakazuje, da nam v resnici ni potrebno poznati točne vrednosti referenčne napetosti, še več: temperaturno ali starostno spreminjanje referenčne napetosti ne vplivata na meritev. Prav tako na meritev ne vpliva točnost vrednosti ojačenja PGA-ojačevalnika. Sama vrednost ojačenja seveda močno vpliva na kakovost meritve zaradi kvantizacijske napake, nima pa na meritev vpliva, če ojačenje namesto nastavljenih AU = 8 dejansko znaša AU = 7,9. Če bi merili napetosti, bi bilo to pomembno, ker pa gre za razmerja napetosti, se vse to pokrajša.

Edina vrednost, ki jo moramo točno poznati in njeno spreminjanje dejansko vpliva na rezultate meritev, je R0,K.

Vezje smo narisali v programu Altium in ga dali izdelati v kitajsko podjetje. PCB izgleda tako:

Slika 25: Shema tiskanega vezja

Konstrukcija merilnega sistema 67

Slika 26: Tiskano vezje (končna različica) zgornja (levo) in spodnja stran (desno)

Vezje je zelo enostavno. Glavna komponenta je AD-pretvornik, ki tudi direktno komunicira z mikrokrmilnikom, na katerega je povezan s pomočjo pinov na konektorju P1. Konektor P2 služi napajanju celotnega vezja, na konektor P3 priključimo termistor za merjenje temperature, na P4 pa elektrode za merjenje prevodnosti kože.

V razvoju je bilo izdelano še eno vezje, ki je služilo testiranju. Komponente se bistveno ne razlikujejo, je pa vezje veliko večje in vsebuje nekaj dodatnih elementov in možne konfiguracije:

68 Praktični del

Slika 27: Testno vezje

Vezje je bilo namenjeno testiranju na testni plošči (protoboard), zato ima vse povezave speljane na konektorje, ki se zapičijo v testno ploščo. Na tem vezju je bil tudi temperaturni senzor, ki ga zaradi majhnosti nismo niti testirali. Vezje nam je omogočilo dobro testiranje funkcionalnosti in izvedbo manjših popravkov, da smo na koncu lahko izdelali optimalnejše vezje z veliko manj priključki in manjšo površino.

Velikost končnega vezja je bila določena kot velikost mikrokrmilniške plošče Arduina.

2.3.7 Programiranje mikrokrmilnika

Arduino plošča je zelo enostavna za programiranje. Komunikacija in programiranje mikrokrmilnika potekata preko USB vodila, na tiskanem vezju pa je pretvornik iz USB na serijski vmesnik. Preko tega vmesnika je možno tako programiranje kot komunikacija med delovanjem programa. Program lahko v grobem razdelimo na tri dele:

– inicializacija in konfiguracija, – branje in obdelava podatkov,

– branje serijskega vmesnika za komande.

Konstrukcija merilnega sistema 69

V prvem delu programa se postavijo začetne (privzete) vrednosti konfiguracije parametrov, kot je napetostna referenca, vrednost referenčnega upora, način delovanja in hitrost pretvornika … Naredi se tudi inicializacija serijskega vmesnika in AD-pretvornika.

V drugem delu programa se v neskončni zanki najprej berejo vrednosti iz AD-pretvornika. Za izračun prevodnosti se bereta dve vrednosti: napetost na referenčnem uporu in napetost na koži. Prevodnost se nato izračuna po preprosti enačbi in zapiše na serijski vmesnik. Enačba za izračun prevodnosti je naslednja:

𝐺[μ𝑆] =𝑎𝑑𝑐23

𝑎𝑑𝑐12∙1000000 𝑅𝑅𝐸𝐹,𝐾 Enačba 28: Izračun prevodnosti

V enačbi G predstavlja prevodnost kože v μS, adc12 digitalno kodo AD-pretvornika, ki predstavlja napetost na koži, adc23 digitalno kodo AD-pretvornika, ki predstavlja napetost na referenčnem uporu, RREF,K pa referenčno upornost v Ω.

Pretvorba digitalnih kod v napetosti ni potrebna, ker se referenčna napetost okrajša iz enačbe, zato je lahko enačba poenostavljena, točna vrednost referenčne napetosti pa ni tako pomembna in se lahko tudi spreminja (v določenih mejah) ter s tem ne vpliva na rezultate meritve. Na mikrokrmilniku ni dodane nobene zaščite pred prepovedanimi vrednostmi, zato lahko v določenih primerih (okoli ničle) vrne tudi negativno vrednost prevodnosti, ki fizikalno ni smiselna. Za pretvorbo prevodnosti se prebere in izračuna še temperatura, če je v konfiguraciji izbrano branje temperature.

Za izračun temperature se uporablja samo en vhod AD-pretvornika. Enačba za izračun je zaradi karakteristike NTC-termistorja kompleksnejša od izračuna prevodnosti. Najprej se izračuna upornost NTC upora po enačbi:

𝑅𝑁𝑇𝐶 = 𝑎𝑑𝑐

32767 − 𝑎𝑑𝑐∙ 𝑅𝑅𝐸𝐹,𝑁𝑇𝐶 Enačba 29: Izračun upornosti NTC upora

Adc je digitalna koda, ki predstavlja napetost na NTC uporu, RREF,NTC pa referenčni upor. Tudi za izračun upornosti ni potrebno računati z napetostmi, saj se ista referenčna napetost uporablja za referenco AD-pretvornika in NTC upora. Vezje je bilo namerno zasnovano na tak način, da referenčne napetosti ni potrebno natančno poznati. Tako je edina spremenljivka referenčni upor. AD-pretvornik meri napetosti od -VREF do +VREF, ki jih predstavi kot digitalne kode od -32768 do 32767. Tako

70 Praktični del

številka 32767 v enačbi predstavlja +VREF. Ko imamo izračunano upornost NTC upora, lahko izračunamo temperaturo po enačbi:

𝑇 = 1

Enačba 30: Izračun temperature NTC upora

T predstavlja temperaturo termistorja, T0,NTC referenčno temperaturo termistorja v °C, B konstanto termistorja, RNTC upornost termistorja, R0,NTC pa upornost termistorja pri referenčni temperaturi. Za izračun enačbe morajo biti temperature v kelvinih, na koncu pa se rezultat pretvori nazaj v °C tako, da se odšteje 273,15 °C. Temperatura se nato zapiše na serijski vmesnik.

Zadnji del kode je branje serijskega vmesnika za komande. Ta del kode je namenjen kalibraciji in konfiguraciji brez reprogramiranja. Nastavljati se da naslednje parametre:

Tabela 6: Komande za nastavljanje parametrov

Ime parametra koda Območje vrednosti

Referenčna napetost vref___ Realna števila

Referenčni upor za prevodnost rrefk__ Realna števila Referenčni upor za merjenje temperature rrefntc Realna števila

Parameter B za NTC upor bntc___ Realna števila

Upornost NTC upora pri referenčni temperaturi r0ntc__ Realna števila Referenčna temperatura NTC upora t0ntc__ Realna števila Način delovanja AD-pretvornika opmode_ 0, 1, 2

Hitrost vzorčenja AD-pretvornika datarat 0, 1, 2, 3, 4, 5, 6

Vklop/izklop FIR-filtra fir____ 0, 1, 2, 3

Vklop/izklop branja temperature tempsen 0, 1

Identifikacija miške idtfy__ Arduino pošlje ime

miške na serijski vmesnik

Ukaz, ki ga pošljemo mikrokrmilniku, je sestavljen iz kode in vrednosti in je oblike: »koda;vrednost«. Koda ima fiksno število znakov zaradi lažjega branja s strani mikrokrmilnika, vrednost pa ima lahko poljubno število znakov.

Konstrukcija merilnega sistema 71

Za komunikacijo z AD-pretvornikom smo našli knjižnico [13], ki smo jo znatno predelali, da lahko AD pretvorba poteka čim hitreje oziroma nima nepotrebnih zakasnitev. Komunikacija poteka tako, da se najprej določi način delovanja, vir referenčne napetosti (interni ali zunanji), hitrost vzorčenja in vklop/izklop FIR-filtra.

Način pretvorbe je nastavljen na »Single shot« oziroma enkratno proženje, kar pomeni, da AD-pretvornik ob vsaki spremembi registra prebere eno vrednost in jo posreduje mikrokrmilniku. Tako se ob vsakem branju zapiše register, ki definira ojačenje PGA-ojačevalnika, vklop ali izklop PGA-ojačevalnika ter multiplekser, s katerim izberemo, na katerem vhodu merimo napetost.

Knjižnica za komunikacijo z AD-pretvornikom vsebuje veliko funkcij.

Inicializacija se začne s funkcijo begin. Ta funkcija definira CS (chip select – izbira čipa) in DRDY (data ready – podatki pripravljeni) pina. CS pin je izhodni, DRDY pa vhodni pin. Definira se tudi način delovanja SPI vmesnika. Načini delovanja so štirje, definirani pa so z delovanjem ure (CLK). Imamo dva parametra, ki definirata način delovanja ure, in sicer CPOL (clock polarity – polariteta ure) in CPHA (clock phase – faza ure). Polariteta spreminja začetno stanje CLK pina, in sicer CPOL = 0 pomeni, da se CLK signal začne z 0 in nadaljuje z 1, CPOL = 1 pa pomeni, da se začne z 1 in nadaljuje z 0. CPHA pin definira, ob kateri fronti se berejo podatki, in sicer CPHA = 0 pomeni, da se podatki berejo na prvi fronti, CPHA = 1 pa pomeni, da se podatki berejo na drugi fronti. V primeru CPOL = 0 je prva fronta pozitivna (iz 0 na 1), v primeru CPOL = 1 pa je prva fronta negativna (iz 1 na 0). V primeru tega AD-pretvornika se uporablja način številka 1, ki ga definira CPOL = 0 in CPHA = 1.

Tabela 7: Načini delovanja SPI

Način delovanja

Knjižnica ima definiranih veliko funkcij, ki pa večinoma samo nastavljajo registre. Tem ne bomo namenili posebne pozornosti, bomo pa zato opisali način branja vrednosti iz AD-pretvornika.

Zaradi pohitritve komunikacije smo v knjižnici dodali funkcijo, ki namesto zapisa vsakega parametra v register posebej najprej sestavi vse potrebne parametre v spremenljivki in nato vse hkrati zapiše v register. Pred zapisom najprej postavimo CS

72 Praktični del

pin na 0 (ko prenos ne poteka, je 1). Zapis v registre poteka tako, da pošljemo preko SPI vmesnika najprej naslov registra, nato pa vrednost. Takoj ko se nastavi nova vrednost registra, s katerim izbiramo, katere vhode AD-pretvornika želimo brati, in ojačenje PGA-ojačevalnika pošljemo še »Start/Sync« ukaz, kot ga imenuje dokumentacija. Ta ukaz sproži enkratno AD pretvorbo podatkov. Ko je AD pretvorba zaključena, se DRDY pin postavi nazaj na 0 in takrat lahko preberemo podatke iz AD-pretvornika v obliki 2 bajtov (2 × 8 bit). Podatke nato pretvorimo v 16-bitni integer.

Na koncu prenosa postavimo CS pin nazaj na 1.

2.4 Računalniški programski vmesnik

Zaradi lažjega spremljanja meritev v živo in shranjevanja podatkov smo zasnovali grafični programski vmesnik za računalnik, ki komunicira z mikrokrmilnikom. Osnovna funkcionalnost vmesnika je torej prikaz trenutnih vrednosti prevodnosti in temperature ter shranjevanje v datoteke za obdelavo podatkov. Program je napisan v programskem jeziku C#.

2.4.1 Samodejno zaznavanje miške

Ko mikrokrmilnik priključimo na računalnik, se mu avtomatsko dodeli COM port. Tega ni mogoče definirati vnaprej in je odvisen od računalnika, na katerega priključimo merilni sistem, oziroma koliko COM portov ima že dodeljenih. Iskanje pravega COM porta, ko mikrokrmilnik priključimo na računalnik, je nadležno in zamudno opravilo, zato program sam ugotovi, na katerem COM portu je priključen mikrokrmilnik. To naredi tako, da najprej določi listo vseh aktivnih COM portov, nato pa po vrsti vzpostavlja komunikacijo z njimi ter pošilja komando za identifikacijo (komanda »idtfy__«). Prvi mikrokrmilnik, ki se odzove na komando z imenom miške, ki mora vsebovati znak »#«, je izbran za komunikacijo. Če imamo na istem računalniku priključena dva mikrokrmilnika (dve miški), bo program vedno izbral tisto, ki je na COM portu z nižjo številko. Uporaba dveh mišk naenkrat z istim računalnikom je kljub temu mogoča, saj po povezavi z enim mikrokrmilnikom ponovna povezava s tem istim ni več mogoča, zato se bo v drugi instanci programa ta povezal z drugim mikrokrmilnikom.

Ko je miška uspešno najdena in povezana, se v grafičnem vmesniku izpiše tudi njeno ime, na miško pa se namesti konfiguracija, ki je definirana v konfiguracijski datoteki. Če ni na voljo noben mikrokrmilnik, se program ne zažene, dobimo opozorilo, da ni najdena nobena miška.

Računalniški programski vmesnik 73

Slika 28: Opozorilo v primeru, da na računalnik ni priključen noben mikrokrmilnik 2.4.2 Glavno programsko okno

Ko se miška uspešno poveže s programom, se odpre glavno programsko okno.

Na tem oknu imamo izpisano ime miške, vrednosti meritev ter kontrolne gumbe.

Slika 29: Glavno programsko okno 1. Prevodnost kože

2. Upornost kože 3. Temperatura kože 4. Gumb za prikaz grafa 5. Prikaz imena miške 6. Gumb za prikaz nastavitev

7. Gumb za shranjevanje vseh meritev od začetka programa do trenutka klika 8. Gumb za začetek in konec snemanja

9. Ime datoteke za shranjevanje

Meritve na prikazovalnikih 1, 2 in 3 se posodabljajo v živo z minimalnim zamikom. Meritve se prikazujejo in tudi shranjujejo od zagona programa do zaključka.

Z gumbom »Shrani vse« lahko v kateremkoli trenutku shranimo podatke za celotno delovanje programa od zagona do trenutka klika. Poleg imena datoteke, definiranega

74 Praktični del

v polju 9, se na začetku imena izpiše še datum shranjevanja oblike »yyyy.MM.dd_HH-mm-ss«, na koncu pa »_ALL«.

Gumb začetek snemanja ima nekoliko drugačno funkcijo. Ta si ob kliku shrani čas začetka snemanja, nato pa se gumb spremeni v rdeč gumb za konec snemanja:

Slika 30: Gumb za konec snemanja

Ob kliku na ta gumb se snemanje zaključi in v ime datoteke, definirane v polju 9, se shranijo meritve od klika na »Začetek snemanja« do klika na »Konec snemanja«.

2.4.3 Nastavitveno programsko okno

S klikom na gumb »Nastavitve« se odpre programsko okno »Nastavitve«.

Slika 31: Nastavitve

V nastavitvah je možno spreminjati parametre, ki vplivajo na delovanje merilnega sistema. Parametri, ki jih je mogoče spreminjati, so:

– napetostna referenca,

– referenčni upor za merjenje prevodnosti, – referenčni upor za merjenje temperature,

Računalniški programski vmesnik 75

– upornost pri referenčni temperaturi, – parameter B NTC upora,

– referenčna temperatura,

– način delovanja AD-pretvornika, – vzorčna frekvenca AD-pretvornika, – vklop/izklop FIR-filtra,

– vklop/izklop merjenja temperature.

Parametri se zapišejo direktno na miško in tako direktno vplivajo na njeno delovanje. Ob prepoznavi miške se samodejno popravijo tako na miški kot tudi v programskem oknu, jih pa lahko tu spreminjamo in nalagamo na miško. Preberejo se iz konfiguracijske datoteke. Pri tem je potrebno biti pozoren, da se parametri iz konfiguracijske datoteke samo berejo in spreminjanje preko programskega okna na konfiguracijsko datoteko ne vpliva. Ta datoteka je namenjena hranjenju privzetih vrednosti, zato jo je potrebno posodobiti ročno. Morebitne spremembe konfiguracije preko programskega okna se torej ob naslednjem zagonu programa ali ponovnem zagonu mikrokrmilnika pobrišejo.

2.4.4 Programsko okno z grafi

Ker si samo s trenutnimi vrednostmi med meritvijo težko predstavljamo, kaj se dogaja s prevodnostjo kože, sem dodal v programski vmesnik možnost prikaza grafa v realnem času. Graf je zelo preprost, na horizontalni osi je čas, ki vedno prikazuje samo zadnji dve minuti signala, na vertikalni osi pa je prevodnost, katere skala se prilagaja samodejno. Graf se pomika iz desne proti levi, na skrajni desni pa se izrisujejo najnovejši podatki.

76 Praktični del

Slika 32: Graf

Graf je namenjen izključno spremljanju vrednosti v času meritve, da približno vidimo, kaj se dogaja, ni pa namenjen obdelavi podatkov ali delu s podatki po koncu meritve. Temu so namenjene datoteke, ki jih izvozimo v csv-formatu.

2.4.5 Konfiguracijska datoteka

Konfiguracijska datoteka je XML-datoteka, namenjena hranjenju privzetih vrednosti, iz katere se ob prepoznanju miške vrednosti tudi preberejo in zapišejo na miško. Datoteka je sestavljena iz istih nastavitev, kot so v nastavitvenem programskem oknu, le da je dodanih še nekaj dodatnih nastavitev. Prva je »IsTest«, ki je namenjena zgolj preizkušanju programa in odpravljanju težav. Druga je ime miške, s pomočjo katerega sistem prepozna miško in jo tudi poveže z nastavitvami. Ime miške mora biti unikatno. Tretja dodatna nastavitev je upornost elektrod »R_Elektrod«, ki je potrebna za izboljšanje rezultatov meritev pri grafitni miški. Ta nastavitev se ne pošilja direktno na miško, ampak se upošteva kar znotraj programskega vmesnika.

Računalniški programski vmesnik 77

Slika 33: Konfiguracijska datoteka 2.4.6 Izvoz podatkov v datoteko

Kot že prej omenjeno, se meritve izvažajo v obliki datotek. Gre za CSV-datoteke, kjer so dodatki ločeni s podpičji. CSV-datoteka se generira na tri načine: ob kliku na gumb »Shrani vse«, ob kliku na gumb »Začetek snemanja« ter nato »Konec snemanja«, zadnjič pa se še avtomatsko, in sicer ob izhodu iz programa. Takrat se shranijo vsi podatki od zagona programa do zaustavitve. Ta funkcija je dodana kot varnostna funkcija, da ob morebitnem nenamernem zapiranju programa ne izgubimo narejenih meritev.

Datoteka vsebuje 5 stolpcev: