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 och svarar med ett heltal. Med bitar finns möjliga värden, heltalen från 0 till . 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 . 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: . Det högsta talet motsvarar , och därför står i nämnaren och inte . Omvänt ger ingångsspänningen U talet , avrundat till närmaste heltal. Raden i programkoden avslöjar vilken omvandlare programmet förutsätter: nämnaren är för en omvandlare med 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 . För att en signal vars högsta frekvens är ska kunna återskapas måste gälla. Är samplingen långsammare uppstår aliasing: en frekvens f över hälften av viks ner och syns i mätdata som den lägre frekvensen , 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 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 nivåer, det högsta talet är och steget är . Läser programmet talet 2730 blir spänningen . Omvänt ger ingångsspänningen 0.75 V talet , som avrundas till 931. Räknar man tillbaka från 931 får man , 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 gälla. Här blir , 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 . 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å , mot 0.806 mV utan förstärkaren.
Exempel
Exempel: aliasing och filter före omvandlaren
En signal på 700 Hz samplas med . Det är för lågt, eftersom det krävs , och signalen syns i mätdata som . Samplar man i stället med är kravet uppfyllt för signalen, men en störning på 1700 Hz viks ner till 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 med det högsta talet . Skalningen från tal till spänning ska ha i nämnaren, medan steget kan skrivas med , 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 , 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
- 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
- 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.