1 / 34

PIC Comparator Tips 'n Tricks

PIC Comparator Tips 'n Tricks. 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).

tilly
Télécharger la présentation

PIC Comparator Tips 'n Tricks

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. PIC Comparator Tips 'n Tricks William Sandqvist william@kth.se

  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 william@kth.se

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

  4. CMCON William Sandqvist william@kth.se

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

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

  7. 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 william@kth.se

  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 william@kth.se

  9. 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 william@kth.se

  10. 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 william@kth.se

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

  12. 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 william@kth.se

  13. 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 william@kth.se

  14. 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 william@kth.se

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

  16.  enbitsomvandlare Hur kan billiga CD-spelare låta så bra? CD-skivan är digital och DA-omvandlaren bör vara på c:a 16-20 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 william@kth.se

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

  18.  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 william@kth.se

  19. 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 Uutbalanserar 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 william@kth.se

  20. Vid balans 2,5V Umät Uut 1V digitalt 4V analogt 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 william@kth.se

  21.  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 william@kth.se

  22. 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 william@kth.se

  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 william@kth.se

  24. Den genererade assemblerkoden BTFSS 0x1F,C1OUT GOTO m001 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 ... 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 william@kth.se

  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 william@kth.se

  26. Den genererade assemblerkoden BTFSS 0x1F,C1OUT GOTO m001 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 m001 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 william@kth.se

  27. Den genererade assemblerkoden BTFSS 0x1F,C1OUT GOTO m001 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 m001 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 william@kth.se

  28. 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 william@kth.se

  29. Tidskritisk kod I allmänhet är det olämpligtatt 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 william@kth.se

  30. 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 william@kth.se

  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 10000 (16384) avläsningar. Det som vinnes i noggrannhet förloras som mät-tid … William Sandqvist william@kth.se

  32. Running average long buffer[8]; // FIFO array for running averagechar 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 william@kth.se

  33. Filter är effektivare änmedelvä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 william@kth.se

More Related