Avtor: Brian Millier
V nedavnem članku v reviji Svet Elektronike sem opisal nekaj Mikroe Click plošč, s katerimi sem sestavil več projektov. V tem članku bom opisal monitor enosmerne moči, ki prav tako temelji na Click modulu: ploščo MIKROE-3150 Power Meter 2.
Plošča MIKKROE-3150 vsebuje 24-bitni dvokanalni ADC podjetja Microchip in je primerna za merjenje enosmernih napetosti do približno 24 voltov in tokov do desetine mikroamperov. Zato je dober kandidat za merjenje porabe energije naprav interneta stvari z nizko porabo energije in/ali baterijskim napajanjem. Za izdelavo takšnega merilnika porabe je treba tej Click ploščici dodati le MCU, zaslon, nekaj stikal in po želji vtičnico za uSD kartico. Podrobneje si oglejmo Microchipov MCP3910, ki je srce projekta.
MCP3910 podjetja Microchip
MCP3910 je ADC podjetja Microchip in je namenjen uporabi v merilnikih omrežne moči. Gre za dvokanalni, 24-bitni delta-sigma ADC z namenskim PGA in ADC za vsak kanal. Ko sem začel delati s ploščo MIKROE-3150 Click, ki uporablja to napravo, sem odkril, da Microchip izdeluje tudi MCP3911. Površno se zdi, da je MCP3911 po funkcionalnosti in specifikacijah skoraj enak MCP3910. Vendar sem pri primerjavi podatkovnih listov ugotovil, da se naslovi registrov in lokacije bitov med obema napravama precej razlikujejo. To bom podrobneje opisal pozneje.
Ta vsebina je samo za naročnike
MCP3910/3911 je posebej namenjen za uporabo v merilnikih omrežne moči, zato lahko MCP3910 meri izmenične napetosti in tokove. To je zahtevna raba, saj je natančnost ključnega pomena – ob predpostavki, da vam ni vseeno, kakšen je vaš mesečni račun za elektriko! Za pravilno izvedbo, tj. za izračun faktorja moči, sta potrebna dva diskretna PGA in ADC, namesto da bi uporabili samo en ADC z vhodnim multiplekserjem, kot to počnejo priljubljeni ADS1115 in številni drugi ADC. Oba vhoda MCP3910, Channel1 in Channel2, sta diferencialna. Čip vsebuje natančno referenco, vendar lahko alternativno uporablja zunanjo referenco z nastavitvijo bita 7 v registru CONFIG1.
MCP3910/3911 ima tudi veliko višje vzorčevalne hitrosti kot zgoraj omenjeni ADS1115. To je potrebno za natančno merjenje efektivnih vrednosti omrežne napetosti in toka. MCP3910 in MCP3911 imata hitrosti vzorčenja do 125 ksps: njuna ločljivost/natančnost se izboljšuje z nižanjem hitrosti vzorčenja zaradi višjih razmerij prevzorčenja. MCP3910/3911 potrebuje za delovanje zunanji kristal, ki lahko znaša do 20 MHz. Shema MIKROE-3150 prikazuje 20 MHz kristal na tej plošči. Ko se vzorčevalna razmerja, ki sem jih izmeril, niso ujemala z vrednostmi, ki sem jih izračunal iz formule v podatkovnem listu, sem kristal pregledal s povečevalnim steklom in videl, da je v resnici 12 MHz. S tem kristalom bi se največja hitrost vzorčenja zmanjšala na 93,75 ksps. Zaradi visokih frekvenc vzorčenja, pri katerih lahko deluje ta naprava, za komunikacijo z MCU namesto vodila I2C uporablja vrata SPI.
PGA v MCP3910 imajo ojačenje med 1 in 32, v korakih po 2. Vrednosti polne skale za različne nastavitve ojačenja PGA so ±0,6 V pri ojačenju PGA=1 do ±0,01875 V pri ojačenju PGA=32. Za razliko od drugih ADC, ki sem jih uporabljal v preteklosti (npr. ADS1115 itd.), lahko ta ADC neposredno obdeluje bipolarne signale. To velja tudi v primeru, če se vhodi uporabljajo v enosmerni konfiguraciji (tj. negativni vhod je priključen na GND ADC). Z drugimi besedami, ta ADC lahko meri tudi napetosti, ki so negativne glede na ozemljitveni potencial ADC.
Čeprav je MCP3910 naveden kot 24-bitni ADC, je tako visoka ločljivost na voljo le, če je konfiguriran za razmerja prevzorčenja med 256 in 4096. V tem projektu sem za nizkotokovno območje uporabil razmerje nadvzorčenja (OSR) 4096, da bi dosegel najboljšo ločljivost pri nizkem toku. Vendar je posledica tega nizka frekvenca vzorčenja 91,5 Hz. Za območje visokih tokov ni potrebna tako visoka ločljivost, saj so napetosti na šent uporu 0,1 Ω veliko višje. Za to območje uporabljam OSR 64, kar ima za posledico nižjo 20-bitno ločljivost. Vendar pa to pri visokem območju pomeni hitrejše vzorčenje: 5859 Hz.
MCP3910 ne vsebuje nobenega notranjega vezja, ki bi omogočalo izvajanje samokalibracije. Domnevam, da bi bilo treba pri njegovi ciljni uporabi kot merilnika omrežne moči umeriti celotno vezje, vključno z uporovnim delilnikom, potrebnim za znižanje omrežne napetosti na ±0,6 V, in tokovnim šent uporom/ tuljavo. Zaradi tega bi bil postopek umerjanja samo notranjih komponent ADC neustrezen. Naprava vsebuje dva 24-bitna registra – za kalibracijo odmika in ojačenja. Te vrednosti mora zagotoviti gostiteljski MCU, potem ko je bila izvedena rutina za umerjanje celotnega vezja. Območje kalibracije ojačenja je od 0 do 1,99999999x, množenje, ki je vključeno v kalibracijo ojačenja, pa MCP3910 izvede interno med zbiranjem podatkov. Vrednost iz 24-bitnega registra Offset se interno doda 24-bitni izhodni vrednosti ADC. Ko sem pisal knjižnico gonilnika za MCP3910, sem preizkusil delovanje obeh registrov za kalibracijo Offset in Gain.
MCP3910 je namenjen predvsem merjenju izmenične moči in mora na splošno upoštevati izračune faktorja moči, ki so s tem povezani. Ena od funkcij MCP3910, ki pomaga pri tem, je kompenzacija faznega zamika. Ta funkcija omogoča, da naprava kompenzira morebitna fazna odstopanja med merjenjem napetosti (kanal1) in merjenjem toka (kanal2) zaradi filtriranja itd. Poleg tega MCP3910 vsebuje 2 ADC, ki svoje vzorce zajemata hkrati. Ta kompenzacija fazne zakasnitve ima časovno ločljivost 1 us, ki bi bila natančnejša od vseh izračunov, ki bi jih lahko opravil gostiteljski MCU samo z uporabo podatkov o vzorcih.
Čeprav ga nisem uporabljal, MCP3910 poleg standardnih SPI vrat omogoča tudi alternativni digitalni nadzorni/podatkovni izhodni način. To je dvopasovno zaporedno vodilo s samo signaloma Clock in Data. Pri ciljni uporabi kot merilnik omrežne moči je verjetno, da bodo MCP3910 in pripadajoče vezje delilnika/šent upora priključeni neposredno na omrežne linije in bodo morali biti galvansko ločeni od gostiteljskega MCU. To 2-žično zaporedno vodilo je mogoče izvesti z uporabo samo dveh hitrih galvanskih izolatorjev. V tem načinu se naprava ne konfigurira z nastavljanjem 24-bitnih konfiguracijskih registrov MCP3910, temveč z logičnimi nivoji na petih priključkih naprave (nekateri od njih opravljajo druge funkcije, ko naprava deluje v načinu SPI). 24-bitni vzorčni podatki se prek tega 2-žičnega zaporednega priključka prenašajo v posebnem formatu okvirja.
Poleg zgoraj opisanega 2-žičnega načina lahko ADC MCP3910 izpisujeta svoje neobdelane izhode modulatorja ADC prek MDAT0 in MDAT1 priključkov (ki se ne nahajata na MIKROE-3150). Gostiteljski MCU bi moral opraviti decimiranje/filtriranje, ki se običajno izvaja v samem MCP3910. MCP3910 vsebuje bloka filtrov za decimiranje SINC3 in SINC1, ki sta konfigurirana glede na izbrano razmerje prevzorčenja.
Obstaja nekaj varnostnih funkcij MCP3910, ki jih nisem preučil. Obstaja 16-bitno preverjanje ciklične redundance, ki se lahko po želji izvede in vstavi na koncu zaporedja branja podatkov. Obstaja tudi varnostni register, imenovan LOCKCRC (0x1F). Ob vklopu energije biti 16-23 tega registra vsebujejo „geslo“ 0xA5 (običajni izmenični bitni vzorec, ki se pogosto uporablja v take namene). Če v teh 8 bitov zapišete kakršno koli drugo vrednost, se vsi nadaljnji zapisi v katerega koli od drugih registrov blokirajo. To onemogoča nenamerne spremembe teh registrov, na primer zaradi težav pri izvajanju programa gostiteljskega MCU-ja. V programski kodi, povezani s tem projektom, sem zgodaj prebral ta register LOCKCRC, da bi ugotovil, ali je MCP3910 prisoten/deluje ali ne, s preverjanjem prisotnosti te vrednosti v podatkovnem listu.
Vezje MIKROE-3150 Click
Oglejmo si vezje plošče MIKROE-3150 Click. Na sliki 1 je fotografija te plošče. Liniji SPI in Data Ready MCP3910 sta priključeni neposredno na priključke na standardnem podnožju plošče Click. Na tej plošči ni LDO regulatorja, zato jo je treba napajati s 3,3-voltnim virom – tudi njene logične ravni so na ravni 3,3 V. Vsebuje 12 MHz kristal – in ne 20 MHz kristala, ki je prikazan na shematskem diagramu plošče, ki ga je dobavil Mikroe.
Slika 2 prikazuje analogni del plošče MIKROE-3150 Click. Vhod Channel1 na plošči MCP3910 je konfiguriran za merjenje napetosti do 24 VDC in je priključen na TB1, 2-pinski priključek na tiskanem vezju. Napetostni delilnik, sestavljen iz 1k in 39k upora, deli vhodno napetost v razmerju 40:1. Privzeto je JP1 nastavljen tako, da MCP3910 lahko meri lastno napetost Vcc. To je treba spremeniti, da bo lahko meril napetost, ki prihaja na TB1.
Vsebuje tudi TB2, blok z dvema priključkoma, na katerega priključite breme za to napajanje. Tokovni šent, ki se uporablja za merjenje toka obremenitve, je upor SMD 0,03Ω. Ta je nameščen na „nizki strani“ vezja. Napetost na tem šentu se priključi na kanal2. Upoštevajte, da je pozitivna stran šenta priključena na negativni vhod kanala 2. Zato morajo biti vsi tokovni odčitki iz MCP3910 za pravilne podatke signalno invertirani. Upor SMD 0,03Ω sem zamenjal z uporom za površinsko montažo 0,1 Ω 1/2W, da bi omogočil boljšo ločljivost majhnih tokov, ki jih pogosto najdemo v IoT napravah, ki se napajajo iz baterije.
Dejstvo, da se na Click plošči uporablja „low-side“ tokovni šent, zahteva nekaj dodatne razprave. Pri normalnem delovanju Click plošča (in ostala vezja tega projekta) ni vezana na nobeno posebno referenčno ozemljitev. Zato dejstvo, da skupna (ozemljitvena) sponka obremenitve ni na istem potencialu kot skupna (ozemljitvena) sponka vira napajanja, ni pomembno. Razlika v potencialu je enaka napetosti, ki pade na tokovni upor 0,1 Ω.
Med razvojem/testiranjem pa je projekt napajal računalnik prek USB na razvojni plošči DFR0654 ESP32, ki je del projekta. Če bi torej poskušali izmeriti porabo toka ciljne plošče, ki je bila tudi sama priključena na računalnik prek USB, meritev toka ne bi bila pravilna. To je zato, ker bi bil v tem primeru tokovni šent 0,1 Ω kratek stik. Zato je bilo med razvojem/preizkušanjem mogoče meriti samo obremenitve, ki niso bile povezane z računalnikom. Kot je omenjeno zgoraj, ta omejitev izgine, ko sam projekt ni več napajan/priključen na računalnik.
Oba kanala MCP3910 imata enopolni nizkoprepustni RC filter z mejno frekvenco 62,5 kHz. V osnovi to pomeni, da ADC kanala 2 v MCP3910 ne bo natančno „zajel“ največjega toka MCU ESP32 med zelo ozkimi tokovnimi „konicami“ med prenosi Wi-Fi/Bluetooth. Namesto tega bo ta kratek „šop“ s tem RD filtrom integriran v širši impulz z nižjo amplitudo vrha. Vendar pa bo zajeta celotna poraba toka (v MaS) med to „konico“. Največja poraba toka MCU-jev, ki podpirajo RF, kot je ESP32, je dobro dokumentirana v njihovih podatkovnih listih. Za merjenje tako kratkih tokovnih impulzov je res potreben osciloskop ali nekaj, kot je Joulescope JS-220 Power Analyser.
Električna shema projekta
Na sliki 3 je prikazana shema projekta, pri čemer niso upoštevane komponente na plošči Click in plošči MCU DF Robot DFR0654. Morda se sprašujete o uporabi plošče DFR0654, saj je njen MCU ESP32 opremljen s tehnologijo Wi-Fi/Bluetooth, projekt pa ne uporablja radijskih komunikacij. Prvotno sem mislil, da bi uporabniški vmesnik projekta izvedel z grafičnim uporabniškim vmesnikom, ki teče na mobilnem telefonu z operacijskim sistemom Android, povezanem prek povezave Bluetooth. V preteklosti sem že uporabljal aplikacijo GUI-O za Android, ki zelo dobro opravlja takšne naloge. Vendar sem se pri razvoju projekta odločil, da bom za uporabniški vmesnik uporabil poceni LCD 20×4 zaslon in nekaj stikal. Dodal sem vtičnico za uSD kartico, ki omogoča beleženje meritev napetosti/toka v določenem časovnem obdobju na kartico uSD. Ohranil sem poceni ploščo DFR0654 MCU, ker je MCU ESP32 hiter, ima veliko RAM pomnilnika in ga dobro poznam pri programiranju v Arduino IDE.
SPI priključek MIKROE-3150 je povezan z VSPI priključkom ESP32. To je privzeti SPI priključek, ki ga določa podporni paket plošče Arduino ESP32. To so tudi SPI vrata, ki jih plošča DFR0654 označuje s standardnimi oznakami priključkov SCK, MOSI in MISO. MCP3910 Arduino knjižnica, ki sem jo napisal, je zasnovana tako, da uporablja ta privzeta SPI vrata.
Ko sem se odločil dodati uSD kartico za beleženje podatkov, sem jo sprva poskušal priključiti tudi na VSPI vrata. To je mesto, kjer knjižnica Arduino za SD kartice pričakuje, da bo. Teoretično bi morali imeti možnost, da na enem SPI portu zaženete več naprav, če za vsako napravo uporabite ločene linije -CS. Tudi dejstvo, da lahko vsaka naprava uporablja različne SPI protokole (najprej MSB/LSB, načini ure SPI itd.), je mogoče obravnavati z uporabo najnovejših Arduino SPI gonilnikov. Pri branju in pisanju se uporablja metoda „transakcije“.
Vendar mi ni uspelo, da bi delovala tako Click plošča kot uSD kartica, ko sta si delila ista VSPI vrata. Takšne težave z nezdružljivostjo je težko rešiti, razen če porabite veliko časa, uporabite logični analizator ali zelo dobro poznate obe knjižnici gonilnikov. Medtem ko sem knjižnico gonilnika MCP3910 napisal sam, nisem bil dobro seznanjen s knjižnico SD kartice, ki je del paketa Arduino ESP32 Board Support Package. Na koncu sem uSD kartico priključil na drugi SPI (HSPI) priključek ESP32 konzole. Ta ureditev je delovala dobro, ko sem ugotovil, kako ponovno konfigurirati knjižnico SD kartic za HSPI vrata z uporabo privzetih priključkov HSPI vrat: MOSI (13) MISO (12) SCLK (14) . To se naredi z naslednjima dvema vrsticama kode:
SPIClass SPI2(HSPI);
// to postavite v segment definicije
skice
SD.begin(SD_CS_PIN,SPI2)
// postavljeno v rutino SaveData,
kjer se uporablja SD kartica.
Znakovni zaslon LCD 20×4, ki sem ga uporabil, je na voljo na Amazonu, Alibabi itd. Pogosto je opremljen z I2C „nahrbtnikom“, ki ga pretvori iz 4-bitnega vzporednega vmesnika v I2C vmesnik. Uporabil sem ta I2C „nahrbtnik“, saj ga je veliko lažje priključiti, za I2C različico pa so na voljo Arduino knjižnice.
Upoštevajte, da zaslon in I2C „nahrbtnik“ potrebujeta 5 V napajanje. Tudi signalne I2C linije so privzeto na nivoju 5V. Takšni 5V nivoji niso združljivi z logičnimi 3,3V nivoji, ki jih potrebujejo linije GPIO ESP32. Da bi to popravili, je treba odstraniti dva 4,7k pullup upora na I2C „nahrbtniku“: R8 in R9 (na moji plošči). Slika 4 prikazuje lokacijo teh dveh uporov. Te I2C pullup upore sem moral nadomestiti z upori, ki vodijo na 3,3 V VDD ESP32, označenimi kot R1, R2 na sliki 3.
Štiri uporabniška stikala so s 3,3k upori potegnjena na Vcc. Pri konfiguriranju GPIO, povezanih s temi štirimi stikali, ne morete uporabiti načina „INPUT_PULLUP“. Razlog za to je, da sem za stikala uporabil GPIO A0-A4. To so analogno/digitalno priključki, ki ne vsebujejo možnosti uporabe notranjih pullup uporov, ki jih vsebuje ESP32.
Dobra lastnost DF Robot DFR0654 ESP32 razvojne plošče je, da vsebuje vtičnico in LiPo polnilnik. Mislil sem, da za ta projekt ne bom mogel uporabiti LiPo baterije, saj LCD 20×4 zaslon zahteva 5 V napajanje, LiPo baterija pa ima le 3,7-4,1 volta. Vendar ko sem poskusil s popolnoma napolnjeno LiPo baterijo, je LCD deloval dobro, ko sem ponovno nastavil potenciometer kontrasta na I2C „nahrbtniku“. Vendar nisem prepričan, da bi to delovalo, če bi napetost LiPo celice padla na precej nižjo raven.
Napajanje projekta poteka prek USB-C vhoda naprave DFR0654 z uporabo preprostega 5V adapterja (lahko je tudi polnilec za telefon). Slika 5 prikazuje celotno vezje pred namestitvijo v ohišje, slika 6 pa prikazuje zaprto enoto.
Program v ESP32
Programsko opremo sem napisal z uporabo Arduino IDE različice 2.3.4. Za uporabo MCU ESP32 je treba naložiti podporni paket za ploščo ESP32 podjetja Espressif. Trenutno je najnovejša različica tega paketa 3.11. Vendar sem za ta projekt uporabil starejšo različico 2.0.17. Pri novejšem paketu 3.x.x obstajajo težave z združljivostjo, ki vplivajo na nekatere moje nedavne projekte (ki so bili prvotno napisani za različico 2.0.17). Zato še naprej uporabljam različico 2.0.17, razen kadar uporabljam novejše naprave ESP32, kot je ESP32C6, ki potrebujejo različico v3.x.x.
Po več kot desetih letih uporabe Arduino IDE sem precej presenečen, če za projekt izberem določen periferni čip (ali zaslon itd.) in za to napravo ne najdem Arduino knjižnice gonilnikov. To lahko pripišemo velikemu številu razvijalcev, ki uporabljajo ta IDE. Vendar nisem mogel najti knjižnice gonilnikov za MCP3910: še najbližja je bila knjižnica za MCP3911. Čeprav se zdi, da sta napravi po električni funkcionalnosti skoraj identični, se lokacije notranjih registrov in nekatera bitna polja razlikujejo. Zato sem za to napravo napisal lastno knjižnico gonilnikov na podlagi obstoječe knjižnice MCP3911, ki jo je napisal Ruben Stadler. Svojo knjižnico sem dal na voljo na spletnem mestu Svet Elektronike skupaj z izvorno kodo skice projekta Arduino.
Projekt uporablja dve različni tokovni območji. Nizko tokovno območje je namenjeno merjenju zelo nizkih tokov, ki jih MCU običajno odvajajo, ko so v neki obliki načina mirovanja. Za to območje sem nastavil največje ojačenje PGA na 32. S tem ojačenjem PGA je polna napetost ADC ±18,75 milivolta. Z 0,1Ω tokovnega šent upora je tok v polni skali ±187,5 miliampera. S 24-bitno ločljivostjo ADC lahko meri tokove v območju 10 uA.
Pri visokem tokovnem območju se uporablja ojačenje PGA 1, kar pomeni, da je območje polne skale ±0,6 volta. To ustreza polnemu toku 6 amperov, vendar v praksi zaradi moči 0,1Ω šent upora, ki znaša 0,5 W, ne smemo meriti več kot 4 ampere.
Ugotovil sem, da je ADC/PGA MCP3910 vrnil znatno neničelne odmike pri vhodni napetosti nič voltov in brez toka. Ti so bili odvisni od tega, kakšno ojačenje PGA je bilo uporabljeno. Zato sem v program vključil rutino za kalibracijo ofsetov. Če ob vklopu vklopite stikalo Calibrate, bo program izmeril odmike za vse nastavitve ojačenja PGA in jih shranil v EEPROM ESP32. Sam uporabljam samo ojačenja PGA 1 in 32, vendar sem rutino za umerjanje napisal tako, da meri/hrani odmike za vsa razpoložljiva ojačenja PGA. Med izvajanjem te kalibracije ne smete imeti priključenega vira napajanja ali bremena.
Ugotovil sem, da so podatki ADC/PGA Gain v MCP3910 precej natančni. To sem preveril s primerjavo odčitkov napetosti, ki jih je izmeril MCP3910, z mojim štirimestnim digitalnim multimetrom. V programu sta dve spremenljivki: LRVoltageGainCorrection in HRVoltageGainCorrection. Izmeril sem vrednosti 0,983 za nizko območje in 0,994 za visoko območje. Uporablja ju rutina „calibrateVoltage“, ki ju skalira v 24-bitne vrednosti, ki se nato prenesejo v register MCP3910 Gain correction, odvisno od tega, katero trenutno območje se uporablja. Te vrednosti lahko spremenite za dejanski MCP3910, ki se uporablja v vašem projektu.
Glede na izbrano trenutno območje bo program konfiguriral ADC za določeno taktno frekvenco ADC, razmerje nadvzorčenja (OSR) in ojačenje PGA. Ti so izbrani za optimizacijo delovanja ADC za:
Visoka ločljivost v območju nizkega toka
Višja frekvenca vzorčenja v območju visokega toka
Te nastavitve so prikazane v tabeli 1. Pri tem mislim, da lahko nizko območje zajame tokove mirovanja MCU itd. Ti se ne spreminjajo hitro, zato bosta počasnejša frekvenca vzorčenja in visok OSR omogočila najboljšo ločljivost pri nizkih tokovih. V običajnem načinu delovanja se lahko poraba toka MCU in perifernih naprav hitro spreminja. Zato sem za območje visokih tokov uporabil veliko višjo frekvenco vzorčenja. Na tem območju MCP3910 deluje s hitrostjo 5859 vzorcev/sekundo. Spremljam najvišji tok, zabeležen v določenem meritvenem ciklu, preden povprečim 256 teh vzorcev. V polja RAM shranim le to povprečje 256 vzorcev. To povprečenje je bilo potrebno, ker sem lahko dodelil polja za tok in napetost („dolge“ spremenljivke) z največ 12 000 elementi, preden je prevajalnik sporočil, da ni na voljo dovolj RAM pomnilnika. Na visokem tokovnem območju lahko enota s frekvenco vzorčenja 5859 Hz v kombinaciji s povprečenjem 256 vzorcev zbira vzorce toka/napetosti 12000/(5859/256) ali 524 sekund. Na območju nizkega toka je čas delovanja precej daljši: 140 minut.
Želel sem, da bi lahko na LCD-zaslonu periodično prikazoval podatke o napetosti, toku in MaS. Ker osveževanje tega zaslona zaradi razmeroma počasnega I2C vmesnika traja nekaj časa, je bilo treba ADC odčitke zbirati z uporabo prekinitvene servisne rutine, ki jo pri izbrani frekvenci vzorčenja sproži signal pripravljenosti podatkov (DR) MCP3910. To zagotavlja, da pri zbiranju podatkov ni „lukenj“, do katerih bi prišlo, če bi se rutina za prikazovanje in rutina za zbiranje podatkov izvajali v glavni kodi.
Ko se zbiranje podatkov konča, bodisi da uporabnik ustavi zbiranje ali če so polja RAM polna, lahko uporabnik podatke shrani na USD kartico. Odločil sem se za uporabo besedilne datoteke in uvedel zelo preprost CSV format :
Time (sekunde) , Voltage (volti) ,
Current (miliamperi)
Na koncu tega seznama zapisov dnevnika je prikazan tudi največji izmerjeni tok. Ta vrednost je izmerjena pred povprečenjem, ki se izvede, tj. pred shranjevanjem podatkov v RAM polje. Pri tem najvišjem odčitanem toku je torej za območje nizkega toka tok vzorčen s hitrostjo 91,55 vzorca/s, za območje visokega toka pa s hitrostjo 5859 vzorcev/s.
Odločil sem se, da uSD datoteki določim fiksno ime „data.txt“. Pred naslednjim zbiranjem podatkov boste morali odstraniti uSD kartico in z nje kopirati podatke.
Zaključki
Z delovanjem plošče MIKROE-3150 Click sem bil zadovoljen. Kot veliko sodobnih čipov je tudi MCP3910 v majhnem TSSOP ohišju, ki bi ga sam zelo težko namestil na tiskano vezje. Ko je bila ta Click plošča zasnovana, je bil MCP3910 verjetno edini na voljo – MCP3911 je bil verjetno uveden pozneje. Če bi lahko uporabil že obstoječo knjižnico MCP3911 Arduino gonilnikov, bi prihranil veliko časa za programiranje, vendar sem se med pisanjem knjižnice gonilnikov naučil veliko o delovanju tega ADC.
Tehnični list MCP3910 je dolg 80 strani in zahteva veliko branja, da bi ga pravilno programirali. Kot mnogi programerji sem se razvadil, ker lahko uporabljam številne knjižnice Arduino gonilnikov, ki so na voljo.