Mục lục:

Air Rifle Chronograph, Chronoscope. In 3D: 13 bước
Air Rifle Chronograph, Chronoscope. In 3D: 13 bước

Video: Air Rifle Chronograph, Chronoscope. In 3D: 13 bước

Video: Air Rifle Chronograph, Chronoscope. In 3D: 13 bước
Video: Chronys which one🤔#competitionelectonics #fx #fxairguns #fxusa #fxsweden 2024, Tháng bảy
Anonim
Image
Image
Đặc tính
Đặc tính

Xin chào tất cả các bạn, hôm nay chúng ta sẽ cùng nhau thăm lại một chiếc projet mà tôi đã thực hiện vào năm 2010. Một chiếc Air Rifle Chronograph. Thiết bị này sẽ cho bạn biết tốc độ của đường đạn. Pellet, BB hoặc thậm chí là bóng BB mềm không khí.

Năm 2010, tôi mua một khẩu súng hơi để mua vui. Đang đánh lon, chai, nhắm. Tôi biết rằng tốc độ của khẩu súng này tối đa là 500 feet / s. Bởi vì đó là luật của Canada. Một số súng trường hơi mạnh hơn có sẵn nhưng bạn cần phải có giấy phép và bạn không thể mua những thứ đó tại Walmart.

Bây giờ tôi đã có giấy phép này, tôi có thể mua một cái khác. Nhưng một câu chuyện ngắn, khẩu súng tương tự đã được cung cấp cho Hoa Kỳ với tốc độ 1000 feet / giây. CÁI GÌ!? Cùng một khẩu súng? vâng… Ở canada, đột quỵ có một lỗ trong đó và lò xo mềm hơn.

Điều đầu tiên cần làm là lấp đầy lỗ. Đó là những gì tôi đã làm với chất hàn. Điều tiếp theo cần làm là đặt mua một lò xo thay thế. Nhưng chờ đã… tốc độ hiện tại của món đồ chơi mới của tôi là bao nhiêu? Thanh xuân có thực sự cần thiết? Tôi không biết và tôi muốn biết. Tôi muốn biết bây giờ nhưng làm thế nào?

Đó là lý do tại sao tôi thực hiện dự án này. Tất cả những gì tôi cần là 2 cảm biến, một uC và một màn hình và chúng tôi đang kinh doanh.

Tuần trước, tôi nhìn thấy chiếc đồng hồ chronograph màu xanh lam cũ của mình trên kệ và tôi tự nhủ: "Tại sao không chia sẻ cái này và làm một bài có hướng dẫn với nó?" Và nhân tiện, chúng tôi có thể tăng độ chính xác và thêm chỉ báo pin. Đặt 1 nút thay vì 2 để bật / tắt. Tất cả các bề mặt gắn kết. Chúng tôi hiện đang ở năm 2020!

Vì vậy, nó là … chúng ta hãy bắt đầu!

Bước 1: Tính năng

-Tốc độ viên nén

-Vận tốc

-20 mhz đang chạy, độ chính xác lớn

-Tự động tắt

- Điện áp pin hiển thị

-schematic có sẵn

-pcb có sẵn

danh sách -parts có sẵn

-STL có sẵn

Mã -C có sẵn

Bước 2: Lý thuyết về hoạt động và độ chính xác

-Chúng tôi có một uC chạy ở 20Mhz. Bộ dao động được sử dụng là TCX0 + -2,5 ppm

-Chúng tôi có 2 cảm biến ở cách xa nhau 3 inch.

-Đạn bắn trúng cảm biến đầu tiên. uC bắt đầu đếm (timer1)

-Đạn bắn trúng cảm biến thứ hai. uC ngừng đếm.

-uC kiểm tra giá trị timer1, làm phép toán và hiển thị tốc độ và vận tốc.

Tôi đang sử dụng timer1 16 bit + cờ tràn tov1. Tổng số 17 bit cho 131071 "tic" để đếm đầy đủ.

1/20 mhz = 50 ns. Mỗi tic là 50ns

131071 x 50 ns = 6,55355 ms để làm 3 inch.

6,55355 ms x 4 = 26,21 ms để thực hiện 12 inch.

1 / 26,21 ms = 38,1472637 bộ / s

Đây là tốc độ chậm nhất mà thiết bị có thể đạt được.

Tại sao 20 mhz? Tại sao không sử dụng nội bộ 8 mhz hoặc thậm chí là một cristal?

Thiết bị đầu tiên của tôi đang sử dụng bộ dao động bên trong. Đang hoạt động nhưng cái này không đủ chính xác. Sự khác biệt là quá lớn. Một cristal tốt hơn nhưng nhiệt độ là tần số thay đổi. Chúng tôi không thể làm một thiết bị đo lường chính xác với điều đó. Ngoài ra, tần số càng cao, càng nhiều tic sẽ được tính cho cùng một tốc độ. Việc lấy mẫu sẽ tốt hơn để có độ chính xác rất tốt. Bởi vì một tic không phải là phân chia, tổn thất sẽ nhỏ nếu chu kỳ nhiệm vụ nhanh chóng.

Ở 20 MHz, chúng ta có các bước là 50 ns. Chúng ta có biết độ chính xác của một viên đạn là 50 ns với tốc độ 38 ft / s.

38.1472637 ft / s chia cho 131071 = 0, 000291042 feet

0, 0003880569939956207 feet x 12 = 0, 003492512 inch

1/0, 003492512 = 286,37 ". Nói cách khác. Ở 50 ft / s, chúng tôi có độ chính xác là + - 1/286" hoặc + - 0, 003492512 inch

Nhưng nếu bộ dao động của tôi là tồi tệ nhất và chạy ở 20 mhz + 2,5 ppm thì có ổn không? Hãy cùng tìm hiểu…

2,5 ppm của 20 000 000 là: (20000000/1000000) x 2,5 = 20000050 Hz

Vì vậy, trường hợp xấu nhất chúng ta có thêm 50 đồng hồ trên 20 mhz. Đó là 50 đồng hồ trên 1 giây. Còn bao nhiêu tic nữa trên timer1 nếu viên đang hoạt động cùng tốc độ (38.1472637 feet / s hoặc 6.55ms)?

1/20000050 = 49,999875 ns

49,999875 ns x 131071 = 6, 553533616 ms

6, 553533616 mili giây x 4 = 26.21413446 mili giây

1 / 26.21413446 ms = 38.14735907 feet / s

Vì vậy, chúng ta có 38.14735907 feet / s thay vì 38.1472637 feet / s

Bây giờ chúng ta biết rằng 2,5 ppm không ảnh hưởng đến kết quả.

Đây là một số ví dụ về tốc độ khác nhau

Đối với 1000 ft / s

1000 ft / s x 12 là 12000 inch / s

1 giây cho 12000 "bao nhiêu thời gian để làm 3"? 3x1 / 12000 = 250 chúng tôi giây

250 us / 50 ns = 5000 tic.

Timer1 sẽ ở mức 5000

uC làm phép toán và 1000 ft / s được hiển thị. Càng xa càng tốt

Đối với 900 ft / s

900 ft / s là 10800 / s

3x1 / 10800 = 277,77 chúng tôi

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

Hẹn giờ 1 sẽ là 5555

uC làm phép toán và 900, 09 sẽ được hiển thị thay vì 900

Tại sao ? bởi vì bộ định thời 1 ở 5555 và 0, 5555 bị mất. Tic trên bộ đếm thời gian không có gì khác biệt.

Chúng tôi gặp lỗi đối với 0, 09 trên 900 ft / s

0, 09 / 900x100 = 0, 01% chỉ lỗi

Đối với 1500 ft / s1500 ft / s là 18000 / s 3x1 / 10800 = 166,66 us

166,66 us / 50 ns = 3333,333 tic Timer 1 sẽ ở mức 3333

uC làm phép toán và 1500,15 sẽ được hiển thị thay vì 1500, nó là.15 / 1500x100 = 0, 01%

Đối với 9000 ft / s

9000 x 12 = 180000 inch / s

3x1 / 180000 = 27,7777 chúng tôi

27,77 us / 50 ns = 555, 555

Timer1 sẽ ở 555 và 4 / (1 / 555x50ns) sẽ được hiển thị 9009, 00 sẽ được hiển thị

Ở đây lỗi là 9 feet / s trên 9000 = 0, 1%

Như bạn có thể thấy% lỗi đang tăng lên khi tốc độ cao hơn. Nhưng ở lại <0,1%

Những kết quả đó là rất tốt.

Nhưng độ chính xác không phải là tuyến tính. Ở 10000 ft / s, nó là 0, 1%. Điều tốt mới là chúng tôi không bao giờ thử nghiệm viên nén 10, 000 ft / s.

Một điều khác cần ghi nhớ. Khi một ngắt xảy ra, uC luôn kết thúc lệnh cuối cùng trước khi nhập vào ngắt. Điều này là bình thường và tất cả các uC đều làm điều này. Nếu bạn viết mã arduino, bằng C hoặc thậm chí là trình hợp dịch. Hầu hết thời gian, bạn sẽ đợi trong một vòng lặp mãi mãi… đợi. Vấn đề là, trong một vòng lặp, chúng ta sử dụng 2 chu kỳ. Thông thường, điều này không quan trọng. Nhưng trong trường hợp của chúng tôi. CÓ, mỗi tic đều quan trọng. Hãy xem một vòng lặp vô hạn:

người lắp ráp:

vòng:

vòng lặp rjmp

Trong C:

trong khi (1) {}

Trong thực tế trình biên dịch C sử dụng lệnh rjmp. RJMP là 2 chu kỳ.

Điều đó có nghĩa là nếu sự gián đoạn xảy ra với chu kỳ đầu tiên, chúng ta sẽ mất một chu kỳ (tic) (50ns).

Cách của tôi để khắc phục điều đó là thêm nhiều lệnh nop trong vòng lặp. NOP là 1 chu kỳ.

vòng:

nop

nop

nop

nop

nop

vòng lặp rjmp

Nếu ngắt xảy ra trên một lệnh nop. Chúng tôi ổn. Nếu nó xảy ra vào chu kỳ thứ hai của lệnh rjmp thì chúng ta vẫn ổn. Nhưng nếu nó xảy ra trong chu kỳ đầu tiên của lệnh rjmp, chúng ta sẽ mất một tic. Có chỉ là 50 ns nhưng như bạn có thể thấy ở trên, 50 ns trên 3 inch không phải là không có gì. Chúng tôi không thể sửa lỗi này bằng phần mềm vì chúng tôi không biết chính xác thời điểm xảy ra ngắt. Đó là lý do tại sao trong mã, bạn sẽ thấy rất nhiều hướng dẫn nop. Bây giờ tôi khá chắc chắn rằng ngắt sẽ rơi vào một lệnh nop. Nếu tôi thêm 2000 nop, tôi có 0, 05% rơi vào lệnh rjmp.

Một điều khác cần ghi nhớ. Khi ngắt xảy ra. Trình biên dịch thực hiện nhiều thao tác đẩy và kéo. Nhưng nó luôn luôn là cùng một con số. Vì vậy, bây giờ chúng tôi có thể thực hiện sửa chữa phần mềm.

Để kết luận về điều này:

Độ chính xác của viên trung bình 1000 ft / s là 0, 01%

Chính xác hơn 100 lần so với 1% khác trên thị trường. Tần số cao hơn và với TCXO, chính xác hơn

Ví dụ, 1% của 1000 ft / s lớn hơn hoặc ít hơn 10 ft / s. Đó là một sự khác biệt rất lớn.

Bước 3: Sơ đồ và Danh sách các bộ phận

Sơ đồ và Danh sách các bộ phận
Sơ đồ và Danh sách các bộ phận

Ở đây tôi đã thực hiện một nút bật / tắt mạch của mình. (xem hướng dẫn cuối cùng của tôi) Mạch này rất tiện dụng và hoạt động rất tốt.

Tôi đang sử dụng atmega328p. Cái này được lập trình bằng C.

Màn hình là chuẩn 2 dòng LCD HD44780 tương thích. Chế độ 4 bit được sử dụng.

Bộ điều chỉnh 3.3v được sử dụng để cung cấp điện áp cho TCXO 20mhz.

D1 dành cho đèn nền LCD. Không bắt buộc. Pin sẽ lâu hơn nếu bạn không cài đặt D1.

Tất cả các điện trở và nắp là gói 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 1 triệu

R8 1 triệu

U1 MIC5317-3.3 MIC5317 SOT23-5

U2 DMG6601LVT DMG6601LVT SOT23-6

Hiển thị lcd 2 dòng HD44780. Không cần mua mô-đun i2c.

Cảm biến:

Bộ phát 2x OP140A

2x Reciever OPL530

Bộ mã hóa: PEC11R-4215K-S0024 * Đừng quên thêm điện trở 4x 10k và 2x.01uf để thực hiện bộ lọc bộ mã hóa. nhìn bức ảnh bên dưới

Bước 4: Tập tin PCB Gerber

Tệp Gerber PCB
Tệp Gerber PCB
Tệp Gerber PCB
Tệp Gerber PCB
Tệp Gerber PCB
Tệp Gerber PCB
Tệp Gerber PCB
Tệp Gerber PCB

Đây là các tệp tin về mầm non

Bước 5: Hàn Pcb của bạn

Hàn Pcb của bạn
Hàn Pcb của bạn
Hàn Pcb của bạn
Hàn Pcb của bạn
Hàn Pcb của bạn
Hàn Pcb của bạn

Với sự trợ giúp của sơ đồ, hãy hàn tất cả các thành phần của bạn trên pcb. Mỗi phần hoặc viết trên pcb, r1, r2… và như vậy.

Tôi chưa cài đặt D1. Điều này dành cho đèn nền LCD. Nó đẹp nhưng thời lượng pin bị ảnh hưởng. Vì vậy, tôi chọn tắt đèn nền LCD.

Bước 6: Lập trình Atmega328p

Lập trình Atmega328p
Lập trình Atmega328p

Kiểm tra ở đây ở bước 12 để lập trình atmega328p. Tôi cung cấp ở đây tệp.hex cho việc này.

Đây là chương trình avrdude đã sẵn sàng để lập trình tập tin hàng loạt. Chỉ nhấp vào chương trình usbasp.bat và usbasp của bạn được cài đặt chính xác. Tất cả sẽ được thực hiện tự động bao gồm cả bit cầu chì.

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

Trong dự án này, tôi cũng chia sẻ mã nguồn C. Xin lưu ý rằng một số ghi chú trong đó có thể bằng tiếng Pháp. Https://ttps: //1drv.ms/u/s! AnKLPDy3pII_vXUMXHdxajwGRFJx? E…

Bước 7: Màn hình LCD

Màn hình LCD
Màn hình LCD
Màn hình LCD
Màn hình LCD

Cài đặt một số băng và kết nối pcb và LCD với nhau

Bước 8: Tệp STL

Tệp STL
Tệp STL
Tệp STL
Tệp STL
Tệp STL
Tệp STL

tập tin stl

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

Cần hỗ trợ cho bao vây, ống cảm biến và giá đỡ súng trường.

Tôi đã in tất cả ở cao.2 mm.

Bước 9: BỘ MÔI GIỚI XOAY CHIỀU

VICODER XOAY CHIỀU
VICODER XOAY CHIỀU
MÔI TRƯỜNG XOAY CHIỀU
MÔI TRƯỜNG XOAY CHIỀU
MÔI TRƯỜNG XOAY CHIỀU
MÔI TRƯỜNG XOAY CHIỀU

Bộ mã hóa quay này được kết nối với đầu nối isp. nó được sử dụng để thay đổi trọng lượng viên và để bật và tắt thiết bị.

vcc isp pin 2 (kéo điện trở lên)

Đầu cuối A (màu vàng) đi tới chân ISP 1

Đầu cuối B (màu xanh lá cây) đi đến ISP pin 3

Đầu cuối C (gnd) isp pin 6

Tôi đang thêm 2 hình ảnh để xem sự khác biệt giữa có bộ lọc và không có bộ lọc. Bạn có thể dễ dàng nhận thấy sự khác biệt giữa cả hai.

Nút nhấn đi đến đầu nối pcb SW.

Bước 10: Ống cảm biến

Ống cảm biến
Ống cảm biến
Ống cảm biến
Ống cảm biến
Ống cảm biến
Ống cảm biến

QUAN TRỌNG:

Ống cảm biến phải có màu Đen và bộ thu cảm biến phải được giấu

Những nỗ lực đầu tiên của tôi là có được một chiếc tẩu màu đỏ đẹp. Nhưng điều này là khó khăn! Nó không hoạt động chút nào. Tôi phát hiện ra rằng ánh sáng bên ngoài đang chiếu vào thì tấm nhựa và cảm biến bộ thu luôn bật.

Để có kết quả tốt, tôi không có lựa chọn nào khác là thay đổi màu thành đen.

Cài đặt đầu thu trên đầu trang. Và giấu phần nhựa trong bằng sơn đen, băng dính hoặc gôm, silicone đen.

Cài đặt emitter ở phía dưới.. Kiểm tra bằng bút xem các cảm biến có phản hồi tốt không. Có lẽ lỗ của bộ phát sẽ cần phải được mở rộng một chút. nó sẽ phụ thuộc vào hiệu chuẩn máy in của bạn.

Tôi cũng có kết quả tốt hơn trong bóng râm. Tránh ánh nắng trực tiếp.

Bước 11: Thay thế ống cảm biến

Ống cảm biến thay thế
Ống cảm biến thay thế
Ống cảm biến thay thế
Ống cảm biến thay thế

Nếu bạn không có máy in 3d, bạn có thể làm tương tự với ống đồng. Nó sẽ hoạt động rất tốt. Điều khó làm là lỗ chính xác 3 inch và bộ thu và bộ phát phải thẳng hàng.

Bước 12: Một viên thuốc trên Máy hiện sóng và Hiệu chuẩn

Một viên thuốc trên Máy hiện sóng và Hiệu chuẩn
Một viên thuốc trên Máy hiện sóng và Hiệu chuẩn

Đây là một viên thực sự đi qua ném đường ống. Đầu dò 1 màu vàng là cảm biến 1. Đầu dò 2 màu tím là cảm biến 2.

Thời gian / div là 50 us.

Chúng ta có thể đếm được 6 lần chia 50us. 50 us x 6 = 300 us (cho 3 inch). 300 us x 4 = 1,2 ms cho 1 feet

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

Chúng ta cũng có thể thấy rằng cảm biến bình thường ở mức 5v. Và chúng ta có thể chặn ánh sáng phát ra, cảm biến giảm xuống 0.

Đó là cách uC bắt đầu và ngăn chặn kẻ thù của mình (timer1)

Nhưng để biết chính xác tốc độ có chính xác hay không, tôi cần một cách để xác định điều này.

Để hiệu chỉnh phần mềm và kiểm tra độ chính xác của thiết bị này, tôi đã sử dụng bộ dao động tham chiếu 10 mhz. Xem GPSDO của tôi trên hướng dẫn khác.

Tôi nuôi một atmega328 khác với 10 mhz này. Và lập trình cái này trong trình hợp dịch để gửi cho tôi 2 xung mỗi khi tôi nhấn một nút để mô phỏng một viên. Chính xác như chúng ta đã thấy trong hình nhưng thay vì có một viên thực, nó là một uC khác gửi cho tôi 2 xung.

Mỗi lần nhấn nút nhấn, 1 xung được gửi đi và chính xác là 4 ms sau khi một xung khác được gửi đi.

Bằng cách này, tôi có thể cân bằng trình biên dịch phần mềm để luôn hiển thị 1000 ft / s.

Bước 13: Thêm…

Hơn…
Hơn…
Hơn…
Hơn…

Đây là nguyên mẫu đầu tiên của tôi trong năm 2010.

Đối với bất kỳ câu hỏi hoặc báo cáo lỗi, bạn có thể gửi email cho tôi. Tiếng anh hay tiếng pháp. Tôi sẽ cố gắng hết sức để giúp đỡ.

Đề xuất: