Intermediate · Oplossingen · 25. Van analoog naar digitaal StemExpert · Brecht Corbeel · schoolium.me
SE
StemExpert
I25. Van analoog naar digitaal — oplossingen
IIntermediate · deel I6 · Elektronica
Oplossingen · hoofdstuk 25Van analoog naar digitaal
Van een spanning naar een getal, en van een getal terug naar licht
Uitgewerkte oplossingen bij de 16 opdrachten van het werkboek. Voor de leerkracht, en voor wie zichzelf wil verbeteren nadat hij het eerst zelf probeerde.
Als de zon zakt, gaan de lampen niet plots aan, maar geleidelijk: zoveel als er aan daglicht ontbreekt.
Voor de leerkrachtDeze pagina bevat de antwoorden. Druk het werkboek af zonder deze pagina.
Oefenen
Oefenen
één stap, direct toepassen
25.1
Analoog of digitaal?
Oefenen3Begrijpen10 min
Een lijst met signalen en toestellen.
a
Zeg telkens of het signaal analoog of digitaal is: (a) de spanning van de TMP36; (b) wat digitalRead teruggeeft; (c) de druk onderaan het reservoir; (d) het getal van analogRead; (e) een PWM-signaal op pin 9.
(a) analoog; (b) digitaal (0 of 1); (c) analoog; (d) digitaal (een getal van 10 bits); (e) digitaal: het is altijd 0 of 5 V, al stelt het gemiddelde een analoge waarde voor.
b
Op welke twee manieren verliest een digitaal signaal informatie?
In de tijd (je meet alleen op bepaalde ogenblikken) en in de waarde (je rondt af op een eindig aantal niveaus).
c
Geef één reden waarom je toch digitaal wil werken.
Een digitaal signaal kan je zonder verlies kopiëren, versturen en opslaan; ruis op een draad verandert een 1 niet in iets anders. Je kan er ook mee rekenen.
25.2
Binair en decimaal
Oefenen3Rekenen15 min
Reken om. Toon je werkwijze (gewichten of delen door 2).
a
000011012=
8 + 4 + 1 = 13
b
111111112=
128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255
c
10000000002= (tien bits)
512
d
57 = (binair, 8 bits)
57 : 2 = 28 r 1; 28 : 2 = 14 r 0; 14 : 2 = 7 r 0; 7 : 2 = 3 r 1; 3 : 2 = 1 r 1; 1 : 2 = 0 r 1: 0011 1001.
e
130 = (binair, 8 bits)
130 = 128 + 2: 1000 0010.
f
Welk getal volgt binair op 0111 1111? Wat valt je op?
1000 0000 (127 + 1 = 128): alle enen worden nullen en er komt een 1 vooraan, zoals 999 + 1 = 1000 in het decimale stelsel.
25.3
Hexadecimaal
Oefenen3Rekenen12 min
In code en datasheets staan getallen vaak hexadecimaal, met 0x ervoor.
a
0x0F = (decimaal) = (binair)
15 = 0000 1111
b
0xA0 = (decimaal) = (binair)
160 = 1010 0000
c
200 = 0x
200 = 12 · 16 + 8: 0xC8
d
Een kleur op een webpagina is #00FF7F. Hoeveel rood, groen en blauw (elk 0-255)?
Een ontwerper wil telkens een aantal verschillende waarden kunnen opslaan.
a
Hoeveel bits heb je minstens nodig voor: (a) de 24 uren van een dag; (b) een temperatuur van −20,0 tot +60,0 °C in stappen van 0,1 °C; (c) de 1440 minuten van een dag?
Een ADC van 12 bit heeft hoeveel niveaus? Hoe groot is de stap bij 3,3 V?
212=4096 niveaus; stap 3,3/4096=0,81mV.
c
Waarom gebruikt analogWrite 8 bits en analogRead 10?
Het zijn twee verschillende onderdelen van de chip: de ADC is gebouwd voor 10 bits, de timers die PWM maken tellen tot 255 (8 bits). Daarom deel je een ADC-waarde door 4 als je ze met analogWrite wil gebruiken.
(a) ⌊1024⋅0,200⌋=204 (want 1024⋅0,2=204,8); (b) 512; (c) ⌊1023,6⌋=1023; (d) 1023 (boven het bereik), en 5,5 V is meer dan de voeding: gevaarlijk voor de pin.
b
Een meting geeft N = 614. Tussen welke twee spanningen ligt de echte spanning?
Tussen 614⋅4,883=2998,0mV en 615⋅4,883=3002,9mV.
c
Een klasgenoot zegt: 'Mijn meter geeft 614, dus de spanning is 2,998 V, tot op de millivolt.' Wat is er mis?
De ADC zegt alleen 'ergens in deze stap van 4,9 mV', en of de referentie echt 5,00 V is, weet hij niet: resolutie is geen nauwkeurigheid. Drie cijfers na de komma suggereren een zekerheid die er niet is.
25.6
PWM-signalen aflezen
Oefenen4Analyseren15 min
Een logische analysator toont twee PWM-signalen van 5 V.
Signaal A en B, elk 0 of 5 V.
a
Lees voor A en B de periode af, en bereken de frequentie.
A: T≈2,04ms, f≈490Hz. B: T≈1,02ms, f≈980Hz.
b
Bepaal de duty cycle van A en B en de gemiddelde spanning.
A: hoog ongeveer 0,41 ms van 2,04: D=20%, gemiddeld 1,0 V. B: 0,61 van 1,02 ms: D=60%, gemiddeld 3,0 V.
c
Op welke pinnen van een Uno kunnen A en B gemaakt zijn? Welke analogWrite-waarde hoort er ongeveer bij?
A: 490 Hz, dus pin 3, 9, 10 of 11; 0,20⋅255=51. B: 980 Hz, dus pin 5 of 6; ongeveer 153.
Toepassen
Toepassen
meerdere stappen, in een context
25.7
Twee referentiespanningen
Toepassen5Rekenen20 min
De pH-module op A2 van de Mega geeft 2,50 V bij pH 7,00 en daalt 0,18 V per pH-eenheid (hoofdstuk 15). De voedingsoplossing moet tussen pH 5,5 en 6,5 blijven.
Hoeveel pH is één ADC-stap met de referentie van 5 V?
4,88mV/0,18V=0,027 pH per stap.
c
Kan je de referentie van 2,56 V (INTERNAL2V56) gebruiken? Hoeveel pH per stap wordt het dan?
Nee: alle spanningen liggen boven 2,56 V, dus de ADC zou op 1023 blijven staan. Met 2,56 V als referentie is de stap wel 2,5mV (0,014 pH), maar het bereik is te klein. (Met een spanningsdeler ervoor zou het kunnen, maar dan verlies je de winst weer.)
d
De pH-module is maar tot ongeveer 0,1 pH nauwkeurig. Is de fijnere stap dan zinvol?
Nauwelijks: 0,027 pH per stap is al vier keer fijner dan de nauwkeurigheid van de sensor. Een fijnere stap maakt de grafiek vloeiender, niet juister.
25.8
Hoe vaak meten?
Toepassen5Analyseren20 min
Kies voor elk signaal van de klimaatmodule een zinvolle bemonsteringsfrequentie, en verantwoord.
a
Vul de tabel in.
Reservoir: verandert in uren; 1 keer per minuut is ruim. CO₂: verandert in minuten (ventilatie, planten); 1 keer per 10 s. Waterniveau: het gemiddelde verandert in minuten, maar het klotsen gaat met ±1 Hz; zonder filter heb je meer dan 2 metingen per seconde nodig, liefst 10. Batterijstroom: het signaal springt met 490 Hz; ofwel duizenden keren per seconde meten en middelen, ofwel elektronisch filteren (RC) en dan traag meten.
b
Voor het waterniveau wil je alleen het gemiddelde niveau, niet het klotsen. Wat doe je, met de regel van Nyquist in gedachten?
Ofwel eerst filteren: een RC-filter met τ van enkele seconden haalt het klotsen weg, daarna volstaat 1 meting per 10 s. Ofwel snel meten (10 per seconde) en in software middelen over bv. 10 s. Nooit gewoon eens per seconde meten: dan geeft het klotsen van ±1 Hz aliasing, een schijnbare trage golf.
25.9
Aliasing tekenen
Toepassen5Tekenen20 min
Een signaal van 11 Hz wordt 10 keer per seconde gemeten, te beginnen bij t = 0.
Een signaal van 11 Hz; teken de metingen erop.
a
Duid de metingen aan op t = 0; 0,1; 0,2 … 1,0 s.
Bij elke meting is het signaal 1,1 perioden verder: het meetpunt schuift telkens 0,1 periode op.
b
Verbind de metingen met een vloeiende kromme. Welke frequentie lijkt het signaal te hebben?
De metingen liggen op een sinus van 1 Hz (11 − 10 = 1).
c
Vergelijk met het signaal van 9 Hz uit het handboek. Wat is hetzelfde, wat is anders?
Beide lijken 1 Hz. Bij 9 Hz loopt de schijnbare golf 'achterstevoren' (ze begint dalend), bij 11 Hz stijgend: de metingen van 11 Hz zijn die van 1 Hz, die van 9 Hz die van −1 Hz.
d
Hoe vaak had je minstens moeten meten?
Meer dan 22 keer per seconde (Nyquist); in de praktijk 50 à 100 keer.
25.10
Labo: PWM gladstrijken
Toepassen6Labo50 min
Voer de proef van het handboek uit: pin 9 → 10 kΩ → 10 µF → GND, meet op A0 en met een voltmeter.
a
Schrijf het programma: een waarde uit de seriële monitor naar analogWrite, dan 200 metingen van A0 met hun laagste, hoogste en gemiddelde waarde.
voidsetup(){Serial.begin(9600);}voidloop(){if(Serial.available()){intv=Serial.parseInt();analogWrite(9,constrain(v,0,255));delay(1000);// 10 tau wachtenintlo=1023,hi=0;longsom=0;for(intk=0;k<200;k++){intn=analogRead(A0);lo=min(lo,n);hi=max(hi,n);som+=n;}Serial.print(lo);Serial.print("");Serial.print(hi);Serial.print("");Serial.println(som/200.0);}}
b
Meet voor minstens vijf waarden.
Zoals de tabel in het handboek: de voltmeter geeft D · 5 V tot op enkele hondersten van een volt.
c
Zet de voltmeterwaarde uit tegen D. Wat verwacht je, en klopt het?
Een rechte door de oorsprong: U = D · 5 V (helling 5 V per 100 %).
d
Vervang 10 µF door 1 µF. Wat verandert er aan de rimpel en aan de insteltijd? Verklaar met τ.
Met 1 µF is τ = 10 ms: de spanning volgt een nieuwe waarde tien keer sneller (0,05 s), maar de rimpel wordt tien keer groter (±0,2 V bij 50 %).
Zo wordt dit beoordeeld
Programma
analogWrite met de ingelezen waarde; 200 metingen met min, max en gemiddelde; geen delay die het meten verstoort.
Meting
Minstens vijf waarden, met eenheden; elco juist gepoold.
Verwerking
Grafiek U tegen D: een rechte door de oorsprong met helling ±5 V.
Verklaring
Rimpel en insteltijd verklaard met τ = RC: kleinere τ, snellere reactie, meer rimpel.
25.11
C++: een dimmer met een potentiometer
Toepassen5Programmeren25 min
Een potentiometer van 10 kΩ tussen 5 V en GND, met de loper op A0. Een led met 220 Ω hangt aan pin 9.
a
Schrijf een programma dat de led dimt met de potentiometer.
Een klasgenoot schrijft analogWrite(9, analogRead(A0));. Wat ziet hij als hij aan de knop draait, en waarom?
De waarde gaat tot 1023, maar analogWrite gebruikt alleen de laagste 8 bits: 256 wordt 0, 511 wordt 255, 512 weer 0. De led wordt vier keer na elkaar feller en valt dan terug: een zaagtand.
c
Waarom is analogRead(A0) / 4 hetzelfde als de twee laagste bits weglaten (>> 2)?
Delen door 2 schuift een binair getal één plaats naar rechts (zoals delen door 10 decimaal); door 4 twee plaatsen. Van 10 bits blijven er zo 8 over.
25.12
Hoeveel data?
Toepassen5Rekenen15 min
De datalogger van de klimaatmodule bewaart elke 10 s de zeven analoge waarden (A0-A6), elk in 2 bytes, plus een tijdstempel van 4 bytes.
a
Hoeveel bytes per meting, per dag en per jaar?
7⋅2+4=18 bytes per meting; 8640 metingen per dag: 155520 bytes per dag; per jaar 155520⋅365=56764800 bytes (ongeveer 57 MB).
b
Als tekst (CSV) is een regel ongeveer 60 tekens (1 byte per teken). Hoeveel per jaar?
60⋅8640⋅365=189216000 bytes, ongeveer 189 MB per jaar.
c
Hoe lang past dat op een SD-kaart van 8 GB?
8⋅109/189216000≈42 jaar als tekst: geheugen is hier geen probleem.
Uitdagen
Uitdagen
transfer, open problemen, leerlijnen combineren
25.13
Habitat: de lampsturing van de klimaatmodule
Uitdagen7Habitat60 min
Werk de lampsturing uit het handboek verder uit. Het energiebeheer van hoofdstuk 20 zegt: laadtoestand boven 40 %: lampen volgens schema; tussen 20 en 40 %: alleen als de zonnepanelen leveren; onder 20 %: lampen uit. Met PWM kan dat zachter. De laadtoestand is in het programma beschikbaar als float soc (0-100).
a
Stel een regel voor die de lampen niet in één klap uitschakelt, maar hun maximum geleidelijk verlaagt tussen 40 en 20 %. Schrijf ze als formule en als een stukje C++.
Bv. een maximum dat lineair daalt: max = 1 boven 40 %, 0 onder 20 %, daartussen (soc − 20) / 20.
Bereken de PWM-waarde bij 3000 lux daglicht en een laadtoestand van 30 %, met jouw regel.
Daglicht vraagt f=0,722; bij 30 % is het maximum (30−20)/20=0,5. De kleinste: 0,5, dus waarde 128 (D=0,502).
c
Bereken het verlies in de MOSFET bij die waarde (geleiding en schakelen) en de opwarming op de koelplaat.
Geleiding 0,502⋅5,48=2,77W; schakelen 0,28W; samen 3,0W, dus 21∘C boven de omgeving.
d
Wat gebeurt er met de stroommeting op A4, en hoe pas je die aan?
Eén meting per seconde valt willekeurig op 'aan' (14,8 A) of 'uit' (0 A): aliasing. Meet 100 keer in 20,4 ms (tien PWM-perioden) en neem het gemiddelde, of zet een RC-filter (bv. τ = 20 ms) tussen de ACS712 en A4.
Zo wordt dit beoordeeld
Regel
Continu tussen 20 en 40 %, geen sprong; ondergrens en bovengrens juist; in code met constrain of map.
Berekening
Tekort aan daglicht en de begrenzing correct gecombineerd (de kleinste van beide).
Verliezen
Geleiding D · R · I² en schakelen 2 · ½ U I t · f; opwarming met 7 °C/W.
Meten
Aliasing herkend; middelen over een geheel aantal PWM-perioden of filteren.
25.14
Schakelverliezen en de PWM-frequentie
Uitdagen7Rekenen25 min
Elke keer dat de MOSFET van de groeilampen schakelt, staan er even tegelijk spanning en stroom over. Met de gateweerstand van 220 Ω duurt een flank ongeveer 3 µs; reken met E=21⋅U⋅I⋅t per flank (U=12,8V, I=14,8A).
a
Bereken de energie per flank en het schakelverlies bij 490 Hz en bij 20 kHz.
E=0,5⋅12,8⋅14,8⋅3⋅10−6=0,285mJ. Bij 490 Hz: 2⋅0,285⋅490=0,28W. Bij 20 kHz: 2⋅0,285⋅20000=11,4W.
b
Vergelijk met het geleidingsverlies bij D = 50 %. Wat besluit je?
Geleiding bij 50 %: 0,5⋅5,48=2,7W. Bij 490 Hz is schakelen bijkomstig, bij 20 kHz is het 4 keer groter dan de geleiding: de MOSFET zou oververhitten. Blijf op 490 Hz: voor planten maakt het flikkeren niets uit.
c
De gate is een condensator die per flank ongeveer 50 nC lading nodig heeft. Welke gemiddelde stroom levert de pin bij 20 kHz? En welke piekstroom als de flank 3 µs duurt?
Gemiddeld: 2⋅50⋅10−9⋅20000=2,0mA. Piek: 50⋅10−9/3⋅10−6≈17mA: dicht bij de grens van een pin.
d
Waarom gebruikt men voor hoge PWM-frequenties een aparte gatedriver?
Een gatedriver levert piekstromen van één tot enkele ampère: de gate laadt in tientallen nanoseconden, de flanken worden honderd keer korter en de schakelverliezen honderd keer kleiner (hoofdstuk E24).
25.15
Onderzoek: ziet het oog lineair?
Uitdagen6Onderzoeken40 min
Een led aan pin 9 wordt gedimd met analogWrite. Het licht is evenredig met de duty cycle, maar ons oog lijkt daar anders over te denken.
a
Ontwerp een proef: laat proefpersonen kiezen welke waarde 'half zo fel' lijkt als 255. Wat verander je, wat meet je, wat hou je gelijk?
Veranderen: de waarde; meten: welke waarde als 'half zo fel' ervaren wordt; gelijk houden: afstand, omgevingslicht (verduisterd), dezelfde led, geen hint over de waarde, willekeurige volgorde.
b
Voer de proef uit met minstens vijf personen. Noteer hun keuzes.
Typisch kiezen mensen een waarde ver onder 128, vaak rond 40 à 70 (15 tot 25 %).
c
Wat besluit je? Waarom maakt dat voor een lamp voor planten niet uit, en voor een lamp voor mensen wel?
Het oog ziet verhoudingen: van 10 naar 20 % lijkt een grote stap, van 80 naar 90 % een kleine. Een lamp voor mensen krijgt daarom een tabel die onderaan fijner dimt (gammacorrectie). Planten 'tellen' lichtdeeltjes: voor hen is 50 % duty cycle echt de helft van de fotosynthese-energie (bij weinig licht ongeveer evenredig).
25.16
Debat: een ADC van 16 bit kopen?
Uitdagen6Argumenteren25 min
Een groepje wil voor de klimaatmodule een externe ADC van 16 bit kopen (via I²C, hoofdstuk 30), 'want dan meten we alles 64 keer nauwkeuriger'. De sensoren: NTC (±0,5 °C na ijking), pH-module (±0,1 pH), druksensor MPX5010 (±5 % van het bereik), LDR (±30 % tussen exemplaren).
a
Klopt 'nauwkeuriger'? Gebruik de begrippen resolutie en nauwkeurigheid.
Niet vanzelf. 16 bit geeft een 64 keer fijnere resolutie (76 µV bij 5 V), maar de nauwkeurigheid wordt begrensd door de sensor, de referentie en de ruis. Een fijnere trap onder een onnauwkeurige sensor meet de fout gewoon fijner.
b
Voor welke sensor zou 16 bit echt iets opleveren, en voor welke zeker niet?
Zinvol waar de sensor zelf fijner is dan de ADC-stap en het signaal klein is: een rekstrookje of een thermokoppel (microvolts). Bij de LDR (±30 %) en de druksensor (±5 %) levert het niets op; bij de NTC en de pH-module weinig (10 bit is al fijner dan hun nauwkeurigheid).
c
Wat raad je het groepje aan?
Eerst ijken en de referentie verbeteren, ruis filteren (middelen); een betere ADC alleen voor de sensoren die het nodig hebben. Geld naar betere sensoren gaat meestal verder dan geld naar meer bits.