Inhoudsopgave:
- Stap 1: Functie
- Stap 2: Werkingstheorie en nauwkeurigheid
- Stap 3: Schema en onderdelenlijst
- Stap 4: PCB Gerber-bestand
- Stap 5: Soldeer uw PCB
- Stap 6: Programmeren van de Atmega328p
- Stap 7: LCD-scherm
- Stap 8: STL-bestand
- Stap 9: ROTERENDE ENCODER
- Stap 10: Sensorleiding
- Stap 11: alternatief voor sensorleiding
- Stap 12: Een pellet op oscilloscoop en kalibratie
- Stap 13: Meer…
Video: Luchtgeweer chronograaf, chronoscoop. 3D-geprint: 13 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:15
Hallo allemaal, vandaag gaan we terug naar een project dat ik in 2010 heb gedaan. Een Air Rifle-chronograaf. Dit apparaat vertelt je de snelheid van een projectiel. Pellet, BB of zelfs luchtzachte BB plastic bal.
In 2010 kocht ik voor de lol een luchtbuks. Was het raken van blikjes, flessen, richten. Ik weet dat de snelheid van dit kanon maximaal 500 voet/s was. Omdat het de Canadese wet is. Er zijn sterkere luchtbuksen beschikbaar, maar je moet er een vergunning voor hebben en die kun je niet bij Walmart kopen.
Nu ik deze licentie had, kon ik een andere kopen. Maar kort verhaal, hetzelfde wapen was beschikbaar voor de VS op 1000 voet / s. WAT!? Hetzelfde pistool? ja… In Canada heeft de slag een gat en is de veer zachter.
Het eerste wat je moet doen is het gat opvullen. Dat heb ik met soldeer gedaan. De volgende stap was om een vervangende veer te bestellen. Maar wacht… wat is de huidige snelheid van mijn nieuwe speeltje? Is de lente echt nodig? Ik weet het niet en ik wil het weten. Ik wil het nu weten, maar hoe?
Daarom heb ik dit project gedaan. Alles wat ik nodig had waren 2 sensoren, een uC en een display en we zijn in zaken.
Vorige week zag ik mijn oude blauwe chronograaf op een plank en ik praat tegen mezelf: "Waarom deel ik dit niet en maak ik er een instructable mee?" En trouwens, we zouden de nauwkeurigheid kunnen verhogen en een batterij-indicator kunnen toevoegen. Zet 1 knop in plaats van 2 voor aan/uit. Allemaal oppervlaktemontage. We zijn nu in 2020!
Dus daar is het… laten we beginnen!
Stap 1: Functie
- Pelletsnelheid
-Snelheid
-20 mhz hardlopen, enorme nauwkeurigheid
-Automatische uitschakeling
- Batterijspanning weergegeven
-schema beschikbaar
-pcb beschikbaar
-onderdelenlijst beschikbaar
-STL beschikbaar
-C-code beschikbaar
Stap 2: Werkingstheorie en nauwkeurigheid
-We hebben een uC die draait op 20Mhz. De gebruikte oscillator is een TCX0 +-2,5 ppm
-We hebben 2 sensoren op 3 inch afstand van elkaar.
-Het projectiel raakte de eerste sensor. uC start met tellen (timer1)
-Het projectiel raakte de tweede sensor. uC stop met tellen.
-uC controleer timer1 waarde, doe de wiskunde en toon snelheid en snelheid.
Ik gebruik 16 bit timer1 + de overloopvlag tov1. 17 bit totaal voor 131071 "tic" voor een volledige telling.
1/20 MHz = 50 ns. Elke tic is 50ns
131071 x 50 ns = 6.55355 ms om 3 inch te doen.
6.55355 ms x 4 = 26.21 ms om 12 inch te doen.
1/26.21 ms = 38.1472637 voet/s
Dit is de laagste snelheid die het apparaat kan meten.
Waarom 20MHz? Waarom gebruik je niet de interne 8 mhz of zelfs een cristal?
Mijn eerste apparaat gebruikte de interne oscillator. Werkte maar deze was niet nauwkeurig genoeg. De variatie is te groot. Een kristal is beter, maar de temperatuur varieert in frequentie. Daar kunnen we geen nauwkeurig meetinstrument mee maken. Hoe hoger de frequentie, hoe meer tic voor dezelfde snelheid wordt geteld. De bemonstering zal beter zijn om een zeer goede nauwkeurigheid te hebben. Omdat een tic niet deelbaar is, is het verlies klein als de duty cycle snel is.
Bij 20 MHz hebben we stappen van 50 ns. Weten we hoeveel nauwkeurig het is 50 ns voor een projectiel op 38 ft/s.
38.1472637 ft/s gedeeld door 131071 = 0,0000291042 voet
0, 0003880569939956207 voet x 12 = 0, 003492512 inch
1/0, 003492512 = 286.37 ". Met andere woorden. Bij 50 ft/s hebben we een nauwkeurigheid van +- 1/286" of +- 0, 003492512 inches
Maar als mijn oscillator de slechtste is en op 20 mhz +2,5 ppm draait, is het dan goed? Laten we het uitzoeken…
2,5 ppm van 20 000 000 is: (20000000/1000000) x 2,5 = 20000050 Hz
Dus in het slechtste geval hebben we nog 50 klokken op 20 mhz. Het is 50 klok op 1 seconde. Hoeveel tikken meer op timer1 als de pellet dezelfde snelheid heeft (38.1472637 voet/s of 6.55ms)?
1/20000050 = 49,999875 ns
49,999875 ns x 131071 = 6, 553533616 ms
6, 553533616 ms x 4 = 26,21413446 ms
1/26.21413446 ms = 38.14735907 voet/s
Dus we hebben 38.14735907 voet/s in plaats van 38.1472637 voet/s
Nu weten we dat 2,5 ppm geen invloed heeft op het resultaat.
Hier is een voorbeeld van verschillende snelheden:
Voor 1000 ft/s
1000 ft/s x 12 is 12000 inch/s
1 seconde voor 12000 "hoeveel tijd om 3" te doen? 3x1/12000 = 250 us seconden
250 us / 50 ns = 5000 tic.
Timer1 staat op 5000
uC doe de wiskunde en 1000 ft/s wordt weergegeven. Tot nu toe zo goed
Voor 900 ft/s
900 ft/s is 10800 /s
3x1/10800 = 277,77 ons
277, 77 ns / 50 ns = 5555, 5555 tic
Timer 1 staat op 5555
uC doe de wiskunde en 900, 09 wordt weergegeven in plaats van 900
Waarom ? omdat timer 1 op 5555 staat en 0, 5555 is verloren. Tic on timer zijn niet deelbaar.
We hebben een fout van 0, 09 op 900 ft/s
0, 09/900x100 = 0, 01% alleen fout
Voor 1500 ft/s1500 ft/s is 18000 /s 3x1/10800 =166.66 us
166.66 us / 50 ns = 3333.333 tic Timer 1 staat op 3333
uC reken maar uit en 1500.15 wordt weergegeven in plaats van 1500, het is.15/1500x100= 0, 01%
Voor 9000 ft/s
9000 x 12 = 180000 inch / s
3x1/180000 = 27.7777 ons
27,77 ons / 50 ns = 555, 555
Timer1 staat op 555 en 4/(1/555x50ns) wordt weergegeven 9009, 00 wordt weergegeven
Hier is de fout van 9 voet/s op 9000 = 0, 1%
Zoals u kunt zien, neemt de %-fout toe wanneer de snelheid hoger is. Maar blijf < 0,1%
Die resultaten zijn erg goed.
Maar nauwkeurigheid is niet lineair. Bij 10000 ft/s is het 0, 1%. Goed nieuw is dat we nooit een pellet van 10.000 ft/s testen.
Nog iets om in gedachten te houden. Wanneer een interrupt plaatsvindt, voltooit uC altijd de laatste instructie voordat u de interrupt invoert. Dit is normaal en alle uC doen dit. Als je arduino codeert, in C of zelfs assembler. Meestal wacht je in een eeuwigdurende lus … om te wachten. Het probleem is dat we in een lus 2 cycli doorbrengen. Normaal gesproken is dit niet belangrijk. Maar in ons geval. JA, elke tic is belangrijk. Laten we een oneindige lus bekijken:
assembler:
lus:
rjmp-lus
In C:
terwijl (1){}
In feite gebruikt de C-compiler de rjmp-instructie. RJMP is 2 cycli.
Dat betekent dat als de interrupt in de eerste cyclus plaatsvindt, we één cyclus(tic)(50ns) verliezen.
Mijn manier om dat op te lossen, is door veel nop-instructies in de lus toe te voegen. NOP is 1 cyclus.
lus:
geen P
geen P
geen P
geen P
geen P
rjmp-lus
Als de interrupt gebeurt op een nop-instructie. We zijn oke. Als het gebeurt in de tweede cyclus van rjmp-instructie, zijn we in orde. Maar als het gebeurt tijdens de eerste cyclus van rjmp-instructie, verliezen we één tic. Ja, het is maar 50 ns, maar zoals je hierboven kunt zien, is 50 ns op 3 inch niet niets. We kunnen dit niet softwarematig corrigeren omdat we niet precies weten wanneer de interrupt plaatsvindt. Daarom zie je in de code veel nop-instructies. Nu ben ik er vrij zeker van dat de interrupt op een nop-instructie zal vallen. Als ik 2000 nop toevoeg, heb ik 0, 05% om op de rjmp-instructie te vallen.
Nog iets om in gedachten te houden. Wanneer interrupt gebeuren. Compiler doen veel push en pull. Maar het is altijd hetzelfde nummer. Dus nu kunnen we een softwarecorrectie uitvoeren.
Om hierover te besluiten:
Nauwkeurigheid voor een gemiddelde pellet van 1000 ft/s is 0, 01%
100x nauwkeuriger dan andere 1% op de markt. De frequentie is hoger en met TCXO nauwkeuriger
Bijvoorbeeld, 1% van 1000 ft/s is min of meer 10 ft/s. Het is een enorm verschil.
Stap 3: Schema en onderdelenlijst
Hier heb ik mijn aan / uit-circuit met één druk op de knop geïmplementeerd. (zie mijn laatste instructable) Dit circuit is erg handig en werkt erg goed.
Ik gebruik een atmega328p. Deze is geprogrammeerd in C.
Display is een standaard 2-lijns lcd HD44780 compatibel. 4 bit-modus wordt gebruikt.
Een 3.3v-regelaar wordt gebruikt om de TCXO 20 mhz van spanning te voorzien.
D1 is voor lcd-achtergrondverlichting. Optioneel. De batterij gaat langer mee als u D1 niet installeert.
Alle weerstanden en doppen zijn 0805 pakket
C1.1uf 25v
C2 1uf 16v
C3 2.2uf 10v
C4.1uf
C5.1uf
C6.1uf
C7 1uf
C8.1uf
C9.1uf
C10.1uf
D1 1n4148 SM SOT123
D2 5.1v SOT123
IC1 ATMEGA328p
IC2 MIC5225-5.0YM5-TR TPS70950DBVT SOT23-DBV
OSC1 TXETDCSANF-20.000000
R1 1M
R2 1M
R4 2.2k
R5 160
R6 160
R7 1M
R8 1M
U1 MIC5317-3.3 MIC5317 SOT23-5
U2 DMG6601LVT DMG6601LVT SOT23-6
Display lcd 2-regel HD44780. U hoeft de i2c-module niet te kopen.
Sensoren:
2x zender OP140A
2x Ontvanger OPL530
Encoder: PEC11R-4215K-S0024 *Vergeet niet om 4x 10k weerstanden en 2x.01uf toe te voegen voor het encoderfilter. zie onderstaande foto
Stap 4: PCB Gerber-bestand
Hier zijn gerber-bestanden
Stap 5: Soldeer uw PCB
Met schematische hulp soldeer je al je componenten op de printplaat. Elk onderdeel of geschreven op pcb, r1, r2… enzovoort.
Ik heb D1 niet geïnstalleerd. Dit is voor de lcd-achtergrondverlichting. Het is mooi, maar de levensduur van de batterij wordt aangetast. Dus ik kies ervoor om de lcd-achtergrondverlichting uit te houden.
Stap 6: Programmeren van de Atmega328p
Kijk hier bij stap 12 om de atmega328p te programmeren. Ik geef hier het.hex-bestand hiervoor.
Hier is het avrdude-programma klaar om een batchbestand te programmeren. Klik alleen op het programma usbasp.bat en uw usbasp is correct geïnstalleerd. Alles wordt automatisch gedaan, inclusief zekeringbit.
1drv.ms/u/s!AnKLPDy3pII_vXaGPIZKMXxaXDul?e…
In dit project deel ik ook de C-broncode. Houd er rekening mee dat een notitie in het Frans kan zijn.https://1drv.ms/u/s!AnKLPDy3pII_vXUMXHdxajwGRFJx?e…
Stap 7: LCD-scherm
Installeer wat tape en verbind pcb en lcd met elkaar!
Stap 8: STL-bestand
stl-bestand
1drv.ms/u/s!AnKLPDy3pII_vgezy0i0Aw3nD-xr?e…
Er is ondersteuning nodig voor behuizing, sensorbuis en geweerhouder.
Ik heb allemaal afgedrukt op 0,2 mm hoog.
Stap 9: ROTERENDE ENCODER
Deze roterende encoder wordt aangesloten op de isp-connector. het wordt gebruikt om het gewicht van de pellets te wijzigen en om het apparaat aan en uit te zetten.
vcc isp pin 2 (optrekweerstand)
Terminal A (geel) ga naar de ISP-pin 1
Terminal B (groen) ga naar ISP pin 3
Terminal C (gnd) isp pin 6
Ik voeg 2 foto's toe om het verschil te zien tussen een filter en geen filter. U kunt gemakkelijk het verschil tussen beide zien.
De drukknop gaat naar de pcb SW-connector.
Stap 10: Sensorleiding
BELANGRIJK:
Sensorbuis moet zwart zijn en sensorontvanger moet verborgen zijn
Mijn eerste pogingen waren om een mooie rode pijp te hebben. Maar dit is lastig! Het werkte helemaal niet. Ik kwam erachter dat er buitenlicht binnenkwam, de plastic en de ontvangersensor was altijd aan.
Om een goed resultaat te krijgen had ik geen keuze om de kleur in zwart te veranderen.
Installeer de ontvanger bovenop. En verberg het doorzichtige plastic met zwarte verf, tape of kauwgom, zwarte siliconen.
Installeer de zender aan de onderkant. Controleer met een pen of de sensoren goed reageren. Misschien moet het gat van de zender iets groter worden gemaakt. het hangt af van uw printerkalibratie.
Ik heb ook beter resultaat in de schaduw. Vermijd direct zonlicht.
Stap 11: alternatief voor sensorleiding
Als je geen 3D-printer hebt, kun je hetzelfde doen met een koperen buis. Het zal heel goed werken. Moeilijk om te doen is het gat op precies 3 inch en ontvanger en zender moeten worden uitgelijnd.
Stap 12: Een pellet op oscilloscoop en kalibratie
Dit is een echte kogel die door de pijp wordt gegooid. Sonde 1 geel is sensor 1. Sonde 2 paars is sensor 2.
Tijd/div is 50 ons.
We kunnen 6 divisies van 50us tellen. 50 us x 6 = 300 us (voor 3 inch). 300 us x 4 = 1,2 ms voor 1 voet
1/1,2 ms = 833,33 ft/s
We kunnen ook zien dat de sensor normaal op 5v staat. En kunnen we het emitterlicht blokkeren, sensor valt naar 0.
Het is de manier waarop de uC zijn tegenstander start en stopt (timer1)
Maar om precies te weten of de snelheid klopte, had ik een manier nodig om dit te meten.
Om softwarekalibratie uit te voeren en de nauwkeurigheid van dit apparaat te testen, heb ik een 10 MHz-referentie-oscillator gebruikt. Zie mijn GPSDO op andere instructable.
Ik voed een andere atmega328 met deze 10 mhz. En programmeer deze in assembler om me 2 pulsen te sturen elke keer dat ik op een knop druk om een pellet te simuleren. Precies zoals we op de foto zagen, maar om een echte pellet te hebben, was het een andere uC die me 2 pulsen stuurde.
Elke keer dat de drukknop werd ingedrukt, werd er 1 puls verzonden en precies 4 ms nadat er nog een puls was verzonden.
Op deze manier kan ik de softwarecompiler zo in evenwicht brengen dat er altijd 1000 ft/s wordt weergegeven.
Stap 13: Meer…
Dit is mijn eerste prototype van 2010.
Voor vragen of foutmeldingen kunt u mij mailen. Engels of Frans. Ik zal mijn best doen om te helpen.
Aanbevolen:
Game Design in Flick in 5 stappen: 5 stappen
Game-ontwerp in Flick in 5 stappen: Flick is een heel eenvoudige manier om een game te maken, vooral zoiets als een puzzel, visuele roman of avonturengame
Gezichtsdetectie op Raspberry Pi 4B in 3 stappen: 3 stappen
Gezichtsdetectie op Raspberry Pi 4B in 3 stappen: In deze Instructable gaan we gezichtsdetectie uitvoeren op Raspberry Pi 4 met Shunya O/S met behulp van de Shunyaface-bibliotheek. Shunyaface is een bibliotheek voor gezichtsherkenning/detectie. Het project streeft naar de hoogste detectie- en herkenningssnelheid met
Doe-het-zelfspiegel in eenvoudige stappen (met LED-stripverlichting): 4 stappen
DIY make-upspiegel in eenvoudige stappen (met behulp van LED-stripverlichting): In dit bericht heb ik een doe-het-zelfspiegel gemaakt met behulp van de LED-strips. Het is echt gaaf en je moet ze ook proberen
Nerf-chronograaf en vuursnelheid - Ajarnpa
Nerf Chronograph en Rate of Fire Barrel: Inleiding Als knutselaar is het altijd zeer bevredigend om de numerieke resultaten van je knutselen te zien. Velen van ons hebben eerder Nerf-pistolen aangepast en wie houdt er niet van om stukjes schuim door het huis te gooien met meer dan 100 fps? Na het aanpassen van veel Nerf-g
Arduino voor Nerf: chronograaf en schotteller - Ajarnpa
Arduino voor Nerf: chronograaf en schotteller: mijn vorige Instructable behandelde de basisprincipes van het detecteren van dartsnelheid met behulp van een infraroodzender en -detector. Dit project gaat nog een stap verder en gebruikt een printplaat, display en batterijen om een draagbare munitieteller en chronograaf te maken