Spisu treści:

Chronograf karabinu pneumatycznego, chronoskop. Druk 3D: 13 kroków
Chronograf karabinu pneumatycznego, chronoskop. Druk 3D: 13 kroków

Wideo: Chronograf karabinu pneumatycznego, chronoskop. Druk 3D: 13 kroków

Wideo: Chronograf karabinu pneumatycznego, chronoskop. Druk 3D: 13 kroków
Wideo: Компрессор воздуха высокого давления Rossi для пневматических винтовок PCP 2024, Listopad
Anonim
Image
Image
Funkcja
Funkcja

Cześć wszystkim, dzisiaj powrócimy do projektu, który wykonałem w 2010 roku. Chronograf karabinu pneumatycznego. To urządzenie powie ci prędkość pocisku. Pellet, BB lub nawet miękka plastikowa kulka BB.

W 2010 roku dla zabawy kupiłem wiatrówkę. Uderzał w puszki, butelki, celował. Wiem, że prędkość tego działa wynosiła maksymalnie 500 stóp/s. Ponieważ takie jest prawo kanadyjskie. Dostępne są mocniejsze wiatrówki, ale musisz mieć licencję i nie możesz ich kupić w Walmart.

Teraz miałem tę licencję, mogłem kupić kolejną. Krótko mówiąc, ta sama broń była dostępna w USA z prędkością 1000 stóp/s. CO!? Ten sam pistolet ? tak… W Kanadzie uderzenie ma dziurę, a sprężyna jest bardziej miękka.

Pierwszą rzeczą do zrobienia jest wypełnienie dziury. To właśnie zrobiłem z lutem. Następną rzeczą do zrobienia było zamówienie sprężyny zastępczej. Ale czekaj… jaka jest obecna prędkość mojej nowej zabawki? Czy wiosna jest naprawdę potrzebna? Nie wiem i chcę wiedzieć. Chcę wiedzieć teraz, ale jak?

Dlatego zrobiłem ten projekt. Wszystko, czego potrzebowałem, to 2 czujniki, uC i wyświetlacz i jesteśmy w biznesie.

W zeszłym tygodniu zobaczyłem mój stary niebieski chronograf na półce i mówię do siebie: „Dlaczego się tym nie podzielisz i nie zrobisz z nim instrukcji?” A tak przy okazji, moglibyśmy zwiększyć dokładność i dodać wskaźnik baterii. Umieść 1 przycisk zamiast 2, aby włączyć/wyłączyć. Wszystko do montażu powierzchniowego. Jesteśmy teraz w 2020 roku!

A więc jest… zacznijmy!

Krok 1: funkcja

-Prędkość pelletu

-Prędkość

-20 mhz działa, ogromna dokładność

-Autowyłączanie

-Wyświetlane napięcie akumulatora

-dostępny schemat

-płyta dostępna

-Dostępna lista części

-Dostępne STL

-Dostępny kod C

Krok 2: Teoria działania i dokładności

- Mamy uC działający na 20 MHz. Zastosowany oscylator to TCX0 +-2,5 ppm

-Mamy 2 czujniki oddalone od siebie o 3 cale.

- Pocisk trafił w pierwszy czujnik. uC rozpocząć liczenie (timer1)

- Pocisk trafił w drugi czujnik. uC przestań liczyć.

-uC sprawdź wartość timera1, wykonaj obliczenia i wyświetl prędkość i prędkość.

Używam 16-bitowego timera1 + flaga przepełnienia tov1. Łącznie 17 bitów dla 131071 „tic” dla pełnej liczby.

1/20 MHz = 50 ns. Każdy tik to 50ns

131071 x 50 ns = 6,55355 ms, aby zrobić 3 cale.

6,55355 ms x 4 = 26,21 ms do wykonania 12 cali.

1/26.21 ms = 38.1472637 stóp/s

Jest to najwolniejsza prędkość, jaką urządzenie może zmierzyć.

Dlaczego 20 MHz? Dlaczego nie używać wewnętrznego 8 MHz lub nawet kryształu?

Moje pierwsze urządzenie korzystało z wewnętrznego oscylatora. Działał, ale ten nie był wystarczająco dokładny. Zróżnicowanie jest zbyt duże. Kryształ jest lepszy, ale temperatura ma różną częstotliwość. Nie możemy z tym zrobić dokładnego urządzenia pomiarowego. Ponadto im większa częstotliwość, tym więcej tików będzie liczonych dla tej samej prędkości. Próbkowanie będzie lepsze, aby mieć bardzo dobrą dokładność. Ponieważ tik nie jest podzielny, strata jest niewielka, jeśli cykl pracy jest szybki.

Przy 20 MHz mamy kroki co 50 ns. Czy wiemy, jaka jest dokładność 50 ns dla pocisku przy 38 ft/s.

38,1472637 stóp/s podzielić przez 131071 = 0,000291042 stóp

0,0003880569939956207 stóp x 12 = 0,003492512 cali

1/0, 003492512 = 286,37". Innymi słowy. Przy 50 ft/s mamy dokładność +- 1/286" lub +- 0, 003492512 cali

Ale jeśli mój oscylator jest najgorszy i działa z prędkością 20 mhz + 2,5 ppm to jest ok ? Dowiedzmy Się…

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

W najgorszym przypadku mamy 50 zegarów więcej na 20 MHz. To 50 zegar na 1 sekundę. Ile więcej tików na timerze1, jeśli śrut porusza się z tą samą prędkością (38,1472637 stóp/s lub 6,55ms)?

1/200050 = 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 stóp/s

Mamy więc 38.14735907 stóp/s zamiast 38.1472637 stóp/s

Teraz wiemy, że 2,5 ppm nie wpływa na wynik.

Oto kilka przykładów różnych prędkości

Dla 1000 stóp/s

1000 stóp/s x 12 to 12000 cali/s

1 sekunda na 12000" ile czasu zrobić 3" ? 3x1/12000 = 250 us sekund

250 us / 50 ns = 5000 tik.

Timer1 będzie na 5000

uC wykonaj matematykę i wyświetli się 1000 ft/s. Jak na razie dobrze

Dla 900 stóp/s

900 ft/s to 10800 /s

3x1/10800 = 277,77 nas

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

Zegar 1 będzie na 5555

uC zrób matematykę, a 900, 09 zostanie wyświetlony zamiast 900

Czemu ? ponieważ zegar 1 ma wartość 5555, a 0, 5555 jest stracone. Tic na zegarze nie można podzielić.

Mamy błąd 0, 09 na 900 ft/s

0, 09/900x100 = 0, 01% tylko błąd

Dla 1500 ft/s 1500 ft/s to 18000 /s 3x1/10800 = 166,66 us

166,66 us / 50 ns = 3333,333 tik Timer 1 będzie na 3333

uC zrób matematykę, a zamiast 1500 wyświetli się 1500,15 to.15/1500x100= 0, 01%

Dla 9000 stóp/s

9000 x 12 = 180000 cali / s

3x1/180000 = 27,7777 nas

27,77 nas / 50 ns = 555, 555

Timer1 będzie ustawiony na 555 i 4/(1/555x50ns) zostanie wyświetlony 9009, zostanie wyświetlony 00

Tutaj błąd wynosi 9 stóp/s na 9000 = 0, 1%

Jak widać błąd % rośnie, gdy prędkość jest wyższa. Ale pozostań < 0,1%

To bardzo dobre wyniki.

Ale dokładność nie jest liniowa. Przy 10000 ft/s jest to 0, 1%. Dobra nowość jest taka, że nigdy nie testujemy śrutu o prędkości 10 000 ft/s.

Kolejna rzecz, o której należy pamiętać. Gdy wystąpi przerwanie, uC zawsze kończy ostatnią instrukcję przed wejściem w przerwanie. Jest to normalne i wszystkie uC to robią. Jeśli kodujesz arduino, w C lub nawet asemblerze. Przez większość czasu będziesz czekać w nieskończonej pętli… czekać. Problem w tym, że w pętli spędzamy 2 cykle. Zwykle to nie jest ważne. Ale w naszym przypadku. TAK, każdy tik jest ważny. Spójrzmy na nieskończoną pętlę:

monter:

pętla:

pętla rjmp

W C:

podczas gdy (1){}

W rzeczywistości kompilator C używa instrukcji rjmp. RJMP to 2 cykle.

Oznacza to, że jeśli przerwanie nastąpi w pierwszym cyklu, tracimy jeden cykl(tic) (50ns).

Moim sposobem, aby to naprawić, jest dodanie wielu instrukcji nop w pętli. NOP to 1 cykl.

pętla:

nop

nop

nop

nop

nop

pętla rjmp

Jeśli przerwanie nastąpi w instrukcji nop. Jesteśmy OK. Jeśli zdarzy się to w drugim cyklu instrukcji rjmp, wszystko jest w porządku. Ale jeśli zdarzy się to w pierwszym cyklu instrukcji rjmp, stracimy jeden tik. Tak, to tylko 50 ns, ale jak widać powyżej, 50 ns na 3 cale to nic. Nie możemy tego poprawić programowo, ponieważ nie wiemy, kiedy dokładnie nastąpi przerwanie. Dlatego w kodzie zobaczysz dużo instrukcji nop. Teraz jestem prawie pewien, że przerwanie padnie na instrukcję nop. Jeśli dodam 2000 nop, mam 0, 05%, aby spaść na instrukcję rjmp.

Kolejna rzecz, o której należy pamiętać. Kiedy zdarzy się przerwa. Kompilator robi wiele push i pull. Ale to zawsze ta sama liczba. Więc teraz możemy dokonać korekty oprogramowania.

Podsumowując:

Dokładność dla średniej wielkości śrutu 1000 ft/s wynosi 0,01%

100x dokładniejsze niż inne 1% na rynku. Częstotliwość jest wyższa, a dzięki TCXO dokładniejsza

Na przykład 1% z 1000 ft/s to mniej więcej 10 ft/s. To ogromna różnica.

Krok 3: Schemat i lista części

Schemat i lista części
Schemat i lista części

Tutaj zaimplementowałem mój obwód włączania / wyłączania jednego przycisku. (patrz moja ostatnia instrukcja) Ten obwód jest bardzo poręczny i działa bardzo dobrze.

Używam atmega328p. Ten jest zaprogramowany w C.

Wyświetlacz jest zgodny ze standardowym 2 liniami lcd HD44780. Używany jest tryb 4-bitowy.

Do dostarczania napięcia do TCXO 20mhz służy regulator 3.3v.

D1 służy do podświetlenia lcd. Opcjonalny. Bateria będzie działać dłużej, jeśli nie zainstalujesz D1.

Wszystkie rezystory i czapki są w opakowaniu 0805

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

Wyświetlacz LCD 2-liniowy HD44780. Nie ma potrzeby kupowania modułu i2c.

Czujniki:

2x emiter OP140A

2x odbiornik OPL530

Enkoder: PEC11R-4215K-S0024 *Nie zapomnij dodać 4x 10k rezystorów i 2x.01uf, aby zrobić filtr enkodera. patrz zdjęcie poniżej

Krok 4: Plik Gerber PCB

Plik Gerber PCB
Plik Gerber PCB
Plik Gerber PCB
Plik Gerber PCB
Plik Gerber PCB
Plik Gerber PCB
Plik Gerber PCB
Plik Gerber PCB

Oto pliki gerber

Krok 5: Przylutuj swoją płytkę drukowaną

Przylutuj swoją płytkę drukowaną
Przylutuj swoją płytkę drukowaną
Przylutuj swoją płytkę drukowaną
Przylutuj swoją płytkę drukowaną
Przylutuj swoją płytkę drukowaną
Przylutuj swoją płytkę drukowaną

Za pomocą schematu przylutuj wszystkie komponenty do płytki drukowanej. Każda część lub napisana na pcb, r1, r2… i tak dalej.

Nie mam zainstalowanego D1. To jest dla podświetlenia lcd. Jest piękny, ale ma to wpływ na żywotność baterii. Więc zdecydowałem się wyłączyć podświetlenie lcd.

Krok 6: Programowanie Atmega328p

Programowanie Atmega328p
Programowanie Atmega328p

Sprawdź tutaj w kroku 12, aby zaprogramować atmega328p. Podaję tutaj plik.hex do tego.

Oto program avrdude gotowy do zaprogramowania pliku wsadowego. Wystarczy kliknąć na program usbasp.bat i twój usbasp zainstaluje się poprawnie. Wszystko zostanie wykonane automatycznie, łącznie z bitem bezpiecznika.

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

W tym projekcie udostępniam również kod źródłowy C. Pamiętaj, że niektóre notatki mogą być w języku francuskim.https://1drv.ms/u/s!AnKLPDy3pII_vXUMXHdxajwGRFJx?e…

Krok 7: Wyświetlacz LCD

Wyświetlacz LCD
Wyświetlacz LCD
Wyświetlacz LCD
Wyświetlacz LCD

Zainstaluj taśmę i połącz ze sobą pcb i lcd

Krok 8: Plik STL

Plik STL
Plik STL
Plik STL
Plik STL
Plik STL
Plik STL

plik stl

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

Potrzebne jest wsparcie dla obudowy, rurki czujnika i uchwytu karabinu.

Wszystkie wydrukowałem na wysokości 0,2 mm.

Krok 9: KODER OBROTOWY

KODER OBROTOWY
KODER OBROTOWY
KODER OBROTOWY
KODER OBROTOWY
KODER OBROTOWY
KODER OBROTOWY

Ten enkoder obrotowy jest podłączony do złącza isp. służy do zmiany wagi pelletu oraz do włączania i wyłączania urządzenia.

vcc isp pin 2 (rezystor podciągający)

Terminal A (żółty) przejdź do pinu 1 ISP

Terminal B (zielony) idź do pinu 3 ISP

Terminal C (gnd) isp pin 6

Dodaję 2 zdjęcia, aby zobaczyć różnicę między posiadaniem filtra a brakiem filtra. Widać łatwo różnicę między nimi.

Przycisk przejść do złącza SW PCB.

Krok 10: Rurka czujnika

Rura czujnika
Rura czujnika
Rura czujnika
Rura czujnika
Rura czujnika
Rura czujnika

WAŻNY:

Rurka czujnika musi być czarna, a odbiornik czujnika musi być ukryty

Moje pierwsze próby polegały na posiadaniu pięknej czerwonej fajki. Ale to jest trudne! To w ogóle nie działało. Zorientowałem się, że światło zewnętrzne wpadało, a czujnik plastiku i odbiornika był zawsze włączony.

Aby uzyskać dobry wynik, nie miałem wyboru, aby zmienić kolor na czarny.

Zainstaluj odbiornik na górze. I ukryj przezroczysty plastik czarną farbą, taśmą lub gumą, czarnym silikonem.

Zainstaluj emiter na spodzie. Sprawdź długopisem, czy czujniki działają prawidłowo. Może trzeba będzie trochę powiększyć otwór emitera. będzie to zależeć od kalibracji drukarki.

Lepszy wynik mam też w cieniu. Unikaj bezpośredniego światła słonecznego.

Krok 11: Alternatywa dla rury czujnika

Alternatywa dla rurki czujnika
Alternatywa dla rurki czujnika
Alternatywa dla rurki czujnika
Alternatywa dla rurki czujnika

Jeśli nie masz drukarki 3D, możesz zrobić to samo z rurą miedzianą. Będzie działać bardzo dobrze. Trudną rzeczą do zrobienia jest otwór dokładnie 3 cale, a odbiornik i nadajnik muszą być ustawione w jednej linii.

Krok 12: Pellet na oscyloskopie i kalibracja

Pellet na oscyloskopie i kalibracja
Pellet na oscyloskopie i kalibracja

To prawdziwy śrut przechodzący przez rurę. Sonda 1 żółta to czujnik 1. Sonda 2 fioletowa to czujnik 2.

Czas na działkę to 50 nas.

Możemy liczyć 6 dywizji po 50us. 50 us x 6 = 300 us (dla 3 cali). 300 us x 4 = 1,2 ms na 1 stopę

1/1,2 ms = 833,33 stopy/s

Widzimy również, że czujnik jest normalnie na 5v. I czy możemy zablokować światło emitera, czujnik spadnie do 0.

To sposób, w jaki uC zaczyna i zatrzymuje swój licznik (timer1)

Ale żeby dokładnie wiedzieć, czy prędkość była dokładna, potrzebowałem sposobu, aby to zmierzyć.

Aby wykonać kalibrację oprogramowania i przetestować dokładność tego urządzenia, użyłem oscylatora odniesienia 10 MHz. Zobacz moje GPSDO na innych instrukcjach.

Zasilam kolejny atmega328 tym 10 mhz. I zaprogramuj ten w asemblerze, aby wysyłał mi 2 impulsy za każdym razem, gdy naciskam przycisk, aby symulować śrut. Dokładnie tak, jak widzieliśmy na zdjęciu, ale zamiast tego, aby mieć prawdziwy pellet, był inny uC wysyłający mi 2 impulsy.

Za każdym naciśnięciem przycisku wysyłany był 1 impuls i dokładnie 4 ms po wysłaniu kolejnego impulsu.

W ten sposób jestem w stanie zrównoważyć kompilator oprogramowania, aby zawsze wyświetlał 1000 ft/s.

Krok 13: Więcej…

Więcej…
Więcej…
Więcej…
Więcej…

To mój pierwszy prototyp z 2010 roku.

Na wszelkie pytania lub raport o błędach możesz do mnie wysłać e-mail. Angielski czy francuski. Zrobię co w mojej mocy, aby pomóc.

Zalecana: