Mündəricat:

Hava tüfəngli xronoqraf, xronoskop. 3D Çap: 13 addım
Hava tüfəngli xronoqraf, xronoskop. 3D Çap: 13 addım

Video: Hava tüfəngli xronoqraf, xronoskop. 3D Çap: 13 addım

Video: Hava tüfəngli xronoqraf, xronoskop. 3D Çap: 13 addım
Video: Вся техника Белорусской армии ★ Краткие ТТХ ★ Военный парад в Минске ★ Belarusian Army Parade 2024, Iyul
Anonim
Image
Image
Xüsusiyyət
Xüsusiyyət

Hər kəsə salam, bu gün 2010 -cu ildə etdiyim bir layihəyə yenidən baxacağıq. Hava tüfəngli xronoqraf. Bu cihaz bir mərminin sürətini sizə xəbər verəcəkdir. Pellet, BB və ya hətta hava yumşaq BB plastik top.

2010 -cu ildə əylənmək üçün pnevmatik tüfəng aldım. Qutulara, butulkalara, hədəflərə vururdu. Bilirəm ki, bu silahın sürəti maksimum 500 fut/s idi. Çünki bu Kanadanın qanunudur. Daha güclü hava tüfəngi var, ancaq lisenziyanız olmalıdır və Walmart -da bunları ala bilməzsiniz.

İndi bu lisenziyaya sahib idim, yenisini ala bilərdim. Ancaq qısa hekayə, eyni silah ABŞ -da 1000 fut/s -də mövcud idi. NƏ!? Eyni silah? bəli … Kanadada vuruşun bir dəliyi var və yay daha yumşaqdır.

Ediləcək ilk şey çuxuru doldurmaqdır. Lehimlə etdiyim budur. Növbəti iş, dəyişdirmə yayı sifariş etmək idi. Amma gözləyin … yeni oyuncağımın indiki sürəti nədir? Bahar həqiqətən lazımdırmı? Bilmirəm və bilmək istəyirəm. İndi bilmək istəyirəm amma necə?

Ona görə də bu layihəni etdim. Mənə lazım olan tək şey 2 sensor, bir uC və bir ekran idi və biz işdəyik.

Keçən həftə köhnə mavi xronoqrafımı bir rəfdə gördüm və öz -özümə danışıram: "Niyə bunu paylaşmırsan və onunla təlimat vermirsən?" Yeri gəlmişkən, dəqiqliyi artıra və batareya göstəricisi əlavə edə bilərik. Açmaq/söndürmək üçün 2 yerinə 1 düymə qoyun. Bütün səth montajı. İndi 2020 -ci ildəyik!

İşdə var … başlayaq!

Addım 1: Xüsusiyyət

-Pellet sürəti

-Sürət

-20 mhz işləyir, böyük dəqiqlik

-Avtomatik söndürmə

-Batareya gərginliyi göstərilir

-sxematik mövcuddur

-pcb mövcuddur

-hissələrin siyahısı mövcuddur

-STL mövcuddur

-C kodu mövcuddur

Addım 2: Əməliyyat və Dəqiqlik nəzəriyyəsi

-20Mhz -də işləyən bir uC var. İstifadə olunan osilatör TCX0 +-2.5 ppm-dir

-Bir -birimizdən 3 düym aralıda 2 sensorumuz var.

-Mərmi ilk sensora dəydi. uC saymağa başlayın (timer1)

-Mərmi ikinci sensora dəydi. uC saymağı dayandırın.

-UC timer1 dəyərini yoxlayın, riyazi və ekran sürətini və sürətini edin.

16 bit timer1 + daşma bayrağı tov1 istifadə edirəm. Tam saymaq üçün 131071 "tic" üçün 17 bit cəmi.

1/20 mhz = 50 ns Hər tik 50ns -dir

3 düym etmək üçün 131071 x 50 ns = 6.55355 ms.

12 düym etmək üçün 6.55355 ms x 4 = 26.21 ms.

1/26.21 ms = 38.1472637 fut/s

Bu cihazın ölçə biləcəyi ən yavaş sürətdir.

Niyə 20 mhz? Niyə daxili 8 mhz və ya hətta bir kristal istifadə etmirsiniz?

İlk cihazım daxili osilatördən istifadə etdi. İşləyirdi amma bu kifayət qədər dəqiq deyildi. Variant çox böyükdür. Kristal daha yaxşıdır, amma temperatur tezliyi dəyişir. Bununla dəqiq bir ölçü cihazı edə bilmərik. Ayrıca, tezlik nə qədər yüksəkdirsə, eyni sürət üçün daha çox tic sayılacaq. Nümunə götürmə çox yaxşı bir dəqiqliyə sahib olmaq üçün daha yaxşı olacaq. Bir tic bölünməz olduğundan, vəzifə dövrü sürətli olarsa itki azdır.

20 MHz -də 50 ns addımlarımız var. 38 ft/s sürətində bir mərmi üçün 50 ns nə qədər dəqiq olduğunu bilirikmi?

38.1472637 ft/s 131071 = 0, 000291042 fut ilə bölün

0, 0003880569939956207 fut x 12 = 0, 003492512 düym

1/0, 003492512 = 286.37 ". Başqa sözlə. 50 ft/s-də +- 1/286" və ya +- 0, 003492512 düym dəqiqliyə sahibik

Ancaq osilatörüm ən pisdirsə və 20 mhz +2.5 ppm -də işləyirsə yaxşıdır? Gəlin öyrənək…

20 000 000 -un 2.5 ppm: (20000000/1000000) x 2.5 = 20000050 Hz

Ən pis vəziyyət ssenarisində 20 mhz -də 50 daha çox saat var. 1 saniyədə 50 saatdır. Pelet eyni sürətlə hərəkət edirsə (38.1472637 fut/s və ya 6.55ms) timer1 -də neçə tic daha çoxdur?

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 fut/s

Beləliklə, 38.1472637 fut/s yerinə 38.14735907 fut/s var

İndi bilirik ki, 2.5 ppm nəticəyə təsir etmir.

Budur fərqli sürət nümunələri

1000 fut/s üçün

1000 ft/s x 12 12000 düym/s -dir

12000 "3 etmək üçün neçə dəfə" üçün 1 saniyə? 3x1/12000 = 250 ABŞ saniyəsi

250 us / 50 ns = 5000 tic.

Timer1 5000 -də olacaq

uC riyazi hesab və 1000 ft/s göstərilir. İndiyə qədər çox yaxşıdır

900 fut/s üçün

900 ft/s 10800 /s -dir

3x1/10800 = 277.77 bizi

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

Taymer 1 5555 -də olacaq

uC math və 900, 09 əvəzinə 900 göstəriləcək

Niyə? çünki timer 1 5555 -dədir və 0, 5555 itirilir. Tic on timer bölünməzdir.

900 ft/s -də 0, 09 səhvimiz var

0, 09/900x100 = 0, 01% səhv

1500 ft/s üçün 1500 ft/s 18000 /s 3x1/10800 = 166.66 bizi

166.66 us / 50 ns = 3333.333 tic Timer 1 3333 -də olacaq

uC riyazi işlə məşğul olur və 1500.15 əvəzinə 1500 göstərilir.15/1500x100 = 0, 01%

9000 ft/s üçün

9000 x 12 = 180000 düym / s

3x1/180000 = 27.7777 bizi

27.77 us / 50 ns = 555, 555

Timer1 555 -də olacaq və 4/(1/555x50ns) 9009, 00 göstəriləcək

Burada səhv 9000 = 0, 1% -də 9 fut/s -dir

Gördüyünüz kimi sürət daha yüksək olduqda % səhv artır. Ancaq qalın <0.1%

Bu nəticələr çox yaxşıdır.

Ancaq dəqiqlik xətti deyil. 10000 ft/s -də 0, 1 %-dir. Yaxşı bir şey, 10.000 fut/s pelleti heç vaxt sınamamağımızdır.

Yadda saxlamaq lazım olan başqa bir şey. Bir kəsmə baş verdikdə, uC fasiləyə girmədən əvvəl həmişə son təlimatı bitirir. Bu normaldır və bütün uC bunu edir. Arduino kodunu C və ya hətta assemblerdə yazsanız. Çox vaxt əbədi bir döngədə gözləyəcəksiniz … gözləmək. Problem ondadır ki, bir döngədə 2 dövr keçiririk. Normalda bu vacib deyil. Ancaq bizim vəziyyətimizdə. Bəli, hər tik vacibdir. Sonsuz bir döngəyə baxaq:

montajçı:

döngə:

rjmp döngəsi

C dilində:

zamanı (1) {}

Əslində C tərtibçisi rjmp təlimatından istifadə edir. RJMP 2 dövrədən ibarətdir.

Bu o deməkdir ki, fasilə birinci dövrəyə təsadüf edərsə, bir dövrəni (tic) (50ns) itiririk.

Bunu düzəltməyin yolu, döngəyə bir çox nop təlimatı əlavə etməkdir. NOP 1 dövrdür.

döngə:

yox

yox

yox

yox

yox

rjmp döngəsi

Əgər kəsmə nop göstərişi ilə baş verərsə. Biz yaxşıyıq Bu rjmp təlimatının ikinci dövrəsində baş verərsə, biz yaxşıyıq. Ancaq bu rjmp təlimatının ilk dövrəsində baş verərsə, bir tic itirəcəyik. Bəli, bu yalnız 50 nsdir, ancaq yuxarıda gördüyünüz kimi 3 düymlük 50 ns heç bir şey deyil. Bunu proqram təminatı ilə düzəldə bilmərik, çünki kəsilmənin tam olaraq nə vaxt baş verdiyini bilmirik. Bu səbəbdən kodda çoxlu nop təlimatı görəcəksiniz. İndi əminəm ki, fasilə nop təlimatına düşəcək. 2000 nop əlavə etsəm, rjmp təlimatına düşmək üçün 0, 05% var.

Yadda saxlamaq lazım olan başqa bir şey. Fasilə baş verəndə. Tərtibçi bir çox itələmə və çəkmə edir. Amma həmişə eyni rəqəmdir. Beləliklə, indi bir proqram korreksiyası edə bilərik.

Bu barədə yekunlaşdırmaq üçün:

1000 fut/s ortalama bir pellet üçün dəqiqlik 0, 01% -dir

Bazarda digər 1% -dən 100 dəfə daha dəqiqdir. Tezlik daha yüksəkdir və TCXO ilə daha dəqiqdir

Məsələn, 1000 ft/s -nin 1% -i 10 ft/s -ə bərabərdir. Çox böyük fərqdir.

Addım 3: Şematik və Parça siyahısı

Şematik və Parça siyahısı
Şematik və Parça siyahısı

Burada bir düyməni açma/söndürmə sxemimi tətbiq etdim. (son təlimatıma baxın) Bu sxem çox lazımlıdır və çox yaxşı işləyir.

Mən atmega328p istifadə edirəm. Bu proqram C dilində proqramlaşdırılmışdır.

Ekran, HD44780 lcd formatlı standart 2 sətirdir. 4 bit rejimi istifadə olunur.

TCXO 20mhz -ə gərginlik vermək üçün 3.3v tənzimləyici istifadə olunur.

D1 lcd arxa işıq üçündür. İsteğe bağlı. D1 quraşdırmasanız batareya daha uzun müddət işləyəcək.

Bütün rezistorlar və qapaqlar 0805 paketdir

C1.1uf 25v

C2 1uf 16v

C3 2.2uf 10v

C4.1uf

C5.1uf

C6.1uf

C7 1 uf

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

Ekran 2 xətt HD44780. İ2c modulunu almağa ehtiyac yoxdur.

Sensorlar:

2x yayıcı OP140A

2x Alıcı OPL530

Kodlayıcı: PEC11R-4215K-S0024 *Enkoder filtrini etmək üçün 4x 10k rezistor və 2x.01uf əlavə etməyi unutmayın. aşağıdakı şəkilə baxın

Addım 4: PCB Gerber Fayl

PCB Gerber Fayl
PCB Gerber Fayl
PCB Gerber Fayl
PCB Gerber Fayl
PCB Gerber Fayl
PCB Gerber Fayl
PCB Gerber Fayl
PCB Gerber Fayl

Burada gerber faylları var

Addım 5: PC -ni lehimləyin

Kompüterinizi Lehimləyin
Kompüterinizi Lehimləyin
Kompüterinizi Lehimləyin
Kompüterinizi Lehimləyin
Kompüterinizi Lehimləyin
Kompüterinizi Lehimləyin

Şematik yardımla, bütün komponentlərinizi PCB -də lehimləyin. Hər bir hissə və ya pcb, r1, r2… və s.

D1 quraşdırmamışam. Bu LCD arxa işıq üçün. Gözəldir, amma batareyanın ömrü təsirlənir. Buna görə də LCD arxa işığı söndürməyi seçirəm.

Addım 6: Atmega328p proqramlaşdırılması

Atmega328p proqramlaşdırılması
Atmega328p proqramlaşdırılması

Atmega328p proqramlaşdırmaq üçün 12 -ci addımda bura baxın. Bunun üçün.hex faylını təqdim edirəm.

Budur, toplu iş faylını proqramlaşdırmağa hazır olan avrdude proqramı. Yalnız usbasp.bat proqramına vurun və usbasp düzgün qurulub. Sigorta biti də daxil olmaqla hər şey avtomatik olaraq ediləcək.

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

Bu layihədə C mənbə kodunu da paylaşıram. Unutmayın ki, oradakı bəzi qeydlər fransız dilində ola bilər. Https: //1drv.ms/u/s! AnKLPDy3pII_vXUMXHdxajwGRFJx? E…

Addım 7: Lcd Ekran

Lcd Ekran
Lcd Ekran
Lcd Ekran
Lcd Ekran

Bir az lent quraşdırın və pcb və lcd -ni bir yerə bağlayın

Addım 8: STL Fayl

STL faylı
STL faylı
STL faylı
STL faylı
STL faylı
STL faylı

stl faylı

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

Korpus, sensor borusu və tüfəng tutacağı üçün dəstək lazımdır.

Hamısı.2 mm yüksəklikdə çap etdim.

Addım 9: ROTARY ENCODER

DÖNGÜLÜ ENKODER
DÖNGÜLÜ ENKODER
DÖNGÜLÜ ENKODER
DÖNGÜLÜ ENKODER
DÖNGÜLÜ ENKODER
DÖNGÜLÜ ENKODER

Bu fırlanan kodlayıcı isp bağlayıcısına bağlıdır. pelet ağırlığını dəyişdirmək və cihazı açmaq və söndürmək üçün istifadə olunur.

vcc isp pin 2 (müqavimət çəkin)

Terminal A (sarı) ISP pin 1 -ə gedin

Terminal B (yaşıl) ISP pin 3 -ə gedin

Terminal C (gnd) isp pin 6

Süzgəcin olması ilə filtrsiz olması arasındakı fərqi görmək üçün 2 şəkil əlavə edirəm. Hər ikisinin fərqini asanlıqla görə bilərsiniz.

Düymə pcb SW konnektoruna gedir.

Addım 10: Sensor Borusu

Sensor borusu
Sensor borusu
Sensor borusu
Sensor borusu
Sensor borusu
Sensor borusu

Vacib:

Sensor borusu Qara və sensor qəbuledicisi gizlənməlidir

İlk cəhdlərim gözəl bir qırmızı boruya sahib olmaq idi. Ancaq bu çətindir! Qətiyyən işləmirdi. Çöldən işığın gəldiyini anladım və plastik sensoru həmişə açıq idi.

Yaxşı nəticə əldə etmək üçün rəngi qara rəngə dəyişmək seçimim yox idi.

Alıcını yuxarıya quraşdırın. Şəffaf plastiki qara boya, lent və ya saqqız, qara silikonla gizləyin.

Emitteri aşağıya quraşdırın. Sensorların yaxşı cavab verdiyini qələmlə yoxlayın. Yəqin ki, emitentin çuxurunu bir az da genişləndirmək lazımdır. printerinizin kalibrindən asılı olacaq.

Kölgədə daha yaxşı nəticə əldə etdim. Birbaşa günəş işığından çəkinin.

Addım 11: Sensor Boru Alternativi

Sensor Boru Alternativi
Sensor Boru Alternativi
Sensor Boru Alternativi
Sensor Boru Alternativi

3d printeriniz yoxdursa, mis boru ilə də eyni şeyi edə bilərsiniz. Çox yaxşı işləyəcək. Çətin bir şey, tam 3 düymlük bir çuxurdur və alıcı və emitör hizalanmalıdır.

Addım 12: Osiloskop və Kalibrləmə üzrə Pelet

Osiloskop və Kalibrləmə üzrə Pelet
Osiloskop və Kalibrləmə üzrə Pelet

Bu, borudan atılan əsl bir pelletdir. Prob 1 sarı sensor 1 -dir. 2 bənövşəyi sensor 2 -dir.

Zaman/div 50 bizə bərabərdir.

50 -nin 6 hissəsini saya bilərik. 50 us x 6 = 300 us (3 düym üçün). 1 ayaq üçün 300 us x 4 = 1,2 ms

1/1.2ms = 833.33 ft/s

Sensorun normal olaraq 5v -də olduğunu da görə bilərik. Və yayıcı işığı blok edə bilərik, sensor 0 -a düşür.

UC -nin işini başlamaq və dayandırmaq yolu budur (timer1)

Sürətin dəqiq olub olmadığını dəqiq bilmək üçün bunu ölçmək üçün bir yola ehtiyacım var idi.

Proqramın kalibrlənməsi və bu cihazın düzgünlüyünü yoxlamaq üçün 10 mhz istinad osilatorundan istifadə etdim. GPSDO -ya digər təlimatlarda baxın.

Bu 10 mhz ilə başqa bir atmega328 bəsləyirəm. Və bir qranul simulyasiya etmək üçün bir düyməyə hər basdığımda 2 puls göndərmək üçün bunu montajçıya proqramlaşdırın. Şəkildə gördüyümüz kimi, amma əsl bir pelletə sahib olmaq, mənə 2 paxlalı göndərən başqa bir UC idi.

Hər dəfə düyməyə basıldığında 1 nəbz göndərilir və başqa bir nəbz göndərildikdən tam 4 ms sonra.

Bu şəkildə, proqram tərtibçisini hər zaman 1000 ft/s göstərə bilmək üçün tarazlaşdıra bilərəm.

Addım 13: Daha çox…

Daha çox…
Daha çox…
Daha çox…
Daha çox…

Bu, 2010 -cu ilin ilk prototipimdir.

Hər hansı bir sualınız və ya səhv hesabatı üçün mənə e -poçt göndərə bilərsiniz. İngilis və ya fransız. Kömək etmək üçün əlimdən gələni edəcəyəm.

Tövsiyə: