D/A- och A/D-omvandlarmodul MOD687-31 Allmänt Modulen är helt självförsörjande, det enda du behöver för att komma igång är en 9VAC väggtransformator som du kopplar till jacket J2. När du så småningom vill göra mera avancerade experiment passar den 32-poliga kontakten J1 till enchipsdator- och FPGA-modulerna i CESAM-serien. Modulen går att köra antingen som D/A- eller A/D-omvandlare, men i A/D-omvandlarfallet behövs det lite extra logik som du till att börja med får stå för själv. Så småningom, när du vet vad som behövs, kan du programmera en enchipsdator eller en FPGA och låta den göra grovjobbet åt dig! Du behöver en voltmeter för att mäta utsignalen från D/A-omvandlaren. I uppgifterna 2 och 5 behöver du dessutom ett oscilloskop. Princip för D/A-omvandlaren En D/A-omvandlare gör om en digital insignal till en analog utsignal (ofta en spänning) där utsignalens storlek är proportionell mot det digitala datat. Den här D/A-omvandlaren är en s k åttabitars omvandlare, eftersom den har åtta digitala ingångar. Den arbetar enligt principen viktade resistorer och består helt enkelt av ett resistansnät med 8 resistorer som drivs av en noggrann referensspänning på +2,55 V. I appendix A finns det kompletta kopplingsschemat och du kan där också läsa om hur det hela fungerar i detalj. På kortet sitter åtta små skjutomkopplare, som kopplar till eller från referensspänningen till ena änden på var sin viktad resistor. Samtliga resistorer är hopkopplade i andra änden. Uttrycket viktad resistor betyder att resistansvärdena har valts så att de ger olika stora bidrag till resulterande utspänningen från resistansnätet. Omkopplaren för BIT7 styr en 10 kω resistor, BIT6 20 kω, BIT5 40 kω o s v på samma sätt. BIT0 styr alltså 1,28 MΩ. Man säger att resistorerna är binärt viktade, eftersom de skiljer sig åt med en faktor 2. Enligt Ohm s lag är strömmen omvänt proportionell mot resistansen (I=U/R). BIT0 ger alltså minst bidrag, BIT1 dubbelt så stort, BIT2 fyra gånger så stort o s v. BIT7 ger bidraget etthundratjugoåtta gånger så stort. De relativa vikterna kan du se på de åtta små ytmonterade lysdioderna vid kortets uppkant. Lysdioderna indikerar omkopplarnas lägen. Egentligen styrs resistorerna via en s k CMOS-buffer, där omkopplarna utgör bufferns insignal. Man hade alltså precis lika gärna kunnat mata in åtta digitala insignaler till buffern från en godtycklig elektronisk anordning, t ex en dator. Det är för det mesta på det sättet D/Aomvandlare används, t ex för att styra hastigheten på en motor från en dator. För att möjliggöra styrning av den här D/A-omvandlaren med externa signaler kan man elektriskt koppla bort alla åtta skjutomkopplarna genom att lägga +5V på J1, pinne a7. 1
Uppgift 1 Mätningar på D/A-omvandlaren När omkopplaren för BIT7 (mest signifikanta biten) är i läget 1 (TILL) och alla de övriga sju omkopplarna i läget 0 (från) är referensspänningen inkopplad endast till 10 kω-resistorn. Utspänningen från D/A-omvandlaren blir då +1,28 V. Prova det genom att koppla voltmetern till D/A-omvandlarens utgång J4, mellan UT och 0! Stämmer det? Om du nu istället ställer om omkopplaren för BIT6 till läget 1 och nollställer BIT7 (och behåller alla andra omkopplare nollställda) bör utsignalen bli hälften så stor, d v s +0,64 V.Stämmer det? Gå nu igenom samtliga omkopplare genom att ettställa en i taget med övriga sju nollställda och skriv upp utspänningen i samtliga åtta fall: BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 Utspänning 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 Vad tror du händer om mera än en omkoppare ettställs?... Prova t ex följande kombinationer. Observera att du också ska beräkna den decimala motsvarigheten till respektive binär kombination! BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 Decimalt Utspänning 1 1 0 0 0 0 0 0 192 1 1 0 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 1 Slutsats? 2
Hur stor är den minsta spänningsändring man kan göra med denna D/A-omvandlare?... Med en 8-bitars D/A-omvandlare kan man ställa in utspänningen på vilken som helst av 2 8 = 256 nivåer. Upplösningen eller dynamiken blir 1/256=0,4%. Räknat i db blir det ca 48 db. Gör beräkningen! En 12-bitars D/A-omvandlare har upplösningen 1/4096=0,02%, vilket motsvarar ca 72 db. Ibland blir inte utspänningen exakt vad man hade förväntat sig, utan kan slå fel motsvarande någon bit. Vad kan det bero på? Normalt köper man sina D/A-omvandlare i form av integrerade kretsar. Internt fungerar de dock typiskt på det sätt du sett här. Resistansnätet kan göras på andra sätt, t ex med sk R-2R-stege, men idén är densamma, man viktar strömmar som summeras. R-2R-stege kan du läsa mera om i appendix B. Datablad för en typisk integrerad D/A-omvandlare, MAX507, återfinns i appendix C. MAX507 är en 12-bitars omvandlare. Uppgift 2 Generering av tidsberoende signaler En vanlig användning av D/A-omvandlare är för genererering av tidsberoende spänningar eller strömmar. Ett exempel är börvärdesinställning vid processtemperaturstyrning, ett annat generering av periodiska signaler, t ex sinusformade spänningar. I båda fallen låter man D/Aomvandlaren styras av en dator, som matar ut önskat digitalt data med lämpliga tidsintervall. För termperaturstyrningen räcker det förmodligen att mata ut ett nytt data varje sekund. Vill man däremot generera en 500 Hz sinusspänning (dvs periodtid 2 ms) låter man varje period byggas upp av lämpligt antal trappsteg, där antalet steg beror av hur noga man vill reproducera sinussignalen. Något hundratal steg är förmodligen mer än tillräckligt. Man har då en tabell i datorns minne där i förväg beräknade sinusvärden för en period lagts in. Man låter datorn hämta värden med jämna mellanrum och mata ut till D/A-omvandlaren. Låt oss anta att 100 steg per period är vad som behövs. Då behöver tydligen ett nytt värde matas ut var tjugonde mikrosekund från tabellen. När tabellen tar slut börjar datorn om från början av tabellen igen. I appendix D finns en tabell som innehåller beräknat sinusvärde för varje 3,6 grad (dvs 100 värden per period), skalat så att det hela passar att mata ut på en 8-bitars D/A-omvandlare, dvs -1 motsvarar 0 och +1 motsvarar 255. Appendix E innehåller ett program för MC68HC705J2 som alstrar en sinusspänning med hjälp av denna tabell. Koppla in en enchipsdatormodul till D/Aomvandlaren, sätt in en programmerad MC68HC705J2 och titta med ett oscilloskop på utspänningen vid J4. Rita signalen! 3
Tittar du riktigt noggrannt på signalen ser du trappstegen men också ganska stora spikar som stör signalen. Spikarna brukar kallas glitchar på fackspråk, och beror på att de olika resistorvikterna ger något olika signalfördröjningar. Skillnaderna rör sig för denna D/Aomvandlare om mindre än 1 mikrosekund. Glitcharna blir typiskt mera markerade ju flera bitar som switchas samtidigt. Alla D/A-omvandlare lider av denna lilla svaghet. Ofta kan man med filtrering eliminera glitcharna och till viss del också släta ut trappstegen. Ett enkelt lågpassfilter gör susen. Prova med att koppla en 0,1 mikrofarad kondensator tvärs över utgången J4. Resultat? Princip för A/D-omvandlare En A/D-omvandlare gör om en analog insignal (oftast ström eller spänning) till en digital utsignal. A/D-omvandlare används t ex då man vill behandla en analog signal i en dator eller ett mätinstrument. En vanlig digitalvoltmeter innehåller alltid en A/D-omvandlare. Det finns flera olika principer för A/D-omvandling, men alla går ut på att man på ett eller annat sätt jämför insignalen med en känd referenssignal. Långsamma omvandlare, som t ex i digitalvoltmetrar, använder nästan alltid en princip där en kondensator laddas upp med hjälp av insignalen och sedan laddas ur med hjälp av en noggrannt känd referensspänning. Genom att jämföra tiderna för upp- respektive urladdning kan insignalen bestämmas. Sådana A/D-omvandlare kallas integrerande. Fördelen med integrerande omvandlare är att de kan göras billiga men ändå mycket noggranna. Typisk ordlängd är 16-20 bitar, upplösningen kan alltså vara uppemot 1 ppm. En omvandling kan typiskt ta 10 ms - 100 ms. Snabba omvandlare, som används vid datainsamlingssystem, har oftast mindre ordlängd, 8 till 12 bitar. I gengäld kan hastigheten vara hög. I vissa digitala oscilloskop används supersnabba 8- bitarsomvandlare som gör en omvandling på 1 ns, dvs 1 GS/s (1 gigasampel per sekund). Mera normala 12-bitarsomvandlare klarar typiskt en omvandling på kanske 5 till 50 mikrosekunder. Den metod som nästan alltid används kallas successiv approximation. Vi återkommer snart till den! För att använda den här modulen som 8-bitars A/D-omvandlare utnyttjar man att D/Aomvandlaren kan ställas in på godtycklig spänning mellan 0 och +2,55 V (på 0.01 V när). Den okända analoga signalen (mellan 0 och +2,55 V) som ska omvandlas, kopplas till ena ingången på en komparator (IN på J3) och D/A-omvandlarens utgång till komparatorns andra ingång. En komparator är helt enkelt en snabb förstärkare, vars utgång anger vilken av dess två insignaler som är störst. När man vill göra en omvandling är det bara att prova med olika utspänningar från D/A-omvandlaren genom att mata in olika digitala insignaler till den. Så småningom hittar man 4
förstås den digitala signal som behövs för att precis balansera den okända insignalen. Bingo! Den digitala signal som behövdes är alltså resultatet. Ett exempel: Låt oss anta att den okända analoga insignalen är 1,92 V. Som du såg när du mätte på D/A-omvandlaren måste den digitala signalen vara 11000000 för att generera 1,92 V. Ställer du in 11000000 på skjutomkopplarna kommer alltså komparatorn att slå om och indikera att målet är nått.. Komparatorns utgång är för övrigt kopplad till en lysdiod märkt COMP längst uppe till höger på kortet. Den går också vidare ut till pinne b2 på J1. Lysdioden lyser när D/Aomvandlarens utspänning är högre än den okända analoga inspänningen. Frågan är förstås hur man smartast provar sig fram till rätt värde, det finns ju 256 möjligheter att ställa in omkopplarna på. Hade det handlat om en 12-bitars omvandlare hade det funnits 4096 möjligheter! Ett säkert sätt är att helt enkelt räkna upp binärt, d v s börja med 00000000 och kolla komparatorns utgång. Slår komparatorn om har man hittat värdet (alltså 0 V), annars får man gå vidare till 00000001 och hålla på att öka med ett tills man så småningom hittar rätt värde. I exemplet får man alltså göra 192 försök innan det blir klart. Denna metod är mycket enkel att implementera med digital elektronik, det enda som behövs är en 9-bitars binärräknare och lite logik som gör att räknaren stannar när målet är nått. Nackdelen är att det kan ta lång tid att hitta rätt värde. En omvandlare som utnyttjar denna princip kallas rampomvandlare. Ett mycket smartare sätt är att utnyttja successiv approximation, som vi berörde inledningsvis. En 8-bitars omvandling blir då alltid klar på åtta försök (jämför med upp till 256 försök för rampomvandlaren). En 12-bitars omvandling tar exakt tolv försök (jämfört med upp till 4096 försök för rampomvandlaren). En klar förbättring! Så här gör man en 8-bitars omvandling med succesiv approximation: Börja med att nollställa samtliga digitala insignaler till D/A-omvandlaren. Ettställ BIT7 (mest signifikant bit) och kolla komparatorns utgång. Om komparatorn blir 1, d v s om lysdioden lyser, är D/A-omvandlarens spänning för hög. I så fall ska biten nollställas. Annars behålls den ettställd. Man går sedan vidare till nästa bit, BIT6 och upprepar processen, d v s man nollställer BIT6 om lysdioden lyser och behåller den ettställd annars. Gå sedan till BIT5 och gör samma sak, sedan BIT4, sedan BIT3, sedan BIT2, sedan BIT1 och slutligen BIT0. När alla åtta bitarna är genomgångna innehåller de den binära motsvarigheten till den okända insignalen och omvandlingen är klar! I appendix F finns ett flödesschema som beskriver metoden för successiv approximation. Det finns givetvis A/D-omvandlare av typ successiv approximation att köpa som integrerade kretsar till relativt ringa pris. Appendix G innehåller ett datablad för AD7575, en 8-bitars A/Domvandlare av typ successiv approximation som klarar av en omvandling på 5 mikrosekunder. Uppgift 3 A/D-omvandlare av ramptyp I den här uppgiften ska du mäta upp en okänd spänning kopplad till A/D-omvandlarens ingång genom att själv agera binärräknare. Du ska alltså ställa in skjutomkopplarna så att du letar dig fram till mätvärdet på det sätt en rampomvandlare gör. Vi skaffar oss den okända insignalen genom att koppla en spänningsdelare till J3. (Referensspänningen VREF, +2,55V, finns tillgänglig på J3). Koppla en 100 kω resistor mellan 5
VREF och IN och en 20 kω resistor mellan IN och 0. Med Ohm s lag kan du förstås beräkna den okända inspänningen, men gör inte det ännu! Nollställ samtliga skjutomkopplare. Ställ sedan in omkopplarna på 00000001 och kolla lysdioden, sedan på 00000010 och kolla, sedan 00000011, och så vidare till dess du rampat upp D/A-omvandlaren så att dess utsignal nätt och jämt blir större än insignalen och lysdioden börjar lysa! Läs av resulterande värde på de åtta lysdioderna: Stämmer det med vad du kan räkna fram med hjälp av spänningsdelning?... Mät gärna insignalen med digitalvoltmeter och verifiera!... Uppgift 4 A/D-omvandlare av typ successiv approximation Använd precis samma uppkoppling som i förra uppgiften, med insignalen genererad via spänningsdelaren. Den här gången ska du istället använda metoden med successiv approximation för att göra A/D-omvandlingen. Följ gärna flödesschemat i appendix F. Börja alltså med att nollställa samtliga switchar. Ettställ sedan BIT7 och kolla om lysdioden COMP lyser. Om den lyser är spänningen från D/A-omvandlaren för hög och BIT7 ska nollställas, annars ska BIT7 lämnas ettställd. Nu är BIT7 klar, gå vidare till BIT6 och upprepa proceduren. Fortsätt med BIT5, BIT4, BIT3, BIT2, BIT1 och BIT0. Läs av resulterande värde på de åtta lysdioderna: Uppgift 5 Successiv approximation styrd av enchipsdator I appendix H återfinns ett program för MC68HC705J2 som automatiskt utför en omvandling enligt successiv approximation då du trycker på tryckknappen SW9 längst ned till höger på kortet. Koppla in en enchipsdatormodul till kortet, sätt in en programmerad MC68HC705J2 och studera med ett oscilloskop hur D/A-omvandlaren letar sig fram till rätt värde. Rita signalen! 6
Byt ut den fasta spänningsdelaren mot en trimpotentiometer på ca 100 kω, så att du kan ställa in lite olika inspänningar. A/D-omvandla och verifiera resultaten! 7