Съдържание:

Хронограф с въздушна пушка, хроноскоп. 3D печат: 13 стъпки
Хронограф с въздушна пушка, хроноскоп. 3D печат: 13 стъпки

Видео: Хронограф с въздушна пушка, хроноскоп. 3D печат: 13 стъпки

Видео: Хронограф с въздушна пушка, хроноскоп. 3D печат: 13 стъпки
Видео: ПРИНЯЛ НА ГРУДЬ И УПАЛ🏋️🏋️🏋️ 2024, Декември
Anonim
Image
Image
Отличителен белег
Отличителен белег

Здравейте на всички, днес ще преразгледаме проект, който направих през 2010 г. Хронограф с въздушна пушка. Това устройство ще ви каже скоростта на снаряд. Пелетна, BB или дори въздушна мека BB пластмасова топка.

През 2010 г. си купих въздушна пушка за забавление. Удряше консерви, бутилки, прицелваше се. Знам, че скоростта на този пистолет е била максимална 500 фута/сек. Защото това е законът на Канада. Предлагат се някои по -силни въздушни пушки, но трябва да имате лиценз за и не можете да си купите тези неща в Walmart.

Сега, когато имах този лиценз, можех да си купя друг. Но кратка история, същият пистолет беше на разположение на САЩ на 1000 фута/с. КАКВО!? Същият пистолет? да … В Канада ударът има дупка и пружината е по -мека.

Първото нещо, което трябва да направите, е да запълните дупката. Това направих с спойка. Следващото нещо, което трябва да направите, е да поръчате резервна пружина. Но изчакайте … каква е текущата скорост на новата ми играчка? Наистина ли пролетта е необходима? Не знам и искам да знам. Искам да знам сега, но как?

Затова направих този проект. Всичко, от което се нуждаех, беше 2 сензора, UC и дисплей и ние сме в бизнес.

Миналата седмица видях стария си син хронограф на рафт и си говоря: „Защо не споделиш това и не направиш инструкции с него?“Между другото, бихме могли да повишим точността и да добавим индикатор за батерията. Поставете 1 бутон вместо 2 за включване/изключване. Всички повърхностен монтаж. Сега сме 2020!

Ето го … нека започнем!

Стъпка 1: Функция

-Скорост на пелетите

-Скорост

-20 mhz работи, огромна точност

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

-Показва се напрежението на батерията

-схематично налично

-налична платка

-наличен списък с части

-STL наличен

-Наличен C код

Стъпка 2: Теория на работа и точност

-Имаме UC, работещ на 20Mhz. Използваният осцилатор е TCX0 +-2,5 ppm

-Имаме 2 сензора на 3 инча далеч един от друг.

-Снарядът удари първия сензор. uC стартиране на броене (timer1)

-Снарядът удари втория сензор. uC спре да брои.

-uC проверка на таймер1 стойност, направете математика и покажете скоростта и скоростта.

Използвам 16 -битов таймер1 + флаг за препълване tov1. 17 бита общо за 131071 "тик" за пълен брой.

1/20 mhz = 50 ns. Всеки тик е 50ns

131071 x 50 ns = 6.55355 ms до 3 инча.

6.55355 ms x 4 = 26.21 ms до 12 инча.

1/26,21 ms = 38,1472637 фута/сек

Това е най -бавната скорост, която устройството може да измери.

Защо 20 mhz? Защо не използвате вътрешните 8 mhz или дори кристала?

Първото ми устройство използваше вътрешния осцилатор. Работеше, но този не беше достатъчно точен. Разликата е твърде голяма. Кристалът е по -добър, но температурата е с различна честота. Не можем да направим точно измервателно устройство с това. Освен това, колкото по -висока е честотата, толкова повече тик ще се броят за същата скорост. Вземането на проби ще бъде по -добре да има много добра точност. Тъй като тикът не се дели, загубата е малка, ако работният цикъл е бърз.

При 20 MHz имаме стъпки от 50 ns. Знаем ли колко точно е 50 ns за снаряд при 38 ft/s.

38.1472637 ft/s разделено на 131071 = 0, 000291042 фута

0, 0003880569939956207 фута x 12 = 0, 003492512 инча

1/0, 003492512 = 286.37 ". С други думи. При 50 ft/s имаме точност от +- 1/286" или +- 0, 003492512 инча

Но ако осцилаторът ми е най -лошият и работи на 20 mhz +2,5 ppm, добре ли е? Нека разберем…

2,5 ppm от 20 000 000 е: (20000000/1000000) x 2,5 = 20000050 Hz

Така че в най -лошия случай имаме още 50 часовника на 20 mhz. Това е 50 часовник на 1 секунда. Колко повече тик на timer1, ако пелетите вършат същата скорост (38.1472637 фута/сек или 6.55ms)?

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 фута/сек

Така че имаме 38.14735907 фута/с вместо 38.1472637 фута/с

Сега знаем, че 2,5 ppm не влияе на резултата.

Ето един пример за различна скорост

За 1000 фута/сек

1000 ft/s x 12 е 12000 инча/s

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

250 us / 50 ns = 5000 тик.

Таймер 1 ще бъде на 5000

uC направете математиката и се показва 1000 ft/s. Дотук добре

За 900 фута/сек

900 ft/s е 10800 /s

3x1/10800 = 277.77 us

277, 77 ns / 50 ns = 5555, 5555 тик

Таймер 1 ще бъде на 5555

uC направете математиката и 900, 09 ще се покаже вместо 900

Защо ? тъй като таймер 1 е на 5555 и 0, 5555 е загубен. Таймерът за включване на таймера не се дели.

Имаме грешка за 0, 09 на 900 ft/s

0, 09/900x100 = 0, 01% само грешка

За 1500 ft/s1500 ft/s е 18000 /s 3x1/10800 = 166,66 us

166,66 us / 50 ns = 3333,333 tic Timer 1 ще бъде на 3333

uC направете математиката и 1500.15 ще се покаже вместо 1500, това е.15/1500x100 = 0, 01%

За 9000 фута/сек

9000 x 12 = 180000 инча / сек

3x1/180000 = 27,7777 us

27,77 us / 50 ns = 555, 555

Таймер 1 ще бъде на 555 и ще се покаже 4/(1/555x50ns) 9009, 00 ще се покаже

Тук грешката е от 9 фута/сек при 9000 = 0, 1%

Както можете да видите, % грешка се увеличава, когато скоростта е по -висока. Но останете <0,1%

Тези резултати са много добри.

Но точността не е линейна. При 10000 ft/s е 0, 1 %. Добро ново е, че никога не тестваме пелети от 10 000 ft/s.

Друго нещо, което трябва да имате предвид. Когато се случи прекъсване, uC винаги завършва последната инструкция, преди да влезе в прекъсване. Това е нормално и всички UC правят това. Ако кодирате arduino, в C или дори асемблер. През повечето време ще чакате завинаги … да чакате. Проблемът е, че в цикъл прекарваме 2 цикъла. Обикновено това не е важно. Но в нашия случай. ДА, всеки тик е важен. Нека да разгледаме безкраен цикъл:

асемблер:

цикъл:

rjmp цикъл

В C:

докато (1) {}

Всъщност компилаторът C използва инструкция rjmp. RJMP е 2 цикъла.

Това означава, че ако прекъсването се случи с първия цикъл, ние губим един цикъл (тик) (50ns).

Моят начин да поправя това е да добавя много инструкции nop в цикъла. NOP е 1 цикъл.

цикъл:

не

не

не

не

не

rjmp цикъл

Ако прекъсването се случи по инструкция nop. Добре сме Ако това се случи на втория цикъл на инструкция rjmp, ние сме добре. Но ако това се случи в първия цикъл на инструкция rjmp, ние ще загубим един тик. Да, това е само 50 ns, но както можете да видите по -горе, 50 ns на 3 инча не е нищо. Не можем да поправим това чрез софтуер, защото не знаем кога точно се случва прекъсването. Ето защо в кода ще видите много инструкции nop. Сега съм почти сигурен, че прекъсването ще падне на инструкция nop. Ако добавя 2000 nop, имам 0, 05% да попадна на инструкцията rjmp.

Друго нещо, което трябва да имате предвид. Когато се случи прекъсване. Компилаторът прави много push and pull. Но винаги е един и същ номер. Така че сега можем да направим софтуерна корекция.

В заключение по този въпрос:

Точността за среден пелет от 1000 ft/s е 0, 01%

100 пъти по -точен от останалите 1% на пазара. Честотата е по -висока и с TCXO, по -точна

Например, 1% от 1000 ft/s е повече или по -малко 10 ft/s. Това е огромна разлика.

Стъпка 3: Схеми и списък с части

Схеми и списък с части
Схеми и списък с части

Тук реализирах моята верига за включване/изключване с един бутон. (вижте последната ми инструкция) Тази схема е много удобна и работи много добре.

Използвам atmega328p. Този е програмиран в C.

Дисплеят е стандартен двуредов LCD, съвместим с HD44780. Използва се 4 -битов режим.

За осигуряване на напрежение към TCXO 20mhz се използва регулатор 3.3v.

D1 е за LCD подсветка. По избор. Батерията ще издържи по -дълго, ако не инсталирате D1.

Всички резистори и капачки са с пакет 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

Дисплей LCD 2 ред HD44780. Няма нужда да купувате i2c модул.

Сензори:

2x излъчвател OP140A

2x приемник OPL530

Енкодер: PEC11R-4215K-S0024 *Не забравяйте да добавите 4x 10k резистора и 2x.01uf, за да направите филтъра на енкодера. вижте снимката по -долу

Стъпка 4: PCB Gerber файл

PCB Gerber файл
PCB Gerber файл
PCB Gerber файл
PCB Gerber файл
PCB Gerber файл
PCB Gerber файл
PCB Gerber файл
PCB Gerber файл

Ето гербер файлове

Стъпка 5: Запоявайте вашата печатна платка

Запояйте вашата печатна платка
Запояйте вашата печатна платка
Запояйте вашата печатна платка
Запояйте вашата печатна платка
Запояйте вашата печатна платка
Запояйте вашата печатна платка

С схематична помощ запоявайте всичките си компоненти на печатната платка. Всяка част или написана на печатна платка, r1, r2 … и така нататък.

Нямам инсталиран D1. Това е за подсветката на LCD дисплея. Това е красиво, но животът на батерията е засегнат. Затова избирам да изключвам подсветката на LCD дисплея.

Стъпка 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: LCD дисплей

ЛСД дисплей
ЛСД дисплей
ЛСД дисплей
ЛСД дисплей

Инсталирайте лента и свържете платка и LCD заедно

Стъпка 8: STL файл

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

stl файл

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

Необходима е поддръжка за корпус, сензорна тръба и държач за пушка.

Отпечатал съм всички на височина.2 мм.

Стъпка 9: Ротационен енкодер

Ротационен енкодер
Ротационен енкодер
Ротационен енкодер
Ротационен енкодер
Ротационен енкодер
Ротационен енкодер

Този въртящ се енкодер е свързан към isp конектора. използва се за промяна на теглото на пелетите и за включване и изключване на устройството.

vcc isp pin 2 (издърпайте резистора)

Клема А (жълта) отидете на пин 1 на ISP

Клема В (зелена) отидете на пин 3 на ISP

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

Добавям 2 снимки, за да видя разликата между да имаш филтър срещу филтър. Можете лесно да видите разликата между двете.

Бутонът отива към съединителя за печатна платка SW.

Стъпка 10: Сензорна тръба

Сензорна тръба
Сензорна тръба
Сензорна тръба
Сензорна тръба
Сензорна тръба
Сензорна тръба

ВАЖНО:

Сензорната тръба трябва да е черна и приемникът на сензора трябва да бъде скрит

Първите ми опити бяха да имам красива червена тръба. Но това е сложно! Изобщо не работеше. Разбрах, че входящата светлина идва, пластмасата и сензорът на приемника винаги са включени.

За да имам добър резултат, нямах избор да променя цвета на черен.

Инсталирайте приемника отгоре. И скрийте прозрачната пластмаса с черна боя, лента или дъвка, черен силикон.

Инсталирайте излъчвател отдолу. Проверете с химикалка дали сензорите реагират добре. Може би дупката на излъчвателя ще трябва да се увеличи малко. това ще зависи от калибрирането на вашия принтер.

Имам и по -добър резултат на сянка. Избягвайте пряка слънчева светлина.

Стъпка 11: Алтернатива на сензорните тръби

Сензорна тръба алтернатива
Сензорна тръба алтернатива
Сензорна тръба алтернатива
Сензорна тръба алтернатива

Ако нямате 3D принтер, можете да направите същото с медна тръба. Ще работи много добре. Трудно е да се направи отвора на точно 3 инча и приемникът и излъчвателят трябва да бъдат подравнени.

Стъпка 12: Пелета върху осцилоскоп и калибриране

Пелета за осцилоскоп и калибриране
Пелета за осцилоскоп и калибриране

Това е истински пелет, преминаващ през тръбата. Сонда 1 жълта е сензор 1. Сонда 2 лилава е сензор 2.

Времето/div е 50 us.

Можем да преброим 6 дивизии по 50us. 50 us x 6 = 300 us (за 3 инча). 300 us x 4 = 1,2 ms за 1 фута

1/1.2ms = 833.33 ft/s

Можем също да видим, че сензорът обикновено е на 5v. Можем ли да блокираме излъчващата светлина, сензорът да падне до 0.

Това е начинът, по който uC стартира и спира своя conter (timer1)

Но за да знам точно дали скоростта е била точна, имах нужда от начин да го определя.

За да направя софтуерно калибриране и да проверя точността на това устройство, използвах референтен осцилатор от 10 mhz. Вижте моя GPSDO на други инструкции.

Аз захранвам друг atmega328 с тези 10 mhz. И програмирайте този в асемблер да ми изпраща 2 импулса всеки път, когато натисна бутон, за да симулира пелета. Точно както видяхме на снимката, но вместо това, за да имам истински пелети, беше друг UC, който ми изпрати 2 импулса.

При всяко натискане на бутон се изпраща 1 импулс и точно 4 ms след изпращане на друг импулс.

По този начин ще мога да балансирам софтуерния компилатор, така че винаги да се показват 1000 ft/s.

Стъпка 13: Още …

Повече ▼…
Повече ▼…
Повече ▼…
Повече ▼…

Това е първият ми прототип за 2010 г.

За всякакви въпроси или доклад за грешка можете да ми пишете. Английски или френски. Ще направя всичко възможно да помогна.

Препоръчано: