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.

elektro-0039.jpg

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:

block/12_tr_ad.in.1.svg

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.

elektro-0041.jpg

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 block/12_tr_ad.in.15.svg 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:

block/12_tr_ad.in.3.svg

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:

block/12_tr_ad.in.4.svg

mits block/12_tr_ad.in.16.svg

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:

block/12_tr_ad.in.5.svg

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.

elektro-0043.jpg

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 block/12_tr_ad.in.17.svg 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.

elektro-0044.jpg

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,
  • block/12_tr_ad.in.18.svg is bij benadering sinusvormig.

We berekenen de looptijd op de neergaande flank. Als ingangssignaal kiezen we block/12_tr_ad.in.19.svg De turbo slaat aan als

block/12_tr_ad.in.6.svg

Criterium is de waarde waarbij de turbo aanslaat. We noemen dit criterium block/12_tr_ad.in.20.svg Voordat de turbo aanslaat geldt block/12_tr_ad.in.21.svg We vinden dan de volgende formule:

block/12_tr_ad.in.7.svg

Stellen we bijvoorbeeld dat W=0.04, A=100 en block/12_tr_ad.in.22.svg 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).

elektro-0045.jpg

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

block/12_tr_ad.in.9.svg

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:

block/12_tr_ad.in.10.svg

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.
elektro-0047.jpg

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 block/12_tr_ad.in.23.svg of block/12_tr_ad.in.24.svg

We weten dat:

block/12_tr_ad.in.12.svg

Met een klok van 100kHz is dt = 10 us, dus

block/12_tr_ad.in.13.svg

Met een sinus met een amplitude van 1 V vinden we:

block/12_tr_ad.in.14.svg

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