Turinys:

Chronografas, oro šautuvų chronografas. 3D spausdinimas: 13 žingsnių
Chronografas, oro šautuvų chronografas. 3D spausdinimas: 13 žingsnių

Video: Chronografas, oro šautuvų chronografas. 3D spausdinimas: 13 žingsnių

Video: Chronografas, oro šautuvų chronografas. 3D spausdinimas: 13 žingsnių
Video: Homemade Ballistic Chronograph IR Sensor 2024, Liepa
Anonim
Image
Image
Funkcija
Funkcija

Sveiki visi, šiandien mes dar kartą apžiūrėsime projektą, kurį padariau 2010 m. Oro šautuvo chronografas. Šis prietaisas parodys sviedinio greitį. Granuliuotas, BB ar net minkštas BB plastikinis rutulys.

2010 metais pramogai nusipirkau oro šautuvą. Smūgiavo į skardines, butelius, taikėsi. Žinau, kad šio pistoleto greitis buvo didžiausias 500 pėdų per sekundę. Nes tai yra Kanados įstatymas. Yra keletas stipresnių oro šautuvų, tačiau jums reikia turėti licenciją ir negalite jų nusipirkti „Walmart“.

Dabar turėjau šią licenciją, galėjau nusipirkti kitą. Bet trumpa istorija, tas pats ginklas buvo prieinamas JAV 1000 pėdų per sekundę greičiu. KĄ!? Tas pats ginklas? taip … Kanadoje smūgis turi skylę, o spyruoklė minkštesnė.

Pirmas dalykas, kurį reikia padaryti, yra užpildyti skylę. Tai aš padariau su lydmetaliu. Kitas dalykas, kurį reikia padaryti, buvo užsisakyti pakaitinę spyruoklę. Bet palaukite … koks dabartinis mano naujo žaislo greitis? Ar tikrai reikia pavasario? Nežinau ir noriu žinoti. Dabar noriu sužinoti, bet kaip?

Štai kodėl aš padariau šį projektą. Viskas, ko man reikėjo, buvo 2 jutikliai, uC ir ekranas, ir mes dirbame.

Praėjusią savaitę pamačiau savo seną mėlyną chronografą ant lentynos ir kalbu su savimi: „Kodėl nesidalinti tuo ir daryti su juo ką nors pamokomo?“Ir, beje, galėtume padidinti tikslumą ir pridėti akumuliatoriaus indikatorių. Įjunkite ir išjunkite 1 mygtuką, o ne 2. Visų paviršių tvirtinimas. Dabar esame 2020 m.!

Taigi štai… pradėkime!

1 žingsnis: funkcija

-granulių greitis

-Greitis

-20 mhz bėgimas, didžiulis tikslumas

-Išjungta automatiškai

-Rodoma akumuliatoriaus įtampa

-galima schema

-pcb galima

-galimas dalių sąrašas

-galima STL

-Galimas C kodas

2 žingsnis: veikimo teorija ir tikslumas

-Pas mus uC veikia 20Mhz. Naudojamas osciliatorius yra TCX0 +-2,5 ppm

-Mes turime 2 jutiklius 3 colių atstumu vienas nuo kito.

-Šovinys pataikė į pirmąjį jutiklį. uC pradėti skaičiuoti (1 laikmatis)

-Šovinys pataikė į antrąjį jutiklį. uC nustokite skaičiuoti.

-uC patikrinkite laikmačio1 vertę, atlikite matematiką ir rodykite greitį bei greitį.

Aš naudoju 16 bitų laikmatį1 + perpildymo vėliavą tov1. Iš viso 17 bitų už 131071 „tik“, jei norite visiškai suskaičiuoti.

1/20 mhz = 50 ns. Kiekvienas tikas yra 50 USD

131071 x 50 ns = 6,55355 ms iki 3 colių.

6,55355 ms x 4 = 26,21 ms iki 12 colių.

1/26,21 ms = 38,1472637 pėdos/s

Tai yra mažiausias greitis, kurį prietaisas gali išmatuoti.

Kodėl 20 mhz? Kodėl gi nenaudojant vidinio 8 MHz ar net cristal?

Mano pirmasis prietaisas naudojo vidinį osciliatorių. Veikė, bet šis nebuvo pakankamai tikslus. Skirtumas yra per didelis. Cristal yra geresnis, tačiau temperatūra skiriasi. Mes negalime padaryti tikslaus matavimo prietaiso. Be to, kuo didesnis dažnis, tuo pačiu greičiu bus skaičiuojama daugiau tikslų. Mėginių ėmimas bus geresnis, jei bus labai geras tikslumas. Kadangi tikas nėra padalijamas, nuostoliai yra nedideli, jei darbo ciklas yra greitas.

Esant 20 MHz dažniui, mes turime 50 ns žingsnius. Ar žinome, kiek tikslumas yra 50 ns sviediniui esant 38 pėdų per sekundę greičiui.

38,1472637 pėdų/s padalinkite iš 131071 = 0, 000291042 pėdų

0 0003880569939956207 pėdų x 12 = 0, 003492512 colių

1/0, 003492512 = 286,37 ". Kitaip tariant. 50 pėdų per sekundę tikslumas yra +- 1/286" arba +- 0, 003492512 colių

Bet jei mano osciliatorius yra blogiausias ir veikia 20 mhz +2,5 ppm, ar viskas gerai? Išsiaiškinkime…

2,5 ppm iš 20 000 000 yra: (20000000/1000000) x 2,5 = 20000050 Hz

Taigi blogiausiu atveju mes turime dar 50 laikrodžių 20 MHz dažniu. 50 sekundžių per 1 sekundę. Kiek taškų daugiau už 1 laikmatį, jei granulės veikia tuo pačiu greičiu (38,1472637 pėdos/s arba 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 pėdos/s

Taigi mes turime 38,14735907 pėdų/s, o ne 38,1472637 pėdų/s

Dabar mes žinome, kad 2,5 ppm neturi įtakos rezultatui.

Štai keletas skirtingų greičių pavyzdžių

Už 1000 pėdų per sekundę

1000 pėdų/s x 12 yra 12000 colių/s

1 sekundė už 12000 „kiek laiko padaryti 3“? 3x1/12000 = 250 JAV sekundžių

250 JAV / 50 ns = 5000 tikų.

1 laikmatis bus 5000

uC do the math ir rodomas 1000 pėdų per sekundę. Kol kas viskas gerai

Už 900 pėdų per sekundę

900 pėdų per sekundę yra 10800 colių per sekundę

3x1/10800 = 277,77 mus

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

1 laikmatis bus 5555

uC do the math ir 900, bus rodomas 09, o ne 900

Kodėl? nes 1 laikmatis yra 5555 ir 0, 5555 prarastas. Laikmačio žymeklis nėra padalijamas.

Turime klaidą 0, 09 dėl 900 pėdų per sekundę

0, 09/900x100 = 0, 01% tik klaida

1500 pėdų/1500 pėdų yra 18000 colių/s 3x1/10800 = 166,66 JAV

166,66 us / 50 ns = 3333,3333 tic 1 laikmatis bus 3333

uC do the math ir 1500.15 bus rodomas vietoj 1500, tai yra.15/1500x100 = 0, 01%

Už 9000 pėdų/s

9000 x 12 = 180000 colių / s

3x1/180000 = 27.7777 mus

27,77 us / 50 ns = 555, 555

Laikmatis1 bus 555, o 4/(1/555x50ns) bus rodomas 9009, 00

Čia klaida yra 9 pėdos/s 9000 = 0, 1%

Kaip matote, % klaida didėja, kai greitis yra didesnis. Bet likti <0,1%

Tie rezultatai labai geri.

Tačiau tikslumas nėra linijinis. Esant 10000 pėdų per sekundę, tai yra 0, 1 %. Gera naujiena - mes niekada nebandome 10 000 pėdų per sekundę granulių.

Kitas dalykas, kurį reikia turėti omenyje. Kai įvyksta pertrauka, uC visada baigia paskutinę instrukciją prieš įvesdama pertrauką. Tai normalu ir visi UC tai daro. Jei koduojate arduino, C arba net surinkėjas. Dažniausiai lauki amžiną ciklą… laukti. Problema ta, kad cikle mes praleidžiame 2 ciklus. Paprastai tai nėra svarbu. Bet mūsų atveju. TAIP, kiekvienas tikėjimas yra svarbus. Pažvelkime į begalinę kilpą:

surinkėjas:

kilpa:

rjmp kilpa

C:

tuo tarpu (1) {}

Iš tikrųjų C kompiliatorius naudoja rjmp instrukciją. RJMP yra 2 ciklai.

Tai reiškia, kad jei pertrauka įvyksta pirmajam ciklui, mes prarandame vieną ciklą (tic) (50ns).

Mano būdas tai išspręsti yra pridėti daug nop instrukcijų į kilpą. NOP yra 1 ciklas.

kilpa:

be problemų

be problemų

be problemų

be problemų

be problemų

rjmp kilpa

Jei pertrauka įvyksta pagal instrukciją. Mums viskas gerai. Jei tai atsitiks antrame „rjmp“instrukcijų cikle, mums viskas gerai. Bet jei tai atsitiks per pirmąjį „rjmp“instrukcijų ciklą, mes prarasime vieną tiką. Taip, tai tik 50 ns, bet, kaip matote aukščiau, 50 ns 3 coliuose nėra nieko. Mes negalime to ištaisyti programine įranga, nes nežinome, kada tiksliai nutinka pertrauka. Štai kodėl kode pamatysite daug „nop“nurodymų. Dabar esu tikras, kad pertrauka bus vykdoma pagal instrukciją. Jei pridėsiu 2000 nop, turiu 0, 05% rjmp instrukcijos.

Kitas dalykas, kurį reikia turėti omenyje. Kai nutinka pertrauka. Kompiliatorius daug stumia ir traukia. Bet tai visada tas pats skaičius. Taigi dabar galime atlikti programinės įrangos taisymą.

Norėdami padaryti išvadą šiuo klausimu:

Vidutinio 1000 pėdų/s granulių tikslumas yra 0,01%

100 kartų tikslesnis nei kiti rinkoje esantys 1%. Dažnis yra didesnis, o naudojant TCXO - tikslesnis

Pavyzdžiui, 1% 1000 pėdų per sekundę yra daugiau ar mažiau 10 pėdų per sekundę. Tai didžiulis skirtumas.

3 žingsnis: schema ir dalių sąrašas

Schemų ir dalių sąrašas
Schemų ir dalių sąrašas

Čia aš įgyvendinau savo vieno mygtuko įjungimo/išjungimo grandinę. (žr. mano paskutinį nurodymą) Ši grandinė yra labai patogi ir veikia labai gerai.

Aš naudoju atmega328p. Šis užprogramuotas C.

Ekranas yra standartinis 2 eilučių LCD HD44780 suderinamas. Naudojamas 4 bitų režimas.

TCXO 20mhz įtampai tiekti naudojamas 3.3v reguliatorius.

D1 skirtas LCD foniniam apšvietimui. Neprivaloma. Jei neįdiegsite D1, baterija tarnaus ilgiau.

Visi rezistoriai ir dangteliai yra 0805 pakuotėje

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 mln

R2 1 mln

R4 2,2 tūkst

R5 160

R6 160

R7 1 mln

R8 1 mln

U1 MIC5317-3,3 MIC5317 SOT23-5

U2 DMG6601LVT DMG6601LVT SOT23-6

Ekranas LCD 2 eilutės HD44780. Nereikia pirkti „i2c“modulio.

Jutikliai:

2x skleidėjas OP140A

2x imtuvas OPL530

Kodavimo įrenginys: PEC11R-4215K-S0024 *Nepamirškite pridėti 4x 10k rezistorių ir 2x.01uf, kad atliktumėte kodavimo filtrą. žr. paveikslėlį žemiau

4 žingsnis: PCB Gerber failas

PCB Gerber failas
PCB Gerber failas
PCB Gerber failas
PCB Gerber failas
PCB Gerber failas
PCB Gerber failas
PCB Gerber failas
PCB Gerber failas

Čia yra gerber failai

5 žingsnis: lituokite savo kompiuterį

Lituokite savo kompiuterį
Lituokite savo kompiuterį
Lituokite savo kompiuterį
Lituokite savo kompiuterį
Lituokite savo kompiuterį
Lituokite savo kompiuterį

Padedant schematiškai, lituokite visus savo komponentus ant plokštės. Kiekviena dalis arba parašyta ant pcb, r1, r2 … ir pan.

Aš neįdiegiau D1. Tai skirta LCD foniniam apšvietimui. Tai gražu, tačiau baterijos veikimo laikas yra paveiktas. Taigi aš nusprendžiau neleisti LCD foninio apšvietimo.

6 žingsnis: „Atmega328p“programavimas

Atmega328p programavimas
Atmega328p programavimas

Patikrinkite čia, atlikdami 12 veiksmą, kad užprogramuotumėte „atmega328p“. Čia pateikiu.hex failą.

Čia yra avrdude programa, paruošta programuoti paketinį failą. Spustelėkite tik programą usbasp.bat ir jūsų usbasp yra tinkamai įdiegtas. Viskas bus padaryta automatiškai, įskaitant saugiklį.

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

Šiame projekte aš taip pat dalinuosi C šaltinio kodu. Atminkite, kad kai kurios pastabos gali būti prancūzų kalba. Http://1drv.ms/u/s! AnKLPDy3pII_vXUMXHdxajwGRFJx?

7 žingsnis: LCD ekranas

LCD ekranas
LCD ekranas
LCD ekranas
LCD ekranas

Įdiekite juostą ir prijunkite PCB ir LCD

8 veiksmas: STL failas

STL failas
STL failas
STL failas
STL failas
STL failas
STL failas

stl failą

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

Reikia atramos korpusui, jutiklio vamzdžiui ir šautuvo laikikliui.

Visi atspausdinti.2 mm aukščio.

9 žingsnis: ROTARY ENCODER

ROTARY ENCODER
ROTARY ENCODER
ROTARY ENCODER
ROTARY ENCODER
ROTARY ENCODER
ROTARY ENCODER

Šis sukamasis kodavimo įrenginys yra prijungtas prie ISP jungties. jis naudojamas granulių svoriui pakeisti ir prietaisui įjungti bei išjungti.

vcc ISP kaištis 2 (ištraukite rezistorių)

A terminalas (geltonas) eikite į IPT 1 kaištį

B terminalas (žalias) eikite į IPT 3 kaištį

Gnybto C (gnd) ISP kaištis 6

Pridedu 2 nuotraukas, kad pamatyčiau skirtumą tarp filtro ir filtro neturėjimo. Jūs galite lengvai pamatyti skirtumą tarp abiejų.

Mygtukas eina į PCB jungtį.

10 žingsnis: jutiklio vamzdis

Jutiklio vamzdis
Jutiklio vamzdis
Jutiklio vamzdis
Jutiklio vamzdis
Jutiklio vamzdis
Jutiklio vamzdis

SVARBU:

Jutiklio vamzdis turi būti juodas, o jutiklio imtuvas - paslėptas

Pirmieji mano bandymai buvo turėti gražų raudoną vamzdį. Bet tai yra keblu! Tai visai neveikė. Aš supratau, kad įeina lauko šviesa, plastikas ir imtuvo jutiklis visada buvo įjungti.

Kad rezultatas būtų geras, neturėjau pasirinkimo pakeisti spalvos į juodą.

Įdiekite imtuvą viršuje. Ir paslėpkite skaidrų plastiką juodais dažais, juostele ar guma, juodu silikonu.

Įdiekite spinduliuotę apačioje. Rašikliu patikrinkite, ar jutikliai gerai reaguoja. Galbūt skleidėjo skylę reikės šiek tiek padidinti. tai priklausys nuo spausdintuvo kalibravimo.

Aš taip pat turiu geresnį rezultatą šešėlyje. Venkite tiesioginių saulės spindulių.

11 žingsnis: Jutiklio vamzdžio alternatyva

Jutiklio vamzdžio alternatyva
Jutiklio vamzdžio alternatyva
Jutiklio vamzdžio alternatyva
Jutiklio vamzdžio alternatyva

Jei neturite 3D spausdintuvo, tą patį galite padaryti su variniu vamzdžiu. Tai labai gerai veiks. Sunku padaryti tai, kad skylė yra tiksliai 3 colių, o imtuvas ir skleidėjas turi būti suderinti.

12 žingsnis: granulės osciloskopu ir kalibravimas

Granulės osciloskopu ir kalibravimas
Granulės osciloskopu ir kalibravimas

Tai tikras granulių perdavimas. 1 zondas geltonas yra jutiklis 1. 2 zondas purpurinis yra 2 jutiklis.

Laikas/div yra 50 mus.

Galime suskaičiuoti 6 padalinius po 50. 50 JAV x 6 = 300 JAV (3 coliams). 300 us x 4 = 1,2 ms 1 pėdai

1/1,2 ms = 833,33 pėdos/s

Taip pat matome, kad jutiklis paprastai yra 5 V įtampos. Ar galime užblokuoti spinduliuojančią šviesą, jutiklį nukristi iki 0.

Taip uC pradeda ir sustabdo jo skaitiklį (1 laikmatis)

Bet norint tiksliai žinoti, ar greitis buvo tikslus, man reikėjo būdo tai įvertinti.

Norėdami atlikti programinės įrangos kalibravimą ir patikrinti šio įrenginio tikslumą, aš naudoju 10 mhz etaloninį osciliatorių. Žr. Mano GPSDO kitą instrukciją.

Aš maitinu kitą atmega328 šiuo 10 mhz. Ir užprogramuokite šį asamblėją, kad kaskart, kai paspausiu mygtuką, man atsiųstų 2 impulsus, kad imituotų granules. Tiksliai taip, kaip matėme paveikslėlyje, bet vietoj to, kad turėtume tikrą granulę, kitas uC man atsiuntė 2 impulsus.

Kiekvieną kartą paspaudus mygtuką buvo siunčiamas 1 impulsas ir lygiai 4 ms po kito.

Tokiu būdu galiu subalansuoti programinės įrangos kompiliatorių, kad visada būtų rodomas 1000 pėdų per sekundę.

13 žingsnis: daugiau…

Daugiau…
Daugiau…
Daugiau…
Daugiau…

Tai pirmasis mano 2010 metų prototipas.

Jei turite klausimų ar pranešimų apie klaidas, galite man atsiųsti el. Anglų arba prancūzų. Pasistengsiu padėti.

Rekomenduojamas: