← Kursens material Analogt och digitalt · område 4 Område 4

Område 4 · lektion 18

Analogt och digitalt

Varje insignal du läst hittills har varit en etta eller en nolla. Knappen är nere eller uppe, luckan är stängd eller öppen. Men temperaturen i rummet är inte av eller på, och ljuset utanför fönstret är det inte heller. Den här guiden handlar om vad som händer i det ögonblick då kortet ska översätta en storhet som glider mjukt till ett tal med ett bestämt antal steg – och om hur man räknar på vad ett sådant steg är värt.

Mål

Genomgång

Världen är analog, kortet är det inte

En analog storhet kan anta vilket värde som helst inom sitt område, utan hopp. Temperaturen i rummet är 21,4 °C, och på vägen dit från 21,3 passerade den 21,37 och 21,384 och varje tal däremellan. En digital signal har ett bestämt antal tillåtna värden. digitalRead ger två: LOW eller HIGH. Inget däremellan finns.

Det gör digitalRead odugligt för allt som har en grad. Sätter du en ljusgivare på en digital ingång får du veta att det är ljust eller mörkt, med en gräns du inte valt och inte kan flytta. Du får inte veta hur ljust.

Mellan de två världarna sitter en analog-digital-omvandlare, förkortad ADC. Den finns inbyggd i mikrokontrollern och den gör en enda sak: mäter en spänning och lämnar ett heltal. På Uno-kortet är de sex pinnarna A0 till A5 kopplade till den.

Omvandlingen kastar bort information, alltid Det finns oändligt många spänningar mellan 0 och 5 V och bara 1024 tal att lägga dem i. Två spänningar som ligger tillräckligt nära varandra får därför samma tal, och när talet är taget går skillnaden inte att få tillbaka. Det är inte ett fel i kortet utan vad omvandling betyder. Frågan är aldrig om information går förlorad utan om det som går förlorat är mindre än det du bryr dig om.

analogRead: tio bitar, 1024 steg

analogRead(A0) lämnar ett heltal. Omvandlaren i ATmega328P har tio bitars upplösning, vilket betyder att talet byggs av tio ettor och nollor. Antalet möjliga tal blir

2¹⁰ = 1024 olika värden, alltså 0 … 1023

Precis som med millis() i förra området är det översta värdet ett mindre än antalet, eftersom räkningen börjar på noll. 1023 är taket, inte 1024.

Vad de talen betyder i volt bestäms av omvandlarens referensspänning. Som kortet levereras är referensen kortets egen 5 V-matning, kallad AVcc. Talet 0 svarar mot 0 V och hela skalan mot referensen. Ett steg är alltså värt

5,0 V / 1024 = 0,00488 V = 4,9 mV

Knappt fem millivolt. Det är omvandlarens finaste upplösning, och det är en gräns du inte kan komma under hur mycket du än räknar i efterhand.

För att gå från ett råvärde till volt skriver Arduino-exemplen genomgående

U = rå · 5,0 / 1023

Räknat på ett råvärde mitt på skalan:

U = 512 · 5,0 / 1023 = 2560 / 1023 = 2,50 V

1023 eller 1024 i nämnaren? Steget är 5/1024, men omräkningen ovan delar med 1023. Båda förekommer, och skillnaden är som mest ett enda steg – knappt 5 mV vid toppen av skalan. Delar du med 1024 blir det största råvärdet 1023 lika med 4,995 V; delar du med 1023 blir det jämnt 5,000 V. Använd 1023 som resten av Arduino-världen gör, och lägg inte tid på skillnaden: den är mindre än det fel din matningsspänning ändå har. Det senare tar vi hand om i guiden om kalibrering.

Hur lång tid en avläsning tar

Omvandlaren har en egen klocka, som kortet delar ned från sina 16 MHz. Som Arduino-miljön ställer in den blir den

16 000 000 Hz / 128 = 125 000 Hz

En omvandling tar 13 av den klockans cykler, alltså

13 / 125 000 = 0,000104 s = 104 µs

Drygt en tiondels millisekund. Det innebär ett tak på ungefär

1 s / 104 µs = 1 / 0,000104 = 9 615 avläsningar i sekunden

Knappt tiotusen i sekunden, alltså. Vi rundar av till 9 600 i det som följer.

Två saker följer av det. Ett analogRead är inte gratis – det tar ett par tiotal gånger längre tid än ett digitalRead, som ligger på några få mikrosekunder, och sexton avläsningar i rad kostar 16 · 104 µs ≈ 1,7 ms. Men det är inte heller dyrt jämfört med ett delay(). En loop som gör en handfull avläsningar per varv går fortfarande hundratals varv i sekunden.

Spänningsdelaren, härledd

Omvandlaren mäter spänning. En givare som ändrar sin resistans lämnar ingen spänning alls – ett motstånd ensamt gör ingenting. Konstruktionen som gör om det ena till det andra heter spänningsdelare, och den är område 1:s seriekoppling en gång till.

Kopplingsschema över en spänningsdelare. Överst en anslutning märkt 5 V. Från den går en lodrät ledning ned till ett stående motstånd märkt R1, vidare till en punkt märkt Uut där en ledning grenar av åt höger till en anslutning märkt A0, och därifrån ned genom ett andra stående motstånd märkt R2 till en jordsymbol längst ned. 5 V R1 R2 A0 Uut

Nu härleder vi formeln i stället för att slå upp den. Kalla matningen Uin. Två motstånd i serie har den sammanlagda resistansen

R = R1 + R2

Ohms lag ger strömmen genom slingan:

I = Uin / (R1 + R2)

Den strömmen går genom båda motstånden, eftersom det inte finns någon annan väg. Spänningen över R2 blir därför, återigen med Ohms lag:

Uut = I · R2 = Uin · R2 / (R1 + R2)

Det är hela formeln, och den är ingenting annat än Ohms lag två gånger. Läs den sista raden som ett bråk: R2:s andel av den totala resistansen är också R2:s andel av spänningen. Sitter halva resistansen i R2 hamnar halva spänningen där.

Två räknade exempel

Exempel 1: två lika stora motstånd. R1 = R2 = 10 kΩ över 5,0 V.

Uut = 5,0 · 10 000 / (10 000 + 10 000) = 5,0 · 0,5 = 2,50 V

Vilket råvärde ger det? Vänd på omräkningen från förra avsnittet:

rå = 2,50 · 1023 / 5,0 = 511,5 ≈ 512

Mitt på skalan, som väntat.

Exempel 2: en givare som just nu har 4,7 kΩ. R1 = 10 kΩ fast, R2 = 4,7 kΩ.

Uut = 5,0 · 4 700 / (10 000 + 4 700) = 5,0 · 4 700 / 14 700 = 5,0 · 0,3197 = 1,60 V

rå = 1,60 · 1023 / 5,0 = 327

Kontrollera rimligheten innan du går vidare: R2 är mindre än R1, alltså ska mindre än halva spänningen hamna över R2, alltså ska råvärdet ligga under 512. Det gör 327. Den kontrollen tar två sekunder och fångar de flesta räknefel.

Att välja motståndsvärden

Två krav drar åt olika håll, och det är därför valet inte är godtyckligt.

För små motstånd slösar ström. Delaren i exempel 2 drar

I = 5,0 / 14 700 = 0,00034 A = 0,34 mA

och gör av med

P = U · I = 5,0 · 0,00034 = 0,0017 W = 1,7 mW

Det är försumbart mot ett kvarts watts motstånd, som klarar 250 mW. Hade du valt 100 Ω i stället för 10 kΩ hade strömmen blivit hundra gånger större och effekten likaså – fortfarande hanterbart på ett kort med nätsladd, men slöseri på ett batteridrivet bygge.

För stora motstånd stör omvandlaren. ADC:n mäter genom att först ladda upp en liten kondensator inuti kortet till den spänning som ligger på pinnen. Laddningen tar tid, och tiden växer med hur trögflytande källan är – alltså med resistansen. Databladet för ATmega328P rekommenderar därför att källan har en resistans på högst 10 kΩ. Blir den större hinner kondensatorn inte laddas färdigt, och råvärdet dras mot det du mätte förra gången.

Källans resistans, sedd från pinnen, är R1 och R2 parallellt:

10 000 · 4 700 / 14 700 = 47 000 000 / 14 700 = 3 200 Ω

3,2 kΩ, alltså med god marginal under gränsen. Motstånd i storleksordningen några kΩ upp till 10 kΩ träffar båda kraven, och det är därför nästan varje givarkoppling du ser på nätet använder just 10 kΩ. Nu vet du varför, i stället för att bara veta att den gör det.

I industrin och i vardagen

I industrin: en frekvensomriktare som styr en motors varvtal tar ofta sitt börvärde som en analog spänning 0–10 V på en ingång. Är omriktaren inställd på 0–50 Hz motsvarar en volt

50 Hz / 10 V = 5 Hz per volt

Inuti omriktaren sitter samma sorts omvandlare som i ditt kort, men med fler bitar. Med tolv bitar blir stegen

2¹² = 4096 steg, alltså 10 V / 4096 = 0,00244 V = 2,4 mV per steg

vilket i varvtal betyder

50 Hz / 4096 = 0,012 Hz per steg

Finare än någon process behöver, och det är själva poängen: upplösningen väljs så att omvandlingens fel hamnar under allt annat fel i kedjan. Signalen är dessutom bara en av två vanliga – den andra, strömslingan på 4–20 mA, mötte du i område 1:s guide om spänning, ström och resistans. Skillnaden mellan dem är att en spänningssignal är billig men känslig för långa kablar, medan en strömsignal kostar mer och tål dem.

I vardagen: ljudet i dina hörlurar har gått genom exakt den här omvandlingen två gånger. En mikrofon lämnar en analog spänning som följer lufttrycket. Den mäts, på cd-skivans standard, med 16 bitars upplösning

2¹⁶ = 65 536 steg

vilket är

65 536 / 1024 = 64 gånger finare än ditt kort

och 44 100 gånger i sekunden, alltså

44 100 / 9 600 = 4,6 gånger snabbare än ditt korts tak

Sedan går talen tillbaka till en spänning i en omvandlare åt andra hållet innan de når högtalarelementet. Att skivan låter som musik och inte som trappsteg beror på att stegen är mindre än örat kan höra – samma resonemang som med frekvensomriktaren, med en annan sorts mottagare. Ditt korts 1024 steg är för grova för musik och gott och väl tillräckliga för att läsa av ett rums temperatur.

Prova själv

  1. Koppla en potentiometer som spänningsdelare: ytterbenen till 5 V och GND, mittbenet till A0. Skriv ett program som gör Serial.println(analogRead(A0)); fyra gånger i sekunden med tidsstämpelmönstret från förra området. Vrid långsamt och kontrollera att du kommer åt både 0 och 1023.
  2. Skriv ut både råvärdet och den omräknade spänningen på samma rad. Ställ potentiometern så att seriemonitorn visar ungefär 2,50 V och mät sedan med multimetern mellan A0 och GND. Anteckna båda talen.
  3. Bygg exempel 2 ovan med två fasta motstånd, 10 kΩ och 4,7 kΩ. Räkna ut det väntade råvärdet innan du laddar upp, skriv ned det, och jämför sedan. Skiljer det mer än tio steg: mät motstånden med multimetern och räkna om med de uppmätta värdena.
  4. Byt plats på de två motstånden så att 4,7 kΩ hamnar överst. Förutsäg det nya råvärdet först. Kontrollera sedan.
  5. Låt A0 hänga löst, utan någonting inkopplat, och skriv ut råvärdet. Håll handen nära pinnen. Notera vad som händer – det är inget fel, och det förklaras i Vanliga fel nedan.

Kontrollfrågor

Hur många olika värden kan analogRead ge, och varför är det största 1023?

Tio bitar ger 2¹⁰ = 1024 olika värden. Räkningen börjar på 0, så värdena är 0 till 1023 – precis som åtta bitar ger 0 till 255 och inte 1 till 256.

Hur många millivolt är ett steg värt med standardreferensen, och vad följer av det?

5,0 / 1024 = 0,00488 V, alltså 4,9 mV. Det följer att en spänningsändring på två millivolt inte alltid syns i råvärdet, och att det är meningslöst att skriva ut fler decimaler än det. En avläsning som redovisas som 2,5024 V påstår en noggrannhet omvandlaren inte har.

R1 = 22 kΩ och R2 = 10 kΩ över 5,0 V. Vad blir Uut och vilket råvärde väntar du dig?

Uut = 5,0 · 10 000 / 32 000 = 5,0 · 0,3125 = 1,56 V och rå = 1,5625 · 1023 / 5,0 = 319,7 ≈ 320. Rimlighetskontrollen: R2 är mindre än R1, alltså under halva spänningen och under 512. Stämmer.

Varför spelar det roll om delarens motstånd är 1 MΩ i stället för 10 kΩ?

Omvandlaren laddar en liten kondensator till pinnens spänning innan den mäter. Ju större källans resistans är, desto långsammare går laddningen. Databladet rekommenderar högst 10 kΩ. Med 1 MΩ hinner kondensatorn inte laddas färdigt under de 104 mikrosekunderna, och råvärdet blir en blandning av den här mätningen och den förra – ett fel som ser ut som en tröghet i givaren.

Du har en delare med R1 = R2. Hur ändras Uut om du byter båda mot dubbelt så stora motstånd?

Inte alls. Formeln innehåller bara förhållandet R2 / (R1 + R2), och det är oförändrat. Det som ändras är strömmen, som halveras, och källans resistans sett från pinnen, som fördubblas. Delningen är densamma, priset och tröghetsrisken är det inte.

Vad blir analogRead om du kopplar A0 direkt till 5 V-pinnen, och vad blir den om du kopplar den till GND?

1023 respektive 0. Referensen är kortets 5 V, så hela skalan motsvarar hela matningen. Det är också det billigaste sättet att kontrollera att en analog ingång fungerar innan du misstänker givaren.

Vanliga fel

Vidare

Inget nytt i språket den här gången – analogRead är ett anrop som ser ut som alla andra. Kapitlet Typer och variabler i språkreferensen är ändå värt en repetition innan nästa guide: råvärdet är en int, den omräknade spänningen är en float, och att blanda dem är områdets första riktiga fallgrop.

Nästa guide är Motståndsgivare. Delaren du just härlett får då ett motstånd som ändrar sig av sig självt – och först där blir den en givare i stället för ett räkneexempel.