Оглавление:

Хронограф пневматической винтовки, хроноскоп. Напечатано на 3D-принтере: 13 шагов
Хронограф пневматической винтовки, хроноскоп. Напечатано на 3D-принтере: 13 шагов

Видео: Хронограф пневматической винтовки, хроноскоп. Напечатано на 3D-принтере: 13 шагов

Видео: Хронограф пневматической винтовки, хроноскоп. Напечатано на 3D-принтере: 13 шагов
Видео: Хроновизор: секретное устройство Ватикана для того, чтобы заглядывать в прошлое 2024, Декабрь
Anonim
Image
Image
Характерная черта
Характерная черта

Всем привет, сегодня мы вернемся к проекту, который я сделал в 2010 году. Хронограф для пневматической винтовки. Это устройство сообщит вам скорость снаряда. Пеллеты, ВВ или даже воздушный мягкий пластиковый шарик ВВ.

В 2010 году я ради развлечения купил пневматическую винтовку. Били банками, бутылками, прицеливались. Я знаю, что максимальная скорость этого орудия была 500 футов / с. Потому что это закон Канады. Доступны более мощные пневматические винтовки, но у вас должна быть лицензия, и вы не можете купить их в Walmart.

Теперь у меня была эта лицензия, я мог купить другую. Но если вкратце, то же самое орудие было доступно в США на скорости 1000 футов / с. КАКИЕ!? Тот же пистолет? да… В канаде в ходу есть дырочка и пружина более мягкая.

Первое, что нужно сделать, это засыпать яму. Вот что я сделал с припоем. Следующее, что нужно было сделать, это заказать замену пружины. Но подождите … какова текущая скорость моей новой игрушки? Действительно ли нужна весна? Я не знаю и хочу знать. Я хочу знать сейчас, но как?

Вот почему я сделал этот проект. Все, что мне было нужно, это 2 датчика, микроконтроллер и дисплей, и мы в деле.

На прошлой неделе я увидел свой старый синий хронограф на полке и сказал себе: «Почему бы не поделиться этим и не сделать с ним инструктаж?» Кстати, мы могли повысить точность и добавить индикатор заряда батареи. Поставить 1 кнопку вместо 2 для включения / выключения. Все для поверхностного монтажа. Мы сейчас в 2020 году!

Итак … приступим!

Шаг 1. Функция

-Скорость пеллет

-Скорость

-20 МГц при работе, огромная точность

-Автоматическое отключение

-Отображается напряжение батареи

-схема доступна

-pcb доступен

-список запчастей доступен

-STL доступен

-C код доступен

Шаг 2: Теория работы и точность

-У нас есть uC, работающий на частоте 20 МГц. Используемый осциллятор - TCX0 + -2,5 ppm.

-У нас есть 2 датчика на расстоянии 3 дюймов друг от друга.

- Снаряд попал в первый датчик. uC начало отсчета (timer1)

- Снаряд попал во второй датчик. uC перестает считать.

-uC проверить значение таймера1, произвести вычисления и отобразить скорость и скорость.

Я использую 16-битный таймер 1 + флаг переполнения tov1. Всего 17 бит для 131071 «тика» для полного счета.

1/20 МГц = 50 нс. Каждый тик составляет 50 нс

131071 x 50 нс = 6,55355 мс до 3 дюймов.

6,55355 мс x 4 = 26,21 мс до 12 дюймов.

1 / 26,21 мс = 38,1472637 футов / с

Это самая низкая скорость, которую может измерить устройство.

Почему 20 МГц? Почему бы не использовать внутренний 8 МГц или даже кристалл?

В моем первом устройстве использовался внутренний генератор. Работал, но этот был недостаточно точен. Разница слишком велика. Кристалл лучше, но температура меняется. С этим мы не можем сделать точный измерительный прибор. Кроме того, чем выше частота, тем больше тиков будет учитываться при той же скорости. Выборка будет лучше иметь очень хорошую точность. Поскольку тик нельзя разделить, потери будут небольшими, если рабочий цикл будет быстрым.

На 20 МГц мы имеем шаг 50 нс. Знаем ли мы, насколько точным является 50 нс для снаряда со скоростью 38 фут / с.

38,1472637 футов / с разделить на 131071 = 0, 000291042 футов

0, 0003880569939956207 футов x 12 = 0, 003492512 дюймов

1/0, 003492512 = 286,37 дюйма. Другими словами. При 50 фут / с точность составляет + - 1/286 дюйма или + - 0, 003492512 дюймов.

Но если мой осциллятор хуже всех и работает на частоте 20 МГц +2,5 ppm, нормально ли это? Давайте разберемся…

2,5 ppm из 20000000: (20000000/1000000) x 2,5 = 20000050 Гц

В худшем случае у нас есть еще 50 часов на 20 МГц. Это 50 часов на 1 секунду. На сколько тиков больше на таймере 1, если шарик движется с той же скоростью (38,1472637 футов / с или 6,55 мс)?

1/20000050 = 49.999875 нс

49,999875 нс x 131071 = 6, 553533616 мс

6, 553533616 мс x 4 = 26,21413446 мс

1 / 26,21413446 мс = 38,14735907 футов / с

Таким образом, мы имеем 38,14735907 футов / с вместо 38,1472637 футов / с.

Теперь мы знаем, что 2,5 промилле не влияют на результат.

Вот несколько примеров разной скорости

Для 1000 фут / с

1000 футов / с x 12 - 12000 дюймов / с

1 секунда за 12000 "сколько времени делать 3"? 3x1 / 12000 = 250 мкс секунд

250 мкс / 50 нс = 5000 тик.

Timer1 будет на 5000

uC выполнит математические вычисления, и отобразится значение 1000 футов / с. Все идет нормально

Для 900 футов / с

900 фут / с - 10800 дюймов / с

3x1 / 10800 = 277,77 мкс

277, 77 нс / 50 нс = 5555, 5555 тик

Таймер 1 будет на 5555

uC выполнит математические вычисления, и вместо 900 будет отображаться 900, 09.

Почему ? поскольку таймер 1 находится на 5555, а 0, 5555 потеряно. Тик по таймеру не делится.

У нас есть ошибка fo 0, 09 на 900 ft / s

0, 09 / 900x100 = 0, только ошибка 01%

Для 1500 фут / с1500 фут / с составляет 18000 дюймов / с 3x1 / 10800 = 166,66 мкс.

166,66 мкс / 50 нс = 3333,333 тик Таймер 1 будет на 3333

uC выполняет математические вычисления, и вместо 1500 будет отображаться 1500,15, это 0,15 / 1500x100 = 0, 01%

Для 9000 фут / с

9000 x 12 = 180000 дюймов / с

3x1 / 180000 = 27,7777 мкс

27,77 мкс / 50 нс = 555, 555

Timer1 будет на 555 и 4 / (1 / 555x50ns) будет отображаться 9009, 00 будет отображаться

Здесь погрешность составляет 9 футов / с на 9000 = 0,1%.

Как видите, ошибка% увеличивается с увеличением скорости. Но оставайтесь <0,1%

Это очень хорошие результаты.

Но точность не линейна. На скорости 10000 футов / с это 0,1%. Хорошая новость заключается в том, что мы никогда не тестируем гранулы со скоростью 10 000 футов / с.

Еще одна вещь, о которой нужно помнить. Когда происходит прерывание, uC всегда заканчивает последнюю инструкцию перед входом в прерывание. Это нормально, и все uC так делают. Если вы кодируете arduino на C или даже на ассемблере. Большую часть времени вы будете ждать в бесконечном цикле… ждать. Проблема в том, что в цикле мы проводим 2 цикла. Обычно это не важно. Но в нашем случае. ДА, каждый тик важен. Посмотрим бесконечный цикл:

ассемблер:

петля:

rjmp loop

В C:

в то время как (1) {}

Фактически компилятор C использует инструкцию rjmp. RJMP - 2 цикла.

Это означает, что если прерывание произойдет с первым циклом, мы потеряем один цикл (тик) (50 нс).

Мой способ исправить это - добавить в цикл много инструкций nop. NOP - 1 цикл.

петля:

нет

нет

нет

нет

нет

rjmp loop

Если прерывание произошло по инструкции nop. Мы в порядке. Если это произойдет во втором цикле инструкции rjmp, все в порядке. Но если это произойдет в первом цикле инструкции rjmp, мы потеряем один тик. Да, это всего лишь 50 нс, но, как вы можете видеть выше, 50 нс на 3 дюйма - это еще ничего. Мы не можем исправить это программно, потому что не знаем, когда именно произошло прерывание. Вот почему в коде вы увидите много инструкций nop. Теперь я почти уверен, что прерывание попадет на инструкцию nop. Если я добавлю 2000 nop, у меня будет 0,05%, чтобы выпасть на инструкцию rjmp.

Еще одна вещь, о которой нужно помнить. Когда случаются прерывания. Компилятор много толкает и тянет. Но это всегда одно и то же число. Итак, теперь мы можем сделать программную коррекцию.

В заключение:

Точность для средней пеллеты 1000 фут / с составляет 0,01%

В 100 раз точнее, чем у других 1% на рынке. Частота выше и с TCXO точнее

Например, 1% от 1000 фут / с больше или меньше 10 фут / с. Это огромная разница.

Шаг 3: Схема и список деталей

Схема и список деталей
Схема и список деталей

Здесь я реализовал свою схему включения / выключения одной кнопкой. (см. мое последнее руководство) Эта схема очень удобна и работает очень хорошо.

Я использую atmega328p. Этот запрограммирован на C.

Дисплей представляет собой стандартный двухстрочный ЖК-дисплей, совместимый с HD44780. Используется 4-битный режим.

Стабилизатор 3,3 В используется для подачи напряжения на TCXO 20 МГц.

D1 предназначен для подсветки ЖК-дисплея. По желанию. Аккумулятор прослужит дольше, если вы не установите D1.

Все резисторы и колпачки - 0805 упаковка.

C1. 1 мкФ 25 В

C2 1 мкФ 16 В

C3 2,2 мкФ 10 В

C4.1 мкФ

C5.1 мкФ

C6.1 мкФ

C7 1 мкФ

C8.1 мкФ

C9.1 мкФ

C10.1 мкФ

Д1 1н4148 СМ СОТ123

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

У2 DMG6601LVT DMG6601LVT SOT23-6

Дисплей жк 2 строчный HD44780. Не нужно покупать модуль i2c.

Датчики:

2x излучателя OP140A

2 приемника OPL530

Кодировщик: PEC11R-4215K-S0024 * Не забудьте добавить 4 резистора по 10 кОм и 2 резистора 0,01 мкФ, чтобы сделать фильтр кодировщика. см. картинку ниже

Шаг 4: файл Gerber PCB

Файл PCB Gerber
Файл PCB Gerber
Файл PCB Gerber
Файл PCB Gerber
Файл PCB Gerber
Файл PCB Gerber
Файл PCB Gerber
Файл PCB Gerber

Вот файлы гербера

Шаг 5: припаяйте вашу печатную плату

Припаяйте свою печатную плату
Припаяйте свою печатную плату
Припаяйте свою печатную плату
Припаяйте свою печатную плату
Припаяйте свою печатную плату
Припаяйте свою печатную плату

С помощью схемы припаяйте все компоненты к плате. Каждая часть написана на печатной плате, r1, r2… и так далее.

У меня не установлен D1. Это для подсветки ЖК-дисплея. Красиво, но на время автономной работы сказывается. Поэтому я решил оставить подсветку ЖК-дисплея выключенной.

Шаг 6: Программирование Atmega328p

Программирование Atmega328p
Программирование Atmega328p

Отметьте здесь на шаге 12, чтобы запрограммировать atmega328p. Я предоставляю для этого файл.hex.

Вот программа avrdude, готовая к программированию командного файла. Просто нажмите на программу usbasp.bat, и ваш usbasp будет правильно установлен. Все будет сделано автоматически, включая бит предохранителя.

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

В этом проекте я также использую исходный код C. Имейте в виду, что некоторые примечания в нем могут быть на французском. Https://1drv.ms/u/s! AnKLPDy3pII_vXUMXHdxajwGRFJx? E…

Шаг 7: ЖК-дисплей

ЖК дисплей
ЖК дисплей
ЖК дисплей
ЖК дисплей

Установите ленту и соедините печатную плату и ЖК-дисплей вместе

Шаг 8: файл STL

STL файл
STL файл
STL файл
STL файл
STL файл
STL файл

stl файл

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

Опора необходима для корпуса, сенсорной трубки и держателя винтовки.

Я все напечатал на высоте 0,2 мм.

Шаг 9: РОТАЦИОННЫЙ КОДЕР

РОТАЦИОННЫЙ ЭНКОДЕР
РОТАЦИОННЫЙ ЭНКОДЕР
РОТАЦИОННЫЙ ЭНКОДЕР
РОТАЦИОННЫЙ ЭНКОДЕР
РОТАЦИОННЫЙ ЭНКОДЕР
РОТАЦИОННЫЙ ЭНКОДЕР

Этот поворотный энкодер подключается к разъему isp. он используется для изменения веса пеллет, а также для включения и выключения устройства.

vcc isp pin 2 (подтягивающий резистор)

Терминал A (желтый) идет к контакту 1 ISP.

Терминал B (зеленый) перейти к контакту 3 ISP.

Клемма C (gnd) isp pin 6

Я добавляю 2 изображения, чтобы увидеть разницу между наличием фильтра и отсутствием фильтра. Вы легко можете увидеть разницу между ними.

Нажимная кнопка идет к разъему SW печатной платы.

Шаг 10: сенсорная труба

Сенсорная труба
Сенсорная труба
Сенсорная труба
Сенсорная труба
Сенсорная труба
Сенсорная труба

ВАЖНЫЙ:

Трубка датчика должна быть черной, а приемник датчика - скрытым

Первой моей попыткой было завести красивую красную трубку. Но это сложно! Он вообще не работал. Я понял, что наружный свет попадает, поэтому пластик и датчик приемника всегда были включены.

Чтобы получить хороший результат, у меня не было выбора изменить цвет на черный.

Установите ресивер сверху. А прозрачный пластик спрячьте черной краской, скотчем или резинкой, черным силиконом.

Установите излучатель снизу. Проверьте с помощью ручки, хорошо ли реагируют датчики. Возможно, отверстие излучателя нужно будет немного увеличить. это будет зависеть от калибровки вашего принтера.

У меня тоже лучший результат в тени. Избегайте попадания прямых солнечных лучей.

Шаг 11: Альтернатива сенсорной трубке

Альтернатива сенсорной трубы
Альтернатива сенсорной трубы
Альтернатива сенсорной трубы
Альтернатива сенсорной трубы

Если у вас нет 3D-принтера, вы можете сделать то же самое с медной трубкой. Это будет очень хорошо работать. Трудно сделать отверстие ровно на 3 дюйма, а приемник и излучатель должны быть выровнены.

Шаг 12: Пеллета на осциллографе и калибровка

Пеллета на осциллографе и калибровке
Пеллета на осциллографе и калибровке

Это настоящая гранула, проходящая через трубу. Датчик 1 желтый - датчик 1. Датчик 2 фиолетовый - датчик 2.

Время / деление составляет 50 мкс.

Мы можем насчитать 6 делений по 50 мкс. 50 мкс x 6 = 300 мкс (для 3 дюймов). 300 мкс x 4 = 1,2 мс для 1 фута

1 / 1,2 мс = 833,33 фут / с

Мы также можем видеть, что датчик обычно находится на 5 В. А можем ли мы заблокировать излучатель света, датчик упадет до 0.

Это способ запуска и остановки своего контера (таймер 1)

Но чтобы точно знать, точна ли скорость, мне нужен был способ ее измерить.

Для калибровки программного обеспечения и проверки точности этого устройства я использовал опорный генератор 10 МГц. См. Мой GPSDO по другим инструкциям.

Кормлю другой atmega328 с этим 10 мГц. И запрограммируйте этот на ассемблере так, чтобы он посылал мне 2 импульса каждый раз, когда я нажимаю кнопку, чтобы имитировать шарик. Точно так же, как мы видели на картинке, но вместо того, чтобы получить настоящую гранулу, это был другой микроконтроллер, посылающий мне 2 импульса.

Каждый раз, когда нажималась кнопка, отправлялся 1 импульс и ровно через 4 мс после отправки другого импульса.

Таким образом, я смогу сбалансировать программный компилятор, чтобы всегда отображалось 1000 футов / с.

Шаг 13: Подробнее…

Более…
Более…
Более…
Более…

Это мой первый прототип 2010 года выпуска.

С любыми вопросами или сообщением об ошибке вы можете написать мне по электронной почте. Английский или французский. Я сделаю все возможное, чтобы помочь.

Рекомендуемые: