Innholdsfortegnelse:

Air Rifle Chronograph, Chronoscope. 3D -trykt: 13 trinn
Air Rifle Chronograph, Chronoscope. 3D -trykt: 13 trinn

Video: Air Rifle Chronograph, Chronoscope. 3D -trykt: 13 trinn

Video: Air Rifle Chronograph, Chronoscope. 3D -trykt: 13 trinn
Video: Combro CB625 [review] - A cheap way to chronograph your Air Rifle 2024, Juli
Anonim
Image
Image
Trekk
Trekk

Hei alle sammen, i dag skal vi gå tilbake til et prosjekt jeg har gjort i 2010. En luftrifle -kronograf. Denne enheten forteller deg hastigheten på et prosjektil. Pellet, BB eller til og med luftmyk BB -plastkule.

I 2010 kjøpte jeg et luftgevær for moro skyld. Slo bokser, flasker, sikte. Jeg vet at hastigheten på denne pistolen var maks 500 fot/s. Fordi det er Canadas lov. Noen sterkere luftgevær er tilgjengelige, men du må ha lisens og du kan ikke kjøpe den på Walmart.

Nå hadde jeg denne lisensen, jeg kunne kjøpe en til. Men kort fortalt, den samme pistolen var tilgjengelig for USA på 1000 fot/s. HVA!? Samme pistol? ja … I Canada har slaget et hull i det og fjæren er mykere.

Det første du må gjøre er å fylle hullet. Det er det jeg gjorde med loddetinn. Neste ting å gjøre var å bestille en erstatningsfjær. Men vent … hva er nåværende hastighet på det nye leketøyet mitt? Er våren virkelig nødvendig? Jeg vet ikke, og jeg vil vite det. Jeg vil vite det nå, men hvordan?

Derfor gjorde jeg dette prosjektet. Alt jeg trengte var 2 sensorer, en uC og en skjerm, og vi er i gang.

I forrige uke så jeg min gamle blå kronograf på en hylle, og jeg snakker med meg selv: "Hvorfor ikke dele dette og gjøre en instruks med det?" Og forresten, vi kan øke nøyaktigheten og legge til en batteriindikator. Sett 1 knapp i stedet for 2 for på/av. Alt overflatemontering. Vi er nå i 2020!

Så det er det … la oss begynne!

Trinn 1: Funksjon

-Pellets hastighet

-Hastighet

-20 mhz kjøring, enorm nøyaktighet

-Auto av

-Batterispenning vises

-skjematisk tilgjengelig

-pcb tilgjengelig

-deliste tilgjengelig

-STL tilgjengelig

-C -kode tilgjengelig

Trinn 2: Teori om drift og nøyaktighet

-Vi har en uC som kjører på 20Mhz. Oscillatoren som brukes er en TCX0 +-2,5 ppm

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

-Prosjektilet traff den første sensoren. uC begynne å telle (timer1)

-Prosjektilet traff den andre sensoren. uC slutte å telle.

-uC sjekk timer1 -verdien, beregne og vise hastighet og hastighet.

Jeg bruker 16 biters timer1 + overløpsflagget tov1. 17 bits totalt for 131071 "tic" for en full telling.

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

131071 x 50 ns = 6,55355 ms for å gjøre 3 tommer.

6,55355 ms x 4 = 26,21 ms for å gjøre 12 tommer.

1/26.21 ms = 38.1472637 fot/s

Dette er den tregeste hastigheten enheten kan måle.

Hvorfor 20 mhz? Hvorfor ikke bruke den interne 8 mhz eller en cristal?

Min første enhet brukte den interne oscillatoren. Fungerte, men denne var ikke nøyaktig nok. Variasjonen er for stor. En cristal er bedre, men temperaturen varierer ofte. Vi kan ikke gjøre en nøyaktig måleenhet med det. Dessuten, jo mer frekvensen er høy, vil mer tic telle for den samme hastigheten. Prøvetaking vil være bedre for å ha en veldig god nøyaktighet. Fordi en tic ikke kan deles, er tapet lite hvis arbeidssyklusen er rask.

Ved 20 MHz har vi trinn på 50 ns. Vet vi hvor nøyaktig det er 50 ns for et prosjektil ved 38 ft/s.

38.1472637 ft/s divider med 131071 = 0, 000291042 fot

0, 0003880569939956207 fot x 12 = 0, 003492512 tommer

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

Men hvis oscillatoren min er den verste og kjører på 20 mhz +2,5 ppm, er det ok? La oss finne det ut…

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

Så i verste fall har vi 50 flere klokker på 20 MHz. Klokken er 50 på 1 sekund. Hvor mange tic mer på timer1 hvis pelleten har samme hastighet (38,1472637 fot/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 fot/s

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

Nå vet vi at 2,5 ppm ikke påvirker resultatet.

Her er et eksempel på forskjellig hastighet

For 1000 ft/s

1000 ft/s x 12 er 12000 inches/s

1 sekund for 12000 "hvor mange ganger skal jeg gjøre 3"? 3x1/12000 = 250 us sekunder

250 us / 50 ns = 5000 tic.

Tidsur 1 er på 5000

uC gjør regnestykket og 1000 ft/s vises. Så langt så bra

For 900 fot/s

900 ft/s er 10800 /s

3x1/10800 = 277,77 oss

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

Timer 1 vil være på 5555

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

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

Vi har en feil for 0, 09 på 900 ft/s

0, 09/900x100 = 0, bare 01% feil

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

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

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

For 9000 fot/s

9000 x 12 = 180000 tommer / s

3x1/180000 = 27.7777 oss

27,77 oss / 50 ns = 555, 555

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

Her er feilen 9 fot/s på 9000 = 0, 1%

Som du kan se % stiger feilen når hastigheten er høyere. Men hold deg <0,1%

Disse resultatene er veldig gode.

Men nøyaktigheten er ikke lineær. Ved 10000 ft/s er det 0, 1 %. Godt nytt er at vi aldri tester en pellets på 10 000 ft/s.

En annen ting å huske på. Når et avbrudd skjer, fullfører uC alltid siste instruksjon før du går i interrupt. Dette er normalt og alle uC gjør dette. Hvis du koder arduino, i C eller til og med assembler. Mesteparten av tiden vil du vente i en evig sløyfe … å vente. Problemet er at i en løkke bruker vi 2 sykluser. Normalt er ikke dette viktig. Men i vårt tilfelle. JA, hver tic er viktig. La oss se på en uendelig sløyfe:

montør:

Løkke:

rjmp loop

I C:

mens (1) {}

Faktisk bruker C -kompilatoren rjmp -instruksjon. RJMP er 2 sykluser.

Det betyr at hvis avbruddet skjer med den første syklusen, mister vi en syklus (tic) (50ns).

Min måte å fikse det på er å legge til mange instruksjoner i loopen. NOP er 1 syklus.

Løkke:

nei

nei

nei

nei

nei

rjmp loop

Hvis avbruddet skjer uten instruksjoner. Vi er ok. Hvis det skjer i den andre syklusen av rjmp -instruksjoner, er vi ok. Men hvis det skjer i den første syklusen med rjmp -instruksjon, vil vi miste en tic. Ja, det er bare 50 ns, men som du kan se ovenfor, er 50 ns på 3 inches ikke ingenting. Vi kan ikke korrigere dette med programvare fordi vi ikke vet når avbruddet skjer. Det er derfor i koden du vil se mye nop -instruksjon. Nå er jeg ganske sikker på at avbruddet faller på ingen instruksjoner. Hvis jeg legger til 2000 nop har jeg 0, 05% til å falle på rjmp -instruksjonen.

En annen ting å huske på. Når avbrudd skjer. Kompilatoren gjør mange skyve og trekke. Men det er alltid det samme tallet. Så nå kan vi gjøre en programvarekorreksjon.

For å konkludere med dette:

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

100x mer nøyaktig enn andre 1% på markedet. Frekvensen er høyere og med TCXO, mer nøyaktig

For eksempel er 1% av 1000 ft/s mer eller mindre 10 ft/s. Det er en stor forskjell.

Trinn 3: Skjematisk og deleliste

Skjematisk og deleliste
Skjematisk og deleliste

Her implementerte jeg min én knapp på/av krets. (se min siste instruks) Denne kretsen er veldig praktisk og fungerer veldig bra.

Jeg bruker en atmega328p. Denne er programmert i C.

Skjermen er en standard 2 linjer LCD HD44780 -kompatibel. 4 -bits modus brukes.

En 3.3v regulator brukes til å gi spenning til TCXO 20mhz.

D1 er for lcd -bakgrunnsbelysning. Valgfri. Batteriet varer lenger hvis du ikke installerer D1.

Alle motstander og hetter 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 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

Skjerm lcd 2 line HD44780. Du trenger ikke å kjøpe i2c -modulen.

Sensorer:

2x sender OP140A

2x mottaker OPL530

Koder: PEC11R-4215K-S0024 *Ikke glem å legge til 4x 10k motstander og 2x.01uf for å lage koderfilteret. se bildet under

Trinn 4: PCB Gerber File

PCB Gerber File
PCB Gerber File
PCB Gerber File
PCB Gerber File
PCB Gerber File
PCB Gerber File
PCB Gerber File
PCB Gerber File

Her er gerber -filer

Trinn 5: Lodd PC -en

Lodd din PCB
Lodd din PCB
Lodd din PCB
Lodd din PCB
Lodd din PCB
Lodd din PCB

Med skjematisk hjelp, lodd hele komponenten din på kretskortet. Hver del eller skrevet på PCB, r1, r2 … og så videre.

Jeg har ikke installert D1. Dette er for LCD-bakgrunnslyset. Det er vakkert, men batterilevetiden påvirkes. Så jeg velger å holde LCD-bakgrunnslyset av.

Trinn 6: Programmering av Atmega328p

Programmering av Atmega328p
Programmering av Atmega328p

Sjekk her på trinn 12 for å programmere atmega328p. Jeg gir her.hex -filen for dette.

Her er avrdude -programmet som er klart til å programmere batchfil. Bare klikk på programmet usbasp.bat og din usbasp er installert riktig. Alt vil skje automatisk, inkludert sikringsbit.

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

I dette prosjektet deler jeg også C -kildekoden. Vær oppmerksom på at noen notater i den kan være på fransk. Https: //1drv.ms/u/s! AnKLPDy3pII_vXUMXHdxajwGRFJx? E …

Trinn 7: LCD -skjerm

LCD-skjerm
LCD-skjerm
LCD-skjerm
LCD-skjerm

Installer litt tape og koble PCB og LCD sammen

Trinn 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 for kabinett, sensorrør og rifleholder.

Jeg har skrevet ut på.2 mm høy.

Trinn 9: ROTÆRKODER

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

Denne roterende koderen er koblet til isp -kontakten. den brukes til å endre pelletvekt og til å slå enheten på og av.

vcc isp pin 2 (trekk opp motstand)

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

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

Terminal C (gnd) isp pin 6

Jeg legger til 2 bilder for å se forskjellen mellom å ha et filter og ikke noe filter. Du kan lett se forskjellen mellom begge.

Trykknappen går til PCB SW -kontakten.

Trinn 10: Sensorrør

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

VIKTIG:

Sensorrøret må være svart og sensormottakeren må være skjult

Mitt første forsøk var å ha et vakkert rødt rør. Men dette er vanskelig! Det fungerte ikke i det hele tatt. Jeg fant ut at det kom innvendig lys, plast- og mottakersensoren var alltid på.

For å få et godt resultat hadde jeg ikke noe valg om å endre fargen til svart.

Installer mottakeren på toppen. Og skjul den klare plasten med svart maling, tape eller tyggegummi, svart silikon.

Installer emitter på undersiden. Kontroller med en penn om sensorene reagerer godt. Kanskje hullet i emitteren må forstørres litt. Det vil avhenge av skriverkalibreringen.

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

Trinn 11: Sensorrøralternativ

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

Hvis du ikke har en 3d -skriver, kan du gjøre det samme med et kobberrør. Det vil fungere veldig bra for. Vanskelig å gjøre er hullet på nøyaktig 3 tommer og mottaker og sender må justeres.

Trinn 12: En pellet om oscilloskop og kalibrering

En pellet om oscilloskop og kalibrering
En pellet om oscilloskop og kalibrering

Dette er en ekte pellet passerer kaste røret. Probe 1 gul er sensor 1. Probe 2 lilla er sensor 2.

Tid/div er 50 oss.

Vi kan telle 6 divisjoner på 50us. 50 us x 6 = 300 us (for 3 inches). 300 us x 4 = 1,2 ms for 1 fot

1/1.2ms = 833.33 ft/s

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

Det er måten uC starter og stopper kontakten på (timer1)

Men for å vite nøyaktig om hastigheten var nøyaktig, trengte jeg en måte å måle dette på.

For å gjøre programvarekalibrering og teste nøyaktigheten til denne enheten, brukte jeg en 10 mhz referanseoscillator. Se min GPSDO på andre instruerbare.

Jeg mater en annen atmega328 med denne 10 mhz. Og programmer denne i assembler til å sende meg 2 pulser hver gang jeg trykker på en knapp for å simulere en pellet. Akkurat som vi så på bildet, men i stedet for å ha en ekte pellet var det en annen uC som sendte meg 2 pulser.

Hver gang trykknappen ble trykket ble det sendt 1 puls og nøyaktig 4 ms etter at en annen puls ble sendt.

På denne måten kan jeg balansere programvarekompilatoren slik at alltid 1000 ft/s vises.

Trinn 13: Mer …

Mer…
Mer…
Mer…
Mer…

Dette er min første prototype av 2010.

For spørsmål eller feilrapporter kan du sende meg en e -post. Engelsk eller fransk. Jeg skal gjøre mitt beste for å hjelpe.

Anbefalt: