Stap 10: Nauwkeurigheid en fout
Nauwkeurigheid:
Als een paintball is het reizen op 300fps, duurt het 3.3333ms reizen van 1ft (1 / 300 fps = 3.3333ms). Zien als onze IR zender/Detector pairs worden verdeeld 4" uit elkaar, moeten we verdelen 3.3333ms met 3 (1ft / 4 inch = 3). Dus is hoe lang het duurt de paintball reizen 4" bij 300fps 1.1111ms.
300 fps = 3.3333ms/ft
tijd om te reizen van 4 inch = 3.3333ms / (1ft / 4 in.)
= 1.1111ms
CPU-snelheid = 12 MIPS
83.3333ns = / ins
Nauwkeurigheid = 100 - (100 * (83.3333ns / 1.1111ms))
= 99.9925% nauwkeurigheid @ 300fps
Dat is nu niet de feitelijke juistheid van deze chronograaf. Als deze microcontroller een object op elke instructiecyclus detecteren kon, zou hebben een nauwkeurigheid van 99.9925% bij 300fps omdat haar ergste geval van niet het opsporen van een object wanneer het heeft gebroken de lichtbundel alleen 83.3333ns worden kan voordat het zou eigenlijk het detecteren.
Zien als ik ben polling de IR detectoren en wachten om te zien wanneer een object heeft gebroken straal #1, duurt het 8 instructie cycli per lus wanneer ik probeer om te detecteren of er is een object dat het breken van de lichtbundel. Zodra het een object heeft gedetecteerd, heeft het één meer instructie cyclus om uit te voeren omdat er om te beginnen van Timer1. Nadat het heeft dit alles gedaan, is het begonnen met het opnemen van de geselecteerde periode duurt het projectiel om te reizen van beam #1 naar lichtbundels #2. Hetzelfde geldt voor beam #2. Duurt 8 instructie cycli per "detectie" lus en één meer instructie Timer1 uitschakelen. Daarom is het worst case scenario:
Ins/Loop = 8 ins * 2 lussen
= 16 instructies voordat een detectie
Ins/inschakelen van Timer1 = 1 ins * 2 (in- en uitschakelen van Timer1)
= 2 instructies
Langste hoeveelheid tijd voordat een detectie mogelijk = (16 modules + 2 ins) * 83.3333ns / ins
= 1,5 µs
Nauwkeurigheid = 100 - (100 * (1.5µs / 1.1111ms))
= 99.865% nauwkeurigheid @ 300fps
Zo, ervan uitgaande dat er geen andere bronnen van fout zijn (afstand is precies 4", balken zijn gebroken identiek op elke zijde, enz) hadden we een nauwkeurigheid van 99.865% bij 300fps voor deze chronograaf. Dit is zeer goed, er zijn echter vele andere kleine bronnen van fout die ik niet heb verwerkt. Daarom is het hoogst onwaarschijnlijk dat de chronograaf dat ik bouwen of u 99.865% nauwkeurig zal zijn. Echter het werkt heel goed en ik ben erg blij mee.
Bewerken:
Ik vergat toe te voegen van de minimale snelheid van het projectiel. Zien als het hoogste aantal dat Timer1 tot rekenen kan 65.535, vermeerderd met één meer instructie wordt gebruikt om er overflow terug naar 0 en zijn het lopen op 12 MIPS, kunnen we de snelheid van een zo laag als 62fps projectiel berekenen. De berekeningen zijn als volgt:
MCU snelheid = 12 MIPS
83.3333ns = / ins
Max Count Timer1 = 65.535 instructies + 1 meer instructie te maken onderbreken
= 65.536 instructies
Min snelheid = ((12 MIPS/65.536 ins) * 1 / 3ft)
= 61.03516fps (om zeker te zijn, zullen we zeggen 62fps)