Mündəricat:
- Addım 1: Xüsusiyyət
- Addım 2: Əməliyyat və Dəqiqlik nəzəriyyəsi
- Addım 3: Şematik və Parça siyahısı
- Addım 4: PCB Gerber Fayl
- Addım 5: PC -ni lehimləyin
- Addım 6: Atmega328p proqramlaşdırılması
- Addım 7: Lcd Ekran
- Addım 8: STL Fayl
- Addım 9: ROTARY ENCODER
- Addım 10: Sensor Borusu
- Addım 11: Sensor Boru Alternativi
- Addım 12: Osiloskop və Kalibrləmə üzrə Pelet
- Addım 13: Daha çox…
Video: Hava tüfəngli xronoqraf, xronoskop. 3D Çap: 13 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:44
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ı
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
Burada gerber faylları var
Addım 5: PC -ni 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ı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
Bir az lent quraşdırın və pcb və lcd -ni bir yerə bağlayın
Addım 8: 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
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
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
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
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…
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ə:
Hava - Əsl Mobil Hava Gitara (Prototip): 7 Addım (Şəkillərlə)
Hava - Əsl Mobil Hava Gitara (Prototip): Tamam, bu, nəhayət mənim uşaqlıq arzuma yaxınlaşmağın ilk hissəsi haqqında həqiqətən qısa bir təlimat olacaq. Kiçik bir oğlan ikən həmişə sevdiyim sənətçilərin və qrupların qüsursuz gitara çalmasını seyr edirdim. Böyüdükcə, mən
NaTaLia Hava İstasyonu: Arduino Günəş Enerjili Hava İstasyonu Düzgün Edildi: 8 Addım (Şəkillərlə)
NaTaLia Hava İstasyonu: Arduino Günəş Enerjili Hava İstasyonu Düzgün Edildi: 2 fərqli yerdə 1 illik uğurlu əməliyyatdan sonra günəş enerjisi ilə işləyən hava stansiyası layihə planlarımı paylaşıram və uzun müddət ərzində həqiqətən də sağ qala biləcək bir sistemə necə çevrildiyini izah edirəm. günəş enerjisindən dövrlər. Təqib etsəniz
Hava Kirliliği Algılama + Hava Filtrasiyası: 4 Addım
Hava Çirkliliyinin Algılanması + Hava Süzgəci: Almaniya İsveçrə Beynəlxalq Məktəbinin şagirdləri (Aristobulus Lam, Victor Sim, Nathan Rosenzweig və Declan Loges) MakerBay heyəti ilə birlikdə hava çirkliliyinin ölçülməsi və hava filtrasiya səmərəliliyinin vahid sistemini hazırlamaq üçün çalışdılar. Bu
HRV (Ev Hava Dəyişdiricisi) Arduino Hava Ekonomizatoru: 7 Addım (Şəkillərlə)
HRV (Ev Hava Mübadiləçisi) Arduino Hava Ekonomizatoru: Hava Ekonomizerli HRV Arduino Nəzarətçisi Beləliklə, bu layihə ilə mənim tarixim Minnesotada yaşayıram və elektron kartım LifeBreath 155Max HRV -də qızardılır. Yenisi üçün 200 dollar ödəmək istəmirdim, həmişə hava qənaət edən günahı olan bir şey istəyirdim
Hava Şamı - Bir baxışda hava və temperatur: 8 addım
Hava Şamı - Bir baxışda Hava və Temperatur: Bu sehrli şamdan istifadə edərək, xaricdəki mövcud temperatur və şərtləri anında deyə bilərsiniz