In dit project gaan we een ampèremeter voor laag bereik maken met behulp van de ATMEGA8-microcontroller. In ATMEGA8 gaan we hiervoor de 10bit ADC-functie (analoog naar digitaal conversie) gebruiken. Hoewel we enkele andere manieren hebben om de huidige parameter uit een circuit te halen, gaan we de resistieve drop-methode gebruiken, omdat dit de gemakkelijkste en eenvoudigste manier is om de huidige parameter te krijgen.
Bij deze methode gaan we de stroom die moest worden gemeten doorgeven aan een kleine weerstand, hierdoor krijgen we een druppel over die weerstand die gerelateerd is aan de stroom die er doorheen stroomt. Deze spanning over de weerstand wordt naar ATMEGA8 gevoerd voor ADC-conversie. Daarmee hebben we de huidige in digitale waarde die wordt weergegeven op een 16x2 LCD.
Daarvoor gaan we een spanningsdelercircuit gebruiken. We gaan de stroom door de volledige weerstandstak voeren. Het middelpunt van de tak wordt gemeten. Wanneer de stroom verandert, zal er een daling van de weerstand zijn die er lineair mee is. Hiermee hebben we dus een spanning die lineair verandert.
Het belangrijkste om hier op te merken is dat de input van de controller voor ADC-conversie zo laag is als 50 µAmp. Dit belastingseffect van een op weerstand gebaseerde spanningsdeler is belangrijk omdat de stroom die wordt getrokken uit Vuit van de spanningsdeler het foutpercentage verhoogt, voorlopig hoeven we ons geen zorgen te maken over het laadeffect.
Componenten vereist
Hardware: ATMEGA8, voeding (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16 * 2LCD), 100uF condensator, 100nF condensator (4 stuks), 100Ω weerstand (7 stuks) of 2.5Ω (2 stuks), 100KΩ weerstand.
Software: Atmel studio 6.1, progisp of flash magie.
Schakelschema en werkuitleg
De spanning over R2 en R4 is niet volledig lineair; het zal luidruchtig zijn. Om de ruis weg te filteren, worden condensatoren over elke weerstand in het delercircuit geplaatst, zoals weergegeven in de afbeelding.
In ATMEGA8 kunnen we analoge invoer geven aan elk van de VIER kanalen van PORTC, het maakt niet uit welk kanaal we kiezen, want ze zijn allemaal hetzelfde. We gaan kanaal 0 of PIN0 van PORTC kiezen. In ATMEGA8 heeft de ADC een resolutie van 10 bits, dus de controller kan een minimale verandering van Vref / 2 ^ 10 detecteren, dus als de referentiespanning 5V is, krijgen we een digitale outputstap voor elke 5/2 ^ 10 = 5mV. Dus voor elke stap van 5mV in de ingang hebben we een toename van één bij digitale uitgang.
Nu moeten we het register van ADC instellen op basis van de volgende voorwaarden:
1. Allereerst moeten we de ADC-functie in ADC inschakelen.
2. Hier krijg je een maximale ingangsspanning voor ADC-conversie is + 5V. We kunnen dus de maximale waarde of referentie van ADC naar 5V instellen.
3. De controller heeft een trigger-conversiefunctie, wat betekent dat ADC-conversie alleen plaatsvindt na een externe trigger, aangezien we niet willen dat we de registers hoeven in te stellen om de ADC continu vrij te laten draaien.
4. Voor elke ADC zijn de conversiefrequentie (analoge waarde naar digitale waarde) en nauwkeurigheid van digitale uitvoer omgekeerd evenredig. Dus voor een betere nauwkeurigheid van de digitale uitvoer moeten we een lagere frequentie kiezen. Voor een normale ADC-klok stellen we de voorverkoop van ADC in op maximale waarde (2). Omdat we de interne klok van 1MHZ gebruiken, zal de klok van ADC (1000000/2) zijn.
Dit zijn de enige vier dingen die we moeten weten om aan de slag te gaan met ADC.
Alle bovenstaande vier functies worden ingesteld door twee registers,
ROOD (ADEN): Dit bit moet worden ingesteld om de ADC-functie van ATMEGA in te schakelen.
BLAUW (REFS1, REFS0): deze twee bits worden gebruikt om de referentiespanning in te stellen (of de maximale ingangsspanning die we gaan geven). Omdat we een referentiespanning van 5V willen, moet REFS0 worden ingesteld volgens de tabel.
GEEL (ADFR): deze bit moet worden ingesteld om de ADC continu te laten werken (vrijloopmodus).
PINK (MUX0-MUX3): deze vier bits zijn voor het aangeven van het ingangskanaal. Omdat we ADC0 of PIN0 gaan gebruiken, hoeven we geen bits in te stellen zoals bij de tabel.
BRUIN (ADPS0-ADPS2): deze drie bits zijn voor het instellen van de prescalar voor ADC. Omdat we een prescalar van 2 gebruiken, moeten we een bit instellen.
DONKERGROEN (ADSC): deze bit is ingesteld voor de ADC om de conversie te starten. Dit bit kan in het programma worden uitgeschakeld wanneer we de conversie moeten stoppen.