INHOUDSOPGAWE:
- Stap 1: funksie
- Stap 2: Teorie van werking en akkuraatheid
- Stap 3: Skematiese en onderdele lys
- Stap 4: PCB Gerber -lêer
- Stap 5: Soldeer u rekenaar
- Stap 6: Programmering van die Atmega328p
- Stap 7: LCD -skerm
- Stap 8: STL -lêer
- Stap 9: ROTERE ENCODER
- Stap 10: Sensorpyp
- Stap 11: Sensorpyp -alternatief
- Stap 12: 'n Pellet oor oscilloskoop en kalibrasie
- Stap 13: Meer …
Video: Luggeweer chronograaf, chronoskoop. 3D -gedruk: 13 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:24
Hallo almal, vandag sal ons weer kyk na 'n projek wat ek in 2010 gedoen het. 'N Air Rifle Chronograph. Hierdie toestel sal u die snelheid van 'n projektiel vertel. Pellet, BB of selfs lugsagte BB -plastiekbal.
In 2010 het ek 'n windbuks vir die pret gekoop. Was blikkies, bottels slaan, mik. Ek weet dat die spoed van hierdie geweer maksimum 500 voet/s was. Omdat dit die wet van Kanada is. 'N Sterker luggeweer is beskikbaar, maar u moet 'n lisensie hê en u kan dit nie by Walmart koop nie.
Toe ek hierdie lisensie gehad het, kon ek nog een koop. Maar kortverhaal, dieselfde geweer was teen 1000 voet/s beskikbaar vir die VSA. WAT!? Dieselfde geweer? ja … In Kanada het die slag 'n gat daarin en die veer is sagter.
Die eerste ding om te doen is om die gat vol te maak. Dit is wat ek met soldeer gedoen het. Die volgende ding om te doen was om 'n vervangingsveer te bestel. Maar wag … wat is die huidige spoed van my nuwe speelding? Is die lente werklik nodig? Ek weet nie en ek wil weet. Ek wil nou weet, maar hoe?
Daarom het ek hierdie projek gedoen. Al wat ek nodig gehad het, was 2 sensors, 'n uC en 'n skerm, en ons is besig.
Verlede week sien ek my ou blou chronograaf op 'n rak en ek praat met myself: "Hoekom deel jy dit nie en doen 'n instruksie daarmee?" En terloops, ons kan die akkuraatheid verhoog en 'n battery -aanwyser byvoeg. Sit 1 knoppie in plaas van 2 vir aan/af. Alles op die oppervlak. Ons is nou in 2020!
So daar is dit … laat ons begin!
Stap 1: funksie
-Pellet spoed
-Snelheid
-20 mhz hardloop, groot akkuraatheid
-Auto af
-Batteryspanning vertoon
-skematiese beskikbaar
-pcb beskikbaar
-afdelingslys beskikbaar
-STL beskikbaar
-C -kode beskikbaar
Stap 2: Teorie van werking en akkuraatheid
-Ons het 'n uC op 20Mhz. Die ossillator wat gebruik word, is 'n TCX0 +-2,5 dpm
-Ons het 2 sensors op 3 duim ver van mekaar.
-Die projektiel het die eerste sensor getref. uC begin tel (timer 1)
-Die projektiel het die tweede sensor getref. uC hou op met tel.
-uC kontroleer die timer1 -waarde, doen die wiskunde en vertoon die snelheid en snelheid.
Ek gebruik 16 bit timer1 + die overloop vlag tov1. 17 bis totaal vir 131071 "tic" vir 'n volledige telling.
1/20 mhz = 50 ns. Elke tic is 50 ns
131071 x 50 ns = 6.55355 ms om 3 duim te doen.
6,55355 ms x 4 = 26,21 ms om 12 duim te doen.
1/26,21 ms = 38.1472637 voet/s
Dit is die stadigste snelheid wat die toestel kan meet.
Waarom 20 mhz? Waarom nie die interne 8 mhz of selfs 'n kristal gebruik nie?
My eerste toestel het die interne ossillator gebruik. Werk, maar hierdie een was nie akkuraat genoeg nie. Die variasie is te groot. 'N Kristal is beter, maar die temperatuur wissel van frekwensie. Ons kan nie 'n akkurate meettoestel daarmee doen nie. Ook, hoe meer die frekwensie hoog is, meer tic word vir dieselfde snelheid getel. Die monsterneming sal beter wees om 'n baie goeie akkuraatheid te hê. Omdat 'n tik nie deelbaar is nie, is die verlies min as die dienssiklus vinnig is.
By 20 MHz het ons stappe van 50 ns. Weet ons hoeveel akkuraat dit 50 ns is vir 'n projektiel by 38 ft/s.
38.1472637 ft/s deel deur 131071 = 0, 000291042 voet
0, 0003880569939956207 voet x 12 = 0, 003492512 duim
1/0, 003492512 = 286.37 ". Met ander woorde. By 50 ft/s het ons 'n akkuraatheid van +- 1/286" of +- 0, 003492512 duim
Maar as my ossillator die ergste is en met 20 mhz +2,5 ppm werk, is dit goed? Kom ons vind uit…
2,5 ppm van 20 000 000 is: (20000000/1000000) x 2,5 = 20000050 Hz
In die ergste geval het ons nog 50 horlosies op 20 MHz. Dit is 50 uur op 1 sekonde. Hoeveel tik meer op timer1 as die korrel dieselfde snelheid doen (38,1472637 voet/s of 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 voet/s
Ons het dus 38.14735907 voet/s in plaas van 38.1472637 voet/s
Nou weet ons dat 2.5 ppm nie die resultaat beïnvloed nie.
Hier is 'n voorbeeld van verskillende spoed
Vir 1000 voet/sek
1000 ft/s x 12 is 12000 duim/s
1 sekonde vir 12000 "hoeveel tyd om 3" te doen? 3x1/12000 = 250 us sekondes
250 us / 50 ns = 5000 tic.
Timer1 sal op 5000 wees
uC doen die wiskunde en 1000 ft/s word vertoon. So ver so goed
Vir 900 voet/sek
900 voet/s is 10800 /s
3x1/10800 = 277,77 ons
277, 77 ns / 50 ns = 5555, 5555 tic
Timer 1 sal op 5555 wees
uC doen die wiskunde en 900, 09 sal in plaas van 900 vertoon word
Hoekom? Omdat timer 1 by 5555 en 0 is, gaan 5555 verlore. Tic on timer is nie deelbaar nie.
Ons het 'n fout van 0, 09 by 900 voet/s
0, 09/900x100 = 0, slegs 01% fout
1500 ft/s 1500 ft/s is 18000 /s 3x1/10800 = 166,66 ons
166.66 us / 50 ns = 3333.333 tic Timer 1 sal op 3333 wees
uC doen die wiskunde en 1500.15 sal vertoon word in plaas van 1500, dit is.15/1500x100 = 0, 01%
Vir 9000 voet/sek
9000 x 12 = 180000 duim / s
3x1/180000 = 27.7777 ons
27,77 ons / 50 ns = 555, 555
Tydteller 1 sal op 555 wees en 4/(1/555x50ns) sal 9009 vertoon word, 00 sal vertoon word
Hier is die fout 9 voet/s op 9000 = 0, 1%
Soos u kan sien, neem die fout toe as die snelheid hoër is. Maar bly <0.1%
Die resultate is baie goed.
Maar akkuraatheid is nie lineêr nie. By 10000 ft/s is dit 0, 1 %. 'N Goeie nuut is dat ons nooit 'n korrel van 10 000 voet/s toets nie.
Nog 'n ding om in gedagte te hou. As 'n onderbreking plaasvind, voltooi uC altyd die laaste instruksie voordat u in die onderbreking begin. Dit is normaal en almal doen dit. As u arduino, in C of selfs assembler, kodeer. Meestal sal u in 'n ewige lus wag … om te wag. Die probleem is dat ons twee siklusse in 'n lus deurbring. Normaalweg is dit nie belangrik nie. Maar in ons geval. JA, elke tic is belangrik. Kom ons kyk na 'n oneindige lus:
samesteller:
lus:
rjmp lus
In C:
terwyl (1) {}
In werklikheid gebruik C -samesteller rjmp -instruksie. RJMP is 2 siklusse.
Dit beteken dat as die onderbreking met die eerste siklus gebeur, ons een siklus (tic) (50ns) verloor.
My manier om dit op te los, is om baie instruksies in die lus by te voeg. NOP is 1 siklus.
lus:
geen P
geen P
geen P
geen P
geen P
rjmp lus
As die onderbreking plaasvind op 'n nop instruksie. Ons is ok. As dit op die tweede siklus van rjmp -instruksie gebeur, is dit goed. Maar as dit gebeur tydens die eerste siklus van rjmp -instruksies, sal ons een tiek verloor. Ja, dit is net 50 ns, maar soos u hierbo kan sien, is 50 ns op 3 duim niks. Ons kan dit nie deur sagteware regstel nie, want ons weet nie presies wanneer die onderbreking plaasvind nie. Daarom sien u baie instruksies in die kode. Nou is ek redelik seker dat die onderbreking op 'n nop instruksie sal val. As ek 2000 byvoeg, het ek 0, 05% om op die rjmp -instruksie te val.
Nog 'n ding om in gedagte te hou. Wanneer onderbreking plaasvind. Die samesteller druk en trek baie. Maar dit is altyd dieselfde getal. Nou kan ons 'n sagtewarekorreksie doen.
Om hieroor af te sluit:
Die akkuraatheid van 'n gemiddelde korrel van 1000 voet/s is 0, 01%
100x meer akkuraat as ander 1% op die mark. Die frekwensie is hoër en met TCXO meer akkuraat
Byvoorbeeld, 1% van 1000 ft/s is min of meer 10 ft/s. Dit is 'n groot verskil.
Stap 3: Skematiese en onderdele lys
Hier het ek my een -drukknoppie aan/af -kring geïmplementeer. (sien my laaste instruksie) Hierdie kring is baie handig en werk baie goed.
Ek gebruik 'n atmega328p. Hierdie een is geprogrammeer in C.
Die skerm is 'n standaard HD44780 -LCD met 2 reëls wat verenigbaar is. 4 bis -modus word gebruik.
'N 3.3v -reguleerder word gebruik om spanning aan die TCXO 20mhz te verskaf.
D1 is vir lcd -agtergrond. Opsioneel. Die battery sal langer hou as u nie D1 installeer nie.
Alle weerstande en kappies is 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 1 miljoen
R2 1 miljoen
R4 2,2k
R5 160
R6 160
R7 1 miljoen
R8 1 miljoen
U1 MIC5317-3.3 MIC5317 SOT23-5
U2 DMG6601LVT DMG6601LVT SOT23-6
Vertoon lcd 2 -reël HD44780. U hoef nie die i2c -module te koop nie.
Sensors:
2x Emitter OP140A
2x Ontvanger OPL530
Encoder: PEC11R-4215K-S0024 *Moenie vergeet om 4x 10k resistors en 2x.01uf by te voeg om die encoder filter te maak nie. sien prentjie hieronder
Stap 4: PCB Gerber -lêer
Hier is gerber -lêers
Stap 5: Soldeer u rekenaar
Met skematiese hulp, soldeer al u komponente op die PCB. Elke deel of geskryf op pcb, r1, r2 … ensovoorts.
Ek het nie D1 geïnstalleer nie. Dit is vir die lcd-agterlig. Dit is pragtig, maar die batterylewe word beïnvloed. Ek kies dus om die LCD-agterlig af te hou.
Stap 6: Programmering van die Atmega328p
Kyk hier by stap 12 om die atmega328p te programmeer. Ek verskaf hier die.hex -lêer hiervoor.
Hier is die avrdude -program wat gereed is om bondellêer te programmeer. Klik slegs op die program usbasp.bat en u usbasp is korrek geïnstalleer. Alles word outomaties gedoen, insluitend 'n lont.
1drv.ms/u/s!AnKLPDy3pII_vXaGPIZKMXxaXDul?e…
In hierdie projek deel ek ook die C -bronkode. Hou in gedagte dat 'n nota daarin in Frans kan wees. Https://1drv.ms/u/s! AnKLPDy3pII_vXUMXHdxajwGRFJx? E …
Stap 7: LCD -skerm
Installeer 'n band en koppel die PCB en lcd aanmekaar
Stap 8: STL -lêer
stl lêer
1drv.ms/u/s!AnKLPDy3pII_vgezy0i0Aw3nD-xr?e…
Ondersteuning is nodig vir omhulsel, sensorpyp en geweerhouer.
Ek het almal op.2 mm hoog gedruk.
Stap 9: ROTERE ENCODER
Hierdie roterende enkodeerder is gekoppel aan die ISP -aansluiting. dit word gebruik om die gewig van die korrels te verander en om die toestel aan en uit te skakel.
vcc isp pen 2 (optrekweerstand)
Terminal A (geel) gaan na die ISP -pen 1
Terminal B (groen) gaan na ISP pin 3
Terminal C (gnd) ISP pen 6
Ek voeg 2 foto's by om die verskil te sien tussen 'n filter en geen filter. U kan maklik die verskil tussen albei sien.
Die drukknoppie gaan na die PCB SW -aansluiting.
Stap 10: Sensorpyp
BELANGRIK:
Sensorpyp moet swart wees en sensorontvanger moet weggesteek word
My eerste pogings was om 'n pragtige rooi pyp te hê. Maar dit is lastig! Dit werk glad nie. Ek het agtergekom dat daar buite lig kom, maar die plastiek en die ontvanger se sensor is altyd aan.
Om 'n goeie resultaat te kry, het ek geen keuse gehad om die kleur na swart te verander nie.
Installeer ontvanger bo -op. En steek die deursigtige plastiek weg met swart verf, band of tandvleis, swart silikoon.
Installeer emitter onderaan. Kontroleer met 'n pen of sensors goed reageer. Miskien moet die gat van die emitter 'n bietjie vergroot word. Dit hang af van die kalibrasie van u drukker.
Ek het ook 'n beter resultaat in die skaduwee. Vermy direkte sonlig.
Stap 11: Sensorpyp -alternatief
As u nie 'n 3D -drukker het nie, kan u dieselfde doen met 'n koperpyp. Dit sal baie goed werk. Die moeilike ding om te doen is die gat van presies 3 duim en die ontvanger en die sender moet in lyn wees.
Stap 12: 'n Pellet oor oscilloskoop en kalibrasie
Dit is 'n regte korrel wat die pyp verbygaan. Probe 1 geel is sensor 1. Probe 2 pers is sensor 2.
Tyd/div is 50 ons.
Ons kan 6 afdelings van 50us tel. 50 us x 6 = 300 us (vir 3 duim). 300 us x 4 = 1,2 ms vir 1 voet
1/1.2ms = 833.33 ft/s
Ons kan ook sien dat die sensor gewoonlik op 5v is. En kan ons die emitterlig blokkeer, sensor val tot 0.
Dit is die manier waarop u sy kontoer kan begin en stop (timer 1)
Maar om presies te weet of die snelheid akkuraat was, het ek 'n manier nodig om dit te meet.
Om sagtewarekalibrasie te doen en die akkuraatheid van hierdie toestel te toets, het ek 'n 10 mhz verwysings ossillator gebruik. Sien my GPSDO op ander instruksies.
Ek voed nog 'n atmega328 met hierdie 10 mhz. En programmeer hierdie in assembler om vir my 2 pulse te stuur elke keer as ek op 'n knoppie druk om 'n korrel te simuleer. Presies soos ons op die foto gesien het, maar in plaas daarvan om 'n regte korrel te hê, was dit nog 'n uC wat my twee polse stuur.
Elke keer as die drukknop ingedruk is, is 1 pols gestuur en presies 4 ms nadat 'n ander pols gestuur is.
Op hierdie manier kan ek die sagteware -samesteller balanseer om altyd 1000 ft/s te vertoon.
Stap 13: Meer …
Dit is my eerste prototipe van 2010.
Vir enige vrae of foutverslag kan u my 'n e -pos stuur. Engels of Frans. Ek sal my bes doen om te help.
Aanbeveel:
Spelontwerp in vyf stappe: 5 stappe
Spelontwerp in fliek in 5 stappe: Flick is 'n baie eenvoudige manier om 'n speletjie te maak, veral iets soos 'n legkaart, visuele roman of avontuurlike spel
Gesigsopsporing op Raspberry Pi 4B in 3 stappe: 3 stappe
Gesigsopsporing op Raspberry Pi 4B in 3 stappe: in hierdie instruksies gaan ons gesigsopsporing uitvoer op Raspberry Pi 4 met Shunya O/S met behulp van die Shunyaface-biblioteek. Shunyaface is 'n biblioteek vir gesigherkenning/opsporing. Die projek het ten doel om die vinnigste opsporing en herkenningssnelheid te bereik met
DIY Vanity Mirror in eenvoudige stappe (met LED -strookligte): 4 stappe
DIY Vanity Mirror in eenvoudige stappe (met behulp van LED Strip Lights): In hierdie pos het ek 'n DIY Vanity Mirror gemaak met behulp van die LED strips. Dit is regtig cool, en u moet dit ook probeer
Nerf chronograaf en vuurtempo: 7 stappe
Nerf chronograaf en vuurtempo: inleiding As 'n tinkerer is dit altyd baie bevredigend om die numeriese resultate van u geknoei te sien. Baie van ons het al voorheen Nerf -gewere aangepas, en wie hou nie daarvan om stukkies skuim teen meer as 100 fps oor die huis te gooi nie? Nadat ons baie Nerf g verander het
Arduino vir Nerf: Chronograaf en opnameteller: 28 stappe (met foto's)
Arduino for Nerf: Chronograph and Shot Counter: My vorige Instructable het die basiese beginsels van die opsporing van pylspoed behandel met behulp van 'n infrarooi emitter en detector. Hierdie projek neem 'n stap verder met behulp van 'n printplaat, skerm en batterye om 'n draagbare ammunisieteller en chronograaf te maak