Klockfrekvens på PIC för att mäta externa pulser

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
bos
Inlägg: 2314
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Klockfrekvens på PIC för att mäta externa pulser

Inlägg av bos »

Låt oss säga att jag har en frekvensgenerator som spottar ut fyrkantsvågor i upp till och med 1MHz. Jag vill med en PIC16 räkna antalet pulser via CCP-modulen.

När det gäller att sampla analoga signaler så sägs det enligt Nyqvist att man ska sampla dubbelt så snabbt som den högsta frekvensen för att inte riskera att missa något.

Gäller Nyqvist även i mitt fall? Dvs för att inte riskera att missa någon puls i 1MHz så måste jag ha en FOsc/4 på minst 2MHz, dvs så måste jag låta min PIC köras i minst 8MHz. Stämmer detta?

Även om generatorn skulle köras i 900kHz så skulle en Fosc/4 på 1MHz (kristall på 4MHz) kännas alldeles för nära gränsen för att missa pulser, men det är bara en gissning.
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Re: Klockfrekvens på PIC för att mäta externa pulser

Inlägg av vfr »

Nej. Nykvistteoremet har att göra med hur fort du måste sampla för att återskapa en signal med rätt frekvens. I ditt fall måste du bara se till att du samplar så fort att du inte missar några pulser. Hur fort du måste klocka, beror helt på hur du mäter pulserna. Du kan ju använda ren mjukvara, eller t.ex CCP-enheten i PIC:en. I första fallet så får du räkna på instruktionstiderna för koden, i andra fallet kolla specarna för CCP-enheten i databladet.
bos
Inlägg: 2314
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Re: Klockfrekvens på PIC för att mäta externa pulser

Inlägg av bos »

Tack för svaret. Jag glömde bort att Nykvist var för återuppbyggande av signaler.

CCP-modulen är som sagt den jag ska använda. Jag får dyka ner i pappren och se vad som står där.
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Re: Klockfrekvens på PIC för att mäta externa pulser

Inlägg av vfr »

Sorry, missade det om CCP. Du kan nog peta på rätt bra frekvens om du kör med CCP:n. Har dock inga siffror i huvet.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Klockfrekvens på PIC för att mäta externa pulser

Inlägg av jesse »

Kanske du kan sätta en räknare på ingången som delar frekvensen med 64 eller nåt liknande, om den inte ska räkna exakt antal pulser utan antalet pulser under en längre tidsperiod (sekund)
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: Klockfrekvens på PIC för att mäta externa pulser

Inlägg av blueint »

Samplingsfrekvensen bör nog var mer än den frekvens som ska mätas. Men den behöver bara något mer. Så att man undviker dom situationer då signalerna skulle gå synkront och felaktigt signalera en stilla signalnivå ;)
Mindmapper
Inlägg: 7122
Blev medlem: 31 augusti 2006, 16:42:43
Ort: Jamtland

Re: Klockfrekvens på PIC för att mäta externa pulser

Inlägg av Mindmapper »

Beroende på dutycycle kan det nog behövas en hel del mera av samplingen.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Klockfrekvens på PIC för att mäta externa pulser

Inlägg av sodjan »

Du ska alltså bara *räkna* antalet pulser ?
Kolla datablaet och se om "CAPTURE/COMPARE/PWM TIMINGS"
inte räcker till...
bos
Inlägg: 2314
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Re: Klockfrekvens på PIC för att mäta externa pulser

Inlägg av bos »

sodjan skrev:Du ska alltså bara *räkna* antalet pulser ?
Korrekt.
sodjan skrev:Kolla datablaet och se om "CAPTURE/COMPARE/PWM TIMINGS" inte räcker till...
*läser*

Där finner jag att den ingående perioden måste vara större än Tcy + 40ns. Tcy definieras som 4/Fosc. Med ingångspulser på 1MHz blir det en periodtid på 1µs.

Jag får ekvationen till Tcy + 40ns < 1µs <=> 4/Fosc < (1µs - 40ns) <=> Fosc > [4 / (1µs - 40ns)] <=> Fosc > 4.16MHz.

En oscillator på 8MHz duger med andra ord så att det räcker och blir över. Tack för pekaren.
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Klockfrekvens på PIC för att mäta externa pulser

Inlägg av Icecap »

Och uppmärksamma att detta kräver en duty-cycle på 50%!

Men jag undrar hur du ska räkna antal pulser vid en kontinuerlig frekvens eller är det något jag inte har fattat?

Ska du räkna en pulsskur eller ska du mäta frekvensen?

Är det det första ska du knappast använda CCP-modulen och är det det andra klarar den inte jobbet utan en nerdelning innan.
bos
Inlägg: 2314
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Re: Klockfrekvens på PIC för att mäta externa pulser

Inlägg av bos »

Icecap skrev:Ska du räkna en pulsskur eller ska du mäta frekvensen?

Är det det första ska du knappast använda CCP-modulen och är det det andra klarar den inte jobbet utan en nerdelning innan.
Skulle du kunna utveckla det sista om varför den inte klarar jobbet utan nerdelning? Är det något grundläggande jag missat i databladet?

Tanken med kretsen är att min PIC ska mäta frekvensen (som kommer ligga någonstans mellan 0.5-1MHz). Det finns kanske bättre sätt, men det enda jag kom på på rak arm var att räkna antalet pulser under en sekunds tid.

Finns det bättre sätt är jag idel öra.
bos
Inlägg: 2314
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Re: Klockfrekvens på PIC för att mäta externa pulser

Inlägg av bos »

Jag tror jag kom på varför. Registren för Timer1 är två 8-bits, vilket ger ett maxvärde på 65535. Om jag skulle räkna varje puls skulle dessa overflow:a så det visslar om det.
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Klockfrekvens på PIC för att mäta externa pulser

Inlägg av Icecap »

Det finns "många" sätt att räkna frekvens och CCP-enheten är inte den rätta... eller jo, det är den men då på ett speciellt sätt.

Man kan:
* Mäta tiden mellan varje flank, det är en snabb metod men den kräver mycket hastighet på µC'n.
* Samma som ovan men med neddelat frekvens, kan vara det bästa av 2 världar.
* Mäta pulser över en viss tid.
* Kombinera lite: Med en räknare räknas antal pulser och dessa "gates" under en viss tid. Vid att bygga styrningen så att den reagerar på flanker kan man dels räkna hur många pulser det kom OCH få ett bra mått på över "exakt" hur lång tid dessa pulser kom på. Resten är matematik.

Att räkna pulser i ett sekund är att leva med en långsam uppdatering vilket snabbt driver en till vansinne. Mäter man pulser över kortare tid (kanske 1/10 sek) får man sämre upplösning MEN motsatt: är kristallfrekvensen och mätsätt så exakt att man får den upplösning som man ger avkall på om man väljer maximal upplösning?

Ett kristall är ofta ±50ppm, vid 1MHz blir det ±50Hz, bättre upplösning kan du alltså inte få eller hur? Visst, bättre kristall osv. men de sista siffror kommer att kosta dyra pengar.

Men då så, skippa 1Hz upplösningen och räkna hur mågna pulser på 1/10 sek. och du har en snabb uppdatering och inte förlorat något för upplösningen fanns ju inte till att börja med.
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: Klockfrekvens på PIC för att mäta externa pulser

Inlägg av blueint »

Man kan uppdatera snabbt (1/10s) samt medelvärdesbilda över 0,5 - 2,0 s ..
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 47013
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Klockfrekvens på PIC för att mäta externa pulser

Inlägg av TomasL »

Man kan också mata nån av räknarna externt, och läsa av dem vid lämpligt intervall.
Skriv svar