1 / 37

AD-omvandling

AD-omvandling. Ny processor med AD-omvandlare. PIC16F628 saknar AD-omvandlare. När vi behöver AD-omvandlare här i skolan använder vi PIC16F874 . 8 AD-kanaler på PORTA och PORTE AN0/RA0/2 AN1/RA1/3 AN2/RA2/4 AN3/RA3/5 AN4/RA5/7 AN5/RE0/8 AN6/RE1/9 AN7/RE2/10.

sharvani
Download Presentation

AD-omvandling

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. AD-omvandling William Sandqvist william@kth.se

  2. Ny processor med AD-omvandlare PIC16F628saknar AD-omvandlare. När vi behöver AD-omvandlare här i skolan använder vi PIC16F874. 8 AD-kanaler på PORTA och PORTE AN0/RA0/2AN1/RA1/3AN2/RA2/4AN3/RA3/5AN4/RA5/7AN5/RE0/8AN6/RE1/9AN7/RE2/10 Många andra PIC-processorer har inbyggd AD-omvandlare, tex. PIC16F690. William Sandqvist william@kth.se

  3. En AD behöver en DA DA i puben ( Digitalt in Öl ut ) … Digitalt in Spänning ut … I en DA-omvandlare styr det binära talets bitar binärkodade ”strömmar” som summeras till ett analogt spänningsvärde i en resistor. William Sandqvist william@kth.se

  4. Succesiva approximationer AD-omvandling med succesiva approximationsmetoden AD-omvandlaren innehåller en DA-omvandlare och en komparator. AD-omvandling enligt metoden succesiva approximationer är jämförbart med att väga en okänd massa med binära vikter på en balansvåg. Man provar steg för steg med att lägga till binära ”vikter” om ”<” eller dra ifrån ”vikter” om ”>”. William Sandqvist william@kth.se

  5. Binära vikter 8 4 2 1 … 8 8+4 8+2 AD-omvandlingen tar tid. För varje bits upplösning krävs ett ytterligare steg. 8+2+1 William Sandqvist william@kth.se

  6. En AD-omvandlare, 8 kanaler Med PIC-processorns AD-omvandlare kan man mäta 8 olika spänningar, en i taget. Kanalvalsmultiplexor. William Sandqvist william@kth.se

  7. Inre eller Yttre referensspänning? AN3 och AN2 kan användas till yttre referensspänning ( jäm-förelsespänning ) och jord. Det enklaste är naturligtvis att använda matningsspänningen ( AVDD och AVSS ) som referens, men det kan finnas olika anledningar till att använda yttre spänningsreferens. William Sandqvist william@kth.se

  8. Yttre precisionsreferens Voltmeter. Det är viktigt att den uppmätta spänningen jämförs med en exakt referens. Om utrustningen tillexempel är batteridriven, så varierar matnings-spänningen för mycket för att vara lämplig som referensspänning. Man ansluter då en yttre referensspänning till ingången AN3. Spänningsreferenskretsen MAX6241 har spänningen 4,096V. Detta "ovanliga" spänningsvärde kommer av att talet 4096 är en tvåpotens, 212 = 4096. PIC-processor som voltmeter. AD-omvandlaren får nu skalfaktorn 4 mV/steg. Division med "4“, för att få skalfaktorn 1 mV/steg, kan man utföra genom att "skifta" det binära talet två steg åt höger.( Multiplikationer och divisioner innebär mycket programkod för PIC-processorer som saknar inbyggd multiplikatorenhet ). William Sandqvist william@kth.se

  9. Inre precisionsreferens? PIC-processor som voltmeter. PIC12F1840 har en inre referensspänning 1,024. Den inbyggda AD-omvandlaren kan då få 1 mV omvandlingssteg. William Sandqvist william@kth.se

  10. Högsta upplösning Vill man ha högsta upplösning vid mätning av givarsignaler måste man se till att givarens utspänningsområde och det spänningsområde AD-omvandlaren omvandlar helt "täcker" varandra. I allmänhet krävs det då att både AD-omvandlarens referensspänning och 0-nivå kan justeras. Hög upplösning kräver att AD-omvandlarens referensspänning och 0-nivå kan justeras efter givarens spänningsområde. William Sandqvist william@kth.se

  11. Ex. Linjäriserad NTC-termistor Ett praktiskt exempel är temperaturmätning med en NTC-termistor. En termistor har hög känslighet, men olinjärt temperatursamband. I praktiken seriekopplar man termistorn med en fast resistor så att den ingår i en spänningsdelare. ( Tekniken beskrivs i boken Mätgivare ). Figuren visar sambandet mellan spänning och temperatur för en sådan spänningsdelare. Kurvan börjar vid 0,5 V och slutar vid 3,5V och blir däremellan förvånadsvärt linjär. William Sandqvist william@kth.se

  12. Ex. Linjäriserad NTC-termistor 3,5V 0,5V Genom att ställa in VREF- = 0,5V och VREF+ = 3,5V med potentiometrarna, så utnyttjar temperaturgivaren AD-omvandlarens hela spänningsområde. William Sandqvist william@kth.se

  13. Ratiometrisk inkoppling Ibland behöver man stabila referens-spänningar både till givare och AD-omvandlare. Ett ofta använt konstgrepp är då ratiometrisk anslutning av givaren. Så länge givarens referensspänning och AD-omvandlarens referens-spänning ändrar sig i samma proportioner så omvandlas samma värde. Om man har samma referens-spänning till givare och AD-omvand-lare så ställs det därför inga krav på att den ska vara stabil. Ratiometrisk anslutning av en potentiometer till en AD-omvand-lare. Som referensspänning kan den ostabiliserade matningsspän-ningen användas! Detta är några av anledningarna till att PIC-processorns AD-omvandlare har inkopplingsmöjligheter för externa spänningsreferenser! William Sandqvist william@kth.se

  14. Behövs 10 bitars upplösning? b9b8b7b6b5b4b3b2b1b0 AD-omvandlaren är på 10 bitar. Vad kostar en givare som har 10 bitars upplösning? 100 $ ? 10 bitar 1024 steg 5 mV/steg Upplösning 0,1% Vanligare är att man har råd med en 8 bitars givare. (PICprocessorn själv kostar 10 $). William Sandqvist william@kth.se

  15. 8-bitars program Behöver man bara 8 bitars upplösning kan man strunta i de två minst signifikanta bitarna och hantera resultatet som en Byte. b9b8b7b6b5b4b3b2 b1b0 8 bitar 256 steg 20 mV/steg Upplösning 1% William Sandqvist william@kth.se

  16. Vänsterjusterat resultat för 8 bitar Vänsterjusterat. 8 bitarstal: char answer;answer = ADRESH; William Sandqvist william@kth.se

  17. Undvik förstärkare Behöver man bara 8 bitars upplösning kan de två mest signifikanta bitarna få vara konstanta. Man slipper förstärka givarsignalen eftersom steget är 5 mV. 1 0 b7b6b5b4b3b2 b1b0 43 En febertermometer behöver bara temperaturområdet 34…43 (eller hur!) 8 effektiva bitar 256 effektiva steg 5 mV/steg Upplösning 1% 34 William Sandqvist william@kth.se

  18. Högerjusterat resultat 10 bitar Högerjusterat. 10 bitarstal: unsigned long answer;answer = 256*ADRESH; answer += ADRESL; William Sandqvist william@kth.se

  19. Resultatet blir ett värde som före-kommit under omvandlingen, men vid en obestämd tidpunkt! Vad händer om signalen ändrar sig under omvandlingen? AD-omvandlaren kan aldrig ”ångra” en redan bestämd bit! William Sandqvist william@kth.se

  20. Problemet Samplingstid-punkten blir obestämd! William Sandqvist william@kth.se

  21. Sample & Hold -krets Lösningen är att den analoga signalen ”fryses” under omvandlingen. Vid AD-omvandlingens start tar en switch ett ”sample” av signalen och lagrar det i en kondensator. PIC-processorernas samplingskondensator har kapacitansen 120 pF. William Sandqvist william@kth.se

  22. ACQUISITION TIME tACQ Varje gång man har valt/ändrat kanal måste samplingskondensatorn CHOLD hinna ladda upp sig till den analoga spänningen. Detta tar c:a 20s. En 20s fördröjning kan enklast programmeras som: char i = 3; do ; while ( --i > 0); /* 4 MHz clock */ William Sandqvist william@kth.se

  23. AD-omvandlarens inställningar Det är många inställningar som måste göras för att få fart på AD-omvandlaren! Ett inställningsscript finns som hjälpmedel William Sandqvist william@kth.se

  24. AD-omvandlarens klockfrekvens PIC-processorn är snabbare än AD-omvandlaren. Som klocka för AD-omvandlaren kan PIC-oscillatorns frekvens delad med 2, 8, eller 32 användas. Vid 4 MHz klocka ska oscillatorfrekvensen delas med minst 8 innan den används till AD-omvandlaren. William Sandqvist william@kth.se

  25. Ställa in AD klockfrekvens William Sandqvist william@kth.se

  26. Ställa in portpinnar AN/Ref/Dig William Sandqvist william@kth.se

  27. Vilka kombinationer är möjliga? 8 analoga kanaler, matningen som referens? En analog kanal med ratiometrisk anslutning? Två analoga kanaler, matningen som referens? Oooops! William Sandqvist william@kth.se

  28. Ställa in portpinnar AN/Ref/Dig Glöm inte att också ställa in portpinnarnas TRIS-register. ”1” för ingångar Analoga eller Digitala, ”0” för Digitala utgångar. William Sandqvist william@kth.se

  29. Ställa in AD kanal William Sandqvist william@kth.se

  30. Starta AD och vänta på klar Starta AD-omvandling: GO = 1; Vänta på AD-omvandling klar: while( GO ) ; William Sandqvist william@kth.se

  31. Läsa av resultatettvå resultatregister Högerjusterat. 10 bitarstal: unsigned long answer;answer = 256*ADRESH; answer += ADRESL; Vänsterjusterat. 8 bitarstal: char answer;answer = ADRESH; William Sandqvist william@kth.se

  32. Hur snabbt kan man omvandla? Varje AD-omvandling behöver 12 AD-klockcykler plus ett 2 AD-klock-cykler mellanrum mellan omvandlingarna. Vi använder fosc/8 Används alla 8 kanalerna så reduceras omvandlingshastigheten. TACQ 20 s måste nu införas mellan kanalbytena. I praktiken behöver PIC-processorn också tid för att göra något med alla mätvärden! William Sandqvist william@kth.se

  33. AD-lab Blinkfrekvensen ställs in med potentiometern! William Sandqvist william@kth.se

  34. Initiering AD-lab /* AD Setup. Se help Script! *//*01.xxx.x.x.x ADclock = fosc/8 xx.000.x.x.x select ch AN0 xx.xxx.0.x.x go = 0, start AD later xx.xxx.x.0.x – xx.xxx.x.x.1 AD unit is ON */ADCON0 = 0b01.000.0.0.1; /*0.xxx.xxxx left justification x.000.xxxx – x.xxx.1110 internal reference, Vref+ = Vcc, Vref- = Vss*/ADCON1 = 0b0.000.1110; TRISA.0 = 1; /* RA0/AN0 is input */ William Sandqvist william@kth.se

  35. while(1) { char i = 3; do ; while ( --i > 0); /* wait tACQ */ GO=1; /* start AD */ while(GO); /* wait for done */ blinktime = ADRESH; /* read result 8 msb */ /* double loop i,j generates blinkfrequency */ for( i=0;i < blinktime; i++) { for( j=0;j < 250; j++); } /* toggle lightdiode on/off */ LED = ! LED; } William Sandqvist william@kth.se

More Related