Innehållsförteckning:

ATTiny85 kondensatormätare: 4 steg
ATTiny85 kondensatormätare: 4 steg

Video: ATTiny85 kondensatormätare: 4 steg

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

Detta instruerbara är för en kondensatormätare baserad på ATTiny85 med följande funktioner.

  • Baserat på ATTiny85 (DigiStamp)
  • SSD1306 0,96 "OLED -skärm
  • Frekvensmätning för kondensatorer med lågt värde 1pF - 1uF med 555 oscillator
  • Laddningstidsmätning för kondensatorer med högt värde 1uF - 50000uF
  • 2 separata portar som används för metoder för att minimera stary kapacitans
  • Två strömvärden som används för laddningstid för att minimera tiden för stora kondensatorer
  • 555 metod själv nollor vid start, kan nollställas med tryckknapp
  • Ett snabbtest som används för att välja vilken metod som ska användas för varje mätcykel.
  • Laddningstidens metodnoggrannhet kan förbättras genom stöd för OSCVAL -klockfrekvensjustering

Steg 1: Schematisk och teori

Schematisk och teori
Schematisk och teori

Schemat visar ATTiny som driver SSD1306 OLED -skärmen via ett I2C -gränssnitt. Den drivs direkt från ett LiOn 300mAh -batteri och en laddningsstation ingår som kan användas med en LiOn -kompatibel extern laddare.

Den första mätmetoden är baserad på att mäta frekvensen hos en 555 frittgående oscillator. Denna har en basfrekvens som bestäms av motstånden och en kondensator som bör vara hög noggrannhet eftersom detta bestämmer mätningarnas noggrannhet. Jag använde en 820pF 1% polystyrenkondensator jag hade men andra värden runt 1nF kan användas. Värdet måste matas in i mjukvaran tillsammans med en uppskattning av eventuell bortfallande kapacitans (~ 20pF). Detta gav en basfrekvens på cirka 16KHz. Utsignalen från 555 matas till PB2 i ATTiny som är programmerad som en hårdvaruräknare. Genom att mäta räkningen under en period av cirka 1 sekund kan frekvensen bestämmas. Detta görs vid start för att bestämma basfrekvensen. När en kondensator under test adderas parallellt till baskondensatorn, sänks frekvensen och när denna mäts och jämförs med basfrekvensen kan värdet av den extra kapacitansen beräknas.

Det fina med denna metod är att det beräknade värdet endast är beroende av baskondensatorns noggrannhet. Mätperioden spelar ingen roll. Upplösningen beror på upplösningen av frekvensmätningarna som är ganska hög så att även mycket liten kapacitans kan mätas. Den begränsande faktorn verkar vara "frekvensbruset" från 555 -oscillatorn som för mig motsvarar cirka 0,3 pF.

Metoden kan användas över ett anständigt intervall. För att förbättra intervallet synkroniserar jag mätperioden med att detektera kanter på de inkommande pulserna. Detta innebär att även lågfrekvent svängning som 12Hz (med en 1uF kondensator) mäts exakt.

För större kondensatorer är kretsen anordnad att använda en laddningstidsmetod. I denna är kondensatorn som testas urladdning för att säkerställa att den börjar vid 0 och sedan laddas genom ett känt motstånd från matningsspänningen. En ADC i ATTiny85 används för att övervaka kondensatorns spänning och tiden för att gå från 0% till 50% laddning mäts. Detta kan användas för att beräkna kapacitansen. Eftersom referensen för ADC också är matningsspänningen påverkar detta inte mätningen. Det absoluta måttet på den tid som tas beror dock på ATTiny85 -klockfrekvensen och variationer i detta påverkar resultatet. Ett förfarande kan användas för att förbättra klockans noggrannhet med hjälp av ett avstämningsregister i ATTiny85 och detta beskrivs senare.

För att tömma kondensatorn till 0V används en n-kanal MOSFET tillsammans med ett lågt värde motstånd för att begränsa urladdningsströmmen. Detta innebär att även kondensatorer med stort värde kan urladdas snabbt.

För att ladda kondensatorn används 2 värden på laddningsmotståndet. Ett basvärde ger rimliga laddningstider för kondensatorer från 1uF upp till cirka 50uF. En p-kanal MOSFET används för att parallella i ett lägre motstånd för att möjliggöra mätning av kondensatorer med högre värde i ett rimligt intervall. De valda värdena ger en mättid på cirka 1 sekund för kondensatorer upp till 2200uF och proportionellt längre för större värden. Vid den nedre änden av värdet måste mätperioden hållas någorlunda lång för att bestämningen av övergången genom tröskelvärdet på 50% ska kunna göras med noggrannhet. Provtagningshastigheten för ADC är cirka 25uSec så en minsta period på 22mSec ger rimlig precision.

Eftersom ATTiny har begränsad IO (6 stift) måste allokeringen av denna resurs göras noggrant. 2 stift behövs för displayen, 1 för timeringången, 1 för ADC, 1 för urladdningskontroll och 1 för laddningshastighetskontroll. Jag ville ha en tryckknappsstyrning för att möjliggöra nollställning när som helst. Detta görs genom att hi-jacka I2C SCL-linjen. Eftersom I2C -signalerna är öppna dränerar det ingen elektrisk konflikt genom att låta knappen dra denna linje lågt. Displayen kommer att sluta fungera med knappen intryckt men detta har ingen betydelse eftersom den återupptas när knappen släpps.

Steg 2: Konstruktion

Konstruktion
Konstruktion
Konstruktion
Konstruktion
Konstruktion
Konstruktion

Jag gjorde detta till en liten 55 mm x 55 mm 3D -tryckt låda. Designad för att rymma de fyra huvudkomponenterna; ATTiny85 DigiStamp -kortet, SSD1306 -skärmen, LiOn -batteriet och en liten prototypkort som rymmer 55 timer- och laddningskontrollelektronik.

Bilaga på

Delar behövs

  • ATTiny85 DigiStamp -kort. Jag använde en version med en microUSB -kontakt som används för att ladda upp firmware.
  • SSD1306 I2C OLED -skärm
  • 300mAH LiOn -batteri
  • Liten remsa av prototyper
  • CMOS 555 -timerchip (TLC555)
  • n-kanal MOSFET AO3400
  • p-kanal MOSFET AO3401
  • Motstånd 4R7, 470R, 22K, 2x33K
  • Kondensatorer 4u7, 220u
  • Precisionskondensator 820pF 1%
  • Miniatyrbildsbrytare
  • 2 x 3 -stifts rubriker för laddningsport och mätportar
  • Tryckknapp
  • Inhägnad
  • Anslut tråd

Verktyg behövs

  • Finspetslödkolv
  • Pincett

Gör först 555 timerkrets och laddningskomponenter på prototypkortet. Lägg till flygledningar för de externa anslutningarna. Fäst skjutreglaget och laddningspunkten och mätporten i höljet. Sätt på batteriet och gör huvudströmkablarna till laddningspunkten, skjut omkopplaren. Anslut marken till tryckknappen. Fäst ATTiny85 på plats och slutför anslutningen.

Du kan göra några energibesparingar på ATTiny -kortet innan du monterar dem, vilket minskar strömmen lite och förlänger batteriets livslängd.

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

Detta är inte kritiskt eftersom det finns en strömbrytare för att stänga av mätaren när den inte används.

Steg 3: Programvara

Programvara för denna kondensatormätare finns på

github.com/roberttidey/CapacitorMeter

Detta är en Arduino -baserad skiss. Det behöver bibliotek för displayen och I2C som finns på

github.com/roberttidey/ssd1306BB

github.com/roberttidey/I2CTinyBB

Dessa är optimerade för att ATTiny ska ta minimalt med minne. I2C -biblioteket är en bit -bang -metod med hög hastighet som gör det möjligt att använda två stift. Detta är viktigt eftersom I2C -metoderna som använder den seriella porten använder PB2 som är i konflikt med att använda den timer/räknareingång som behövs för att mäta frekvensen 555.

Programvaran är strukturerad kring en tillståndsmaskin som tar mätningen genom en cykel av tillstånd. En ISR stöder överflöd från timermätaren för att förlänga 8 -bitars hårdvaran. En andra ISR stöder ADC som fungerar i kontinuerligt läge. Detta ger det snabbaste svaret på att laddningskretsen passerar tröskeln.

I början av varje mätcykel avgör en getMeasureMode -funktion vilken metod som är lämpligast för varje mätning.

När metoden 555 används börjar tidpunkten för räkningen först när räknaren har ändrats. På samma sätt stoppas timingen bara efter det nominella mätintervallet och när en kant detekteras. Denna synkronisering möjliggör exakt beräkning av frekvensen även för låga frekvenser.

När programvaran startar är de första sju mätningarna "kalibreringscykler" som används för att bestämma basfrekvensen för 555 utan tillsatt kondensator. De fyra senaste cyklerna är i genomsnitt.

Det finns stöd för att justera OSCAL -registret för klockinställning. Jag föreslår att du först ställer in OSCCAL_VAL till 0 högst upp på skissen. Det betyder att fabrikskalibreringen kommer att användas tills inställningen utförs.

Värdet på 555 baskondensatorn måste justeras krävs. Jag lägger också till ett uppskattat belopp för stray -kapacitans.

Om olika motstånd används för laddningsmetoderna måste värdena CHARGE_RCLOW och CHARGE_RCHIGH i programvaran också ändras.

För att installera programvaran, använd den vanliga digistamp -metoden för att ladda upp programvaran och ansluta usb -porten när du uppmanas. Lämna strömbrytaren i avstängt läge eftersom strömmen kommer att levereras av USB -enheten för denna åtgärd.

Steg 4: Drift och avancerad kalibrering

Driften är mycket enkel.

Efter att ha slagit på enheten och väntat på att kalibreringsnollan är klar, anslut sedan kondensatorn som testas till en av de två mätportarna. Använd 555 portar för kondensatorer med lågt värde <1uF och laddningsporten för kondensatorer med högre värde. För elektrolytkondensatorer ansluter den negativa terminalen till den gemensamma jordpunkten. Under testet laddas kondensatorn upp till ca 2V.

555 -porten kan nollställas genom att hålla tryckknappen intryckt i cirka 1 sekund och släppa. Se till att ingenting är anslutet till 555 -porten för detta.

Avancerad kalibrering

Laddningsmetoden förlitar sig på den absoluta klockfrekvensen för ATTiny85 för att mäta tid. Klockan använder den interna RC -oscillatorn för att ge en nominell 8MHz klocka. Även om oscillatorns stabilitet är ganska bra för spännings- och temperaturvariationer kan dess frekvens vara ganska många procent trots att den är fabrikskalibrerad. Denna kalibrering sätter OSCCAL -registret vid start. Fabrikskalibreringen kan förbättras genom att kontrollera frekvensen och göra en mer optimal inställning av OSCCAL -värdet för att passa ett visst ATTiny85 -kort.

Jag har inte lyckats passa in en mer automatisk metod i firmware ännu så jag använder följande manuella procedur. Två variationer är möjliga beroende på vilka externa mätningar som finns tillgängliga; antingen en frekvensmätare som kan mäta frekvensen för den triangulära vågformen på 555 -porten, eller en kvadratvågskälla med känd frekvens, t.ex. 10KHz med 0V/3.3V -nivåer som kan anslutas till 555 -porten och åsidosätta vågformen för att tvinga in frekvensen i räknaren. Jag använde den andra metoden.

  1. Starta mätaren med normal effekt utan kondensatorer anslutna.
  2. Anslut frekvensmätaren eller fyrkantvågsgeneratorn till 555 -porten.
  3. Starta om kalibreringscykeln genom att trycka på knappen.
  4. I slutet av kalibreringscykeln visar displayen frekvensen som bestäms av räknaren och det aktuella OSCCAL -värdet. Observera att upprepad användning av kalibreringscykeln växlar mellan visning av den uppmätta frekvensen och normal ingen visning.
  5. Om den visade frekvensen är mindre än vad som är känt betyder det att klockfrekvensen är för hög och vice versa. Jag tycker att ett OSCCAL -steg justerar klockan med cirka 0,05%
  6. Beräkna ett nytt OSCCAL -värde för att förbättra klockan.
  7. Ange nytt OSCCAL -värde i OSCCAL_VAL högst upp i firmware.
  8. Bygg om och ladda upp ny firmware. Upprepa steg 1 -5 som ska visa det nya OSCCAL -värdet och den nya frekvensmätningen.
  9. Upprepa vid behov stegen igen tills bästa resultat uppnås.

Observera att det är viktigt att göra mätdelen av denna inställning när den körs på normal ström, inte via USB för att minimera eventuell frekvensförskjutning på grund av matningsspänning.

Rekommenderad: