Indholdsfortegnelse:
- Trin 1: Funktion
- Trin 2: Teori om drift og nøjagtighed
- Trin 3: Skematisk og deleliste
- Trin 4: PCB Gerber -fil
- Trin 5: Lod din pc
- Trin 6: Programmering af Atmega328p
- Trin 7: LCD -skærm
- Trin 8: STL -fil
- Trin 9: ROTÆRKODER
- Trin 10: Sensorrør
- Trin 11: Alternativt sensorrør
- Trin 12: En pille om oscilloskop og kalibrering
- Trin 13: Mere …
Video: Luftgevær Kronograf, Kronoskop. 3D -printet: 13 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:26
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
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
Her er gerber -filer
Trin 5: 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
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
Installer noget tape og tilslut pcb og lcd sammen
Trin 8: 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
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
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
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
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 …
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:
Arduino bil omvendt parkering alarmsystem - Trin for trin: 4 trin
Arduino bil omvendt parkering alarmsystem. Trin for trin: I dette projekt vil jeg designe en simpel Arduino bil omvendt parkeringssensorkreds ved hjælp af Arduino UNO og HC-SR04 ultralydssensor. Dette Arduino -baserede bilomvendt alarmsystem kan bruges til en autonom navigation, robotafstand og andre rækkevidde
Trin for trin pc -bygning: 9 trin
Trin for trin PC Building: Supplies: Hardware: MotherboardCPU & CPU -køler PSU (strømforsyningsenhed) Opbevaring (HDD/SSD) RAMGPU (ikke påkrævet) CaseTools: Skruetrækker ESD -armbånd/mathermal pasta m/applikator
Tre højttalerkredsløb -- Trin-for-trin vejledning: 3 trin
Tre højttalerkredsløb || Trin-for-trin vejledning: Højttalerkredsløb styrker lydsignalerne, der modtages fra miljøet til MIC og sender det til højttaleren, hvorfra forstærket lyd produceres. Her vil jeg vise dig tre forskellige måder at lave dette højttalerkredsløb på:
Trin-for-trin uddannelse i robotik med et sæt: 6 trin
Trin-for-trin uddannelse i robotteknologi med et kit: Efter ganske få måneder med at bygge min egen robot (se alle disse), og efter at jeg to gange havde dele mislykkedes, besluttede jeg at tage et skridt tilbage og tænke min strategi og retning. De flere måneders erfaring var til tider meget givende, og
Akustisk levitation med Arduino Uno trin for trin (8 trin): 8 trin
Akustisk levitation med Arduino Uno Step-by Step (8-trin): ultralyds lydtransducere L298N Dc kvindelig adapter strømforsyning med en han-DC-pin Arduino UNOBreadboard Sådan fungerer det: Først uploader du kode til Arduino Uno (det er en mikrokontroller udstyret med digital og analoge porte til konvertering af kode (C ++)