Vad är ADC:er (Analog-to-Digital Converters) och hur fungerar de?

Viktiga takeaways

  • ADC:er används ofta för att omvandla analoga signaler, som ljud och ljus, till digitala värden som kan användas i olika applikationer.
  • Samplingshastigheten för en ADC bestämmer antalet avläsningar som tas per sekund, med högre samplingshastigheter som möjliggör en mer exakt signalrepresentation.
  • Bithastigheten för en ADC påverkar kvaliteten på provet som erhålls, med fler bitar som resulterar i jämnare och mer exakta mätningar. Olika typer av ADC erbjuder olika avvägningar när det gäller hastighet, precision och strömförbrukning.

Analog-till-digital-omvandlare (ADC) är otroligt användbara för att omvandla verkliga fenomen till värden som vi kan använda i programmeringsprojekt. Men hur kan en ADC konvertera analoga signaler till digitala som vi kan använda var som helst?

Vad används ADC för?

Du hittar ADC:er nästan överallt. De finns på din telefon och omvandlar din röst till en rad binära värden. De är i din bil och mäter dina hjuls rotation. De är i oscilloskop och hjälper till att fånga signaler och representera dem. Ändå är den plats de flesta kommer att ha använt dem i världen av video och ljud, där det är grundläggande att få in ljus och ljud i ett digitalt utrymme.

Vad är en samplingsfrekvens? Hur påverkar samplingsfrekvensen en ADC?

En av de mest kritiska rubrikmåtten för en ADC är samplingsfrekvensen: antalet avläsningar som tas varje sekund.

Ett mycket högklassigt oscilloskop kan ta tio miljarder prover per sekund. Den modiga lilla MCP3008 ADC kan ta relativt blygsamma tvåhundratusen. I ljudvärlden är en samplingshastighet på 44 100 per sekund (44,1 kHz) typisk.

Ju fler prover vi tar, desto mer exakt kan vi representera en signal. Ibland är detta viktigt; ibland är det inte det. Låt oss säga att vi bygger en faderbank (designad för att styra elektronik, som du skulle se på ett ljus- eller ljudbord) med några dussin potentiometrar. I det här fallet är det osannolikt att värdena vi behöver mäta kommer att förändras miljontals gånger per sekund eftersom våra fingrar inte kan röra sig så snabbt. Vi behöver bara tillräckligt med prover för att resultatet ska bli smidigt och responsivt.

Vad är Bitrate? Påverkar bithastighet kvaliteten på en ADC?

Vi bör också tänka på kvaliteten på provet vi får. Detta bestäms till stor del av bithastigheten, som talar om för oss hur många på/av-lägen vi kan använda för att digitalt representera spänningen. Ju fler bitar vi har, desto fler möjliga värden kan vi registrera i ett givet prov och desto jämnare och mer exakt blir slutresultatet.

Vi har skrivit om binär och hur det fungerar, så om du är osäker är det ett bra ställe att börja. Hur många bitar behöver vi? Återigen, det beror på vad vi försöker åstadkomma. Ibland kan vi vara begränsade av protokollet vi använder. Till exempel är MIDI 1.0-protokollet begränsat till sju-bitars (och ibland fjorton-bitars) värden. I andra fall kan den begränsande faktorn vara människans uppfattning. Om den ökade troheten inte ger någon märkbar förbättring av resultatet kanske det inte är värt besväret.

Hur förbättrar multiplexering ADC-kvaliteten?

Populära ADC-chips som ADS1115 och den MCP3008 erbjuda många ingångar. Men under huven innehåller de egentligen bara en enda ADC. Detta är möjligt på grund av de inbyggda multiplexorerna i dessa enheter. Multiplexrar finns absolut överallt i världen av elektronik och telekommunikation. De är digitala switchar som fungerar som trafikkontroll för din ADC. ADC:n kan sampla en kanal och sedan nästa och sedan nästa. Så om du har åtta kanaler och en samplingsfrekvens på 200 000 kan du rotera genom dem alla och ta 25 000 samplingar per kanal.

Vilka typer av ADC finns det?

ADC:er fungerar på olika sätt, beroende på kostnad och kapacitet som krävs.

En Flash ADC fungerar via en mycket komplex spänningsdelare. En resistorbank delar upp referensspänningen i steg, som sedan testas mot ingången via en komparatorbank. Flash ADC: er är blixtsnabb, men de är begränsade när det kommer till bitdjup på grund av antalet komparatorer som krävs. De är också makthungriga av samma anledning.

En subranging ADC försöker kompensera dessa svagheter genom att dela upp arbetet mellan två separata enheter: en för att grovt räkna ut spänningen och sedan en andra för att räkna ut den exakt. Genom att dela upp saker och ting kan vi minska antalet komparatorer. Vissa subranging ADCs kommer att dela upp arbetet i tre steg, med felkorrigering inbyggd längs vägen.

SAR (Successive Approximation Register) ADC:er gör sitt arbete via en sorts binär sökning. Anta att vi har åtta bitar att fylla. SAR startar från 10000000, vilket är mittvärdet (00000000 är det nedersta och 11111111 är det översta). Om spänningen överskrider denna mittpunkt kommer SAR:n att behålla siffran längst till vänster som 1; Om den inte gör det kommer SAR siffran längst till vänster till 0. Vi kan upprepa processen med nästa siffra och så vidare rekursivt. Detta kommer att få det gissade värdet att gradvis röra sig mot det faktiska värdet:

På så sätt begränsar vi hela tiden sökningen, delar upp möjligheterna på mitten och frågar om resultatet är högre eller lägre än mittpunkten. I det här fallet är värdet någonstans mellan 0 och 255; efter några iterationer har ADC räknat ut att det är runt 77.

Sigma-delta-omvandlare är förmodligen de svåraste att förstå. De används för musikaliska och signalmätande tillämpningar med hög precision. De fungerar genom att översampla en signal och förfina resultatet med hjälp av djävulskt komplicerad filtrering och matematik. Denna process minskar effektivt samplingshastigheten samtidigt som precisionen ökar. Dessa ADC:er är fantastiska när brus och precision betyder mer än hastighet.

Slutligen har vi integrerade ADC:er, som är ännu långsammare än sigma-delta. De arbetar med hjälp av en kondensator, vars laddningshastighet kan användas för att bestämma inspänningen. Samplingsfrekvensen här är ofta synkroniserad med strömförsörjningsfrekvensen, vilket kan användas för att hålla brus till ett absolut minimum.

Vad är Nyquist-Shannon teori?

Låt oss säga att vi vill beskriva en analog signal digitalt. För att göra detta behöver vi minst två poäng för varje given cykel: en överst och en längst ner. Därför måste vår samplingsfrekvens vara minst två gånger den högsta frekvensen vi förväntar oss att mäta.

Detta är känt som Nyquist-frekvensen, efter den svensk-amerikanske fysikern Harry Nyquist. Teorin är uppkallad efter Nyquist och Claude Shannon (en framstående matematiker och kryptograf) men inte efter Edmund Whittaker, som kom på idén före någon av dem.

Vem vi än krediterar teorin så finns det ett problem med den. Det är omöjligt att veta i förväg när toppen och botten av en vågform kommer. Vad händer om vi tar våra prover halvvägs upp i den inkommande vågformen? Observera hur en förändring i den inkommande signalen kan platta ut vårt fångade resultat helt:

Eller till och med hallucinera nya vågformer som inte ens existerade tidigare:

Dessa hallucinationer är kända som alias.

Problemet med aliasing

Du kommer förmodligen att vara bekant med illusionen av ”vagnhjul” som ibland uppstår när ett snurrande föremål filmas. Hjulen på en bil, eller bladen på en helikopter, verkar svänga bakåt – bara väldigt långsamt. I vissa fall kan bladen stanna helt (med uppriktigt sagt konstiga resultat – kolla in videon nedan!).

När du spelar ett äldre videospel kanske du också har märkt att parallella linjer ibland producerar konstiga skevningsartefakter. Staket, trappor och randiga byglar börjar se väldigt konstiga ut. Eller vad sägs om de konstiga visslande ljuden du ibland får när du lyssnar på någon som pratar över en digital anslutning av dålig kvalitet? Det är distorsion, men en speciell typ av distorsion. Vad är det med alla dessa fula frekvenser som kommer fram från bruset? Om du lyssnar på harmoniskt rikt innehåll, som ett trumset, är effekten ännu mer uppenbar – särskilt i high end.

Om du förstår orsaken till en av dessa, är du på väg att förstå dem alla. När det gäller vagnhjulet innebär den fasta bildhastigheten att vi inte kan fånga rörelsen ordentligt. Om något roterar 350° varje bildruta är det bara naturligt att uppfatta att det faktiskt har flyttats bakåt med 10°. Med andra ord, det finns inte tillräckligt med information för att troget representera vad som händer. Proverna vi tar är felinriktade med det vi försöker mäta.

Detta är inte ett problem som är unikt för analog-digital konvertering. I många av dessa fall konverterar vi en typ av digital signal till en annan.

Så, vad är lösningen? Det finns flera. Vi skulle kunna använda ett speciellt filter för att hantera dessa artefakter, vilket är vad många ADC:er gör under huven. Eller så kan vi ta många, många fler prover än vi behöver. Ju fler prover vi tar, desto mer exakt blir vår bild av vågen:

Prov med högre kvalitet för bästa resultat

Om du tycker att sånt här är intressant är den goda nyheten att vi knappt har fördjupat oss i detta ämne. Det finns djup att göra här: ADC:er är extremt komplicerade.

Men ur slutanvändarens eller den genomsnittlige Arduino-entusiastens synvinkel är de också väldigt enkla. Spänningar går in och siffror kommer ut. Så vad du än försöker mäta – oavsett om det är fukthalten i en jordfläck, svängningarna i en mänsklig röstlåda eller en ström av fotoner som bryts genom en lins – är chansen god att det finns en ADC som kommer att göra jobb.