Turinys:

ATTiny85 kondensatoriaus matuoklis: 4 žingsniai
ATTiny85 kondensatoriaus matuoklis: 4 žingsniai

Video: ATTiny85 kondensatoriaus matuoklis: 4 žingsniai

Video: ATTiny85 kondensatoriaus matuoklis: 4 žingsniai
Video: FLUX CAPACITOR PCB badge #backtothefuture #attiny85 #arduino 2024, Liepa
Anonim
ATTiny85 kondensatorių matuoklis
ATTiny85 kondensatorių matuoklis
ATTiny85 kondensatorių matuoklis
ATTiny85 kondensatorių matuoklis

Ši instrukcija skirta kondensatoriaus matuokliui, pagrįstam ATTiny85, turinčiam šias funkcijas.

  • Remiantis ATTiny85 (DigiStamp)
  • SSD1306 0,96 "OLED ekranas
  • Dažnio matavimas mažos vertės 1pF - 1uF kondensatoriams, naudojant 555 osciliatorių
  • Didelės vertės 1uF - 50000uF kondensatorių įkrovimo laiko matavimas
  • 2 atskiri prievadai, naudojami metodams, kaip sumažinti nuolatinę talpą
  • Įkrovimo laikui naudojamos dvi srovės vertės, kad būtų sumažintas didelių kondensatorių laikas
  • 555 metodo nulio paleidimo metu, galima pakeisti mygtuku
  • Greitas testas, naudojamas pasirenkant, kuris metodas turėtų būti naudojamas kiekvienam matavimo ciklui.
  • Įkrovimo laiko metodo tikslumą galima pagerinti palaikant OSCVAL laikrodžio dažnio reguliavimą

1 žingsnis: Schema ir teorija

Schema ir teorija
Schema ir teorija

Schemoje parodyta ATTiny, valdanti SSD1306 OLED ekraną per I2C sąsają. Jis maitinamas tiesiogiai iš 300 mAh talpos „LiOn“akumuliatoriaus ir yra įkrovimo taškas, kurį galima naudoti su „LiOn“suderinamu išoriniu įkrovikliu.

Pirmasis matavimo metodas pagrįstas 555 laisvai veikiančio osciliatoriaus dažnio matavimu. Tai bazinis dažnis, kurį nustato rezistoriai ir kondensatorius, kuris turėtų būti didelio tikslumo, nes tai lemia matavimų tikslumą. Aš naudojau 820pF 1% polistireno kondensatorių, kurį turėjau, tačiau galima naudoti ir kitas maždaug 1 nF vertes. Vertė turi būti įvesta į programinę įrangą kartu su bet kokios klaidingos talpos (~ 20pF) įvertinimu. Tai davė apie 16KHz bazinį dažnį. 555 išvestis tiekiama į ATTiny PB2, kuris yra užprogramuotas kaip aparatūros skaitiklis. Išmatavus skaičių maždaug per 1 sekundę, galima nustatyti dažnį. Tai daroma paleidžiant, kad būtų nustatytas bazinis dažnis. Kai lygiagrečiai prie pagrindinio kondensatoriaus pridedamas bandomasis kondensatorius, dažnis sumažėja, o kai jis matuojamas ir lyginamas su pagrindiniu dažniu, galima apskaičiuoti pridėtinės talpos vertę.

Gražus šio metodo bruožas yra tas, kad apskaičiuota vertė priklauso tik nuo bazinio kondensatoriaus tikslumo. Matavimo laikotarpis neturi reikšmės. Skiriamoji geba priklauso nuo dažnio matavimo skiriamosios gebos, kuri yra gana didelė, todėl galima išmatuoti net labai mažą papildomą talpą. Atrodo, kad ribojantis veiksnys yra 555 osciliatoriaus „dažnio triukšmas“, kuris man prilygsta maždaug 0,3 pF.

Metodas gali būti naudojamas tinkamame diapazone. Norėdami pagerinti diapazoną, sinchronizuoju matavimo laikotarpį su gaunamų impulsų kraštais. Tai reiškia, kad net žemo dažnio virpesiai, tokie kaip 12 Hz (su 1uF kondensatoriumi), yra matuojami tiksliai.

Didesniems kondensatoriams grandinė naudojama įkrovos laiko metodu. Šiuo atveju bandomas kondensatorius yra iškraunamas, kad būtų užtikrintas, jog jis prasideda nuo 0, tada įkraunamas per žinomą maitinimo įtampos varžą. ATTiny85 esantis ADC naudojamas kondensatoriaus įtampai stebėti ir matuojamas laikas nuo 0% iki 50% įkrovimo. Tai gali būti naudojama norint apskaičiuoti talpą. Kadangi ADC atskaitos taškas taip pat yra maitinimo įtampa, tai neturi įtakos matavimui. Tačiau absoliutus laiko matas priklauso nuo ATTiny85 laikrodžio dažnio, o jo skirtumai turi įtakos rezultatui. Procedūra gali būti naudojama šio laikrodžio tikslumui pagerinti naudojant ATTiny85 derinimo registrą ir tai aprašyta vėliau.

Norint iškrauti kondensatorių iki 0 V, n-kanalų MOSFET naudojamas kartu su mažos vertės rezistoriumi, kad būtų apribota iškrovimo srovė. Tai reiškia, kad net didelės vertės kondensatoriai gali būti greitai iškraunami.

Kondensatoriui įkrauti naudojamos 2 įkrovimo rezistoriaus vertės. Bazinė vertė suteikia pagrįstą įkrovimo laiką kondensatoriams nuo 1uF iki maždaug 50uF. P kanalo MOSFET naudojamas lygiagrečiai su mažesniu rezistoriumi, kad būtų galima išmatuoti didesnės vertės kondensatorius per pagrįstą intervalą. Pasirinktos vertės suteikia maždaug 1 sekundės matavimo laiką kondensatoriams iki 2200uF, o proporcingai ilgesnėms didesnėms vertėms. Apatinėje vertės pabaigoje matavimo laikotarpis turi būti pakankamai ilgas, kad būtų galima pakankamai tiksliai nustatyti perėjimą per 50% ribą. ADC mėginių ėmimo dažnis yra apie 25uSec, todėl minimalus 22 mSec laikotarpis suteikia pagrįstą tikslumą.

Kadangi „ATTiny“IO yra ribotas (6 kaiščiai), šiuos išteklius reikia paskirstyti atsargiai. Ekrane reikia 2 kaiščių, 1 - laikmačio įėjimui, 1 - ADC, 1 - iškrovos valdymui ir 1 - įkrovimo greičio valdymui. Norėjau paspausti mygtuką, kad bet kuriuo metu būtų galima iš naujo nustatyti nulį. Tai atliekama perjungiant I2C SCL liniją. Kadangi I2C signalai yra nutekėję, nėra jokio elektrinio konflikto, leidžiant mygtukui nuspausti šią liniją žemai. Ekranas nustos veikti, kai mygtukas yra nuspaustas, tačiau tai neturi jokios reikšmės, nes jis atnaujinamas, kai mygtukas atleidžiamas.

2 žingsnis: Statyba

Statyba
Statyba
Statyba
Statyba
Statyba
Statyba

Aš padariau tai į mažą 55 mm x 55 mm 3D spausdintą dėžutę. Skirta laikyti 4 pagrindinius komponentus; „ATTiny85 DigiStamp“plokštė, SSD1306 ekranas, „LiOn“baterija ir nedidelė prototipo plokštė, kurioje yra 55 laikmatis ir įkrovos valdymo elektronika.

Priedas adresu

Reikalingos dalys

  • ATTiny85 DigiStamp plokštė. Aš naudojau versiją su „microUSB“jungtimi, kuri naudojama programinei įrangai įkelti.
  • SSD1306 I2C OLED ekranas
  • 300 mAh LiOn baterija
  • Maža prototipų plokštės juostelė
  • CMOS 555 laikmačio lustas (TLC555)
  • „n-Channel MOSFET AO3400“
  • p-kanalas MOSFET AO3401
  • Rezistoriai 4R7, 470R, 22K, 2x33K
  • Kondensatoriai 4u7, 220u
  • Tikslus kondensatorius 820pF 1%
  • Miniatiūrinis slankiklis
  • 2 x 3 kontaktų įkrovimo prievado ir matavimo prievadų antraštės
  • Mygtukas
  • Korpusas
  • Prijunkite laidą

Reikalingi įrankiai

  • Smulkaus taško lituoklis
  • Pincetai

Pirmiausia sukonstruokite 555 laikmačio grandinę ir įkrovimo komponentus ant prototipo plokštės. Pridėkite skraidančius laidus išoriniams ryšiams. Pritvirtinkite slankiklį ir įkrovimo tašką bei matavimo prievadą prie korpuso. Prijunkite akumuliatorių ir prijunkite pagrindinį maitinimo laidą prie įkrovimo taško, stumkite jungiklį. Prijunkite žemę prie mygtuko. Pritvirtinkite ATTiny85 į vietą ir prijunkite.

Prieš montuodami „ATTiny“plokštę galite atlikti tam tikrus energijos taupymo pakeitimus, kurie šiek tiek sumažins srovę ir pailgins baterijos veikimo laiką.

www.instructables.com/Reducing-Sleep-Curre…

Tai nėra kritiška, nes yra maitinimo jungiklis, kuris išjungia skaitiklį, kai jis nenaudojamas.

3 žingsnis: programinė įranga

Šio kondensatoriaus matuoklio programinę įrangą rasite adresu

github.com/roberttidey/CapacitorMeter

Tai eskizas, pagrįstas „Arduino“. Jai reikalingos bibliotekos ekranui ir I2C, kurias galima rasti adresu

github.com/roberttidey/ssd1306BB

github.com/roberttidey/I2CTinyBB

Jie yra optimizuoti, kad ATTiny užimtų minimalią atmintį. „I2C“biblioteka yra greitas bitų sprogimo metodas, leidžiantis naudoti bet kokius 2 kaiščius. Tai svarbu, nes I2C metodai, naudojantys nuoseklųjį prievadą, naudoja PB2, o tai prieštarauja laikmačio/skaitiklio įvesties, reikalingos 555 dažniui matuoti, naudojimui.

Programinė įranga yra sudaryta iš būsenos mašinos, kuri matuoja būsenų ciklą. ISR palaiko perpildymą iš laikmačio skaitiklio, kad išplėstų 8 bitų aparatinę įrangą. Antrasis ISR palaiko nuolatinio režimo ADC. Tai suteikia greičiausią atsaką į slenkstį peržengiančią įkrovimo grandinę.

Kiekvieno matavimo ciklo pradžioje „getMeasureMode“funkcija nustato, kuris metodas yra tinkamiausias kiekvienam matavimui.

Kai naudojamas 555 metodas, skaičiavimo laikas prasideda tik pasikeitus skaitikliui. Taip pat laikas sustabdomas tik pasibaigus vardiniam matavimo intervalui ir aptikus kraštą. Ši sinchronizacija leidžia tiksliai apskaičiuoti dažnį net ir žemiems dažniams.

Kai programinė įranga paleidžiama, pirmieji 7 matavimai yra „kalibravimo ciklai“, naudojami nustatyti 555 bazinį dažnį be pridėto kondensatoriaus. Paskutinių 4 ciklų vidurkis.

Yra palaikymas OSCAL registro reguliavimui laikrodžio derinimui. Siūlau eskizo viršuje nustatyti OSCCAL_VAL į 0. Tai reiškia, kad gamyklos kalibravimas bus naudojamas tol, kol bus atliktas derinimas.

Būtina koreguoti 555 bazinio kondensatoriaus vertę. Taip pat pridedu apskaičiuotą sumą dėl klaidinančios talpos.

Jei įkrovimo metodams naudojami skirtingi rezistoriai, programinės įrangos reikšmes CHARGE_RCLOW ir CHARGE_RCHIGH taip pat reikės pakeisti.

Norėdami įdiegti programinę įrangą, naudokite įprastą skaitmeninio antspaudo metodą, įkeldami programinę įrangą ir prijungę USB prievadą, kai to paprašys. Palikite maitinimo jungiklį išjungtoje padėtyje, nes šiam veiksmui maitinti tiekia USB.

4 žingsnis: veikimas ir išplėstinis kalibravimas

Operacija yra labai paprasta.

Įjungę įrenginį ir laukdami, kol baigsis kalibravimo nulis, prijunkite bandomą kondensatorių prie vieno iš dviejų matavimo prievadų. Mažos vertės <1uF kondensatoriams naudokite 555 prievadus, o didesnės vertės kondensatoriams - įkrovimo prievadą. Elektrolitiniams kondensatoriams neigiamą gnybtą prijunkite prie bendro įžeminimo taško. Bandymo metu kondensatorius bus įkrautas iki maždaug 2 V.

555 prievadą galima pakeisti laikant nuspaustą mygtuką maždaug 1 sekundę ir atleidžiant. Įsitikinkite, kad niekas nėra prijungtas prie 555 prievado.

Išplėstinis kalibravimas

Įkrovimo metodas priklauso nuo absoliutaus ATTiny85 laikrodžio dažnio, kad būtų galima išmatuoti laiką. Laikrodis naudoja vidinį RC osciliatorių, kuris suteikia nominalų 8MHz laikrodį. Nors osciliatoriaus stabilumas yra gana geras esant įtampos ir temperatūros svyravimams, jo dažnis gali būti gana mažas, net jei jis yra sukalibruotas gamykloje. Šis kalibravimas nustato OSCCAL registrą paleidžiant. Gamyklinį kalibravimą galima pagerinti tikrinant dažnį ir optimaliau nustatant OSCCAL vertę, kad ji atitiktų tam tikrą ATTiny85 plokštę.

Man dar nepavyko pritaikyti automatinio metodo į programinę įrangą, todėl naudoju šią rankinę procedūrą. Galimi du variantai, atsižvelgiant į galimus išorinius matavimus; arba dažnio matuoklis, galintis išmatuoti trikampio bangos formos dažnį 555 prievade, arba žinomo dažnio kvadratinių bangų šaltinis, pvz. 10KHz su 0V/3.3V lygiais, kuriuos galima prijungti prie 555 prievado ir nepaisyti bangos formos, kad šis dažnis būtų įvestas į skaitiklį. Aš naudojau antrąjį metodą.

  1. Įjunkite skaitiklį įprasta galia be prijungtų kondensatorių.
  2. Prijunkite dažnio matuoklį arba kvadratinių bangų generatorių prie 555 prievado.
  3. Iš naujo paleiskite kalibravimo ciklą paspausdami mygtuką.
  4. Kalibravimo ciklo pabaigoje ekrane bus parodytas dažnis, kurį nustato skaitiklis, ir esama OSCCAL reikšmė. Atkreipkite dėmesį, kad pakartotinis kalibravimo ciklo naudojimas perjungia matuojamo dažnio rodymą į įprastą nerodymą.
  5. Jei rodomas dažnis yra mažesnis už žinomą, tai reiškia, kad laikrodžio dažnis yra per didelis ir atvirkščiai. Manau, kad OSCCAL padidinimas reguliuoja laikrodį maždaug 0,05%
  6. Norėdami pagerinti laikrodį, apskaičiuokite naują OSCCAL vertę.
  7. Įveskite naują OSCCAL reikšmę į OSCCAL_VAL, esančią programinės aparatinės įrangos viršuje.
  8. Iš naujo sukurkite ir įkelkite naują programinę -aparatinę įrangą. Pakartokite 1–5 veiksmus, kurie turėtų parodyti naują OSCCAL vertę ir naują dažnio matavimą.
  9. Jei reikia, pakartokite veiksmus dar kartą, kol bus pasiektas geriausias rezultatas.

Atkreipkite dėmesį, kad šio derinimo matavimo dalis turi būti atliekama veikiant įprasta, o ne USB, kad būtų sumažintas bet koks dažnio poslinkis dėl maitinimo įtampos.

Rekomenduojamas: