Sida 1 av 3
Vilken clock-hastighet för tidtagning med hög precision?
Postat: 4 november 2010, 11:00:39
av Glattnos
Jag vill göra tidtagning med en Atmega168.
Precision: 1/1000 sekund (I sammanhangen anser jag att det är hög precision)
Tid: 60 sekunder
Är detta smart:
16-bitars timer
Kristall: 8.192000 MHz 20ppm
Prescale: 1024
Fuse: Divid clock by 8 internally
Då borde väll timerns "räkne-register" öka med 1 varje 1/1000 sek och 16-bitars registret borde räcka till drygt 65 sekunder? Men hur räknar man ut hur bra precision det blir?
Om precisionen inte blir tillräcklig, finns det då något annat sätt att göra detta på? tex lägre clock-hastighet och lägre prescale?
Re: Vilken clock-hastighet för tidtagning med hög precision?
Postat: 4 november 2010, 13:04:43
av sodjan
> Precision: 1/1000 sekund
Det är upplösning, inte precision.
Precisionen blir 20 ppm hur du än gör.
Sen kan du ha olika konfig på prescalers m.m. beroende
på vilken upplösning o.s.v du behöver/vill ha.
Re: Vilken clock-hastighet för tidtagning med hög precision?
Postat: 4 november 2010, 13:14:13
av Andax
Först kan man ju räkna fram osäkerheten i tidsuppskattningen utifrån kristallens spec. Har den ett fel inom 20 ppm så bidrar det med en osäkerhet i tidmätningen på 0.000020 * 60 = 0.0012 sekunder.
Sen kan ju felet i tidmätningen bli upp till ett 'count' fel beroende på när stop-signalen kommer. Kommer den precis före eller precis efter ett räknaromslag.
Så ditt maxfel blir ju i fallet med 0.001 s räknarupplösning 0.001 + 0.0012 = 0.0022 s.
För att minska kristallfelet kan man ju alltid mäta en puls med känd tid (t.ex. tiden mellan två GPS 1PPS-pulser) och skatta den sanna frekvensen. Då kan du minska kristallens osäkerhet till < 1 ppm.
Vill du minska bidraget till 'count' omslagsfelet får du köra med fler bitar än 16. Fast då måste man blanda in interrupt mm vid overflow av den 16-bitars hårdvaruräknaren.
Re: Vilken clock-hastighet för tidtagning med hög precision?
Postat: 4 november 2010, 15:35:29
av Icecap
Med en DS4026 som oscillator kan du uppnå ±2ppm (max).
Sedan är det brukligt att ha en högre klocka än upplösningen du vill ha, 8-10 gg är bra, detta minskar avrundningsfel.
Re: Vilken clock-hastighet för tidtagning med hög precision?
Postat: 4 november 2010, 16:00:51
av Maalobs
Ja precis, är inte Nyquist-teoremet applicerbart här:
http://en.wikipedia.org/wiki/Nyquist%E2 ... ng_theorem
Re: Vilken clock-hastighet för tidtagning med hög precision?
Postat: 5 november 2010, 11:42:28
av Glattnos
sodjan skrev:> Precision: 1/1000 sekund
Det är upplösning, inte precision.
Jag menade att räknaren ska vara exakt på 1/1000 sek under 60 sek. Det borde man väll kunna kalla precision?
Då spelar det alltså ingen roll för precisionen vilken clock-hastighet och prescaler man använder för det är ändå kristallens precision, 20 ppm, som avgör?
Vad står ppm för egentligen? Hittade inget som stämde när jag sökte men typ "Antal milli-sekunder fel per sekund"?
Re: Vilken clock-hastighet för tidtagning med hög precision?
Postat: 5 november 2010, 12:00:56
av sodjan
> Vad står ppm för egentligen? Hittade inget som stämde när jag sökte
Du behöver definitivt träna upp dina sökningar. Google gav
svaret direkt :
http://sv.wikipedia.org/wiki/Ppm
> Jag menade att räknaren ska vara exakt på 1/1000 sek under 60 sek.
Du menar nog inte "exakt på", utan att tiden inte får avvika med mer än
1/1000 sek efter 60 sekunder, eller hur ? "Exakt på" kommer du aldrig att uppnå.
Men OK. D.v.s ett fel på 1/60000 eller ca 16 ppm. Då måste du ha en klocka/tidsreferens
med samma eller bättre precision. En 20 ppm kristall räcker alltså inte riktigt till.
Vad är det som kräver denna precision ?
Re: Vilken clock-hastighet för tidtagning med hög precision?
Postat: 5 november 2010, 12:35:41
av Glattnos
Sodjan skrev:> Vad står ppm för egentligen? Hittade inget som stämde när jag sökte
Du behöver definitivt träna upp dina sökningar. Google gav
svaret direkt :
http://sv.wikipedia.org/wiki/Ppm
Nädå, den hittade jag och även denna:
http://en.wikipedia.org/wiki/PPM men tyckte inte att något verkade stämma in. Men du menar att det är "Parts Per Million" dvs. "Delar På Miljonen" eller "Miljondelar"?
Alltså: 20 ppm är 20 miljondelars precision. (60 sekunder/1 000 000) * 20 delar = 0,0012 sek. Hmmm...Ja det blev ju precis som Andax sa...nu fattar jag. Om det är 60 minuter istället är felet fortfarande 0,0012, fast minuter. Okej, tack för svaren!
Sodjan skrev:> Jag menade att räknaren ska vara exakt på 1/1000 sek under 60 sek.
Du menar nog inte "exakt på", utan att tiden inte får avvika med mer än
1/1000 sek efter 60 sekunder, eller hur ? "Exakt på" kommer du aldrig att uppnå.
Nä, jag menade "exakt på" 1/1000 sekunder under 60 sekunder. Jag hävdar att man kan säga så(dock kan det kanske vara en språklig skillnad då jag bor i norrland)eftersom den inte behöver räkna rätt på 1/10 000 sekunder för att det ska stämma. Alltså om räknaren efter 60 sek har nått till 60,0008 spelar ingen roll. Den är ändå "exakt på 1/1000 sek under 60 sek". Men ska den räkna till 120 sek så blir det ju 120,0016, alltså 1/1000 sek för mycket. Så den är inte "exakt på 1/1000 sek under 120 sek".
Det ska bli en hastighetsmätare som ska mäta när man passerar "ett föremål med en viss längd". Ju exaktare tidmätningen är desto "kortare" kan föremålet vara med bibehållen precision. Sen kan ju själva sensorn fela lite men det ska jag kompensera så gott det går och när jag även hade tänkt visa tiden i mätningen på en display så vill jag att tusendelarna för triggningen stämmer, oavsett hur mycket sensorn felar.
Re: Vilken clock-hastighet för tidtagning med hög precision?
Postat: 5 november 2010, 12:51:18
av jesse
Är detta smart:
16-bitars timer
Kristall: 8.192000 MHz 20ppm
Prescale: 1024
Fuse: Divid clock by 8 internally
Det har redan kommeterats men ändå:
jag skulle valt omkring 8000 till 16000 avbrott per sekund, för att få bättre upplösning.
Det kanske skulle ta lite väl mycket processorkraft om du programmerar i C och kör CPUn på bara 1.024 MHz. I C kan kan det hända att du får ett gäng push- och pop-instruktioner i onödan (vilka vardera tar två klockcykler). Programmerar du i assembler är det nog inga problem.
en något högre CPU-klockfrekvens (t.ex. 4.096 MHz) löser problemet, om det skulle visa sig att C-koden gör en onödigt klumpig ISR-rutin.
Re: Vilken clock-hastighet för tidtagning med hög precision?
Postat: 5 november 2010, 13:00:12
av Nerre
Glattnos skrev:
Jag hävdar att man kan säga så
Men det är där du resonerar fel.
1/1000 sekund är 0,0001 sekund. Om det är EXAKT 0,0001 sekund så är det alltså INTE 0,00010000001 sekund.
Det där har jag tragglat med kollegorna på jobbet när jag försökt lära dem mätosäkerhet. Om vi tar fram multimetern och den visar en spänning på 12,25 V så innebär det INTE att spänningen är exakt 12,25 V. Det innebär (om vi räknar på 2% mätosäkerhet för ett konfidensintervall på 95%) att spänningen med 95% sannolikhet ligger mellan 12,005 V och 12,495 V.
(Egentligen blir det nog värre, jag är ringrostig på beräkningarna, 95% konfidens innebär en täckningsfaktor på 1,96 som man ska multiplicera standardavvikelsen med, men jag är lite osäker på korrelationen mellan en rektangulär fördelning och standardavvikelse.)
Det är också stor skillnad på precision och noggrannhet (accuracy på engelska).
Här finns ett par sidor som visar ganska bra
http://www.mathsisfun.com/accuracy-precision.html
http://airchild2.tripod.com/precise.html
http://honolulu.hawaii.edu/distance/sci ... cprec.html
Wikipedia förklarar lite mer ingående
http://en.wikipedia.org/wiki/Accuracy_and_precision
Re: Vilken clock-hastighet för tidtagning med hög precision?
Postat: 5 november 2010, 13:06:48
av Glattnos
jesse: Bra att du tänker så, jag har ju inte talat om vilket språk jag programmerar i. Jag har valt att göra detta i Assembler just för att det är "lite tidskritiskt"(eller kanske kan bli om man gör det i C). All hantering av tidtagningen kommer ske i avbrotts-rutiner som är ca 8-16 instruktioner långa(mest bara lagra räknarens värden i olika variabler i SRAM). Sedan kommer beräkningar och display-hanteringen att ske i huvudprogrammet.
När jag ändå håller på: Nu har jag loopar som tidsfördröjning till Display-hanteringen, det borde jag väll kunna ha utan problem eftersom tidtagningen sköts i avbrottsrutiner(som naturligtvis inte innehåller några loopar)?
Re: Vilken clock-hastighet för tidtagning med hög precision?
Postat: 5 november 2010, 13:13:17
av Glattnos
Nerre: När blir 1/1000 sekund desamma som 0,0001 sekund?
Nä du har rätt i ditt resonemang och jag förstår hur du menar men jag havdar fortfarande att man kan säga "exakt på 1/1000 sek under 60 sek". Men det går inte att lyfta ur "1/1000 sek" ur det sammanhanget, för då blir det som du säger.

Re: Vilken clock-hastighet för tidtagning med hög precision?
Postat: 5 november 2010, 13:32:03
av Nerre
Äsch, lite nollor hit eller dit spelar ju ingen roll, en nolla är ju "ingenting":)
Re: Vilken clock-hastighet för tidtagning med hög precision?
Postat: 5 november 2010, 14:25:53
av jesse
Om jag hade kört assembler och ska lagra en räknare skulle jag reservera några CPU-register för det ändamålet, så hade jag inte behövt hämta och spara i SRAM varje gång. Är det massor av räknare du ska räkna upp / ner?
Re: Vilken clock-hastighet för tidtagning med hög precision?
Postat: 5 november 2010, 14:46:11
av Glattnos
jesse: Ja, iofs så skulle jag kunna använda CPU-register istället. Det är ju bara tre 16-bitars värden som ska lagras. Då kommer avbrotts-rutinen förstås att ta ännu mindre tid.
