Хрон (хронограф) - ФОРУМ ДВ Робот dvrobot.ru
Пятница, 16.11.2018, 05:24
Главная Мой профиль Регистрация Выход
  • НАШ МАГАЗИН
  • Вы вошли как Гость | Группа "Гости"Приветствую Вас, Гость
    [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
    • Страница 1 из 1
    • 1
    Модератор форума: GRACH, Serg  
    ФОРУМ ДВ Робот dvrobot.ru » DV ROBOT » Библиотека Проектов » Хрон (хронограф) (Измерение скорости пули)
    Хрон (хронограф)
    m_wДата: Четверг, 10.01.2013, 09:26 | Сообщение # 1
    5 Вольт
    Группа: Пользователи
    Сообщений: 67
    Репутация: 2
    Статус: Offline
    Начать рассказ о проиборе для измерения скорости пули я решил с напоминания о необходимости соблюдения мер безопасности при обращении с оружием.

    Всегда обращайтесь с оружием так, как если бы оно было заряжено и готово к выстрелу.

    До того как решите стрелять, держите палец в стороне от спускового крючка (например, на скобе).

    Несоблюдение мер безопасности может привести к серьезным травмам и даже смерти.

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

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

    Перед стрельбой одевайте защитные очки или маску. Не направляйте оружие на людей не имеющих защитных средств. Будте осторожны.


    Мой блог http://justforduino.blogspot.ru/
     
    m_wДата: Четверг, 10.01.2013, 09:28 | Сообщение # 2
    5 Вольт
    Группа: Пользователи
    Сообщений: 67
    Репутация: 2
    Статус: Offline
    Основным элементом данной конструкции является сенсор.



    Схема простая. Все элементы обозначены. Полагаю комментарии излишни.
    Прикрепления: 8031533.gif(8.0 Kb)


    Мой блог http://justforduino.blogspot.ru/

    Сообщение отредактировал m_w - Четверг, 10.01.2013, 09:37
     
    m_wДата: Четверг, 10.01.2013, 09:30 | Сообщение # 3
    5 Вольт
    Группа: Пользователи
    Сообщений: 67
    Репутация: 2
    Статус: Offline
    Ниже представлен возможный вариант конструкции сенсора.



    Для изготовления сенсора нужна прочная трубочка подходящего диаметра и длины. Я использовал пластиковую водопроводную трубу на 1/2 дюйма.

    При измерении скорости пули мощной пневматики необходимо жестко крепить сенсор на стволе. Держать сенсор в руках прижимая к стволу нельзя. Так Вы прострелите себе руку.

    Когда светодиоды светят на фототранзисторы, на сигнальных линиях установлены логические единицы. Но как только пролетающая пуля оказывается на пути света от светодиода к фототранзистору, на соответствующей сигнальной линии устанавливается логический ноль.

    Расстояние S известно. Измерив время между появлением логического нуля на сигнальной линии S1 и S2 можно вычислить скорость пули по формуле:

    v = s / t
    Прикрепления: 9980720.gif(3.8 Kb)


    Мой блог http://justforduino.blogspot.ru/

    Сообщение отредактировал m_w - Четверг, 10.01.2013, 09:36
     
    m_wДата: Четверг, 10.01.2013, 09:34 | Сообщение # 4
    5 Вольт
    Группа: Пользователи
    Сообщений: 67
    Репутация: 2
    Статус: Offline
    Проведение измерений я доверил микроконтроллеру ATmega32u4. Сенсор подключается к МК в соответствии с нижеприведенными инструкциями.

    ATmega32u4 --- Sensor
    PD1 --- S2
    PD0 --- S1
    VCC --- VCC
    GND --- GND

    Результат измерений выдается через USART. Дальнейшая обработка данных выполняется на ПК. Микроконтроллер соединяется с ПК через USB-USART переходник.

    ATmega32U4 --- USB-USART
    VCC --- 5V
    PD3 --- TxD
    PD2 --- RxD
    GND --- GND

    Есть возможность беспроводного соединения через Bluetooth. В этом случае к микроконтроллеру подключается модуль Bluetooth.

    ATmega32U4 --- Bluetooth Module
    VCC --- VCC
    GND --- GND
    PD2 --- TxD
    PD3 --- RxD

    Bluetooth поддерживается многими устройствами (компьютер, неттоп, ноутбук, нетбук, планшет, телефон). Я решил, что так будет удобно.

    Однако, мной написана программа только для Windows и Linux. Программа написана на Python.

    http://yadi.sk/d/Dxq_Aw7K1kWKQ

    Так как устройство может подключатся к ПК различными способами, в программе реализован автоматический поиск устройства. Сделано это просто. Программа пытается открывать COM порты по очереди. Если удается открыть порт, то программа передает 0. Затем ожидает ответ. Получив в ответ 0 программа считает, что связь с хронографом установлена. В ином случае программа продолжает поиск.

    Если программа не может найти хронограф, то выдается показанное ниже сообщение.

    Прикрепления: 8149249.png(23.0 Kb)


    Мой блог http://justforduino.blogspot.ru/
     
    m_wДата: Четверг, 10.01.2013, 09:50 | Сообщение # 5
    5 Вольт
    Группа: Пользователи
    Сообщений: 67
    Репутация: 2
    Статус: Offline
    Если устройство обнаружено, то окно программы выглядит следующим образом.



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

    Добавлено (10.01.2013, 09:42)
    ---------------------------------------------
    Теперь расскажу о программе для микроконтроллера.

    Сенсор подключен к ножкам микроконтроллера за которыми закреплены прерывания по внешнему сигналу. Настройка этих прерываний осуществляется с через регистры: External Interrupt Control Register A (EICRA), External Interrupt Control Register B (EICRB), External Interrupt Mask Register (EIMSK), External Interrupt Flag Register (EIFR).

    Ниже перечислены биты этих регистров.
    EICRA: ISC31, ISC30, ISC21, ISC20, ISC11, ISC10, ISC01, ISC00.
    EICRB: -, -, ISC61, ISC60, -, -, -, -.
    EIMSK: -, INT6, -, -, INT3, INT2, INT1, INT0.
    EIFR: -, INTF6, -, -, INTF3, INTF2, INTF1, INTF0.

    Биты отмеченные как "-" не используются. Их значение ни на что не влияет.

    Биты ISC01 и ISC00 регистра EICRA отвечают за прерывание INT0. Если бит ISC01 установлен в 1, а бит ISC00 сброшен в 0, то флаг прерывания устанавливается тогда, когда на ножке микроконтроллера PD0 логическая единица сменяется логическим нулем.

    Биты ISC11 и ISC10 регистра EICRA отвечают за прерывание INT1. Здесь все аналогично. Только с этим прерыванием связана ножка микроконтроллера PD1.

    Биты INT1 и INT0 регистра EIMSK отвечают за разрешение/запрещение прерываний INT1 и INT0. Если они установлены в 1, то эти прерывания разрешены.

    Регистр EIFR это регистр флагов прерываний по внешнему сигналу. Запись 1 в биты INTF1 и INTF0 этого регистра приводит к сбросу флагов прерываний INT1 и INT0.

    В обработчике прерывания INT0 запускается таймер/счетчик. В обработчике прерывания INT1 таймер/счетчик останавливается и результат счетного регистра пересылается через USART. Затем счетный регистр обнуляется.

    Добавлено (10.01.2013, 09:45)
    ---------------------------------------------
    Для подсчета времени я решил использовать шестнадцати разрядный таймер/счетчик 1.

    За этим таймером/счетчиком закреплены следующие регистры: Timer/Counter1 Control Register A (TCCR1A), Timer/Counter1 Control Register B (TCCR1B), Timer/Counter1 Interrupt Mask Register (TIMSK1), Timer/Counter1 Interrupt Flag Register (TIFR1), Timer/Counter1 (TCNT1H, TCNT1L). Это не все регистры отведенные таймеру/счетчику 1 разработчиками микроконтроллера, но оставшиеся не важны для данной программы.

    Биты регистров.
    TCCR1A: COM1A1, COM1A0, COM1B1, COM1B0, COM1C1, COM1C0, WGM11, WGM10.
    TCCR1B: ICNC1, ICES1, –, WGM13, WGM12, CS12, CS11, CS10.
    TCCR1C: FOC1A, FOC1B, FOC1C, –, –, –, –, –.
    TIMSK1: –, –, ICIE1, –, OCIE1C, OCIE1B, OCIE1A, TOIE1.
    TIFR1: –, –, ICF1, –, OCF1C, OCF1B, OCF1A, TOV1.

    Биты отмеченные как "-" не используются. У них нет названия и их значение ни на что не влияет.

    TCNT1H и TCNT1L это счетные регистры таймера/счетчика 1. В них хранится то, что насчитал таймер/счетчик 1. Старший и младший байт соответственно.

    В данной программе таймер/счетчик 1 работает в режиме Normal. Для того, чтобы таймер/счетчик 1 работал в этом режиме необходимо, чтобы биты WGM11, WGM10 регистра TCCR1A и биты WGM13, WGM12 регистра TCCR1B были сброшены в 0.

    Теперь, чтобы таймер/счетчик 1 начал считать достаточно записать 1 в бит CS10 регистра TCCR1B. В данном случае предделитель не используется. Чтобы остановить таймер/счетчик 1 необходимо сбросить этот бит в 0.

    В программе разрешено прерывание по переполнению таймера/счетчика 1. Для этого бит TOIE1 регистра TIMSK1 устанавливается в 1. В конце инициализации флаг этого прерывания сбрасывается записью 1 в бит TOV1 регистра TIFR1.

    Обработчик прерывания останавливает таймер, обнуляет счетный регистр и посылает 0 по USART.

    Частое получение нулей свидетельствует о неисправности сенсора. Возможно загрязнение светодиодов или фототранзисторов, нарушение контакта и т.д. и т.п.

    Добавлено (10.01.2013, 09:50)
    ---------------------------------------------
    Осталось рассказать про настройки USART. В ATmega32U4 для этого предназначены следующие регистры: USART I/O Data Register 1 (UDR1), USART Control and Status Register 1 A (UCSR1A), USART Control and Status Register 1 B (UCSR1B), USART Control and Status Register 1 C (UCSR1C), USART Control and Status Register 1 D (UCSR1D), USART Baud Rate Registers (UBRRH1, UBRRL1).

    Биты регистров.
    UCSR1A: RXC1, TXC1, UDRE1, FE1, DOR1, UPE1, U2X1, MPCM1.
    UCSR1B: RXCIE1, TXCIE1, UDRIE1, RXEN1, TXEN1, UCSZ12, RXB81, TXB81.
    UCSR1C: UMSEL11, UMSEL10, UPM11, UPM10, USBS1, UCSZ11, UCSZ10, UCPOL1.
    UCSR1D: –, –, –, –, –, –, CTSEN, RTSEN.

    Биты отмеченные как "-" не используются.

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

    Скорость передачи данных через USART зависит от значения числа записанного в регистры UBRRH1 и UBRRL1. Чтобы USART работал на скорости 9600 bps при тактовой частоте микроконтроллера в 16 MHz в эти регистры необходимо записать 103 (0x00 в UBRRH1 и 0x67 в UBRRL1).

    Биты RXEN1 (Receiver Enable 1) и TXEN1 (Transmitter Enable 1) регистра UCSR1B предназначены для управления приемником и передатчиком USART. Записью 1 в эти биты включаются приемник и передатчик USART соответственно.

    Бит RXCIE1 (RX Complete Interrupt Enable 1) регистра UCSR1B отвечает за прерывание по завершению приема данных. Запись 1 в этот бит разрешает это прерывание.

    От значения бита UCSZ12 регистра UCSR1B и битов UCSZ11, UCSZ10 регистра UCSR1C зависит то, сколько бит данных будет передаваться/приниматься через USART. Запись 0 в UCSZ12 и 1 в UCSZ11, UCSZ10 предписывает USART работать с данными в один байт.

    Бит USBS1 регистра UCSR1C определяет число стоп битов в посылке. Записи 0 в этот бит соответствует один стоп бит.

    Биты UPM11 и UPM10 регистра UCSR1C предназначены для управления битом паритета. Он используется для контроля целостности переданных/полученных данных. В данной программе бит паритета не используется. Поэтому в биты UPM11 и UPM10 записаны 0.

    От битов UMSEL11, UMSEL10 регистра UCSR1C зависит режим работы USART. Я использовал асинхронный режим (Asynchronous Mode). Для этого, при инициализации, эти биты сбрасываются в 0.

    Пожалуй, еще нужно упомянуть бит U2X1 регистра UCSR1A. Он предназначен для управления скоростью передачи в асинхронном режиме. Запись 1 в этот бит приводит к удвоению скорости передачи. Ввиду отсутствия необходимости использования этой возможности, бит U2X1 сброшен в 0.

    После всех описанных настроек, по завершению приема данных через USART микроконтроллер будет передавать управление обработчику прерывания по завершению приема, где из UDR1 выполняется чтение полученного байта и отправка ответа.

    Для передачи байта достаточно поместить его в UDR1. Только прежде необходимо проверить свободен ли регистр. Для этого нужно узнать значение бита UDRE1 регистра UCSR1A. Если UDRE1 равен 1, регистр свободен и можно отправлять данные.

    Прикрепления: 4840957.png(23.6 Kb)


    Мой блог http://justforduino.blogspot.ru/
     
    m_wДата: Четверг, 10.01.2013, 09:56 | Сообщение # 6
    5 Вольт
    Группа: Пользователи
    Сообщений: 67
    Репутация: 2
    Статус: Offline
    Вроде все рассказал. Итак программа. Она написана на ассемблере в AVR Studio.

    http://yadi.sk/d/az3irbaF1kWiQ

    Теперь немного посчитаем.

    При работе микроконтроллера на частоте в 16 MHz таймер/счетчик 1 работая без предделителя переполнится за:

    (1.0 / 16000000.0) * 65536.0 = 0.004096 s

    При базовом расстоянии сенсора S равном 6 сантиметрам получим скорость:

    0.06 / 0.004096 = 14.6484 m/s

    Это минимальная скорость которая может быть измерена в данном случае.

    При скорости пули в 100 м/с и при базовом расстоянии сенсора S равном 6 сантиметрам таймер/счетчик 1 успеет сосчитать до:

    (0.06 / 100.0) / (1.0 / 16000000.0) = 9600.0

    Из этого следует, что погрешность вносимая программой ничтожна и составляет доли процента. Ей можно просто пренебречь.

    Для надежного срабатывания прерывания по внешнему сигналу на соответствующей ножке МК сигнал должен присутствовать не менее 2 тактов микроконтроллера. За это время пуля при скорости в 100 м/с успеет пролететь:

    100.0 * ((1.0 / 16000000.0) * 2.0) * 1000.0 = 0.00125 mm

    Диаметр использованных светодиодов и фототранзисторов составляет 3 миллиметра, а диаметр пули жесткой пневматики 4.5 миллиметра. Это значит, что свет от светодиода к фототранзистору будет перекрыт пулей намного дольше нежели минимально необходимо

    В заключении фото моего хрона.



    Более качественная картинка

    http://yadi.sk/d/dXnaSTQ41kW2y

    (3 МБ)
    Прикрепления: 3291163.jpg(127.4 Kb)


    Мой блог http://justforduino.blogspot.ru/

    Сообщение отредактировал m_w - Четверг, 10.01.2013, 09:58
     
    m_wДата: Четверг, 10.01.2013, 10:00 | Сообщение # 7
    5 Вольт
    Группа: Пользователи
    Сообщений: 67
    Репутация: 2
    Статус: Offline
    И скриншот измерений.

    Прикрепления: 7753922.png(24.8 Kb)


    Мой блог http://justforduino.blogspot.ru/
     
    ФОРУМ ДВ Робот dvrobot.ru » DV ROBOT » Библиотека Проектов » Хрон (хронограф) (Измерение скорости пули)
    • Страница 1 из 1
    • 1
    Поиск:

    ДВ Робот - Чат