roboforum.ru

Технический форум по робототехнике.

Хронограф - помогите, плиз

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Хронограф - помогите, плиз

Сообщение Широкий » 10 фев 2010, 16:20

Делаю хронограф (для измерения скорости пули пневматического оружия).
Хочу сделать на Atmega 8.
Нашел схему рамочного датчика.
Есть вопрос:
1. Можно ли выход датчика присоединить напрямую к входу прерывания?
Вложения
Ramka.jpg
Аватара пользователя
Широкий
 
Сообщения: 185
Зарегистрирован: 25 сен 2006, 20:56
Откуда: Можайск
Skype: rtt1971
прог. языки: Java, C++
ФИО: АВ

Re: Хронограф - помогите, плиз

Сообщение galex1981 » 10 фев 2010, 16:24

Можно конечно, но ИМХО лучше через токоограничительное сопротивление делай (100-200 Ом)
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: Хронограф - помогите, плиз

Сообщение Широкий » 10 фев 2010, 16:45

Тогда алгоритмический вопрос - 2 рамки, 2 прерывания.
Чтобы не было ограничения на направление стрельбы имхо:
Есть переменная status. Она false если отсчета нет.
По любому прерыванию проверить состояние переменной status.
Если false, то стартуем внутренний таймер и делаем переменную true.
если true, то стопим таймер и записываем его показания во flash как результат измерения.

Чтобы не было зависаний сделать перрывание по переполнению таймера с индикацией ошибки и записью во flash значениея FFFF (типа ошибка).

Правилен ли алгоритмический подход?
Аватара пользователя
Широкий
 
Сообщения: 185
Зарегистрирован: 25 сен 2006, 20:56
Откуда: Можайск
Skype: rtt1971
прог. языки: Java, C++
ФИО: АВ

Re: Хронограф - помогите, плиз

Сообщение galex1981 » 10 фев 2010, 16:58

Сходу вороде бы да, практически виднее будет
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: Хронограф - помогите, плиз

Сообщение Широкий » 10 фев 2010, 17:23

Прикинул - при базе 10 см (между датчиками) и таймере с частотой 1МГц можно ловить скорости до 1000 м/с.
В АВР формула 0,1/переменная*константа будет считаться?
Аватара пользователя
Широкий
 
Сообщения: 185
Зарегистрирован: 25 сен 2006, 20:56
Откуда: Можайск
Skype: rtt1971
прог. языки: Java, C++
ФИО: АВ

Re: Хронограф - помогите, плиз

Сообщение galex1981 » 10 фев 2010, 18:26

Лучше сначала выполнять все умножения а потом минимум делений
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: Хронограф - помогите, плиз

Сообщение Широкий » 10 фев 2010, 19:34

Как в атмеге8 реализовать таймер частотой 1Мгц при тактовой частоте 8Мгц ?
Плюс прерывание по его переполнению.
Аватара пользователя
Широкий
 
Сообщения: 185
Зарегистрирован: 25 сен 2006, 20:56
Откуда: Можайск
Skype: rtt1971
прог. языки: Java, C++
ФИО: АВ

Re: Хронограф - помогите, плиз

Сообщение boez » 10 фев 2010, 20:54

Для четкого определения интервала вне зависимости от того, чем там занята прога (небось и индикация предполагается?) я бы использовал Input Capture. Таймер молотит с определенной частотой (1 или 8 МГц) непрерывно, а датчик висит на входе compare (у меги8 это ICP0, он же PB0), по которому также настроено прерывание. По приходу прерывания смотрим переменую статус, если там false - переписываем ICR1 в переменную time1 (типа uint_16) и ставим status=true. Если уже true - достаем ICR1, вычитаем из него time1 и получаем время пролета пули в тиках, дальше делаем с ним что хотим. За счет 16-разрядного вычитания переполнение учтется автоматом. Ну и где-то отдельно можно повесить отдельный таймер - если status сильно долго висит в true - снести его в false и индицировать ошибку, это значит один импульс потерялся.
boez
 
Сообщения: 1981
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

Re: Хронограф - помогите, плиз

Сообщение vvk74 » 10 фев 2010, 21:28

На фототранзисторах не слишком медленно будет? У меня тоже подобная идея есть я правда думаю сделать контактные рамки из фольги алюминиевой с зазором и две рамки на расстоянии 0.5 м располагать. А с фототранзисторами я делал, пуля у меня правда посерьезней будет (18х45), располагал два фотодатчика в трубке на расстоянии 100 мм и замерял время пролета, датчик оказался одноразовым :D после выстрела вся конструкция вместе с дачиком МК и индикатором улетела на метр оборвав все провода.
vvk74
 
Сообщения: 128
Зарегистрирован: 08 сен 2009, 20:13
Откуда: Екатеринбург

Re: Хронограф - помогите, плиз

Сообщение boez » 11 фев 2010, 12:56

а надо смотреть характеристики конкретных транзисторов. Будет медленно - делать на фотодиодах.
boez
 
Сообщения: 1981
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

Re: Хронограф - помогите, плиз

Сообщение Victorovych » 11 фев 2010, 13:35

[quote="Широкий"]...при тактовой частоте 8Мгц ?...quote]
Внутренний RC не используй - плыть будет
Аватара пользователя
Victorovych
 
Сообщения: 491
Зарегистрирован: 20 сен 2007, 11:44
Откуда: Харьков
Skype: Victorovych_FF
прог. языки: ASM
ФИО: Иван ВикторОвич

Re: Хронограф - помогите, плиз

Сообщение Master » 11 фев 2010, 13:44

Фотодиод и фототранзистор одно и тоже, полюбому базовую ногу фототранзистора никто не юзает.
Внутренний кварц не юзать - поддерживаю.
Аватара пользователя
Master
 
Сообщения: 4468
Зарегистрирован: 21 дек 2006, 19:56
Откуда: Украина, г.Одесса
прог. языки: Delphi и С

Re: Хронограф - помогите, плиз

Сообщение Широкий » 11 фев 2010, 14:24

Вот потому и рамочный. В него стрелять можно с расстояния (главное попасть куда надо).

Хотел бы найти схему индукционного датчика - было бы ещё кошернее. Толь чтобы рамка индукционная была не меньше чем 20 на 20 см...

По поводу программирования - я думал стартовать таймер если статус 0. А если статус 1 брать его показания. А по переполнению (16 бит) - выдавать ошибку. Так одним 16-битным таймером можно обойтись. Переполнение возникнет (при частоте таймера 1 Мгц) через 0,8 секунды примерно. Что есть гут.

В ППЗУ писать количество тиков таймера замеренное. Пересчитывать при выдаче на индикатор.

По поводу индикатора - у меня валяются 3 принтера старых лазерных. У них ЖК 2 строчки вроде - думал его и примостырить.

Кроме того дома лежит ардуино - на нем прошивку буду тестить.
Аватара пользователя
Широкий
 
Сообщения: 185
Зарегистрирован: 25 сен 2006, 20:56
Откуда: Можайск
Skype: rtt1971
прог. языки: Java, C++
ФИО: АВ

Re: Хронограф - помогите, плиз

Сообщение vvk74 » 11 фев 2010, 21:34

Victorovych писал(а):
Широкий писал(а):...при тактовой частоте 8Мгц ?...quote]
Внутренний RC не используй - плыть будет
Вы его в воду не пускайте, он и не уплывет :) а если серьезно, то для такой задачи особая стабильность не нужна, я часы делал с использованием внутреннего генератора (у него кстати стабильность почти как у керамического резонатора) так уход был порядка 1-2 сек в сутки.
vvk74
 
Сообщения: 128
Зарегистрирован: 08 сен 2009, 20:13
Откуда: Екатеринбург

Re: Хронограф - помогите, плиз

Сообщение Широкий » 11 фев 2010, 23:57

Пуля при скорости 300 м/с пролетает расстояние 0,1 м за 0,00033 сеунды. Так что тактовая частота пороговая касательно минимальной погрешности на менее 500Кгц.
Аватара пользователя
Широкий
 
Сообщения: 185
Зарегистрирован: 25 сен 2006, 20:56
Откуда: Можайск
Skype: rtt1971
прог. языки: Java, C++
ФИО: АВ

След.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19