I. Problema
Kad ir kaip būtų keista, bet savo paties (t.y. mikrovaldiklio) maitinimo įtampos matavimo funkcija nėra tiesiogiai realizuota mikrovaldikliuose ir paprastai tiesiog negalime užklausti, kiek gi maitinanti baterija dar tiekia įtampos. Laimei turime integruotus analoginius keitiklius ir jais galime pamatuoti bet kokią įtampą, kuri yra tarp 0V ir mikrovaldiklio veikimo (VCC). Jeigu ADC matuojama įtampa didesnė nei VCC, tai galime pasidaryti įtampos daliklį (žr. paveikslą žemiau), sumažinti įtampą iki saugaus lygio ir tada ją išmatuoti.
Tipinis ADC panaudojimas įtampai matuoti su įtampos dalikliu |
Įtampos matavimas naudojant įtampos daliklį bei NPN tranzistorių |
II. Bandgap
Bandgap naudojimą puikiai aprašė Jeelabs čia. Per Arduino IDE ši funkcija nėra pasiekiama, tad norint ja naudotis, teks tiesiogiai dirbti su registrais. Bet šiuo atveju tai nėra labai sunku. Bandgap yra atraminis 1.1V šaltinis netiesiogiai susietas su VCC. Esminė savybė, jog bandgap šaltinio įtampą galime matuoti atsižvelgiant į VCC įtampą, t.y. jų santykį. Jeigu VCC įtampa krenta, tai bandgap atraminė įtampa nekrenta, išlieka 1.1V, tačiau santykis 1.1V/VCC didėja. Atmega mikrovaldikliui galime pasakyti, jog norime išmatuoti bandgap šaltinio įtampą ribose tarp 0V ir VCC (kas atitiktų 0 ir 1023 skaitmeninį ADC diapazoną, tipiniame 10-bitų Atmega mikrovaldiklyje). Tai galime padaryti prijungus šį šaltinį prie ADC, t.y. keliais registrų reikšmių pakeitimais. Išmatavę bandgap įtampą Xv ir gavę jos skaitinę reikšmę Xd galime nuspręsti, kokia baterijos-šaltinio įtampa VCC. Pavyzdžiui turint pilną 5V bateriją, kai reikšmė Xv = 1.1V, tai VCC = 5V. Taigi Xv / VCC * 1023 = Xd. Mus domina VCC reikšmė, kuri nuolat mažėja baterijai išsikraunant ir laikui bėgant. Ji yra lygi: VCC = Xv * 1023 / Xd arba VCC = 1.1 *1023 / Xd, kadangi visada Xv=1.1V. Taigi, visiškai supaprastinus ir padauginus iš 1000 gausime (milivoltais): VCC = 1100 *1023 / Xd.
Rezultatai milivoltais Arduino IDE lange |
Reikia priminti, jog bandgap atraminis šaltinis nėra labai tikslus, bet to pakanka pasiekti pagrindinį tikslą - išmatuoti maitinimo įtampą. O jeigu dar priedo galime atsisakyti aibės komponentų - tai tiesiog puiku! Tikiuosi nuo šiol žinosite, išbandysite ir taikysite šį metodą savo praktikoje. Sėkmės!
Komentarų nėra:
Rašyti komentarą