Innholdsfortegnelse:

ATTiny85 kondensatormåler: 4 trinn
ATTiny85 kondensatormåler: 4 trinn

Video: ATTiny85 kondensatormåler: 4 trinn

Video: ATTiny85 kondensatormåler: 4 trinn
Video: Знакомство с Digispark ATtiny85. "Arduino для чайников" 2024, Juli
Anonim
ATTiny85 kondensatormåler
ATTiny85 kondensatormåler
ATTiny85 kondensatormåler
ATTiny85 kondensatormåler

Denne instruksjonen er for en kondensatormåler basert på ATTiny85 med følgende funksjoner.

  • Basert på ATTiny85 (DigiStamp)
  • SSD1306 0,96 "OLED -skjerm
  • Frekvensmåling for kondensatorer med lav verdi 1pF - 1uF ved bruk av 555 oscillator
  • Måling av ladetid for høyverdikondensatorer 1uF - 50000uF
  • 2 separate porter som brukes for metodene for å minimere stary kapasitans
  • To verdier av strøm som brukes for ladetid for å minimere tiden for store kondensatorer
  • 555 metode selv nuller ved oppstart, kan nullstilles på nytt med trykknapp
  • En rask test som brukes til å velge hvilken metode som skal brukes for hver målesyklus.
  • Metodenes nøyaktighet for ladetid kan forbedres ved å støtte OSCVAL klokkefrekvensjustering

Trinn 1: Skjematisk og teori

Skjematisk og teori
Skjematisk og teori

Skjematisk viser ATTiny som driver SSD1306 OLED -skjermen via et I2C -grensesnitt. Den drives direkte fra et LiOn 300mAh batteri og et ladepunkt er inkludert som kan brukes med en LiOn -kompatibel ekstern lader.

Den første målemetoden er basert på måling av frekvensen til en 555 frittgående oscillator. Denne har en basisfrekvens bestemt av motstandene og en kondensator som bør ha høy nøyaktighet, da dette bestemmer nøyaktigheten av målingene. Jeg brukte en 820pF 1% polystyrenkondensator jeg hadde, men andre verdier rundt 1nF kan brukes. Verdien må legges inn i programvaren sammen med et estimat av eventuell avvikende kapasitans (~ 20pF). Dette ga en basisfrekvens på rundt 16KHz. Utgangen fra 555 mates til PB2 i ATTiny som er programmert som en maskinvareteller. Ved å måle tellingen over en periode på ca. 1 sekund kan frekvensen bestemmes. Dette gjøres ved oppstart for å bestemme basisfrekvensen. Når en kondensator under test legges parallelt til basiskondensatoren, senkes frekvensen, og når denne måles og sammenlignes med basisfrekvensen, kan verdien av den ekstra kapasitansen beregnes.

Det fine med denne metoden er at den beregnede verdien bare er avhengig av nøyaktigheten til basiskondensatoren. Perioden for målingen spiller ingen rolle. Oppløsningen avhenger av oppløsningen til frekvensmålingene som er ganske høy, så selv meget liten ekstra kapasitans kan måles. Den begrensende faktoren ser ut til å være 'frekvensstøy' til 555 -oscillatoren som for meg tilsvarer omtrent 0,3pF.

Metoden kan brukes over et anstendig område. For å forbedre området synkroniserer jeg måleperioden med å oppdage kanter på de innkommende pulser. Dette betyr at selv lavfrekvent svingning som 12Hz (med en 1uF kondensator) måles nøyaktig.

For større kondensatorer er kretsen arrangert for å bruke en ladetidsmetode. I dette er kondensatoren under test utladning for å sikre at den starter ved 0, deretter ladet gjennom en kjent motstand fra forsyningsspenningen. En ADC i ATTiny85 brukes til å overvåke kondensatorspenningen og tiden som går fra 0% til 50% ladning måles. Dette kan brukes til å beregne kapasitansen. Siden referansen for ADC også er forsyningsspenningen, påvirker dette ikke målingen. Imidlertid er det absolutte målet på tiden det tar avhengig av ATTiny85 -klokkefrekvensen, og variasjoner i dette påvirker resultatet. En prosedyre kan brukes for å forbedre nøyaktigheten til denne klokken ved hjelp av et tuningsregister i ATTiny85, og dette blir beskrevet senere.

For å tømme kondensatoren til 0V brukes en n-kanal MOSFET sammen med en motstand med lav verdi for å begrense utladningsstrømmen. Dette betyr at selv kondensatorer med stor verdi kan tømmes raskt.

For å lade kondensatoren brukes 2 verdier av lademotstand. En grunnverdi gir rimelige ladetider for kondensatorer fra 1uF opp til omtrent 50uF. En p-kanal MOSFET brukes til å parallelle i en lavere motstand for å tillate kondensatorer med høyere verdi å måles i et rimelig intervall. Verdiene som er valgt gir en måltid på omtrent 1 sekund for kondensatorer opp til 2200uF og proporsjonalt lengre for større verdier. Ved den nedre enden av verdien må måleperioden holdes rimelig lang for å kunne bestemme overgangen gjennom terskelen på 50% med nok presisjon. Samplingshastigheten til ADC er omtrent 25uSec, så en minimumsperiode på 22mSec gir rimelig presisjon.

Siden ATTiny har begrenset IO (6 pinner), må allokeringen av denne ressursen gjøres nøye. 2 pinner er nødvendige for displayet, 1 for timerinngangen, 1 for ADC, 1 for utladningskontroll og 1 for ladningshastighetskontroll. Jeg ønsket en trykknappkontroll for å tillate nullstilling når som helst. Dette gjøres ved å høyjekke I2C SCL-linjen. Siden I2C -signalene er åpne avløp, er det ingen elektrisk konflikt ved å la knappen trekke denne linjen lavt. Displayet slutter å fungere med knappen inne, men dette har ingen betydning da den fortsetter når knappen slippes.

Trinn 2: Konstruksjon

Konstruksjon
Konstruksjon
Konstruksjon
Konstruksjon
Konstruksjon
Konstruksjon

Jeg gjorde dette til en liten 55 mm x 55 mm 3D -trykt eske. Designet for å inneholde de 4 hovedkomponentene; ATTiny85 DigiStamp -kortet, SSD1306 -skjermen, LiOn -batteriet og en liten prototypekort som holder 55 timer og ladekontrollelektronikk.

Vedlegg på

Deler som trengs

  • ATTiny85 DigiStamp -brett. Jeg brukte en versjon med en microUSB -kontakt som brukes til å laste opp fastvare.
  • SSD1306 I2C OLED -skjerm
  • 300mAH LiOn -batteri
  • Liten stripe med prototypebrett
  • CMOS 555 timer -brikke (TLC555)
  • n-kanal MOSFET AO3400
  • p-kanal MOSFET AO3401
  • Motstander 4R7, 470R, 22K, 2x33K
  • Kondensatorer 4u7, 220u
  • Presisjonskondensator 820pF 1%
  • Miniatyr lysbildebryter
  • 2 x 3 -pins hoder for ladeport og måleporter
  • Trykknapp
  • Innhegning
  • Koble til ledningen

Verktøy som trengs

  • Fint punktloddejern
  • Pinsett

Lag først 555 timerkrets og ladekomponenter på prototypekortet. Legg til flygende ledninger for de eksterne tilkoblingene. Fest glidebryteren og ladepunktet og måleporten i kabinettet. Fest batteriet og gjør hovedledningen til ladepunktet, skyv bryteren. Koble bakken til trykknappen. Fest ATTiny85 på plass og fullfør kroken.

Du kan gjøre noen strømsparende modifikasjoner på ATTiny -kortet før du monterer dem, noe som vil redusere strømmen litt og forlenge batterilevetiden.

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

Dette er ikke kritisk, da det er en strømbryter for å slå av måleren når den ikke er i bruk.

Trinn 3: Programvare

Programvare for denne kondensatormåleren finner du på

github.com/roberttidey/CapacitorMeter

Dette er en Arduino -basert skisse. Den trenger biblioteker for skjermen og I2C som du finner på

github.com/roberttidey/ssd1306BB

github.com/roberttidey/I2CTinyBB

Disse er optimalisert for at ATTiny skal ta minimalt med minne. I2C -biblioteket er en høyhastighets bit bang -metode som tillater bruk av to pins. Dette er viktig ettersom I2C -metodene som bruker den serielle porten bruker PB2 som er i konflikt med å bruke timer/tellerinngangen som er nødvendig for å måle 555 -frekvensen.

Programvaren er strukturert rundt en tilstandsmaskin som tar målingen gjennom en syklus av tilstander. En ISR støtter overløp fra tidtelleren for å forlenge 8 -biters maskinvare. En andre ISR støtter ADC som fungerer i kontinuerlig modus. Dette gir den raskeste responsen på ladekretsen som krysser terskelen.

Ved starten av hver målesyklus bestemmer en getMeasureMode -funksjon hvilken metode som er best egnet for hver måling.

Når 555 -metoden brukes, starter timingen av tellingen først når telleren har endret seg. På samme måte stoppes timingen bare etter det nominelle måleintervallet og når en kant oppdages. Denne synkroniseringen tillater nøyaktig beregning av frekvensen selv for lave frekvenser.

Når programvaren starter er de første 7 målingene kalibreringssykluser som brukes til å bestemme basisfrekvensen til 555 uten tilsatt kondensator. De siste 4 syklusene er gjennomsnittlige.

Det er støtte for å justere OSCAL -registeret for klokkeinnstilling. Jeg foreslår at du først setter OSCCAL_VAL til 0 øverst på skissen. Dette betyr at fabrikkkalibreringen vil bli brukt til tuning er utført.

Verdien på 555 basiskondensatoren må justeres er nødvendig. Jeg legger også til et estimert beløp for herreløs kapasitans.

Hvis forskjellige motstander brukes for ladningsmetodene, må CHARGE_RCLOW og CHARGE_RCHIGH verdiene i programvaren også endres.

For å installere programvaren, bruk den vanlige digistamp -metoden for å laste opp programvaren og koble til usb -porten når du blir bedt om det. La strømbryteren stå i av -posisjon, ettersom strømmen vil bli levert av USB -en for denne operasjonen.

Trinn 4: Drift og avansert kalibrering

Driften er veldig grei.

Etter at du har slått på enheten og ventet på at kalibreringsnullet er ferdig, kobler du kondensatoren som testes til en av de to måleportene. Bruk 555 porter for kondensatorer med lav verdi <1uF og ladeporten for kondensatorer med høyere verdi. For elektrolytiske kondensatorer kobler den negative terminalen til det vanlige jordingspunktet. Under testing vil kondensatoren lades opp til ca 2V.

555 -porten kan nullstilles ved å holde inne trykknappen i omtrent 1 sekund og slippe. Sørg for at ingenting er koblet til 555 -porten for dette.

Avansert kalibrering

Lademetoden er avhengig av den absolutte klokkefrekvensen til ATTiny85 for å måle tid. Klokken bruker den interne RC -oscillatoren som er arrangert for å gi en nominell 8MHz klokke. Selv om oscillatorens stabilitet er ganske god for spennings- og temperaturvariasjoner, kan frekvensen være ganske mange prosent, selv om den er fabrikk kalibrert. Denne kalibreringen setter OSCCAL -registeret ved oppstart. Fabrikkkalibreringen kan forbedres ved å sjekke frekvensen og gjøre en mer optimal innstilling av OSCCAL -verdien som passer til et bestemt ATTiny85 -kort.

Jeg har ikke klart å passe inn en mer automatisk metode i fastvaren ennå, så jeg bruker følgende manuelle prosedyre. To varianter er mulige avhengig av hvilke eksterne målinger som er tilgjengelige; enten en frekvensmåler som er i stand til å måle frekvensen til den trekantede bølgeformen på 555 -porten, eller en firkantbølge med kjent frekvens, f.eks. 10KHz med et 0V/3.3V -nivå som kan kobles til 555 -porten og overstyre bølgeformen for å tvinge denne frekvensen inn i telleren. Jeg brukte den andre metoden.

  1. Start måleren på normal effekt uten kondensatorer tilkoblet.
  2. Koble frekvensmåleren eller firkantbølgeneratoren til 555 -porten.
  3. Start kalibreringssyklusen på nytt ved å trykke på knappen.
  4. På slutten av kalibreringssyklusen vil displayet vise frekvensen bestemt av telleren og gjeldende OSCCAL -verdi. Vær oppmerksom på at gjentatt bruk av kalibreringssyklusen vil veksle mellom visning av den målte frekvensen og normal ingen visning.
  5. Hvis den viste frekvensen er mindre enn det som er kjent, betyr det at klokkefrekvensen er for høy og omvendt. Jeg finner en OSCCAL -trinn som justerer klokken med omtrent 0,05%
  6. Beregn en ny OSCCAL -verdi for å forbedre klokken.
  7. Skriv inn ny OSCCAL -verdi i OSCCAL_VAL på toppen av fastvaren.
  8. Bygg og last opp ny fastvare. Gjenta trinn 1 -5 som skal vise den nye OSCCAL -verdien og den nye frekvensmåling.
  9. Gjenta om nødvendig trinnene til det beste resultatet er oppnådd.

Merk er viktig å gjøre måledelen av denne tuningen når du kjører på normal strøm, ikke USB, for å minimere frekvensskift på grunn av forsyningsspenning.

Anbefalt: