Hva er ADC-er (Analog-til-Digital-omformere) og hvordan fungerer de?

Viktige takeaways

  • ADC-er er mye brukt til å konvertere analoge signaler, som lyd og lys, til digitale verdier som kan brukes i ulike applikasjoner.
  • Samplingsfrekvensen til en ADC bestemmer antall avlesninger per sekund, med høyere samplingsfrekvenser som muliggjør mer nøyaktig signalrepresentasjon.
  • Bithastigheten til en ADC påvirker kvaliteten på prøven som oppnås, med flere biter som resulterer i jevnere og mer presise målinger. Ulike typer ADC-er tilbyr forskjellige avveininger når det gjelder hastighet, presisjon og strømforbruk.

Analog-til-digital-omformere (ADC) er utrolig nyttige for å gjøre fenomener fra den virkelige verden til verdier vi kan bruke i programmeringsprosjekter. Men hvordan kan en ADC konvertere analoge signaler til digitale signaler vi kan bruke hvor som helst?

Hva brukes ADC-er til?

Du finner ADC-er omtrent overalt. De er på telefonen din og konverterer stemmen din til en rekke binære verdier. De er i bilen din og måler rotasjonen til hjulene dine. De er i oscilloskop, og hjelper til med å fange opp signaler og representere dem. Likevel, stedet de fleste vil ha brukt dem er video- og lydverdenen, der det å få lys og lyd inn i et digitalt rom er grunnleggende.

Hva er en prøvefrekvens? Hvordan påvirker samplingsfrekvensen en ADC?

En av de mest kritiske overskriftene til en ADC er samplingsfrekvensen: antall avlesninger tatt hvert sekund.

Et svært avansert oscilloskop kan ta ti milliarder prøver per sekund. Den spreke lille MCP3008 ADC kan ta relativt beskjedne to hundre tusen. I lydverdenen er en samplingshastighet på 44 100 per sekund (44,1 kHz) typisk.

Jo flere prøver vi tar, jo mer nøyaktig kan vi representere et signal. Noen ganger er dette viktig; noen ganger er det ikke det. La oss si at vi bygger en faderbank (designet for å kontrollere elektronikk, som du ser på et lys- eller lydbord) med noen få dusin potensiometre. I dette tilfellet er det usannsynlig at verdiene vi må måle vil endre seg millioner av ganger per sekund siden fingrene våre ikke kan bevege seg så raskt. Vi trenger bare nok prøver for at resultatet skal være jevnt og responsivt.

  Slik skjuler du databruksdetaljer i T-Mobile

Hva er Bitrate? Påvirker bitrate kvaliteten på en ADC?

Vi bør også tenke på kvaliteten på prøven vi får. Dette bestemmes i stor grad av bithastigheten, som forteller oss hvor mange på-av-tilstander vi kan bruke til å representere spenningen digitalt. Jo flere biter vi har, jo flere mulige verdier kan vi registrere i en gitt prøve, og jo jevnere og mer presist blir sluttresultatet.

Vi har skrevet om binær og hvordan det fungerer, så hvis du er usikker, er det et godt sted å komme i gang. Hvor mange bits trenger vi? Igjen, det avhenger av hva vi prøver å oppnå. Noen ganger kan vi være begrenset av protokollen vi bruker. For eksempel er MIDI 1.0-protokollen begrenset til syv-biters (og noen ganger fjorten-biters) verdier. I andre tilfeller kan den begrensende faktoren være menneskelig oppfatning. Hvis den økte troskapen ikke gir noen merkbar forbedring i resultatet, er det kanskje ikke verdt det.

Hvordan forbedrer multipleksing ADC-kvaliteten?

Populære ADC-brikker som ADS1115 og MCP3008 tilby mange innspill. Men under panseret inneholder de egentlig bare en enkelt ADC. Dette er mulig på grunn av multiplekserne innebygd i disse enhetene. Multipleksere er absolutt overalt i verden av elektronikk og telekommunikasjon. De er digitale brytere som fungerer som trafikkkontroll for din ADC. ADC-en kan prøve én kanal, og deretter den neste, og deretter den neste. Så hvis du har åtte kanaler og en samplingsfrekvens på 200 000, kan du rotere gjennom alle og ta 25 000 prøver per kanal.

Hvilke typer ADC finnes det?

ADC-er fungerer på forskjellige måter, avhengig av kostnadene og egenskapene som kreves.

En Flash ADC fungerer via en svært kompleks spenningsdeler. En motstandsbank deler referansespenningen i trinn, som deretter testes mot inngangen via en komparatorbank. Flash ADC-er er lynraske, men de er begrenset når det kommer til bitdybde på grunn av antallet komparatorer som kreves. De er også maktsyke av samme grunn.

En subranging ADC søker å oppveie disse svakhetene ved å dele arbeidet mellom to separate enheter: en for å beregne spenningen grovt og deretter en annen for å regne ut den nøyaktig. Ved å dele opp ting kan vi redusere antall komparatorer. Noen subranging ADC-er vil dele arbeidet i tre stadier, med feilretting innebygd underveis.

  Et sprang fremover eller et arbeid som pågår?

SAR (Successive Approximation Register) ADC-er gjør jobben sin via et slags binært søk. Anta at vi har åtte biter å fylle. SAR vil starte fra 10000000, som er den midterste verdien (00000000 er bunnen og 11111111 er toppen). Hvis spenningen overskrider dette midtpunktet, vil SAR beholde sifferet lengst til venstre som 1; hvis den ikke gjør det, vil SAR sette sifferet lengst til venstre til 0. Vi kan gjenta prosessen med neste siffer og så videre rekursivt. Dette vil føre til at den gjettede verdien gradvis beveger seg mot den faktiske verdien:

På denne måten begrenser vi søket kontinuerlig, deler mulighetene i to og spør om resultatet er høyere eller lavere enn midtpunktet. I dette tilfellet er verdien et sted mellom 0 og 255; etter noen gjentakelser har ADC funnet ut at det er rundt 77.

Sigma-delta-omformere er sannsynligvis de vanskeligste å forstå. De brukes til høypresisjonsmusikk- og signalmålingsapplikasjoner. De fungerer ved å oversample et signal og avgrense resultatet ved å bruke djevelsk komplisert filtrering og matematikk. Denne prosessen reduserer effektivt prøvehastigheten samtidig som presisjonen økes. Disse ADC-ene er flotte når støy og presisjon betyr mer enn hastighet.

Til slutt har vi integrerende ADC-er, som er enda tregere enn sigma-delta-er. De arbeider ved hjelp av en kondensator, hvis ladningshastighet kan brukes til å bestemme inngangsspenningen. Samplingsfrekvensen her er ofte synkronisert med strømforsyningsfrekvensen, som kan brukes til å holde støy på et absolutt minimum.

Hva er Nyquist-Shannon-teori?

La oss si at vi ønsker å beskrive et analogt signal digitalt. For å gjøre dette trenger vi minst to poeng for hver gitt syklus: en på toppen og en på bunnen. Derfor må samplingsfrekvensen vår være minst det dobbelte av den høyeste frekvensen vi forventer å måle.

Dette er kjent som Nyquist-frekvensen, etter den svensk-amerikanske fysikeren Harry Nyquist. Teorien er oppkalt etter Nyquist og Claude Shannon (en fremtredende matematiker og kryptograf), men ikke etter Edmund Whittaker, som kom på ideen før noen av dem.

Den vi krediterer teorien, er det et problem med den. Det er umulig å vite på forhånd når toppen og bunnen av en bølgeform kommer. Hva om vi tar prøvene våre midtveis opp i den innkommende bølgeformen? Legg merke til hvordan et skifte i det innkommende signalet kan flate ut det fangede resultatet fullstendig:

  Hvordan Zen of Python kan hjelpe deg med å skrive bedre kode

Eller til og med hallusinere nye bølgeformer som ikke en gang eksisterte før:

Disse hallusinasjonene er kjent som aliaser.

Problemet med aliasing

Du vil sannsynligvis være kjent med «vognhjul»-illusjonen som noen ganger oppstår når et snurrende objekt filmes. Hjulene på en bil, eller bladene på et helikopter, ser ut til å svinge bakover – bare veldig sakte. I noen tilfeller kan bladene stoppe helt (med ærlig talt rare resultater – sjekk ut videoen nedenfor!).

Mens du spiller et eldre videospill, har du kanskje også lagt merke til at parallelle linjer noen ganger produserer merkelige vridningsartefakter. Gjerder, trapper og stripete gensere begynner å se veldig merkelige ut. Eller hva med de merkelige plystrelydene du noen ganger får når du hører på noen som snakker over en digital tilkobling av dårlig kvalitet? Det er forvrengning, men en spesiell form for forvrengning. Hva er det med alle de stygge frekvensene som kommer fra støyen? Hvis du lytter til harmonisk innhold, som et trommesett, er effekten enda tydeligere – spesielt i den høye enden.

Hvis du forstår årsaken til en av disse, er du på vei til å forstå dem alle. Når det gjelder vognhjulet, betyr den faste bildefrekvensen at vi ikke kan fange opp bevegelsen ordentlig. Hvis noe roterer 350° hver ramme, er det bare naturlig å oppfatte at det faktisk er flyttet bakover med 10°. Med andre ord, det er ikke nok informasjon til å representere hva som skjer. Prøvene vi tar er feil på linje med det vi prøver å måle.

Dette er ikke et problem som er unikt for analog-digital konvertering. I mange av disse tilfellene konverterer vi en type digitalt signal til et annet.

Så, hva er løsningen? Det er flere. Vi kan bruke et spesielt filter for å håndtere disse artefaktene, som er det mange ADC-er gjør under panseret. Eller vi kan ta mange, mange flere prøver enn vi trenger. Jo flere prøver vi tar, desto mer nøyaktig blir bildet vårt av bølgen:

Prøve med høyere kvalitet for de beste resultatene

Hvis du finner denne typen ting interessant, er den gode nyheten at vi knapt har dyppet tåen i dette emnet. Det er dybder her: ADC-er er ekstremt kompliserte.

Men fra sluttbrukerens eller den gjennomsnittlige Arduino-entusiastens synspunkt, er de også veldig enkle. Spenninger går inn, og tall kommer ut. Så uansett hva du prøver å måle – enten det er fuktighetsinnholdet i en jordflekk, svingningene til en menneskelig stemmeboks eller en strøm av fotoner som brytes gjennom en linse – er sjansene gode for at det er en ADC som vil gjøre jobb.