Indholdsfortegnelse:

Luftgevær Kronograf, Kronoskop. 3D -printet: 13 trin
Luftgevær Kronograf, Kronoskop. 3D -printet: 13 trin

Video: Luftgevær Kronograf, Kronoskop. 3D -printet: 13 trin

Video: Luftgevær Kronograf, Kronoskop. 3D -printet: 13 trin
Video: You Don't Need Full-Auto #Shorts 2024, November
Anonim
Image
Image
Funktion
Funktion

Hej alle sammen, i dag vil vi besøge et projekt, jeg har lavet i 2010. En luftriffel -kronograf. Denne enhed fortæller dig et projektils hastighed. Pille, BB eller endda luftblød BB plastkugle.

I 2010 købte jeg et luftgevær for sjov. Ramte dåser, flasker, sigte. Jeg ved, at hastigheden på denne pistol var maksimalt 500 fod/s. Fordi det er Canadas lov. Nogle stærkere luftgevær er tilgængelige, men du skal have licens til, og du kan ikke købe dem på Walmart.

Nu havde jeg denne licens, jeg kunne købe en anden. Men kort fortalt, den samme pistol var tilgængelig for USA ved 1000 fod/s. HVAD!? Samme pistol? ja… I Canada har slaget et hul i det, og fjederen er blødere.

Den første ting at gøre er at fylde hullet op. Det er hvad jeg har gjort med loddetin. Næste ting at gøre var at bestille en udskiftningsfjeder. Men vent … hvad er den nuværende hastighed på mit nye legetøj? Er foråret virkelig nødvendigt? Jeg ved det ikke, og jeg vil gerne vide det. Jeg vil vide det nu, men hvordan?

Derfor lavede jeg dette projekt. Alt, hvad jeg havde brug for, var 2 sensorer, et uC og et display, og vi er i gang.

I sidste uge så jeg min gamle blå kronograf på en hylde, og jeg talte til mig selv: "Hvorfor ikke dele dette og lave en instruerbar med det?" Og i øvrigt kunne vi øge nøjagtigheden og tilføje en batteriindikator. Sæt 1 knap i stedet for 2 til tænd/sluk. Alt overflademonteret. Vi er nu i 2020!

Så der er det … lad os begynde!

Trin 1: Funktion

-Pillehastighed

-Hastighed

-20 mhz løb, enorm nøjagtighed

-Auto slukket

-Batterispænding vises

-skematisk tilgængelig

-pcb tilgængelig

-deliste tilgængelig

-STL tilgængelig

-C -kode tilgængelig

Trin 2: Teori om drift og nøjagtighed

-Vi har et uC, der kører på 20Mhz. Den anvendte oscillator er en TCX0 +-2,5 ppm

-Vi har 2 sensorer på 3 tommer langt fra hinanden.

-Projektilet ramte den første sensor. uC start tæller (timer1)

-Projektilet ramte den anden sensor. uC stop med at tælle.

-uC tjek timer1 -værdi, udfør regnestykket og vis hastighed og hastighed.

Jeg bruger 16 bit timer1 + overløbsflaget tov1. 17 bit i alt for 131071 "tic" for en fuld optælling.

1/20 mhz = 50 ns. Hver tic er 50ns

131071 x 50 ns = 6,55355 ms for at gøre 3 tommer.

6,55355 ms x 4 = 26,21 ms til 12 tommer.

1/26,21 ms = 38.1472637 fod/s

Dette er den langsomste hastighed, enheden kan måle.

Hvorfor 20 mhz? Hvorfor ikke bruge den interne 8 mhz eller endda en cristal?

Min første enhed brugte den interne oscillator. Virkede, men denne var ikke præcis nok. Variationen er for stor. En cristal er bedre, men temperaturen varierer hyppigt. Vi kan ikke lave en nøjagtig måleenhed med det. Jo mere frekvensen er høj, mere tic tælles for den samme hastighed. Prøveudtagningen vil være bedre med en meget god nøjagtighed. Fordi en tic ikke kan deles, er tabet lille, hvis arbejdscyklussen er hurtig.

