PIC Comparator Tips 'n Tricks - PowerPoint PPT Presentation

1 / 34
About This Presentation
Title:

PIC Comparator Tips 'n Tricks

Description:

Title: PowerPoint Presentation Last modified by: William Sandqvist Created Date: 1/1/1601 12:00:00 AM Document presentation format: On-screen Show (4:3) – PowerPoint PPT presentation

Number of Views:243
Avg rating:3.0/5.0
Slides: 35
Provided by: ictKthSe
Category:

less

Transcript and Presenter's Notes

Title: PIC Comparator Tips 'n Tricks


1
PIC Comparator Tips 'n Tricks
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.
3
PIC-processorernas komparatorer
PIC16F628 har två analoga komparatorer.
Komparatorerna är anslutna till PORTA.
4
CMCON
5
Comparator modes. 000,100,111,010
6
Comparator modes. 011,101,110,001
7
Comparators OFF. 111
Vid uppstart (defaultvärde) är komparatorerna
inkopplade! För att använda PORTAs pinnar
digitalt (D) måste man således först slå av
komparatorerna. DETTA ÄR VIKTIGT ATT VETA!
CM01 CM11 CM21 // no comparators on PORTA
pins
8
Comparator outputs, mode110
/ AN0 - Input /TRISA.0 1/ AN2
Input / TRISA.2 1 / CMP1 Output
/ TRISA.3 0 CM2 1 / Mode 110 /CM1
1CM0 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.
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.
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.
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_at_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!
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 RC. Eftersom C är
konstant så blir det R som styr frekvensen.
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
15
Sensorer
Pröva några resistiva givare
FSR-Force Sensitive Resistor, för klämtryck.
William Sandqvist william_at_kth.se
16
?? enbitsomvandlare
Hur kan billiga CD-spelare låta så bra?
CD-skivan är digital och DA-omvandlaren bör vara
på ca 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!
17
?? enbitsomvandlare
?
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 ) !
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 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)
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
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!
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
skipar 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 11 ä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
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!
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 result1,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.
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.
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 result1,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 result1,1
NOP m002
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 result1,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 result1,1
NOP m002
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?
29
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
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?
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

32
Running average
long buffer8 // FIFO array for running
averagechar n, i buffern result n n
8 // cirkular buffer with 8 variables result
0 long temporary for( i0ilt8i) // sum
up all 8 values temporary bufferi
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?
33
Filter är effektivare änmedelvärde
Microchip MCP3550 ?? AD-omvandlare. Klockfrekven
s 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!
34
(No Transcript)
Write a Comment
User Comments (0)
About PowerShow.com