Arduino programmerbar konstant nuvarande Power motstånd konstlast (6 / 16 steg)
Steg 6: MCP3204 - ADC
En ADC (analog till Digital omvandlare) hjälper oss att läsa en analog spänning och konvertera den till en digital binärt tal som gör att mikro-controller under stå det. Denna MCP3204 (datablad) ADC görs av mikrochip och använder ett SPI gränssnitt för kommunikation med mikro-controller. Jag kommer att prata mer om SPI senare i ytterligare ett steg.
Stift för MCP3204 är följande,
- Ingång för ADC kanal 0.
- Ingång för ADC kanal 1.
- Ingång för ADC kanal 2.
- Ingång för ADC kanal 3.
- Inte ansluten internt.
- Inte ansluten internt.
- Digital mark - projektet använder en gemensam grund.
- Detta är en aktiv låg Chip Välj stift används för SPI gränssnitt (förklaras i ett senare steg).
- Detta är data i, ibland kallas MOSI används för SPI gränssnitt (förklaras i ett senare steg).
- Detta är data, ibland kallas MISO används för SPI gränssnitt (förklaras i ett senare steg).
- Seriell klocka pin används för SPI gränssnitt (förklaras i ett senare steg).
- Analog ground - projektet använder en gemensam grund.
- Input Voltage referens.
- Vdd - leverans spänning pin - 5V
Strängt taget, jag behövde verkligen inte att inkludera en separat ADC i designen som ATMega32U4 har en inbyggd 10 bitars ADC, men det finns två huvudsakliga skäl jag gjorde,
- Bättre upplösning
- Eftersom jag ville spela med en!
Som ni förmodligen redan vet är mikro-styrenheter digital, digital produkter fungerar bara på 0 och 1. En digital enhet kan inte av sig själv, läsa ett jämförbart värde som en spänning eller 3.21V. Digitala produkter kan bara läsa logik värden, till exempel 0v "det är", 5v "det är".
Innan vi kommer för långt in, lite på vad binary är, binära är en bas 2 nummersystem, det betyder att det kan bara räkna 2 steg innan tickar till nästa siffra.
0
1
Våra normala numreringssystem, det decimal-systemet, är en bas 10 nummersystem, kan vi räkna 10 steg före tickar till nästa siffra.
0
1
2
3
4
5
6
7
8
9
Här är ett exempel på vad 0 till 7 ser ut som i binärt,
0 0
1 1
2 10
3 11
4 100
5 101
6 110
7 111
Varje siffra är känd som "lite" och 8 bitar är en "byte" så maximalt decimal kan du räkna med en 8-bitars binärt tal är 255. Så det är 256 olika värden eftersom vi inkluderar 0 som ett värde.
0 0
.. ..
.. ..
255 11111111
Upplösningen på en ADC representerar hur många bitar eller steg i en binär nummer det kan mäta ett jämförbart värde och konvertera den till digital binärt tal, till exempel
- 8 bitars ADC kan mäta 256 steg = 2 upphöjt till 8
- 10 bitars ADC kan mäta 1024 steg = 2 upphöjt till 10
- 12 bitars ADC kan mäta 4096 steg = 2 upphöjt till 12
Jag gissar att detta inte gör mycket känsla ändå, det är OK, kommer det.
Alla ADCs måste använda en referens spänning, detta referensspänningen tillåter ADC att jämföra spänningen sin behandling mot referensspänningen och returnera en procentandel som den binära tal. OK, exempel är tid för en 8 bitars ADC, det maximala antalet steg det kan bryta referensspänningen upp till 256 (inte Glöm 0V), så för att underlätta, kan göra våra referensspänningen 255v (det skulle inte vara men kan bara gå med det), om den spänning ADC läser 255v, jämför det med referensspänningen och säger , OK dess 100% av min referensspänningen så im kommer för att skicka dig den högsta digitalt värdesätter jag kan, 255. Du kan läsa det igen och dess nu 128V, det säger OK, dess nu endast 50% av min referensspänningen så jag kommer att skicka dig 50% av min binärt värde, 128.
För vår exempel tidigare, hade vi en referens spänning på 255V och vi hade 256 steg, så det är lätt, det går att läsa i 1V steg, vad händer om vi behövde för att läsa 0.1V steg? Jo det är bara jobbigt, eftersom en 8 bitars ADC kan bara räkna till 256. Det är där en högre upplösning ADC kommer in. Nu kan jämföra mot en 100V referensspänningen så vi kan se fördelarna med att använda en ADC med en högre upplösning.
8 bit = 256 steg, vi delar våra referensspänningen med vår resolution att ta reda på vilka spänning skillnader våra ADC kan läsa, 100 / 256 = 0.39V. Så den lägsta våra 8 bitar kan läsa är 0.39V, då nästa värde kommer att 0.78V
10 bit = 1024 steg, 100/1024 = 0.098V. Så den lägsta våra 10 bitars kan läsa är 0.098v, då nästa värde kommer att 0.196V. Mycket mycket mindre klyftan mellan avläsningarna.
12 bitars = 4096 steg, 100/4096 = 0.024v. Så den lägsta våra 12 bitar kan läsa är 0.024v, då nästa värde kommer att vara 0.048v och så vidare. Då blir det 4096 olika värden innan den når full 100V.
Som ni ser, är det en mycket mycket bättre precision högre upplösning du går.