Ved 20 MHz har vi trin på 50 ns. Ved vi, hvor meget nøjagtigt det er 50 ns for et projektil ved 38 ft/s.

38.1472637 ft/s divideres med 131071 = 0, 000291042 fod

0, 0003880569939956207 fod x 12 = 0, 003492512 tommer

1/0, 003492512 = 286,37 ". Med andre ord. Ved 50 ft/s har vi en nøjagtighed på +- 1/286" eller +- 0, 003492512 tommer

Men hvis min oscillator er den værste og kører ved 20 mhz +2,5 ppm, er det ok? Lad os finde ud af det…

2,5 ppm på 20 000 000 er: (20000000/1000000) x 2,5 = 20000050 Hz

Så i værste fald har vi 50 mere ur på 20 mhz. Det er 50 ur på 1 sekund. Hvor mange tic mere på timer1, hvis pelleten har samme hastighed (38,1472637 fod/s eller 6,55 ms)?

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 fod/s

Så vi har 38.14735907 fod/s i stedet for 38.1472637 fod/s

Nu ved vi, at 2,5 ppm ikke påvirker resultatet.

Her er et eksempel på forskellige hastigheder

Til 1000 ft/s

1000 ft/s x 12 er 12000 inches/s

1 sekund for 12000 "hvor lang tid skal jeg gøre 3"? 3x1/12000 = 250 us sekunder

250 us / 50 ns = 5000 tic.

Timer1 vil være på 5000

uC gør regnestykket og 1000 ft/s vises. Så langt så godt

For 900 ft/s

900 ft/s er 10800 /s

3x1/10800 = 277,77 os

277, 77 ns / 50 ns = 5555, 5555 tic

Timer 1 vil være på 5555

uC gør regnestykket og 900, 09 vises i stedet for 900

Hvorfor ? fordi timer 1 er på 5555 og 0, går 5555 tabt. Tic on timer kan ikke deles.

Vi har en fejl fo 0, 09 på 900 ft/s

0, 09/900x100 = 0, kun 01% fejl

For 1500 ft/s 1500 ft/s er 18000 /s 3x1/10800 = 166,66 os

166,66 us / 50 ns = 3333,333 tic Timer 1 vil være på 3333

uC gør regnestykket og 1500.15 vises i stedet for 1500, det er.15/1500x100 = 0, 01%

Til 9000 ft/s

9000 x 12 = 180000 tommer / s

3x1/180000 = 27.7777 os

27,77 os / 50 ns = 555, 555

Timer1 vil være på 555 og 4/(1/555x50ns) vil blive vist 9009, 00 vil blive vist

Her er fejlen 9 fod/s på 9000 = 0, 1%

Som du kan se % stiger fejlen, når hastigheden er højere. Men bliv <0,1%

Disse resultater er meget gode.

Men nøjagtigheden er ikke lineær. Ved 10000 ft/s er det 0, 1 %. Godt nyt er, at vi aldrig tester en pellets på 10.000 ft/s.

En anden ting at huske på. Når der sker et afbrydelse, afslutter uC altid den sidste instruktion, inden du går i afbrydelse. Dette er normalt, og alt uC gør dette. Hvis du koder arduino, i C eller endda assembler. Det meste af tiden vil du vente i en evig løkke … for at vente. Problemet er, at vi i en sløjfe bruger 2 cykler. Normalt er dette ikke vigtigt. Men i vores tilfælde. JA, hver tic er vigtig. Lad os se en uendelig sløjfe:

montør:

loop:

rjmp loop

I C:

mens (1) {}

Faktisk bruger C -kompilatoren rjmp -instruktion. RJMP er 2 cykler.

Det betyder, at hvis afbrydelsen sker med den første cyklus, mister vi en cyklus (tic) (50ns).

Min måde at rette op på er at tilføje mange instruktioner i sløjfen. NOP er 1 cyklus.

loop:

intet p

intet p

intet p

intet p

intet p

rjmp loop

Hvis afbrydelsen sker på en nop instruktion. Vi er ok. Hvis det sker på den anden cyklus af rjmp -instruktion, er vi ok. Men hvis det sker på den første cyklus af rjmp -instruktion, vil vi miste en tic. Ja, det er bare 50 ns, men som du kan se ovenfor, er 50 ns på 3 inches ikke noget. Vi kan ikke rette dette ved hjælp af software, fordi vi ikke ved, hvornår afbrydelsen sker. Det er derfor, du i koden vil se en masse nop -instruktioner. Nu er jeg ret sikker på, at afbrydelsen falder på en nop instruktion. Hvis jeg tilføjer 2000 nop, har jeg 0, 05% til at falde på rjmp -instruktionen.

En anden ting at huske på. Når afbrydelse sker. Compiler gør mange skub og træk. Men det er altid det samme tal. Så nu kan vi lave en softwarekorrektion.

Afslutning på dette:

Nøjagtighed for en gennemsnitlig pellet på 1000 ft/s er 0, 01%

100x mere præcis end andre 1% på markedet. Frekvensen er højere og med TCXO mere præcis

For eksempel er 1% af 1000 ft/s mere eller mindre 10 ft/s. Det er en kæmpe forskel.

Trin 3: Skematisk og deleliste

Skematisk og deleliste
Skematisk og deleliste

Her implementerede jeg mit on/off -kredsløb med en enkelt knap. (se min sidste instruerbare) Dette kredsløb er meget praktisk og fungerer meget godt.

Jeg bruger en atmega328p. Denne er programmeret i C.

Skærmen er en standard 2 linjer LCD HD44780 kompatibel. 4 bit -tilstand bruges.

En 3.3v regulator bruges til at levere spænding til TCXO 20mhz.

D1 er til lcd -baggrundsbelysning. Valgfri. Batteriet holder længere, hvis du ikke installerer D1.

Alle modstande og hætter er 0805 -pakke

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 1 mio

R2 1M

R4 2,2k

R5 160

R6 160

R7 1 mio

R8 1 mio

U1 MIC5317-3.3 MIC5317 SOT23-5

U2 DMG6601LVT DMG6601LVT SOT23-6

Skærm lcd 2 line HD44780. Du behøver ikke købe i2c -modulet.

Sensorer:

2x Emitter OP140A

2x modtager OPL530

Encoder: PEC11R-4215K-S0024 *Glem ikke at tilføje 4x 10k modstande og 2x.01uf for at lave encoderfilteret. se billedet herunder

Trin 4: PCB Gerber -fil

PCB Gerber -fil
PCB Gerber -fil
PCB Gerber -fil
PCB Gerber -fil
PCB Gerber -fil
PCB Gerber -fil
PCB Gerber -fil
PCB Gerber -fil

Her er gerber -filer

Trin 5: Lod din pc

Lod din pc
Lod din pc
Lod din pc
Lod din pc
Lod din pc
Lod din pc

Med skematisk hjælp loddes alle dine komponenter på pcb'et. Hver del eller skrevet på pcb, r1, r2 … og så videre.

Jeg har ikke installeret D1. Dette er til lcd-baggrundslyset. Det er smukt, men batterilevetiden påvirkes. Så jeg vælger at holde LCD-baggrundslyset slukket.

Trin 6: Programmering af Atmega328p

Programmering af Atmega328p
Programmering af Atmega328p

Se her i trin 12 for at programmere atmega328p. Jeg giver her.hex -filen til dette.

Her er avrdude -programmet klar til at programmere batchfil. Klik kun på programmet usbasp.bat, og din usbasp er installeret korrekt. Alt sker automatisk inklusive sikringsbit.

1drv.ms/u/s!AnKLPDy3pII_vXaGPIZKMXxaXDul?e…

I dette projekt deler jeg også C -kildekoden. Vær opmærksom på, at en note i den kan være på fransk. Https: //1drv.ms/u/s! AnKLPDy3pII_vXUMXHdxajwGRFJx? E…

Trin 7: LCD -skærm

LCD -skærm
LCD -skærm
LCD -skærm
LCD -skærm

Installer noget tape og tilslut pcb og lcd sammen

Trin 8: STL -fil

STL -fil
STL -fil
STL -fil
STL -fil
STL -fil
STL -fil

stl -fil

1drv.ms/u/s!AnKLPDy3pII_vgezy0i0Aw3nD-xr?e…

Støtte er nødvendig til kabinet, sensorrør og riffelholder.

Jeg har alle trykt på.2 mm høj.

Trin 9: ROTÆRKODER

ROTÆRKODER
ROTÆRKODER
ROTÆRKODER
ROTÆRKODER
ROTÆRKODER
ROTÆRKODER

Denne roterende encoder er forbundet til isp -stikket. det bruges til at ændre pillevægt og til at tænde og slukke for enheden.

vcc isp pin 2 (pull up resistor)

Terminal A (gul) går til ISP -pin 1

Terminal B (grøn) går til ISP pin 3

Terminal C (gnd) isp pin 6

Jeg tilføjer 2 billeder for at se forskellen mellem at have et filter vs intet filter. Du kan let se forskellen mellem begge.

Trykknappen går til pcb SW -stikket.

Trin 10: Sensorrør

Sensorrør
Sensorrør
Sensorrør
Sensorrør
Sensorrør
Sensorrør

VIGTIG:

Sensorrøret skal være sort, og sensormodtageren skal være skjult

Mit første forsøg var at få et smukt rødt rør. Men det er svært! Det virkede slet ikke. Jeg fandt ud af, at der kom indvendigt lys, plastik- og modtagersensoren var altid tændt.

For at få et godt resultat havde jeg intet valg om at ændre farven til sort.

Installer modtageren ovenpå. Og skjul den klare plastik med sort maling, tape eller tyggegummi, sort silikone.

Installer emitter på bunden. Kontroller med en pen, om sensorer reagerer godt. Måske skal emitterets hul forstørres lidt. Det afhænger af din printerkalibrering.

Jeg har også bedre resultat i skyggen. Undgå direkte sollys.

Trin 11: Alternativt sensorrør

Sensorrør alternativ
Sensorrør alternativ
Sensorrør alternativ
Sensorrør alternativ

Hvis du ikke har en 3d -printer, kan du gøre det samme med et kobberrør. Det vil fungere meget godt til. Svært at gøre er hullet på præcis 3 tommer, og modtager og sender skal justeres.

Trin 12: En pille om oscilloskop og kalibrering

En pille om oscilloskop og kalibrering
En pille om oscilloskop og kalibrering

Dette er en rigtig pellet, der passerer, kaster røret. Probe 1 gul er sensor 1. Probe 2 lilla er sensor 2.

Tid/div er 50 os.

Vi kan tælle 6 divisioner på 50us. 50 us x 6 = 300 us (for 3 inches). 300 us x 4 = 1,2 ms for 1 fod

1/1.2ms = 833.33 ft/s

Vi kan også se, at sensoren normalt er på 5v. Og kan vi blokere emitterlyset, sensoren falder til 0.

Det er den måde, hvorpå uC starter og stopper hans conter (timer1)

Men for at vide præcis, om hastigheden var præcis, havde jeg brug for en måde at måle dette på.

For at foretage softwarekalibrering og teste nøjagtigheden af denne enhed brugte jeg en 10 mhz referenceoscillator. Se min GPSDO om anden instruerbar.

Jeg fodrer en anden atmega328 med denne 10 mhz. Og programmer denne i assembler til at sende mig 2 pulser hver gang jeg trykker på en knap for at simulere en pille. Præcis som vi så på billedet, men i stedet for at have en rigtig pellet var det en anden uC, der sendte mig 2 pulser.

Hver gang der blev trykket på trykknappen blev der sendt 1 puls og præcis 4 ms efter at der blev sendt en anden puls.

På denne måde kan jeg afbalancere softwarekompilatoren, så den altid viser 1000 ft/s.

Trin 13: Mere …

Mere…
Mere…
Mere…
Mere…

Dette er min første prototype af 2010.

Hvis du har spørgsmål eller fejlrapporter, kan du sende mig en e -mail. Engelsk eller fransk. Jeg vil gøre mit bedste for at hjælpe.

Anbefalede: