Tartalomjegyzék:

Légpuska kronográf, kronoszkóp. 3D nyomtatás: 13 lépés
Légpuska kronográf, kronoszkóp. 3D nyomtatás: 13 lépés

Videó: Légpuska kronográf, kronoszkóp. 3D nyomtatás: 13 lépés

Videó: Légpuska kronográf, kronoszkóp. 3D nyomtatás: 13 lépés
Videó: Daisy Air Rifle Wall Hanger 2024, Július
Anonim
Image
Image
Funkció
Funkció

Sziasztok, ma újra meglátogatunk egy projektet, amit 2010 -ben csináltam. Légpuska kronográf. Ez az eszköz megmondja a lövedék sebességét. Pellet, BB vagy akár légpuha BB műanyag golyó.

2010 -ben vettem egy légpuskát szórakozásból. Dobozokat, üvegeket ütött, célzott. Tudom, hogy ennek a fegyvernek a sebessége legfeljebb 500 láb/s volt. Mert ez a kanadai törvény. Néhány erősebb légpuska elérhető, de engedélyre van szüksége, és nem vásárolhatja meg ezeket a Walmartban.

Most megvolt ez a jogosítványom, vehettem másikat. De rövid történet: ugyanaz a fegyver az Egyesült Államok rendelkezésére állt 1000 láb/s sebességgel. MIT!? Ugyanaz a fegyver? igen… Kanadában a löketben lyuk van, és a rugó lágyabb.

Az első dolog, amit fel kell tölteni. Ezt csináltam a forrasztással. Következő lépésként csererugót kellett rendelni. De várj… mi az új játékom jelenlegi sebessége? Valóban szükség van a tavaszra? Nem tudom és szeretném tudni. Most szeretném tudni, de hogyan?

Ezért csináltam ezt a projektet. Csak 2 érzékelőre, egy UC -re és egy kijelzőre volt szükségem, és üzletelünk.

Múlt héten láttam a régi kék kronográfomat a polcon, és magamban azt beszéltem: "Miért nem osztod meg ezt, és nem teszel vele tanulságosat?" És mellesleg növelhetjük a pontosságot, és hozzáadhatunk egy akkumulátor -jelzőt. A ki/bekapcsoláshoz tegyen 2 gombot 1 helyett. Minden felületre szerelhető. Most 2020 -ban vagyunk!

Szóval itt van … kezdjük!

1. lépés: Funkció

-Pellet sebesség

-Sebesség

-20 mhz futás, óriási pontosság

-Automatikus kikapcsolás

-Az akkumulátor feszültsége megjelenik

-rendelkezésre áll sematikus

-pcb kapható

-alkatrész lista elérhető

-STL elérhető

-C kód elérhető

2. lépés: A működés elmélete és a pontosság

-Van egy uC, amely 20Mhz -en fut. Az alkalmazott oszcillátor TCX0 +-2,5 ppm

-2 érzékelőnk van egymástól 3 hüvelyk távolságban.

-A lövedék eltalálta az első érzékelőt. uC kezdi a számlálást (időzítő1)

-A lövedék eltalálta a második érzékelőt. uC hagyja abba a számolást.

-uC ellenőrizze az időzítő1 értékét, végezze el a számítást és a kijelző sebességét és sebességét.

16 bites időzítőt1 használok + tov1 túlcsordulás jelzőt. 17 bit összesen 131071 "tic" esetén a teljes számláláshoz.

1/20 mhz = 50 ns. Minden tics 50ns

131071 x 50 ns = 6,55355 ms - 3 hüvelyk.

6,55355 ms x 4 = 26,21 ms - 12 hüvelyk.

1/26,21 ms = 38,1472637 láb/s

Ez a legalacsonyabb sebesség, amelyet az eszköz képes mérni.

Miért 20 mhz? Miért nem használja a belső 8 MHz -es vagy akár egy cristalt?

Az első eszközöm a belső oszcillátort használta. Működött, de ez nem volt elég pontos. A variáció túl nagy. A kristály jobb, de a hőmérséklet változó frekvenciájú. Ezzel nem tudunk pontos mérőműszert készíteni. Továbbá, minél magasabb a frekvencia, annál több pontot számolnak ugyanazon sebességnél. A mintavétel jobb lesz, ha nagyon jó a pontossága. Mivel a tic nem osztható, a veszteség kicsi, ha a működési ciklus gyors.

20 MHz -en 50 ns lépésekkel rendelkezünk. Tudjuk -e, hogy mennyi pontosságú 50 ns lövedék esetén 38 láb/s sebességnél.

38,1472637 láb/s osztás 131071 -gyel = 0, 000291042 láb

0 0003880569939956207 láb x 12 = 0, 003492512 hüvelyk

1/0, 003492512 = 286,37 ". Más szóval. 50 láb/s sebességnél +- 1/286" vagy +- 0, 003492512 hüvelyk pontossággal rendelkezünk

De ha az oszcillátorom a legrosszabb és 20 mhz +2,5 ppm sebességgel működik, akkor rendben van? Találjuk ki…

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

Tehát a legrosszabb esetben további 50 óra van 20 MHz -en. 50 óra 1 másodperc alatt. Hány tic még az időzítő1 -en, ha a pellet ugyanazt a sebességet végzi (38,1472637 láb/s vagy 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 láb/s

Tehát 38,147235907 láb/s van a 38,1472637 láb/s helyett

Most már tudjuk, hogy a 2,5 ppm nem befolyásolja az eredményt.

Íme néhány példa a különböző sebességre

1000 ft/s -ra

1000 láb/s x 12 12000 hüvelyk/s

1 másodperc 12000 "mennyi idő alatt 3"? 3x1/12000 = 250 us másodperc

250 us / 50 ns = 5000 tic.

Az 1. időzítő 5000 lesz

uC do the math és 1000 ft/s jelenik meg. Eddig jó

900 ft/s sebességgel

A 900 láb/s 10800 /s

3x1/10800 = 277,77 nekünk

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

Az 1. időzítő 5555 -nél lesz

uC do the math, és 900, 09 jelenik meg 900 helyett

Miért ? mert az 1. időzítő 5555 és 0, 5555 elveszett. A tic on timer nem osztható.

Hiba van a 0, 09, 900 ft/s sebességgel

0, 09/900x100 = 0, 01% hiba csak

1500 láb/s esetén 1500 láb/s 18000 /s 3x1/10800 = 166,66 nekünk

166,66 us / 50 ns = 3333,3333 tic Az 1. időzítő 3333 -nál lesz

uC do the math, és 1500.15 jelenik meg 1500 helyett.15/1500x100 = 0, 01%

9000 ft/s sebességgel

9000 x 12 = 180000 hüvelyk / s

3x1/180000 = 27.7777 minket

27,77 us / 50 ns = 555, 555

Az 1. időzítő 555, a 4/(1/555x50ns) pedig 9009, 00 jelenik meg

Itt a hiba 9 láb/s 9000 = 0, 1%

Mint látható, a % -os hiba növekszik, ha a sebesség nagyobb. De maradjon <0,1%

Ezek az eredmények nagyon jók.

De a pontosság nem lineáris. 10000 ft/s -nál 0, 1 %. Jó új, hogy soha nem tesztelünk 10 000 láb/s pelletet.

Egy másik dolog, amit szem előtt kell tartani. Megszakítás esetén az uC mindig fejezze be az utolsó utasítást, mielőtt belépne a megszakításba. Ez normális, és minden uC ezt teszi. Ha arduino -t kódol, C -ben vagy akár assemblerben. Legtöbbször örökké tartó ciklusban fog várakozni… várni. A probléma az, hogy egy ciklusban 2 ciklust töltünk. Általában ez nem fontos. De a mi esetünkben. IGEN, minden pont fontos. Nézzünk egy végtelen hurkot:

szerelő:

hurok:

rjmp hurok

C -ben:

míg (1) {}

Valójában a C fordító rjmp utasításokat használ. Az RJMP 2 ciklus.

Ez azt jelenti, hogy ha a megszakítás az első ciklusnál történik, akkor elveszítünk egy ciklust (tic) (50ns).

A megoldásom az, ha sok nop utasítást adok hozzá a hurokhoz. A NOP 1 ciklus.

hurok:

nop

nop

nop

nop

nop

rjmp hurok

Ha a megszakítás nop utasításra történik. Rendben vagyunk. Ha ez megtörténik az rjmp utasítás második ciklusában, rendben vagyunk. De ha ez az rjmp utasítás első ciklusában történik, akkor elveszítünk egy pontot. Igen, ez csak 50 ns, de mint fentebb látható, az 50 ns 3 hüvelyknél nem semmi. Ezt szoftveresen nem tudjuk kijavítani, mert nem tudjuk, hogy pontosan mikor történik megszakítás. Ezért a kódban sok nop utasítást fog látni. Most már biztos vagyok benne, hogy a megszakítás egy nop utasításra fog esni. Ha 2000 nop -ot adok hozzá, akkor 0, 05% van az rjmp utasításra.

Egy másik dolog, amit szem előtt kell tartani. Amikor megszakítás történik. A fordító sok lökést és húzást végez. De ez mindig ugyanaz a szám. Tehát most megtehetjük a szoftver korrekcióját.

Befejezésül erre:

Pontosság 1000 láb/s átlagos pellet esetén 0,01%

100 -szor pontosabb, mint a piacon elérhető többi 1%. A frekvencia magasabb, és a TCXO -val pontosabb

Például 1000 láb/s 1% -a többé -kevésbé 10 láb/s. Óriási különbség.

3. lépés: Vázlatos és alkatrészlista

Vázlatos és alkatrészlista
Vázlatos és alkatrészlista

Itt megvalósítottam az egy nyomógombos ki/be kapcsolást. (lásd az utolsó utasítást) Ez az áramkör nagyon praktikus és nagyon jól működik.

Atmega328p -t használok. Ez C -be van programozva.

A kijelző szabványos 2 soros LCD HD44780 kompatibilis. 4 bites módot használnak.

3.3 V -os szabályozót használnak a feszültség biztosítására a TCXO 20mhz -re.

A D1 az LCD háttérvilágításhoz használható. Választható. Az akkumulátor tovább tart, ha nem telepíti a D1 -et.

Minden ellenállás és sapka 0805 csomagolású

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

Kijelző LCD 2 soros HD44780. Nem kell megvenni az i2c modult.

Érzékelők:

2x kibocsátó OP140A

2x vevő OPL530

Kódoló: PEC11R-4215K-S0024 *Ne felejtse el hozzáadni a 4x 10k ellenállást és a 2x.01uf értéket a kódoló szűrő elvégzéséhez. lásd az alábbi képet

4. lépés: NYÁK Gerber fájl

NYÁK Gerber fájl
NYÁK Gerber fájl
NYÁK Gerber fájl
NYÁK Gerber fájl
NYÁK Gerber fájl
NYÁK Gerber fájl
NYÁK Gerber fájl
NYÁK Gerber fájl

Itt vannak a gerber fájlok

5. lépés: Forrasztja a számítógépét

Forrasztja a számítógépét
Forrasztja a számítógépét
Forrasztja a számítógépét
Forrasztja a számítógépét
Forrasztja a számítógépét
Forrasztja a számítógépét

Vázlatos segítséggel forrasztja össze az összes alkatrészét a NYÁK -on. Minden rész vagy PCB -re írva, r1, r2… és így tovább.

Nem telepítettem a D1 -et. Ez az LCD háttérvilágításra vonatkozik. Gyönyörű, de befolyásolja az akkumulátor élettartamát. Tehát úgy döntök, hogy nem kapcsolom ki az LCD háttérvilágítást.

6. lépés: Az Atmega328p programozása

Az Atmega328p programozása
Az Atmega328p programozása

Itt ellenőrizheti a 12. lépést az atmega328p programozásához. Itt adom meg a.hex fájlt.

Itt található az avrdude program kötegelt fájl programozására. Csak kattintson az usbasp.bat programra, és az usbasp helyesen van telepítve. Minden automatikusan megtörténik, beleértve a biztosítékot is.

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

Ebben a projektben a C forráskódot is megosztom. Ne feledje, hogy néhány megjegyzés francia nyelvű lehet. Http://1drv.ms/u/s! AnKLPDy3pII_vXUMXHdxajwGRFJx? E…

7. lépés: LCD kijelző

LCD kijelzö
LCD kijelzö
LCD kijelzö
LCD kijelzö

Telepítsen egy szalagot, és csatlakoztassa a PCB -t és az LCD -t

8. lépés: STL fájl

STL fájl
STL fájl
STL fájl
STL fájl
STL fájl
STL fájl

stl fájl

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

Támaszra van szükség a burkolathoz, az érzékelőcsőhöz és a puskatartóhoz.

Mindent kinyomtattam.2 mm magasan.

9. lépés: FORGÓKÓDER

FORGÓKÓDER
FORGÓKÓDER
FORGÓKÓDER
FORGÓKÓDER
FORGÓKÓDER
FORGÓKÓDER

Ez a forgó kódoló az isp csatlakozóhoz van csatlakoztatva. a pellet súlyának megváltoztatására, valamint a készülék be- és kikapcsolására szolgál.

vcc ISP 2 pin (felhúzó ellenállás)

Az A terminál (sárga) menjen az internetszolgáltató 1 -es érintkezőjéhez

A B terminál (zöld) lépjen az ISP 3 -as érintkezőjére

C terminál (gnd) isp pin 6

Két képet adok hozzá, hogy lássam a különbséget a szűrő és a szűrő nélkül. Könnyen láthatja a különbséget a kettő között.

A nyomógomb a NYÁK SW csatlakozójához megy.

10. lépés: Érzékelő cső

Érzékelő cső
Érzékelő cső
Érzékelő cső
Érzékelő cső
Érzékelő cső
Érzékelő cső

FONTOS:

Az érzékelőcsőnek fekete színűnek kell lennie, az érzékelő vevőnek pedig rejtettnek kell lennie

Az első próbálkozásom az volt, hogy legyen egy gyönyörű piros pipám. De ez trükkös! Egyáltalán nem működött. Rájöttem, hogy külső fény érkezik, a műanyag és a vevő érzékelője mindig be volt kapcsolva.

A jó eredmény érdekében nem volt más választásom, hogy a színt feketére változtassam.

Szerelje fel a vevőt a tetejére. És rejtse el az átlátszó műanyagot fekete festékkel, szalaggal vagy gumival, fekete szilikonnal.

Telepítse az emittert az aljára. Tollal ellenőrizze, hogy az érzékelők jól reagálnak -e. Lehet, hogy egy kicsit ki kell növelni az emitter lyukat. ez a nyomtató kalibrálásától függ.

Az árnyékban is jobb eredményt érhetek el. Kerülje a közvetlen napfényt.

11. lépés: Az érzékelőcső alternatívája

Az érzékelőcső alternatívája
Az érzékelőcső alternatívája
Az érzékelőcső alternatívája
Az érzékelőcső alternatívája

Ha nincs 3D nyomtatója, ugyanezt megteheti rézcsővel is. Nagyon jól fog működni. Nehéz dolog az, hogy a lyuk pontosan 3 hüvelyk, és a vevőt és az adót igazítani kell.

12. lépés: Pellet oszcilloszkópon és kalibrálás

Pellet oszcilloszkópon és kalibrálás
Pellet oszcilloszkópon és kalibrálás

Ez egy igazi pellet passzolás. Az 1. szonda sárga az 1. érzékelő. A 2. szonda lila a 2. érzékelő.

Az idő/osztás 50 nekünk.

6 db 50us osztást számolhatunk. 50 us x 6 = 300 us (3 hüvelyk esetén). 300 us x 4 = 1,2 ms 1 lábnál

1/1,2 ms = 833,33 láb/s

Azt is láthatjuk, hogy az érzékelő normál esetben 5V -on van. És blokkolhatjuk -e a kibocsátó fényt, az érzékelőt 0 -ra.

Így kezdi és állítja le az uC a számlálóját (időzítő1)

De ahhoz, hogy pontosan megtudjam, hogy a sebesség pontos volt -e, szükségem volt arra, hogy ezt mérjem.

A szoftver kalibrálásához és az eszköz pontosságának teszteléséhez 10 mhz referencia oszcillátort használtam. Lásd a GPSDO -t más oktatható eszközön.

Egy másik atmega328 -at etetek ezzel a 10 mhz -el. És programozza be ezt az assemblerben, hogy küldjön nekem 2 impulzust minden egyes gombnyomásra, hogy szimulálja a pelletet. Pontosan olyan, mint a képen láttuk, de valódi pellet helyett egy másik uC küldött nekem 2 impulzust.

A nyomógomb minden egyes megnyomásakor 1 impulzust küldtek, és pontosan 4 ms -ot egy másik impulzus elküldése után.

Így képes leszek kiegyensúlyozni a szoftver fordítót, hogy mindig 1000 ft/s legyen megjelenítve.

13. lépés: Továbbiak…

Több…
Több…
Több…
Több…

Ez az első prototípusom 2010 -ben.

Bármilyen kérdésre vagy hibajelentésre e -mailt küldhet nekem. Angolul vagy franciául. Mindent megteszek, hogy segítsek.

Ajánlott: