Оглавление:
- Шаг 1. Функция
- Шаг 2: Теория работы и точность
- Шаг 3: Схема и список деталей
- Шаг 4: файл Gerber PCB
- Шаг 5: припаяйте вашу печатную плату
- Шаг 6: Программирование Atmega328p
- Шаг 7: ЖК-дисплей
- Шаг 8: файл STL
- Шаг 9: РОТАЦИОННЫЙ КОДЕР
- Шаг 10: сенсорная труба
- Шаг 11: Альтернатива сенсорной трубке
- Шаг 12: Пеллета на осциллографе и калибровка
- Шаг 13: Подробнее…
Видео: Хронограф пневматической винтовки, хроноскоп. Напечатано на 3D-принтере: 13 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:49
Всем привет, сегодня мы вернемся к проекту, который я сделал в 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
Вот файлы гербера
Шаг 5: припаяйте вашу печатную плату
С помощью схемы припаяйте все компоненты к плате. Каждая часть написана на печатной плате, r1, r2… и так далее.
У меня не установлен D1. Это для подсветки ЖК-дисплея. Красиво, но на время автономной работы сказывается. Поэтому я решил оставить подсветку ЖК-дисплея выключенной.
Шаг 6: Программирование 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 файл
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 года выпуска.
С любыми вопросами или сообщением об ошибке вы можете написать мне по электронной почте. Английский или французский. Я сделаю все возможное, чтобы помочь.
Рекомендуемые:
Дизайн игры в Flick за 5 шагов: 5 шагов
Дизайн игры в Flick за 5 шагов: Flick - это действительно простой способ создания игры, особенно чего-то вроде головоломки, визуального романа или приключенческой игры
Счетчик шагов - Micro: Bit: 12 шагов (с изображениями)
Счетчик шагов - Микро: Бит: Этот проект будет счетчиком шагов. Мы будем использовать датчик акселерометра, встроенный в Micro: Bit, для измерения наших шагов. Каждый раз, когда Micro: Bit трясется, мы добавляем 2 к счетчику и отображаем его на экране
Хронограф Nerf и скорострельность ствола: 7 шагов
Хронограф Nerf и скорострельность ствола: Введение Как мастеру-мастеру всегда очень приятно видеть числовые результаты своей работы. Многие из нас раньше модифицировали пистолеты Nerf, и кто не любит бросать куски пены по дому со скоростью более 100 кадров в секунду? После модификации многих Nerf g
Arduino для Nerf: хронограф и счетчик кадров: 28 шагов (с изображениями)
Arduino для Nerf: хронограф и счетчик выстрелов: В моем предыдущем руководстве были описаны основы определения скорости дротика с помощью инфракрасного излучателя и детектора. Этот проект идет дальше, используя печатную плату, дисплей и батареи для создания портативного счетчика боеприпасов и хронографа
Цифровой контроллер для пневматической подвески с использованием Arduino и пульта дистанционного управления для смартфона: 7 шагов (с изображениями)
Цифровой контроллер для пневматической подвески с использованием Arduino и пульта дистанционного управления для смартфона: Привет всем. В этой инструкции я попытаюсь показать вам, как создать контроллер для вашей автомобильной пневматической подвески, используя один модуль arduino + bluetooth и для удаленного любого смартфона с android +4.4, это также мой самый первый инструктаж, так что медведь ж