Hoppa till huvudinnehållet
8. Analoga signaler

A/D-omvandling och upplösning

Hur en A/D-omvandlare med N bitar och en referensspänning delar upp spänningsområdet i nivåer, hur ett analogRead-värde blir en spänning och tillbaka, och vad samplingsfrekvensen och ett filter före omvandlaren kräver.

Översikt

Antalet bitar bestämmer antalet nivåer och steget

En A/D-omvandlare mäter en spänning mellan 0 V och en referensspänning UrefU_{ref} och svarar med ett heltal. Med NN bitar finns 2N2^N möjliga värden, heltalen från 0 till 2N−12^N - 1. Det högsta talet är ett mindre än antalet nivåer, eftersom noll också är ett värde. Spänningsområdet delas i lika stora steg, och kvantiseringssteget, den minsta spänningsändring som ger ett annat tal, är ΔU=Uref2N\Delta U = \dfrac{U_{ref}}{2^N}. Fler bitar ger finare upplösning, och varje extra bit halverar steget. Kvantiseringsfelet är som mest ett halvt steg om omvandlaren avrundar till närmaste tal och ett helt steg om den trunkerar. Upplösning är inte detsamma som noggrannhet, för brus, offset och förstärkningsfel kan vara större än ett steg.

Översikt

analogRead ger ett tal som skalas med referensspänningen

I Arduino-miljön returnerar analogRead(pin) ett heltal n som anger var på skalan från 0 till referensspänningen ingångsspänningen ligger. Spänningen får man tillbaka genom att skala med hela området: U=n2N−1⋅UrefU = \dfrac{n}{2^N - 1} \cdot U_{ref}. Det högsta talet 2N−12^N - 1 motsvarar UrefU_{ref}, och därför står 2N−12^N - 1 i nämnaren och inte 2N2^N. Omvänt ger ingångsspänningen U talet n=UUref⋅(2N−1)n = \dfrac{U}{U_{ref}} \cdot (2^N - 1), avrundat till närmaste heltal. Raden i programkoden avslöjar vilken omvandlare programmet förutsätter: nämnaren är 2N−12^N - 1 för en omvandlare med NN bitar, och faktorn är referensspänningen. För en 12-bitars omvandlare med 3.3 V som referens är en skalande C-rad “spanning = (varde / 4095.0) * 3.3”, där delningen görs med flyttalet 4095.0. Delar man i stället två heltal, som varde / 4095, blir det heltalsdivision som ger 0 för varje tal under det högsta. Antal bitar och referensspänning beror på kortet och på inställningen.

Översikt

Samplingsfrekvensen måste vara minst dubbelt så hög som signalens högsta frekvens

En A/D-omvandlare mäter inte kontinuerligt utan tar prov med samplingsfrekvensen fsf_s. För att en signal vars högsta frekvens är fmaxf_{max} ska kunna återskapas måste fs>2⋅fmaxf_s > 2 \cdot f_{max} gälla. Är samplingen långsammare uppstår aliasing: en frekvens f över hälften av fsf_s viks ner och syns i mätdata som den lägre frekvensen falias=∣f−k⋅fs∣f_{alias} = |f - k \cdot f_s|, där k väljs så att resultatet blir så litet som möjligt. Aliasing går inte att ta bort i efterhand, eftersom den nedvikta signalen ser ut som en verklig signal. Därför lägger man ett lågpassfilter före omvandlaren som dämpar allt över hälften av fsf_s innan det når omvandlaren. Samma filter dämpar störningar, och det är anledningen till att ett aktivt filter ofta sitter mellan sensorn och A/D-omvandlaren.

Exempel

Exempel: från tal till spänning och tillbaka

En 12-bitars omvandlare har referensspänningen 3.3 V. Då finns 212=40962^{12} = 4096 nivåer, det högsta talet är 212−1=40952^{12} - 1 = 4095 och steget är ΔU=3.34096≈0.806 mV\Delta U = \dfrac{3.3}{4096} \approx 0.806\ \mathrm{mV}. Läser programmet talet 2730 blir spänningen U=27304095⋅3.3=2.20 VU = \dfrac{2730}{4095} \cdot 3.3 = 2.20\ \mathrm{V}. Omvänt ger ingångsspänningen 0.75 V talet n=0.753.3⋅4095≈930.7n = \dfrac{0.75}{3.3} \cdot 4095 \approx 930.7, som avrundas till 931. Räknar man tillbaka från 931 får man U=9314095⋅3.3≈0.7503 VU = \dfrac{931}{4095} \cdot 3.3 \approx 0.7503\ \mathrm{V}, vilket skiljer 0.3 mV från ingångsspänningen och är mindre än ett halvt steg, 0.40 mV.

Exempel

Exempel: hur många bitar som behövs, och förstärkarens roll

Vill man ha ett steg på högst 0.2 mV med referensspänningen 2.5 V måste N≥log⁡2 ⁣(UrefΔU)N \ge \log_2\!\left(\dfrac{U_{ref}}{\Delta U}\right) gälla. Här blir N≥log⁡2 ⁣(2.50.2⋅10−3)=log⁡212500≈13.6N \ge \log_2\!\left(\dfrac{2.5}{0.2 \cdot 10^{-3}}\right) = \log_2 12500 \approx 13.6, så minst 14 bitar behövs, eftersom 13 bitar bara ger steget 0.31 mV. En sensor ger 0 till 0.60 V till en 12-bitars omvandlare med 3.3 V som referens. Utan förstärkning används bara ungefär 745 av de 4096 nivåerna. Den högsta förstärkning som inte ger mer än referensspänningen är A≤3.30.60=5.5A \le \dfrac{3.3}{0.60} = 5.5. Med förstärkningen 4 når signalen 2.4 V och ungefär 2980 nivåer används. Steget omräknat till sensorns spänning är då 0.806 mV4≈0.20 mV\dfrac{0.806\ \mathrm{mV}}{4} \approx 0.20\ \mathrm{mV}, mot 0.806 mV utan förstärkaren.

Exempel

Exempel: aliasing och filter före omvandlaren

En signal på 700 Hz samplas med fs=1000 Hzf_s = 1000\ \mathrm{Hz}. Det är för lågt, eftersom det krävs fs>2⋅700=1400 Hzf_s > 2 \cdot 700 = 1400\ \mathrm{Hz}, och signalen syns i mätdata som ∣700−1000∣=300 Hz|700 - 1000| = 300\ \mathrm{Hz}. Samplar man i stället med fs=2000 Hzf_s = 2000\ \mathrm{Hz} är kravet uppfyllt för signalen, men en störning på 1700 Hz viks ner till ∣1700−2000∣=300 Hz|1700 - 2000| = 300\ \mathrm{Hz} och hamnar mitt i signalens frekvensområde. Den måste därför dämpas av ett lågpassfilter före omvandlaren, som kraftigt dämpar 1700 Hz men släpper igenom 700 Hz.

Fördjupning

Fallgrop: 2^N eller 2^N − 1, heltalsdivision och fel referens

Fem fel är vanliga. Det första är att blanda ihop antalet nivåer 2N2^N med det högsta talet 2N−12^N - 1. Skalningen från tal till spänning ska ha 2N−12^N - 1 i nämnaren, medan steget kan skrivas med 2N2^N, och skillnaden spelar ingen roll vid många bitar. Det andra är heltalsdivision i programkoden, som ger 0 för nästan alla tal. Det tredje är fel referensspänning. Omvandlaren mäter relativt UrefU_{ref}, inte relativt matningsspänningen eller ett värde man antar, så en ändrad referens skalar om alla spänningar. Det fjärde är att tro att fler bitar ger bättre noggrannhet av sig själva, när brus och offset kan vara större än steget. Det femte är att mäta en liten signal utan förstärkning, eftersom bara en liten del av nivåerna då används och steget blir stort i förhållande till signalen. Bitarna avgör också bara upplösningen i spänning, medan samplingsfrekvensen avgör upplösningen i tid.

Formler i området

Kvantiseringssteg i A/D-omvandlaren

ΔU=Uref2N\Delta U = \dfrac{U_{ref}}{2^N}
Vad gör formeln?
Spänningsområdet delas i 2^N lika stora steg, och varje extra bit halverar steget.
När får den användas?
Uref är referensspänningen, den högsta spänning omvandlaren mäter, och N antalet bitar. Omvandlaren har 2^N nivåer med tal från 0 till 2^N − 1. ΔU är den spänningsändring som motsvarar ett steg i talet, alltså upplösningen. Vill man vara konsekvent med skalningen i analogRead-koden kan man använda Uref/(2^N − 1); skillnaden är försumbar vid många bitar. Kvantiseringsfelet är högst ett halvt steg om värdet avrundas.

A/D-tal till spänning

U=n2N−1⋅UrefU = \dfrac{n}{2^N - 1} \cdot U_{ref}
Vad gör formeln?
Talet skalas mot det högsta möjliga talet och multipliceras med referensspänningen för att ge ingångsspänningen.
När får den användas?
n är heltalet omvandlaren ger, till exempel från analogRead, N antalet bitar och Uref referensspänningen. Det högsta talet 2^N − 1 motsvarar Uref. Omvänt är n = U/Uref · (2^N − 1), avrundat till närmaste heltal. I kod ska delningen göras med ett flyttal, till exempel 4095.0, annars blir heltalsdivisionen 0.

Kan du använda a/d-omvandling och upplösning?

Lös en riktig tentauppgift från MF1016/MF1017/MF1023 med ledtrådar och facit. Inget konto behövs.

Prova en uppgift