PIC Comparator Tips
This presentation is the property of its rightful owner.
Sponsored Links
1 / 34

PIC Comparator Tips 'n Tricks PowerPoint PPT Presentation


  • 150 Views
  • Uploaded on
  • Presentation posted in: General

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).

Download Presentation

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


William sandqvist williamkth se

PIC Comparator Tips 'n Tricks

William Sandqvist [email protected]


Komparatorn r en 1 bitsomvandlare

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 [email protected]


Pic processorernas komparatorer

PIC-processorernas komparatorer

PIC16F628 har två analoga komparatorer. Komparatorerna är anslutna till PORTA.

William Sandqvist [email protected]


Cmcon

CMCON

William Sandqvist [email protected]


Comparator modes 000 100 111 010

Comparator modes. 000,100,111,010

William Sandqvist [email protected]


Comparator modes 011 101 110 001

Comparator modes. 011,101,110,001

William Sandqvist [email protected]


Comparators off 111

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 [email protected]


Comparator outputs mode 110

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 [email protected]


Komparator

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 [email protected]


Schmitt trigger

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 [email protected]


Otto schmitt

Otto Schmitt

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

Otto Schmitt

William Sandqvist [email protected]


Rc oscillator

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 [email protected]


Rc oscillator1

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 [email protected]


Sensorer

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 [email protected]


Sensorer1

Sensorer

Pröva några resistiva givare …

FSR-Force Sensitive Resistor, för ”klämtryck”.

William Sandqvist [email protected]


Enbitsomvandlare

 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 [email protected]


Enbitsomvandlare1

 enbitsomvandlare

William Sandqvist [email protected]


Enbitsomvandlare2

 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 [email protected]


Lite ell ra

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 [email protected]


Vid balans

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 [email protected]


Enbitsomvandlare3

 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 [email protected]


Olika v gar samma tid

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 [email protected]


Den tidskritiska delen av programmet

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 [email protected]


Den genererade assemblerkoden

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...

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 [email protected]


Cdfg control and data flow graph

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 [email protected]


Den genererade assemblerkoden1

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,1NOP 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

William Sandqvist [email protected]


Den genererade assemblerkoden2

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,1NOP 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

William Sandqvist [email protected]


William sandqvist williamkth 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 [email protected]


Tidskritisk kod

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 [email protected]


M t ett 1 5 v batteri

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 [email protected]


Medelv rdesbildning f r stabilt resultat

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 [email protected]


Running average

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 [email protected]


Filter r effektivare n medelv rde

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 [email protected]


  • Login