12. Tracking A/D-convertors
12.1. Inleiding
Tijdens het ontwerp van de schakeling werden een aantal A/D-convertors genoemd. Tijdens het afstuderen is nogal wat aandacht besteed aan een bepaald type, namelijk de tracking A/D-convertor. in deze appendix zullen we een aantal tracking A/D-convertors behandelen. Ook zullen we onze keuze, de Turbo, toelichten.
Bovendien zullen we een aantal simulaties van de algoritmen laten zien. Tenslotte zullen we de problemen met de bouw van een Fixed step aanstippen en een aantal meetgegevens presenteren.
In deze appendix worden geen SI-eenheden gebruikt. Dat zou namelijk onhandig rekenen zijn. in plaats daarvan gebruiken we de eenheden bit en klokpuls.
De gegevens in de literatuur zijn tamelijk beperkt. Tracking A/D-convertors worden weinig toegepast, omdat vaak multiplexers voor de A/D-convertor worden geplaatst. Dit is niet goed mogelijk bij tracking A/D-convertors, omdat deze uitgaan van een continue signaal.
12.2. Het principe
Voordat we beginnen met berekeningen en simulatie resultaten, zullen we eerst het principe van de tracking A/D-convertor uit- leggen.
In zijn meest eenvoudige vorm bestaat de tracking A/D-convertor uit een teller, een D/A-convertor en een comparator. De com- parator vergelijkt de ingang met de digitale representatie, in bepaalt dan of de teller omhoog of omlaag moet tellen. Alle andere versies zijn hiervan afgeleid.
Er zijn een aantal verbeteringen aan te brengen. Allereerst kunnen we de teller ook de keuze geven niet te tellen. Als de spanning op de ingang namelijk minder dan een bit verschilt, gaat het hierboven beschreven ontwerp heen- en weer tellen. Hieraan is verder geen aandacht besteed.
Ook kunnen we op een aantal manieren de stapgrootte van de teller beinvloeden. De hierboven beschreven versie noemen we in goed nederlands fixed stepsize. We kunnen echter ook twee stapgroottes nemen. Als de ingang dan ver van de representatie verwijderd is, kan er met grote stappen heen gelopen worden. Dit noemen we een dual stepsize, door mij tot Turbo gedoopt.
Tenslotte kan er voor de stapgrootte een apart register genomen worden. Dit kan b.v. een teller of een schuifregister zijn. We noemen de A/D-convertors dan counting step respectievelijk shifting step.
12.3. Mathematische achtergronden
12.3.1. Definities
Het is altijd prettig om met vastgestelde termen te werken. Daarom zullen we nu de termen die we gebruiken definieren.
|
Afstand
|
Onder afstand tussen twee signalen verstaan we het
verschil in waarde, die de gedigitaliseerde signalen
zouden hebben. Omdat we als eenheid de VU (= 1Bit
spanningsverschil) gebruiken, is dit altijd een integer.
|
|
c
|
De waarde van het uitgangssignaal van de A/D-convertor.
|
|
Ingeleide
beslissing
|
Het besluit (b.v. om op te tellen of af
te trekken) moet eerder (meestal 1/2 klokpuls) eerder
genomen worden dan de handeling kan geschieden. Zie ook
momentane beslissing.
|
|
Inhaal effect
|
Het effect wat ontstaat als de uitgang van een
Turbo meer dan een referentie verschilt van de
spanningswaarde.
|
|
Momentane
beslissing
|
Beslissing (om op te tellen of af te
trekken) komt op het moment waarop de handeling zal
moeten geschieden.
|
|
S
|
Stapgrootte. Bij sommige algoritmen is deze variabel.
|
|
U
|
De te meten spanning.
|
|
Volgen
|
Onder volgen verstaan we het houden van een afstand die
kleiner is dan de maximale stapgrootte die de
A/D-convertor op dat ogenblik kan maken.
|
|
VU
|
Volt Unit, het spanningsverschil dat overeen komt met
een bit.
|
12.3.2. De fixed step
Voor het maximaal te volgen signaal geldt:
Hoe komen we nu aan deze formule? Allereerst is de maximale stap 1. Door nu te stellen dat er op het moment van de klokpuls pas beslist wordt, of er opgeteld of afgetrokken moet worden, komen we dus tot het vorige resultaat. Het is echter zo, dat de sigalen naar de besturing gesynchroniseerd moeten worden. Dit gebeurt met een tegengestelde klok. De werkelijke beslissing om op te tellen of af te trekken valt dus een halve klokpuls eerder. De feitelijk toelaatbare helling wordt hierdoor niet kleiner, maar de gesommeerde absolute fout wel.
We kunnen voor de fixed-stepsize ook proberen een lineair model op te stellen. Dit is alleen mogelijk, omdat er geen vreemde sprongen in de stapgrootte aanwezig zijn. We zullen zo’n model ook opstellen voor de counting-step. Voor de turbo en de shifting step is dat echter onmogelijk.
De geldigheid van dit model is echter zeer beperkt. Het dient alleen ter bepaling van de gedachten. Wel kan men zien, dat de fixed-stepsize altijd stabiel is.
Wat is de maximale frequentie voor een fixed-stepsize? Als we de
schakeling uitvoeren met TTL-tellers, is hiermee een klokfrequen-
tie van 25MHz te halen. We vinden dan dt=40ns. We nemen aan dat
het ingangssignaal
is. We vinden dan dat W=0.01 (maximaal). De maximale frequentie wordt dat 1.6mHz. Dit is 1/klok-
puls. Voor de maximale frequentie in SI-eenheden vinden we 40kHz.
12.3.3. De Turbo
Omdat geen lineair model van de Turbo te maken is, zullen we eerst de algoritme van de turbo bepalen:
for(EVERY CLOCKCYCLE) {
if (abs(c-U) > 4)
S=7;
else
S=1;
if (c>U)
C-=S;
else
C += S;
}
De Turbo lijkt op de fixed step, maar de maximale stapgrootte is beduidend groter (hier 7), zodat geldt:
Belangrijk om te weten is, dat de fout bij bepaalde afgeleiden groter is dan bij andere. Laten we b.v. aannemen dat dU/dt=1.01. Dan slaat de turbo pas na een groot aantal stappen aan. De mathematische formule voor het verband tussen dU/dt en n (het aantal stappen voordat de turbo aanslaat) is:
mits
Deze formule is eenvoudig te verifieren door de effecten te tekenen. De 4 is de afstand waarbij de turbo aanslaat. in ons voorbeeld vinden we dus n=400. Voor de gesommeerde fout vinden we dan:
Deze formule geeft de oppervlakte aan van de driehoek die gevormd wordt door het signaal, de lijn U=t (maximale helling zonder turbo) en de turbo-sprong.
n de figuur zien we twee driehoeken. Een gevormd door de ingangsspanning, de lijn t=n en de tijd as, de ander gevormd door de teller waarde (C), de lijn t=n en de tijd as. Het verschil tussen deze driehoeken is de fout.
Deze formule is alleen geldig als dU/dt constant is, en geeft slechts de fout weer over de tijd t=0 tot t=n. Als dU/dt niet constant is, wordt de berekening beduidend lastiger, en zullen we onze toevlucht moeten nemen tot computer simulaties (dat is dus ook gebeurd).
De fout bij sinussen is deels te vertalen in een looptijd.
Doordat het een tijdje duurt voordat de turbo aanslaat, zullen de
nuldoorgangen in tijd verschoven worden. De looptijd is
afhankelijk van de grootte van de turbo-sprong, het criterium
waarop de turbo aanslaat en de grootte van de afgeleide van
In de volgende figuur zien we een sinus, en de representatie
ervan. Om het effect van de looptijd te illustreren is het
criterium om de tweede stapgrootte te kiezen iets vergroot. De
sinus op de ingang was rond de 100 VU bij een frequentie van rond
de 5MHz.
Voor bepaling van de looptijd doen we de volgende aannames:
-
de looptijd is constant,
-
de looptijd wordt alleen veroorzaakt door de later startende turbo-sprong,
-
is bij benadering sinusvormig.
We berekenen de looptijd op de neergaande flank. Als ingangssignaal kiezen we
De turbo slaat aan als
Criterium is de waarde waarbij de turbo aanslaat. We noemen dit
criterium
Voordat de turbo aanslaat geldt
We
vinden dan de volgende formule:
Stellen we bijvoorbeeld dat W=0.04, A=100 en
dan vinden we
voor de looptijd t= 3.2. Omdat de schakeling synchroon is, wordt
dit t=4. (W=0.04 is te vergelijken met een sinus van 20kHz en een
klok van 3MHz.) Vaak zal het criterium echter groter moeten
worden afgesteld dan de tweede stapgrootte.
12.3.4. De counting step
In plaats van een vaste tweede stapgrootte kunnen we er ook een teller zetten. De algoritme van de counting step is dan:
for (EVERY CLOCKCYCLE) {
if ( c-u > s )
s++;
else
s--;
c -= s;
}
Doordat de teller van de stapgrootte ook negatief kan worden, is het niet nodig om te kijken of opgeteld of afgetrokken moet worden. Dit bespaart weer een comparator.
Van de counting-step kunnen we weer een lineair model maken, met de zelfde restricties als bij de fixed-stepsize. Ook hier volgt weer uit het lineaire model dat de counting step in principe stabiel is (voor zover het lineaire model geldig is).
De counting step en de shifting step zijn van een hogere orde dan de fixed stepsize en de turbo. Dit is het eenvoudigst te laten zien bij de counting step.
We zien, dat door de stapgrootte in een teller te zetten, dat
Bij de fixed en turbo zagen we al, dat dS/dt de maximale afgeleide van de spanning is. We vinden dus voor de maximaal te volgen spanning:
We zien hier ook, dat het begrip "volgen" voor de counting step niet meer gerelateerd is aan de optredende fout.
12.3.5. De shifting step
De shifting step heeft een schuifregister waarmee de stapgrootte bepaald wordt. De stapgrootte kan op die manier verdubbeld of gehalveerd worden. De algoritme is als volgt:
for (EVERY CLOCKCYCLE) {
if (abs(c-u) > 25)
s *= 2;
else
s /= 2;
if (c > u )
c -= s;
else
c += s;
}
De shifting step kan instabiel worden. Het criterium voor het verdubbelen van de stap is van grote invloed op de stabiliteit (echter ook op de snelheid...). De instabiliteit kan beperkt worden door de stapgrootte te begrenzen.
Bovendien is gebleken, dat het foutsignaal in de meeste gevallen van de zelfde orde grootte is als die van de turbo. Het blijkt echter zeer lastig om een analytische uitdrukking te vinden.
12.4. Ervaringen met de bouw van een proefmodel
Om te zien of de simulaties en de opgesteld theorie kloppen hebben we een tracking A/D- convertor gebouwd. Hiermee hebben we een aantal problemen gevonden en opgelost. Bij het bouwen wilden we eerst gebruikmaken van snelle comparators (4Mhz). Deze bleken snel te oscilleren. Mede vanwege de status van de schakeling (proef) werd er besloten op veel lagere frequentie te werken.
Vanaf het begin aan werd de schakeling in een vastgestelde volgorde samengesteld, en stap voor stap door gemeten. De volgorde was:
-
c-registers;
-
D/A-convertor;
-
comparators
-
koppeling van de comparator aan het c-register.
Omdat we in dit proefmodel slechts werkten met spanningswaardes zoals die uit de D/A-convertor kwamen, verdwenen de 4VU’s die voor de vergelijking nodig waren in de ruis weg. Bovendien bleken de gebruikte comparators enige hysterese te hebben.
Bij de proefopstelling maten we de ingangsspanning van de A/D- omzetter en de uitgangsspanning van de D/A-omzetter. Deze uit- gangsspanning is namelijk een analoge maat voor de inhoud van het c-register. Beide werden zichtbaar gemaakt op de oscilloscoop.
Bij de meting werden de volgende apparaten gebruikt:
-
Philips pulsgenerator PM5712
-
Sinus generator Wavetek VCG Model III
-
Philips scoop PM3233
-
digitale multimeter Fluke 8010A
-
Analoge multimeter Unigor
Het ingangssignaal van de A/D werd ingesteld op 2V(piek-piek)+1V DC. Dit werd voor elke meting gedaan. De klok werd ingesteld op 100kHz en vervolgens opgeregeld. Zodra de nuldoorgangen op de scoop zichtbaar verschilden was de maximale frequentie bereikt. De meting werd drie maal herhaald. Als maximaal te meten frequentie vonden we 160Hz, 155Hz en 150Hz.
Volgens de theorie wordt dit
of
We weten dat:
Met een klok van 100kHz is dt = 10 us, dus
Met een sinus met een amplitude van 1 V vinden we:
Het blijkt, dat de meetresultaten redelijk overeenstemmen met de theorie. Hierbij moeten we wel opmerken dat tijdens het meten de signalen op het oog zijn beoordeeld.
12.5. De simulatie
Om de convertor-algoritmen op hun merites te beoordelen, is een BBC-BASIC programma geschreven, dat de convertors simuleert. Het programma reset de convertor en laat hem dan over twee periodes van een sinus met een amplitude van 100 lopen. De gevonden fouten staan in de tabel hieronder.
De kolom STEPS geeft het aantal stappen aan, dat de convertor doet in de twee periodes van de sinus. SUM is de gesommeerde absolute fout op de sample tijdstippen, gemiddeld over het aantal stappen. MAX is de maximale afstand tot het signaal. Bij de foutberekening is geen rekening gehouden met fasedraaiing.
Resultaten van de simulatie.
|
STEPS
|
FIXED
|
TURBO
|
SHIFT
|
COUNT
|
||||
|
|
SUM
|
MAX
|
SUM
|
MAX
|
SUM
|
MAX
|
SUM
|
MAX
|
|
10
|
98.02
|
94.11
|
58.42
|
88.11
|
60.15
|
95.11
|
82.62
|
95.11
|
|
20
|
50.17
|
57.78
|
11.30
|
51.78
|
20.57
|
58.78
|
24.94
|
58.78
|
|
30
|
25.50
|
39.67
|
3.73
|
33.67
|
19.78
|
40.67
|
10.24
|
40.67
|
|
40
|
11.68
|
29.90
|
1.84
|
23.90
|
6.81
|
30.90
|
5.68
|
30.90
|
|
50
|
6.20
|
23.87
|
1.21
|
17.87
|
3.89
|
24.87
|
3.46
|
24.87
|
|
60
|
3.77
|
19.79
|
0.83
|
13.79
|
8.77
|
20.79
|
1.92
|
20.79
|
|
70
|
2.54
|
16.86
|
0.76
|
10.86
|
8.48
|
17.86
|
1.92
|
17.86
|
|
80
|
1.85
|
14.64
|
0.62
|
8.64
|
8.25
|
15.64
|
1.70
|
15.64
|
|
90
|
1.43
|
12.92
|
0.58
|
6.92
|
2.42
|
13.92
|
1.73
|
13.92
|
|
100
|
1.17
|
11.53
|
0.56
|
5.53
|
0.91
|
12.53
|
1.03
|
12.53
|
|
110
|
0.99
|
10.40
|
3.54
|
4.40
|
1.31
|
11.40
|
1.09
|
11.40
|
|
120
|
0.88
|
9.45
|
0.55
|
3.45
|
4.16
|
10.45
|
1.67
|
10.45
|
|
130
|
0.79
|
8.65
|
0.53
|
2.65
|
4.13
|
9.65
|
0.71
|
9.65
|
|
140
|
0.73
|
7.96
|
0.51
|
1.96
|
4.11
|
8.96
|
1.41
|
8.96
|
|
150
|
0.68
|
7.37
|
0.51
|
1.37
|
4.09
|
8.37
|
1.39
|
8.37
|
|
160
|
0.65
|
6.85
|
0.51
|
0.85
|
4.07
|
7.85
|
0.69
|
7.85
|
|
170
|
0.62
|
6.39
|
0.50
|
0.61
|
4.06
|
7.61
|
0.67
|
7.39
|
|
180
|
0.60
|
5.98
|
0.50
|
0.98
|
1.08
|
6.98
|
0.73
|
6.98
|
|
Loe
|
0.58
|
5.61
|
0.50
|
0.61
|
1.07
|
6.61
|
0.71
|
6.61
|
|
200
|
0.57
|
5.28
|
0.50
|
0.72
|
1.06
|
6.28
|
0.70
|
6,28
|
|
210
|
0.56
|
4.98
|
0.50
|
1.02
|
0.57
|
5.98
|
0.55
|
5.98
|
|
220
|
0,55
|
4.71
|
0.51
|
1.29
|
0.56
|
5.71
|
0.55
|
5.71
|
|
230
|
0.54
|
4.46
|
0.51
|
1.54
|
0.55
|
5.46
|
0.55
|
5.46
|
|
240
|
0.54
|
4.23
|
0.51
|
1.77
|
0.55
|
5.23
|
0.55
|
5.23
|
Ter orientatie: de gebruikte A/D-convertor heeft een klok van 3MHz. De ingangsspanning is 20kHz, wat ons rond de 25 stappen per periode, dus 50 per dubbele periode oplevert.
Het blijkt dus, dat de turbo niet alleen veel eenvoudiger qua opzet is, maar ook betere resultaten geeft dan de shift en de count.
Verder kan men in de tabel een piek in de fout zien rond de 110 stappen per dubbele sinus. Deze piek is het gevolg van het net niet/net wel vergroten van de stap, als dit net wel/net niet moet.
12.6. Listing van het simulatie-programma
10 MODE3
20 PRINT "STEPS FIXED TURBO SHIFT" COUNT"
21 PRINT " SUM MAX SUM MAX MAX SUM MAX"
30 FOR STP$=10 TO 1000 STEP1O
31 @%=&303
32 PRINT ,STP%;
40 @%=&020208
50 PROCSIN
6O FOR I%=0 TO STP%
70 U=100*SIN(4*PI/STP%)
8O PROCADFIX
9O SUMMAX=SUMMAX+ABS(C%-U)
10O IF ERMAX<ABS(C%-U) THEN ERMAX=ABS(C%-U)
11O NEXT
120 PRINT, SUMMAX/STP%, ERMAX;
130 PROCSIN
140 FOR I%=0 TO STP%
150 U=100*SIN(4*PI/STP%)
160 PROCADTURBO
17O SUMMAX=SUMMAX+ABS(C%-U)
180 IF ERMAX<ABS (C%-U) THEN ERMAX=ABS (C%-U)
190 NEXT
200 PRINT,SUMMAX/STP%, ERMAX;
210 PROCSIN
220 FORI%=0 TO STP%
230 U=100*SIN(4*PI/STP%)
24O PROCADSHIFT
250 SUMMAX=SUMMAX+ABS (C%-U)
260 IFERMAX<ABS (C%-U) THEN ERMAX=ABS (C%-U)
27O NEXT
280 PRINT, SUMMAX/STP%,ERMAX;
290 PROCSIN
300 FORI%=0 TO STP%
310 U=100*SIN(4*PI/STP%)
320 PROCADCNT
330 SUMMAX=SUMMAX+ABS (C%-U)
340 IF ERMAX<ABS (C%-U) THEN ERMAX=ABS (C%-U)
350 NEXT
360 PRINT, SUMMAX/STP%, ERMAX;
37O PRINT
380 NEXT
390 END
40O DEFPROCADFIX
41O IF U>C% THEN C%=C%+1 ELSE C%=C%-1
420 ENDPROC
430 DEFPROCADTURBO
440 IFU>C%+4 THEN C3%=C%+7: ENDPROC
450 IFU>C% THEN C%=C%+1:ENDPROC
460 IFU<C%-2 THEN C%=C%-7 : ENDPROC
470 C%=C%-1: ENDPROC
480 DEFPROCADSHIFT
490 LOCAL SN%
5OO IF ABS(C%-U)>S% THEN SN%=2*S% ELSESN%=S%/2
51O IF SN3<1 THEN SN%=1
520 IF SN%>256 THEN SN%=256
530 IF C%<U THEN C%=C%+S% ELSE C$=C%-S%
540 S%=SN%
550 ENDPROC
560 DEFPROCADCNT
570 LOCAL SN%
580 IF C%+S%<U THEN SN%=1+8% ELSE SN%=S%-1
590 IF SN%>256 THEN SN%=256
6OO IFC%<U AND S%%>0 THEN C%=C%+S%
61O IFC%>U AND S%<0 THENC3=C%+S5%
620 8%=SN%
630 OENDPROC
640 DEFPROCSIN
650 C%=0
660 S%=0
670 ERMAX=0
680 SUMMAX=0
690 ENDPROC