Inhoudsopgave:

Luchtgeweer chronograaf, chronoscoop. 3D-geprint: 13 stappen
Luchtgeweer chronograaf, chronoscoop. 3D-geprint: 13 stappen

Video: Luchtgeweer chronograaf, chronoscoop. 3D-geprint: 13 stappen

Video: Luchtgeweer chronograaf, chronoscoop. 3D-geprint: 13 stappen
Video: Diana Stormrider Unregulated 20 Schots Chrono Test Met De Fx Pocket Chronograph 2024, December
Anonim
Image
Image
Functie
Functie

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

Schema en onderdelenlijst
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

PCB Gerber-bestand
PCB Gerber-bestand
PCB Gerber-bestand
PCB Gerber-bestand
PCB Gerber-bestand
PCB Gerber-bestand
PCB Gerber-bestand
PCB Gerber-bestand

Hier zijn gerber-bestanden

Stap 5: Soldeer uw PCB

Soldeer uw pcb
Soldeer uw pcb
Soldeer uw pcb
Soldeer uw pcb
Soldeer uw pcb
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

De Atmega328p programmeren
De Atmega328p programmeren

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

LCD scherm
LCD scherm
LCD scherm
LCD scherm

Installeer wat tape en verbind pcb en lcd met elkaar!

Stap 8: STL-bestand

STL-bestand
STL-bestand
STL-bestand
STL-bestand
STL-bestand
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

ROTERENDE ENCODER
ROTERENDE ENCODER
ROTERENDE ENCODER
ROTERENDE ENCODER
ROTERENDE ENCODER
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

Sensor pijp
Sensor pijp
Sensor pijp
Sensor pijp
Sensor pijp
Sensor pijp

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

Alternatief voor sensorleiding
Alternatief voor sensorleiding
Alternatief voor sensorleiding
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

Een pellet op oscilloscoop en kalibratie
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…

Meer…
Meer…
Meer…
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: