Presentation laddar. Vänta.

Presentation laddar. Vänta.

William Sandqvist william@kth.se PIC Comparator Tips 'n Tricks William Sandqvist william@kth.se.

Liknande presentationer


En presentation över ämnet: "William Sandqvist william@kth.se PIC Comparator Tips 'n Tricks William Sandqvist william@kth.se."— Presentationens avskrift:

1 William Sandqvist william@kth.se
PIC Comparator Tips 'n Tricks William Sandqvist

2 Komparatorn är en 1 bitsomvandlare
En komparator är en känslig förstärkare för skillnaden mellan spänningarna på ingångarna. Minsta lilla skillnad gör att utgången hamnar på max (1) eller min (0). Komparatorn kan användas för att med hög precision avgöra när en spänning UIN passerar en viss referens UREF. William Sandqvist

3 PIC-processorernas komparatorer
PIC16F628 har två analoga komparatorer. Komparatorerna är anslutna till PORTA. William Sandqvist

4 William Sandqvist william@kth.se
CMCON William Sandqvist

5 William Sandqvist william@kth.se
Comparator modes. 000,100,111,010 William Sandqvist

6 William Sandqvist william@kth.se
Comparator modes. 011,101,110,001 William Sandqvist

7 William Sandqvist william@kth.se
Comparators OFF. 111 Vid uppstart (defaultvärde) är komparatorerna inkopplade! För att använda PORTA’s pinnar digitalt (D) måste man således först ”slå av” komparatorerna. DETTA ÄR VIKTIGT ATT VETA! CM0=1; CM1=1; CM2=1; // no comparators on PORTA pins William Sandqvist

8 Comparator outputs, mode=110
/* AN0 ”-” Input */ TRISA.0 = 1; /* AN2 ”+” Input */ TRISA.2 = 1; /* CMP1 Output */ TRISA.3 = 0; CM2 = 1; /* Mode 110 */ CM1 = 1; CM0 = 0; /* Out not inverted */ C1INV = 0; /* Program can read */ /* bit variable C1OUT */ RA4 är Open drain ! Med dessa inställningar kan man använda komparator 1 helt fristående! EXOR-grindarna kan invertera komparatorernas utgångar. William Sandqvist

9 William Sandqvist william@kth.se
Komparator komparator.c När spänningen på uttaget på 10k potentiometern passerar referens-spänningen 2,5V (5V delat med två) slår komparatorns utgång om. Omslaget är mycket distinkt. William Sandqvist

10 William Sandqvist william@kth.se
Schmitt-trigger komparator.c En tredje 1k resistor från utgången till ”+” ingågen förskjuter referens-nivån så att man nu måste vrida mer för båda omslagen. Det blir således olika omslagsnivåer för Till och Från. Omslagsfunktionen blir därför ”segare” och säkrare. Kopplingen kallas för Schmitt-trigger och fenomenet för Hysteres. Hysteres. William Sandqvist

11 William Sandqvist william@kth.se
Otto Schmitt En schmitt-trigger har ”snap action”. När man passerat omslagspunkten går förloppet inte att hejda … Otto Schmitt William Sandqvist

12 William Sandqvist william@kth.se
RC-oscillator komparator.c Schmitt-triggern laddar nu kontinuerligt upp och ur kondensatorns spänning mellan de två omslags-nivåerna. Tillsammans med hörluren har vi fått en summer! William Sandqvist

13 William Sandqvist william@kth.se
RC-oscillator Komparatorn laddar upp kondensatorn till den övre omslags-spänningen, därefter slår utgången om och laddar ur kondensatorn till den nedre omslags-spänningen. Frekvensen på komparatorns utgång beror av produkten R·C. Eftersom C är konstant så blir det R som styr frekvensen. William Sandqvist

14 William Sandqvist william@kth.se
Sensorer Pröva några resistiva givare … NTC-Termistor LDR-Fotoresistor Vi kommer att mäta frekvens med PIC-processorns CCP-enhet senare i kursen … William Sandqvist

15 William Sandqvist william@kth.se
Sensorer Pröva några resistiva givare … FSR-Force Sensitive Resistor, för ”klämtryck”. William Sandqvist

16 William Sandqvist william@kth.se
 enbitsomvandlare Hur kan billiga CD-spelare låta så bra? CD-skivan är digital och DA-omvandlaren bör vara på c:a bitar för bra ljud, och sådana omvandlare är naturligtvis dyra! I själva verket innehåller de billiga CD-spelarna en 1-bits DA-om-vandlare som arbetar så snabbt att den blir jämförbar med en 16-bitarsomvandlare! Vad som vinnes i upplösning förloras i tid! Snabbheten kan växlas om till noggrannhet! William Sandqvist

17 William Sandqvist william@kth.se
 enbitsomvandlare William Sandqvist

18 William Sandqvist william@kth.se
 enbitsomvandlare En PIC-processor som saknar AD-omvandlare, men som har en komparator, kan användas som en 1 bits AD-omvandlare. Komparatorns utgång pendlar så snabbt den kan mellan 1 och 0. I punkten  bildas skillnaden mellan mätspänningen Umät och kompara-torns utgång Uut. I kondensatorn utjämnas ( = summation,  ) pulserna till samma medelvärde som Vref. Om Vref = 2,5V och de båda R är lika: Umät + Uut = 5 (Vref = 2,5) PIC Delta-Sigma Converter Om man räknar fram komparatorpulsernas ”medelvärde” digitalt som förhållandet mellan ”1” och ”0” i Uut, kan man få fram ett mätvärde på Umät med många bitars upplösning. ( 20 bitars upplösning kommer dock ta någon minut eftersom det man vinner i upplösning förloras i tid ) ! William Sandqvist

19 William Sandqvist william@kth.se
Lite ellära … Umät Uut Komparatorn svänger så fort den kan för att hålla ingången på referensnivån 2,5V. Medel-värdet av pulserna i Uut balanserar Umät. Låt en programloop varva 5000 varv och räkna ”0” och ”1”. Som synes är det antalet ”0” som motsvarar Umät. Umät + Uut = 5 (Vref = 2,5) William Sandqvist

20 William Sandqvist william@kth.se
Vid balans 2,5V Umät Uut 4V analogt 1V digitalt Komparatorn ”svänger” så att minusingången kommer att hållas på referensnivån 2,5V. Uut får då medelvärdet 1V. (Digitalt 1000 varv med ”1” och 4000 varv med ”0”, antalet varv med ”0” ger det digitala mätvärdet). 2,5V 2,5V William Sandqvist

21 William Sandqvist william@kth.se
 enbitsomvandlare I en 5000 varvs loop summeras de varv då komparatorn står på ”0” och och detta antal lagras i 16-bitsvariabeln result. Eftersom det totala spänningsområdet är 5V så blir varje räknesteg värt 1 mV. Det är således busenkelt att ”skala” mätvärdet med antalet varv i loopen! William Sandqvist

22 William Sandqvist william@kth.se
Olika vägar – samma tid Observera att delar av programmet är tidskritiskt. Varvet i programloopen ska ta lika lång tid oavsett om komparatorutgången är ”1” eller ”0”. Om komparatorutgången är ”0” ska dessutom uppräkningen av 16-bitars-variabeln result ta lika lång tid oavsett om det blivit Carry vid ökningen av dess LSB-byte eller ej. Här hjälper oss PIC-processorernas skip-instruktioner. När det inte blir Carry skip’ar man nästföljande instruktion, och det innebär ett hopp som tar 2 cykler, blir det carry gör man den nästföljande instruktionen, då blir det 1+1 även det 2 cykler! (Smart Microchip). Om man vid kompileringen använder flaggan –a så får man en extra fil med som innehåller den genererade assemblerkoden, som man kan studera. William Sandqvist

23 Den tidskritiska delen av programmet
C-kod. Här kompenserar vi för att else-delen av vilkoret tar längre tid än if-delen. long result; if(C1OUT ) { nop(); nop(); nop(); nop(); nop(); } else result++; nop(); } Result är en long, och består av två Byte-register. Här slipper vi kompensera för att Carry från LSB-byten tar extra tid, vid de tillfällen den uppkommer. Smart med skip-instruktioner Microchip! William Sandqvist

24 Den genererade assemblerkoden
BTFSS 0x1F,C1OUT GOTO m NOP NOP GOTO m002 m001 BCF 0x03,RP0 BCF 0x03,RP1 INCF result,1 BTFSC 0x03,Zero_ INCF result+1,1 m Alla instruktioner tar 1 s (vid 4 MHz klocka). Undantag är när en instruktion leder till ett hopp i programmet – då tar det 2 s. William Sandqvist

25 CDFG, Control and Data Flow Graph
Flödesschemat är ett nödvändigt verktyg för att analysera assembler-koden för att se till att olika vägar genom programmet tar samma tid. Verktyg för att rita flödesschemor finns i Word och Powerpoint. William Sandqvist

26 Den genererade assemblerkoden
BTFSS 0x1F,C1OUT GOTO m NOP NOP NOP NOP NOP GOTO m002 m001 BCF 0x03,RP0 BCF 0x03,RP1 INCF result,1 BTFSC 0x03,Zero_ INCF result+1,1 NOP m002 BTFSS 0x1F,C1OUT GOTO m NOP NOP NOP NOP NOP GOTO m002 m001 BCF 0x03,RP0 BCF 0x03,RP1 INCF result,1 BTFSC 0x03,Zero_ INCF result+1, NOP m002 William Sandqvist

27 Den genererade assemblerkoden
BTFSS 0x1F,C1OUT GOTO m NOP NOP NOP NOP NOP GOTO m002 m001 BCF 0x03,RP0 BCF 0x03,RP1 INCF result,1 BTFSC 0x03,Zero_ INCF result+1,1 NOP m002 BTFSS 0x1F,C1OUT GOTO m NOP NOP NOP NOP NOP GOTO m002 m001 BCF 0x03,RP0 BCF 0x03,RP1 INCF result,1 BTFSC 0x03,Zero_ INCF result+1,1 NOP m002 William Sandqvist

28 William Sandqvist william@kth.se
Flödesschemat visar att passagen genom detta programavsnitt alltid tar 9 cykler. Man har här skjutit in nop() instruktioner i C-koden där det visat sig behövas. Vad händer om man skulle byta till den optimerande kompilator-versionen? William Sandqvist

29 William Sandqvist william@kth.se
Tidskritisk kod I allmänhet är det olämpligt att försöka detaljstyra exekveringstiden från C-nivån. Standard C-kompilatorer har olika optimeringsinställningar som alla genererar olika kod. För PIC-processorer (som ju har skip-instruktioner) och småprogram skrivna med en enkel kompilator som tex CC5x är detta trots allt ganska vanligt. Man måste dock alltid ”granska” den genererade koden för att se till att inga överraskningar smugit sig in! Bättre alternativ kan vara att använda PIC-processorernas inbyggda räknare/timers – om dom nu inte är upptagna med andra uppgifter. Timer1 och Timer2 och CCP-enheten behandlas senare i kursen. William Sandqvist

30 William Sandqvist william@kth.se
Mät ett 1,5 V batteri Lab-uppgift. DeltaSigmaA2D628.c Vid laborationen mäter Du ett 1,5 V batteri inkopplat mellan Vref och Umät. Blir mätvärdet detsamma när Du vänder batteriet? William Sandqvist

31 Medelvärdesbildning för stabilt resultat
Beräknar man medelvärdet av N avläsningar förbättras resultatet med en faktor roten ur N. Man kan förbättra mätvärdet med ”en sifferposition” genom att beräkna medelvärdet av 100 (128) avläsningar. Man kan förbättra mätvärdet med ”två sifferpositioner” genom att beräkna medelvärdet av (16384) avläsningar. Det som vinnes i noggrannhet förloras som mät-tid … William Sandqvist

32 William Sandqvist william@kth.se
Running average long buffer[8]; // FIFO array for running average char n, i; buffer[n] = result; n++; n %= 8; // cirkular buffer with 8 variables result = 0; long temporary; for( i=0;i<8;i++) // sum up all 8 values { temporary = buffer[i]; result += temporary; } (unsigned long) result /= 8; Nytt mätvärde Rullande medelvärde Du kan ”kommentera fram” kod som beräknar rullande medelvärde över de senaste 8 mätningarna. Blir mätvärdet mer stabilt nu? William Sandqvist

33 Filter är effektivare än medelvärde
Microchip MCP3550  AD-omvandlare. Klockfrekvens 102,4 kHz 3 stegs  (undertrycker 50 Hz!) ett fjärde ordningens decimeringsfilter (SINC4-typ) reducerar hastigheten till 13 sampel/sek men ökar upplösningen till 22 bitar. Typiskt användningsområde är batteriladdare som uptäcker den obetydliga spänningsstegringen som blir vid fulladdat batteri! William Sandqvist

34


Ladda ner ppt "William Sandqvist william@kth.se PIC Comparator Tips 'n Tricks William Sandqvist william@kth.se."

Liknande presentationer


Google-annonser