CT3760 Mikrodatorteknik Föreläsning 8 Tisdag 2006-09-21 Analog till Digitalomvandling Vi börjar med det omvända. Digital insignal och analog utsignal. Digital in MSB D/A Analog ut LSB Om man har n bitar kan man uttrycka 2 n möjligheter. Det största numeriska värdet är M = 2 n -1 För tre bitar blir det i så fall: 2 3 = 8 och M = 2 3-1 =7. Maxvärdet är binärt 111 Man kan med tre bitar uttrycka 8 st nivåer. /8 Digital in 111 Figuren ovan visar en ideal funktion. Den vågräta axeln anger en digital insignal. Den lodräta axeln motsvarar en analog utsignal. En analog signal är kontinuerlig och en digital signal är diskret. Övergången mellan talen 000 och 001 kallas 1 LSB och motsvarande spänningsförändring är /8. Genom att successivt addera 1 LSB så når man upp till talet 7 = 111 2. Utspänningen vid 111 2 är alltså 7* /8 eller /8 1 LSB. Observera att maximal utspänning inte är. Ibland har man en beteckning FS ( Full Scale ) som normeras till 1. Värdena på den lodräta axeln blir i så fall ( 1/8 2/8 3/8. 6/8 7/8 och 8/8 =1 Värdet 1 skulle i så fall motsvara den digitala insignalen 1000, men vi har bara betraktat tre bitar. FS är ett hypotetiskt värde som inte inträffar. 1/8
Exempel Vi har en 5 bit D/A omvandlare. En LSB motsvarar 0,2 V. Vad är utspänningen då den digital insignalen är 1 0000? Vad är utspänningen för 1 1111? Vad bör referensspänningen vara? Svar 10000 2 är det decimala talet 16 Utspänning 16*0,2 = 3,2 V 1 1111 2 är det decimala talet 31 Utspänning 31*0,2 = 6,2 V Referensspänningen 6,2 V + 1 LSB = 6,4 V Upplösningen hos en D/A anges på olika sätt. Vikten på LSB biten anges som 2 -n. Man kan också ange antalet bitar. 5-bitarsomvandlaren ovan har alltså upplösningen 0,03125 eller 3,125% En omvandlare kan aldrig bli exakt. Figuren ovan visar att Det egentligen bara finns 8 diskreta värden för en tre-bit omvandlare. Den analoga utsignalen kan för ett digitalt in-värde skilja ± 1/2 LSB, utan att man kan säga att det hör till ett annat digitalt in-värde. En D/A omvanddlare är linjär om alla värden håller sig inom ± 1/2 LSB. Exempel En D/A omvandlare har 8 bitar och referensspänningen 10,240 V. En LSB motsvarar då 10,240/256 = 0,040 V En digital insignal på 0001 1100 2 = 28 10 motsvarar då en nominell spänning på 1,12 V. Omvandlaren är korrekt så länge som spänningen ligger i inervallet 1,10 --- 1,14. Gränserna motsvarar då insignalen 0001 1011 = 2710 och 27*0,04 + 0,02 = 1,10 Och insignalen 0001 1101 = 2910 och 29*0,04-0,02 = 1,14 För att ställa till begreppen så kan en 8 bit omvandlare ha en noggranhet på 10 bitar. Det betyder att området som värdena kan variera inom är mycket smalare än vad som egentligen fodras för en 8 bit omvandlare. Bandet blir ¼ så brett. En annan viktig storhet är att omvandlaren skall vara monoton. Om insignalen ökar med en enhet, så skall utsignalen vara större än tidigare. ( Samma värde kan accepteras, men absolut inte mindre. ) 2/8
Offsetfel innebär att noll in ej ger noll ut. Offset skall ligga inom ± 1/2 LSB. Om man anväder diskreta omvandlare, så finns oftast möjlighet att trimma kretsen så att felet blir nära noll. Inställningstiden är också ett viktigt begrepp. Tiden det tar från att insignalen ändrats till dess att utsignalen är stabil. Exempel Man önskar styra varvtalet på en likspänningsmotor. Varvtalet skall regleras mellan 0 1000 varv per minut. Varvtalet skall kunna ställas in med en noggrannhet på 2 varv/min. En D/A-omvandlare skall användas. Hur många bitar måste D/A-omvandlaren ha? MSB LSB D/A M Signalen från D/A-omvandlaren måste förstärkas innan man kan driva motorn. Trekanten symboliserar en effektförstärkare. Antalet steg som fodras är 1000/2 = 500 Antalet nivåer i en D/A-omvandlare är 2 n 1, där n är antalet bitar. 2 n >= 501 2 8 = 256 och 2 9 = 512 Detta innebär att man måste använda en 9 omvandlare. Hur många varv/min motsvarar 1 LSB? En 9-bit omvandlare ger 511 nivåer. Alltså 1 LSB = 1000/511 1LSB = 1,957 varv/min Sök den digitala insignal som ger varvtalet 313 varv/min. 313/1,957 = 159,94 Välj 160 = 1010 0000 2 Omvandlaren anses linjär om utsignalen hamnar inom ± 0,5 LSB 3/8
Hur man gör D/A-omvandlare Enklaste är att använda sig av spänningsdelare. För en tre- bit omvandlare går det åt 8 resistorer och 7 omkopplare. Alla resistanser har samma värde. För få bitar fungerar det bra, men vill man ha många bitars upplösning blir antalet orealistiskt. Nästa variant är att använda sig av viktade resistorer. Det innebär att man har en uppsättning resistanser med värdena R 2R 4R 8R 16R osv. Problemet här är att man får stora skillnader på resistanserna. Det blir svårt att hålla samma tolerans på samtliga. Det allra vanligaste sättet är att använda en R 2R stege. Här räcker det med resistanser med värdet R och med värdet 2R. ( Resistansen längst ner skall vara 2R ) Man har också behov av en Op-förstärkare och en referensspänningskälla. Drivspänningen till kretsen är skild från referensspänningen. En referensspänning får aldrig belastas. Belastar Du en spänningskälla så blir utspänningen olika beroende på belastningen. Hur man gör A/D-omvandling Man behöver en analog komparator. V 1 V 2 + _ ut Om V1 > V2 blir utsignalen 1, i annat fall blir utsignalen noll. En analog komparator finns i AT16 4/8
Vi behöver en Sample and Hold V in GND Inspänningen lagras i kondensatorn. Det är sedan det lagrade värdet som omvandlas. Det snabbaste sättet att göra en omvandling är att använda en FLASH-omvandlare. Den består av ett antal komparatorer och en referensspänning. Ref. spänning från resistans kedja. V in Kodomvandlare Ut Inspänningen jämförs med ett antal referensspänningar. Kodomvandlaren gör sedan om resultatet till ett binärt tal. Mycket snabb omvandlare. Blir komplex om man vill ha hög upplösning. För r bitar fodras 2 r 1 komparatorer. Tracking converter V in Up/Down Räknare D/A Digital ut Räknarens utvärde omvandlas till en analog signal. Denna signal jämförs med insignalen. Räknaren räknar antingen upp eller ner beroende på värdet från komparatorn. Räknarens värde är också digital utsignal. 5/8
Omvandlaren har en inställningstid. Följer långsamma förlopp bra. Har svårt att fungera korrekt vid snabba signalförändringar. Successive approximations register V in SAR D/A Digital ut Principen är Gissa ett tal Man undersöker om insignalen motsvarar halva referensspänningen. Är inspänningen lika med eller större så kommer MSB-biten att vara ett. I annat fall noll. Man undersöker sedan nästa bit, och testar om spänningen är större eller mindre. Figuren nedan ger en ide om hur det hela går till. Fördelen här är att omvandlingstiden alltid är konstant. Antalet omvandlingar är antalet bitar plus ett. Man behöver en extra omvandling för att säkerställa resultatet. I AT mega 16 finns en omvandlare av ovanstående typ. Det är en 10 bit omvandlare. Microcontrollern har 8 kanaler in. En multiplexer används för att ange vilken kanal som skall omvandlas. Man kan göra kontinuerlig omvandling på en kanal. Man kan också göra en enstaka omvandling. Då resultatet är klart sätts en bit i statusregistret för ADC Några exempel Vi har en 8 bit omvandlare med referensspänningen + 5V. Vin = 3,5 V. Vad blir digital utsignal? 1 LSB motsvarar 5/256 = 0,01953 V 3,5/0,01953 = 179,2 Utsignalen blir 179 10 = 1011 0011 2 6/8
Vi har en 8 bit omvandlare med referensspänningen + 5V. Vilken insignal motsvarar 1000 000 2 Svar 2,5 V Dvs halva referensspänningen. Vi har en 8 bit omvandlare med referensspänningen + 5V. Vilken är den högsta spänning som ger utsignalen 0x00? Vilken ä den garanterat minsta spänning som ger utsignalen 0xFF? 1 LSB motsvarar 0,01953 V 0,5 LSB motsvarrar då 0,0098 V Inspänningen kan inte vara större än 0,5 LSB då noggranheten hos en omvandlare är ± 0,5 LSB. För att få utsignalen till 0xFF måste man ha inspänningen Vref 1LSB i det här fallet blir det 5,0000 0,01953 = 4,98047 V. Detta är det idala värdet. Om man även tar hänsyn till gänserna ± 0,5 LSB måste man lägga till 0,5 LSB Resultatet blir då 4,9902 V. I det här sammanhanget är det lämpligt att fundera på hur många siffror som man kan ange ett tal med. Vi har en 10 bit omvandlare. Referensspänningen är 10,240 V. Insignalen 6,67 V skall omvandlas till ett digitalt tal. 1 LSB = 10,24/ 1024 = 10 mv. Decimala talet blir 6,67/ 0,01 = 667 Motsvarande binära tal är 10 1001 1011 Om man istället haft en 8 bit omvandlare med samma referensspänning. Vad hade det get för utsignal? 1LSB = 10,24/256 = 40 mv Decimaltalet blir nu 6,67/0,04 = 166,75 Deciamldelen används ej. 166 10 = 1010 0110 2 167 10 = 1010 0111 2 Antag nu att vi gjort omvandlingen med en 10 bit omvandlare, men bara vill ha ett resultat på 8 bitar. I så fall använder man de 8 mest signifikanta bitarna. 10 bit omvand 1 0 1 0 0 1 1 0 1 1 8 bit (166) 1 0 1 0 0 1 1 0 1 1 8 bit (167) 1 0 1 0 0 1 1 1 1 1 Här ser man att decimaldelen inte kommer att användas. 7/8
8 bit omvandlingen kommer att ge 1010 0110 8/8