Inhoudsopgave:

ATTiny85 condensatormeter - Ajarnpa
ATTiny85 condensatormeter - Ajarnpa

Video: ATTiny85 condensatormeter - Ajarnpa

Video: ATTiny85 condensatormeter - Ajarnpa
Video: Знакомство с Digispark ATtiny85. "Arduino для чайников" 2024, Juli-
Anonim
ATTiny85 Condensator Meter
ATTiny85 Condensator Meter
ATTiny85 Condensator Meter
ATTiny85 Condensator Meter

Deze instructable is voor een condensatormeter op basis van de ATTiny85 met de volgende kenmerken.

  • Gebaseerd op ATTiny85 (DigiStamp)
  • SSD1306 0,96" OLED-scherm
  • Frequentiemeting voor laagwaardige condensatoren 1pF - 1uF met 555-oscillator
  • Laadtijdmeting voor hoogwaardige condensatoren 1uF - 50000uF
  • 2 afzonderlijke poorten die worden gebruikt voor de methoden om de sterrencapaciteit te minimaliseren
  • Twee stroomwaarden gebruikt voor laadtijd om de tijd voor grote condensatoren te minimaliseren
  • 555 methode zelf nullen bij opstarten, kan opnieuw worden ingesteld met drukknop
  • Een snelle test die wordt gebruikt om te selecteren welke methode moet worden gebruikt voor elke meetcyclus.
  • De nauwkeurigheid van de oplaadtijdmethode kan worden verbeterd door ondersteuning voor OSCVAL-klokfrequentieaanpassing

Stap 1: Schema en theorie

Schema en theorie
Schema en theorie

Het schema toont de ATTiny die het SSD1306 OLED-scherm aanstuurt via een I2C-interface. Het wordt rechtstreeks gevoed door een LiOn 300mAh-batterij en er is een oplaadpunt inbegrepen dat kan worden gebruikt met een LiOn-compatibele externe oplader.

De eerste meetmethode is gebaseerd op het meten van de frequentie van een 555 vrijlopende oscillator. Dit heeft een basisfrequentie die wordt bepaald door de weerstanden en een condensator die een hoge nauwkeurigheid moet hebben, omdat dit de nauwkeurigheid van de metingen bepaalt. Ik gebruikte een 820pF 1% polystyreencondensator die ik had, maar andere waarden rond 1nF kunnen worden gebruikt. De waarde moet in de software worden ingevoerd, samen met een schatting van eventuele parasitaire capaciteit (~20pF). Dit gaf een basisfrequentie van ongeveer 16 kHz. De uitgang van de 555 wordt ingevoerd in PB2 van de ATTiny die is geprogrammeerd als hardwareteller. Door de telling over een periode van ongeveer 1 seconde te meten, kan de frequentie worden bepaald. Dit wordt gedaan bij het opstarten om de basisfrequentie te bepalen. Wanneer een te testen condensator parallel aan de basiscondensator wordt toegevoegd, wordt de frequentie verlaagd en wanneer deze wordt gemeten en vergeleken met de basisfrequentie, kan de waarde van de toegevoegde capaciteit worden berekend.

Het leuke van deze methode is dat de berekende waarde alleen afhankelijk is van de nauwkeurigheid van de basiscondensator. De periode van de meting maakt niet uit. De resolutie is afhankelijk van de resolutie van de frequentiemetingen die vrij hoog is, zodat zelfs een zeer kleine toegevoegde capaciteit kan worden gemeten. De beperkende factor lijkt de 'frequentieruis' van de 555-oscillator te zijn die voor mij gelijk staat aan ongeveer 0.3pF.

De methode kan over een behoorlijk bereik worden gebruikt. Om het bereik te verbeteren, synchroniseer ik de meetperiode met het detecteren van randen van de binnenkomende pulsen. Dit betekent dat zelfs laagfrequente oscillaties zoals 12Hz (met een 1uF condensator) nauwkeurig worden gemeten.

Voor grotere condensatoren is de schakeling ingericht om een ladingstimingmethode te gebruiken. Hierin wordt de te testen condensator ontladen om ervoor te zorgen dat deze bij 0 begint en vervolgens wordt opgeladen via een bekende weerstand van de voedingsspanning. Een ADC in de ATTiny85 wordt gebruikt om de condensatorspanning te bewaken en de tijd die nodig is om van 0% naar 50% lading te gaan, wordt gemeten. Dit kan worden gebruikt om de capaciteit te berekenen. Aangezien de referentie voor de ADC ook de voedingsspanning is, heeft dit geen invloed op de meting. De absolute maat van de benodigde tijd is echter wel afhankelijk van de ATTiny85-klokfrequentie en variaties hierin hebben invloed op het resultaat. Er kan een procedure worden gebruikt om de nauwkeurigheid van deze klok te verbeteren met behulp van een afstemregister in de ATTiny85 en dit wordt later beschreven.

Om de condensator te ontladen tot 0V wordt een n-kanaals MOSFET gebruikt samen met een lage weerstand om de ontlaadstroom te begrenzen. Dit betekent dat zelfs grote condensatoren snel kunnen worden ontladen.

Om de condensator op te laden worden 2 waarden van de laadweerstand gebruikt. Een basiswaarde geeft redelijke oplaadtijden voor condensatoren van 1uF tot ongeveer 50uF. Een p-kanaal MOSFET wordt gebruikt om parallel te schakelen in een lagere weerstand, zodat condensatoren met een hogere waarde binnen een redelijk interval kunnen worden gemeten. De gekozen waarden geven een meettijd van ongeveer 1 seconde voor condensatoren tot 2200uF en proportioneel langer voor grotere waarden. Aan de onderkant van de waarde moet de meetperiode redelijk lang worden aangehouden om de overgang door de 50%-drempel met voldoende precisie te kunnen bepalen. De bemonsteringssnelheid van de ADC is ongeveer 25uSec, dus een minimumperiode van 22mSec geeft een redelijke precisie.

Aangezien de ATTiny een beperkte IO (6 pinnen) heeft, moet de toewijzing van deze bron zorgvuldig gebeuren. Er zijn 2 pinnen nodig voor het display, 1 voor de timeringang, 1 voor de ADC, 1 voor ontlaadregeling en 1 voor laadsnelheidsregeling. Ik wilde een drukknopbediening om op elk moment opnieuw op nul te kunnen stellen. Dit wordt gedaan door de I2C SCL-lijn te kapen. Omdat de I2C-signalen open drain zijn, is er geen elektrisch conflict door de knop deze lijn laag te laten trekken. Het display stopt met werken als de knop is ingedrukt, maar dit heeft geen gevolgen omdat het weer wordt hervat wanneer de knop wordt losgelaten.

Stap 2: constructie

Bouw
Bouw
Bouw
Bouw
Bouw
Bouw

Ik verzon dit in een kleine 55 mm x 55 mm 3D-geprinte doos. Ontworpen om de 4 belangrijkste componenten te bevatten; het ATTiny85 DigiStamp-bord, het SSD1306-display, de LiOn-batterij en een klein stukje prototypebord met de 55 timer- en laadcontrole-elektronica.

Behuizing op

Onderdelen nodig

  • ATTiny85 DigiStamp-bord. Ik gebruikte een versie met een microUSB-connector die wordt gebruikt voor het uploaden van firmware.
  • SSD1306 I2C OLED-scherm
  • 300mAH LiOn-batterij
  • Kleine strook prototypebord
  • CMOS 555 timer-chip (TLC555)
  • n-kanaal MOSFET AO3400
  • p-kanaal MOSFET AO3401
  • Weerstanden 4R7, 470R, 22K, 2x33K
  • Condensatoren 4u7, 220u
  • Precisiecondensator 820pF 1%
  • Miniatuur schuifschakelaar
  • 2 x 3-pins headers voor laadpoort en meetpoorten
  • Druk op de knop
  • Behuizing
  • Draad aansluiten

Gereedschap nodig

  • Fijne punt soldeerbout
  • Pincet

Maak eerst het 555-timercircuit en de oplaadcomponenten op het prototypebord. Voeg losse kabels toe voor de externe verbindingen. Bevestig de schuifschakelaar en laadpunt en meetpoort in de behuizing. Bevestig de accu en doe de hoofdstroombedrading naar het laadpunt, schuifschakelaar. Sluit de aarde aan op de drukknop. Bevestig de ATTiny85 op zijn plaats en voltooi de aansluiting.

U kunt enkele energiebesparende aanpassingen doen aan het ATTiny-bord voordat u het monteert, wat de stroom een beetje zal verminderen en de levensduur van de batterij zal verlengen.

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

Dit is niet kritisch, aangezien er een aan/uit-schakelaar is om de meter uit te schakelen wanneer deze niet in gebruik is.

Stap 3: Software

Software voor deze condensatormeter is te vinden op:

github.com/roberttidey/CapacitorMeter

Dit is een op Arduino gebaseerde schets. Het heeft bibliotheken nodig voor het display en I2C die te vinden zijn op:

github.com/roberttidey/ssd1306BB

github.com/roberttidey/I2CTinyBB

Deze zijn geoptimaliseerd zodat de ATTiny minimaal geheugen in beslag neemt. De I2C-bibliotheek is een snelle bit-bang-methode die het gebruik van 2 pinnen mogelijk maakt. Dit is belangrijk omdat de I2C-methoden die de seriële poort gebruiken PB2 gebruiken, wat in strijd is met het gebruik van de timer/teller-ingang die nodig is om de 555-frequentie te meten.

De software is opgebouwd rond een toestandsmachine die de meting door een cyclus van toestanden voert. Een ISR ondersteunt overloop van de timerteller om de 8-bits hardware uit te breiden. Een tweede ISR ondersteunt de ADC die in continue modus werkt. Dit geeft de snelste reactie als het laadcircuit de drempel overschrijdt.

Aan het begin van elke meetcyclus bepaalt een getMeasureMode-functie welke de meest geschikte methode is voor elke meting.

Wanneer de 555-methode wordt gebruikt, begint de timing van het tellen pas als de teller is gewijzigd. Evenzo wordt de timing pas gestopt na het nominale meetinterval en wanneer een flank wordt gedetecteerd. Deze synchronisatie maakt een nauwkeurige berekening van de frequentie mogelijk, zelfs voor lage frequenties.

Wanneer de software start, zijn de eerste 7 metingen 'kalibratiecycli' die worden gebruikt om de basisfrequentie van de 555 te bepalen zonder toegevoegde condensator. De laatste 4 cycli worden gemiddeld.

Er is ondersteuning voor het aanpassen van het OSCAL-register voor het afstemmen van de klok. Ik raad aan om OSCCAL_VAL in eerste instantie bovenaan de schets in te stellen op 0. Dit betekent dat de fabriekskalibratie wordt gebruikt totdat de afstemming is uitgevoerd.

De waarde van de basiscondensator 555 die moet worden aangepast, is vereist. Ik voeg ook een geschat bedrag toe voor verdwaalde capaciteit.

Als er verschillende weerstanden worden gebruikt voor de oplaadmethoden, moeten ook de CHARGE_RCLOW- en CHARGE_RCHIGH-waarden in de software worden gewijzigd.

Om de software te installeren, gebruikt u de normale digistamp-methode om de software te uploaden en de USB-poort aan te sluiten wanneer daarom wordt gevraagd. Laat de aan/uit-schakelaar in de uit-stand staan, want voor deze handeling wordt stroom geleverd door de USB.

Stap 4: Bediening en geavanceerde kalibratie

De bediening is heel eenvoudig.

Nadat u het apparaat hebt ingeschakeld en hebt gewacht tot de kalibratienul is voltooid, sluit u de te testen condensator aan op een van de twee meetpoorten. Gebruik de 555-poorten voor condensatoren met een lage waarde < 1uF en de laadpoort voor condensatoren met een hogere waarde. Sluit voor elektrolytische condensatoren de negatieve pool aan op het gemeenschappelijke aardingspunt. Tijdens het testen wordt de condensator opgeladen tot ongeveer 2V.

De 555-poort kan opnieuw op nul worden gezet door de drukknop ongeveer 1 seconde ingedrukt te houden en los te laten. Zorg ervoor dat hiervoor niets is aangesloten op de 555-poort.

Geavanceerde kalibratie

De oplaadmethode is gebaseerd op de absolute klokfrequentie van de ATTiny85 om de tijd te meten. De klok maakt gebruik van de interne RC-oscillator die is ingericht om een nominale klok van 8 MHz te geven. Hoewel de stabiliteit van de oscillator redelijk goed is voor spannings- en temperatuurvariaties, kan de frequentie ervan enkele procenten afwijken, ook al is deze in de fabriek gekalibreerd. Deze kalibratie stelt het OSCCAL-register in bij het opstarten. De fabriekskalibratie kan worden verbeterd door de frequentie te controleren en de OSCCAL-waarde optimaal in te stellen voor een bepaald ATTiny85-bord.

Het is me nog niet gelukt om een meer automatische methode in de firmware in te passen, dus gebruik ik de volgende handmatige procedure. Er zijn twee variaties mogelijk, afhankelijk van welke externe metingen beschikbaar zijn; ofwel een frequentiemeter die de frequentie van de driehoekige golfvorm op de 555-poort kan meten, of een blokgolfbron met een bekende frequentie, b.v. 10KHz met een 0V/3,3V-niveau dat kan worden aangesloten op de 555-poort en de golfvorm kan negeren om die frequentie in de teller te forceren. Ik heb de tweede methode gebruikt.

  1. Start de meter op zijn normale vermogen zonder aangesloten condensatoren.
  2. Sluit de frequentiemeter of blokgolfgenerator aan op de 555-poort.
  3. Herstart de kalibratiecyclus door op de knop te drukken.
  4. Aan het einde van de kalibratiecyclus toont het display de frequentie zoals bepaald door de teller en de huidige OSCCAL-waarde. Merk op dat herhaald gebruik van de kalibratiecyclus zal schakelen tussen het tonen van de gemeten frequentie en normaal geen weergave.
  5. Als de weergegeven frequentie lager is dan wat bekend is, betekent dit dat de klokfrequentie te hoog is en vice versa. Ik vind dat een OSCCAL-verhoging de klok met ongeveer 0,05% aanpast
  6. Bereken een nieuwe OSCCAL-waarde om de klok te verbeteren.
  7. Voer de nieuwe OSCCAL-waarde in OSCCAL_VAL bovenaan de firmware in.
  8. Herbouw en upload nieuwe firmware. Herhaal stappen 1 -5 die de nieuwe OSCCAL-waarde en de nieuwe frequentiemeting moeten tonen.
  9. Herhaal indien nodig de stappen opnieuw totdat het beste resultaat is bereikt.

Het is belangrijk om het meetgedeelte van deze afstemming uit te voeren wanneer u op normale stroom werkt en niet op USB om elke frequentieverschuiving als gevolg van voedingsspanning te minimaliseren.

Aanbevolen: