Presentation laddar. Vänta.

Presentation laddar. Vänta.

William Sandqvist PIC Comparator Tips 'n Tricks.

Liknande presentationer


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

1 William Sandqvist PIC Comparator Tips 'n Tricks

2 William Sandqvist 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 U IN passerar en viss referens U REF.

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

4 William Sandqvist CMCON

5 William Sandqvist Comparator modes. 000,100,111,010

6 William Sandqvist Comparator modes. 011,101,110,001

7 William Sandqvist Comparators OFF. 111 CM0=1; CM1=1; CM2=1; // no comparators on PORTA pins 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!

8 William Sandqvist 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 */ EXOR-grindarna kan invertera komparatorernas utgångar. Med dessa inställningar kan man använda komparator 1 helt fristående! RA4 är Open drain !

9 William Sandqvist Komparator 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. komparator.c

10 William Sandqvist Schmitt-trigger 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. komparator.c

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

12 William Sandqvist RC-oscillator 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! komparator.c

13 William Sandqvist 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.

14 William Sandqvist Sensorer NTC-TermistorLDR-Fotoresistor Pröva några resistiva givare … Vi kommer att mäta frekvens med PIC-processorns CCP-enhet senare i kursen …

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

16  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!

17 William Sandqvist  enbitsomvandlare 

18 William Sandqvist  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) 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 ) !   PIC Delta-Sigma Converter

19 William Sandqvist Lite ellära … 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) UmätUut

20 Vid balans William Sandqvist UmätUut 2,5V 4V analogt 1V digitalt 2,5V 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).

21 William Sandqvist  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!

22 William Sandqvist 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.

23 William Sandqvist Den tidskritiska delen av programmet long result; if(C1OUT ) { nop(); nop(); nop(); nop(); nop(); } else { result++; nop(); } C-kod. 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! Här kompenserar vi för att else- delen av vilkoret tar längre tid än if- delen.

24 William Sandqvist Den genererade assemblerkoden BTFSS 0x1F,C1OUT GOTO m001 NOP NOP GOTO m002 m001BCF 0x03,RP0 BCF 0x03,RP1 INCF result,1 BTFSC 0x03,Zero_ INCF result+1,1 NOP 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.

25 William Sandqvist CDFG, Control and Data Flow Graph Verktyg för att rita flödesschemor finns i Word och Powerpoint. 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.

26 William Sandqvist Den genererade assemblerkoden BTFSS 0x1F,C1OUT GOTO m001 NOP NOP NOP NOP NOP GOTO m002 m001BCF 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 m001BCF 0x03,RP0 BCF 0x03,RP1 INCF result,1 BTFSC 0x03,Zero_ INCF result+1,1 NOP m002

27 William Sandqvist Den genererade assemblerkoden BTFSS 0x1F,C1OUT GOTO m001 NOP NOP NOP NOP NOP GOTO m002 m001BCF 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 m001BCF 0x03,RP0 BCF 0x03,RP1 INCF result,1 BTFSC 0x03,Zero_ INCF result+1,1 NOP m002

28 William Sandqvist 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?

29 William Sandqvist 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.

30 William Sandqvist Mät ett 1,5 V batteri 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? Lab-uppgift. DeltaSigmaA2D628.c

31 William Sandqvist 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 …

32 Running average William Sandqvist 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; Du kan ”kommentera fram” kod som beräknar rullande medelvärde över de senaste 8 mätningarna. Blir mätvärdet mer stabilt nu? Nytt mätvärde Rullande medelvärde

33 William Sandqvist Filter är effektivare än medelvärde Microchip MCP3550  AD-omvandlare. Klockfrekvens 102,4 kHz 3 stegs  (undertrycker 50 Hz!) ett fjärde ordningens decimeringsfilter (SINC 4 -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!

34


Ladda ner ppt "William Sandqvist PIC Comparator Tips 'n Tricks."

Liknande presentationer


Google-annonser