I det här projektet ska vi skapa en lågmätare med hjälp av ATMEGA8 mikrokontroller. I ATMEGA8 ska vi använda 10bit ADC (Analog till Digital Conversion) -funktion för att göra detta. Även om vi har få andra sätt att få den nuvarande parametern från en krets, kommer vi att använda resistiv droppmetod, för det är det enklaste och enklaste sättet att få aktuell parameter.
I den här metoden ska vi överföra strömmen som behövde mätas in till ett litet motstånd, genom detta får vi en droppe över det motståndet som är relaterat till ström som strömmar genom den. Denna spänning över motstånd matas till ATMEGA8 för ADC-omvandling. Med det kommer vi att ha strömmen i digitalt värde som kommer att visas på en 16x2 LCD.
För det ska vi använda en spänningsdelarkrets. Vi ska mata strömmen genom hela motståndsgrenen. Grenens mittpunkt tas till mätning. När nuvarande förändringar kommer det att ske droppförändring i motståndet som är linjärt för det. Så med detta har vi en spänning som ändras med linjäritet.
Nu är det viktigt att notera att ingången från styrenheten för ADC-konvertering är så låg som 50 µAmp. Denna belastningseffekt av motståndsbaserad spänningsdelare är viktig eftersom strömmen från Vout av spänningsdelaren ökar felprocentandelen, för nu behöver vi inte oroa oss för belastningseffekten.
Komponenter krävs
Hårdvara: ATMEGA8, strömförsörjning (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16 * 2LCD), 100uF kondensator, 100nF kondensator (4 stycken), 100Ω motstånd (7 stycken) eller 2,5Ω (2 stycken), 100KΩ motstånd.
Programvara: Atmel studio 6.1, progisp eller flash magi.
Kretsschema och arbetsförklaring
Spänningen över R2 och R4 är inte helt linjär; det blir en högljudd. För att filtrera bort bruset placeras kondensatorer över varje motstånd i delarkretsen som visas i figuren.
I ATMEGA8 kan vi ge analog ingång till någon av de fyra PORTC-kanalerna, det spelar ingen roll vilken kanal vi väljer eftersom alla är desamma. Vi ska välja kanal 0 eller PIN0 för PORTC. I ATMEGA8 har ADC 10 bitars upplösning, så att styrenheten kan upptäcka en minsta förändring av Vref / 2 ^ 10, så om referensspänningen är 5V får vi en digital utgångsinkrement för varje 5/2 ^ 10 = 5mV. Så för varje 5mV-steg i ingången kommer vi att öka en på digital utgång.
Nu måste vi ställa in ADC-registret baserat på följande villkor:
1. Först och främst måste vi aktivera ADC-funktionen i ADC.
2. Här kommer att få en maximal ingångsspänning för ADC-omvandling är + 5V. Så vi kan ställa in maximalt värde eller referens för ADC till 5V.
3. Styrenheten har en utlösningsomvandlingsfunktion som innebär att ADC-omvandling endast sker efter en extern utlösare, eftersom vi inte vill att vi behöver ställa in registren för att ADC ska kunna köras i kontinuerligt frilöpande läge.
4. För varje ADC är omvandlingsfrekvensen (analogt värde till digitalt värde) och noggrannheten för digital utgång omvänt proportionell. Så för bättre noggrannhet för digital utgång måste vi välja lägre frekvens. För normal ADC-klocka ställer vi in förförsäljningen av ADC till maximalt värde (2). Eftersom vi använder den interna klockan på 1MHZ kommer klockan till ADC att vara (1000000/2).
Det här är de enda fyra sakerna vi behöver veta för att komma igång med ADC.
Alla ovanstående fyra funktioner är inställda av två register,
RÖD (ADEN): Denna bit måste ställas in för att aktivera ADC-funktionen i ATMEGA.
BLÅ (REFS1, REFS0): Dessa två bitar används för att ställa in referensspänningen (eller max ingångsspänningen vi ska ge). Eftersom vi vill ha referensspänning 5V, bör REFS0 ställas in enligt tabellen.
GUL (ADFR): Denna bit måste ställas in för att ADC ska kunna köras kontinuerligt (frilöpande läge).
PINK (MUX0-MUX3): Dessa fyra bitar är för att berätta ingångskanalen. Eftersom vi ska använda ADC0 eller PIN0 behöver vi inte ställa in några bitar som i tabellen.
BRUN (ADPS0-ADPS2): dessa tre bitar är för att ställa in prescalar för ADC. Eftersom vi använder en prescalar på 2 måste vi ställa in en bit.
MÖRK GRÖN (ADSC): denna bituppsättning för att ADC ska starta omvandlingen. Denna bit kan inaktiveras i programmet när vi behöver stoppa konverteringen.