Технический форум по робототехнике.
Широкий » 10 фев 2010, 16:20
Делаю хронограф (для измерения скорости пули пневматического оружия).
Хочу сделать на Atmega 8.
Нашел схему рамочного датчика.
Есть вопрос:
1. Можно ли выход датчика присоединить напрямую к входу прерывания?
- Вложения
-
galex1981 » 10 фев 2010, 16:24
Можно конечно, но ИМХО лучше через токоограничительное сопротивление делай (100-200 Ом)
Широкий » 10 фев 2010, 16:45
Тогда алгоритмический вопрос - 2 рамки, 2 прерывания.
Чтобы не было ограничения на направление стрельбы имхо:
Есть переменная status. Она false если отсчета нет.
По любому прерыванию проверить состояние переменной status.
Если false, то стартуем внутренний таймер и делаем переменную true.
если true, то стопим таймер и записываем его показания во flash как результат измерения.
Чтобы не было зависаний сделать перрывание по переполнению таймера с индикацией ошибки и записью во flash значениея FFFF (типа ошибка).
Правилен ли алгоритмический подход?
galex1981 » 10 фев 2010, 16:58
Сходу вороде бы да, практически виднее будет
Широкий » 10 фев 2010, 17:23
Прикинул - при базе 10 см (между датчиками) и таймере с частотой 1МГц можно ловить скорости до 1000 м/с.
В АВР формула 0,1/переменная*константа будет считаться?
galex1981 » 10 фев 2010, 18:26
Лучше сначала выполнять все умножения а потом минимум делений
Широкий » 10 фев 2010, 19:34
Как в атмеге8 реализовать таймер частотой 1Мгц при тактовой частоте 8Мгц ?
Плюс прерывание по его переполнению.
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 и индицировать ошибку, это значит один импульс потерялся.
vvk74 » 10 фев 2010, 21:28
На фототранзисторах не слишком медленно будет? У меня тоже подобная идея есть я правда думаю сделать контактные рамки из фольги алюминиевой с зазором и две рамки на расстоянии 0.5 м располагать. А с фототранзисторами я делал, пуля у меня правда посерьезней будет (18х45), располагал два фотодатчика в трубке на расстоянии 100 мм и замерял время пролета, датчик оказался одноразовым
после выстрела вся конструкция вместе с дачиком МК и индикатором улетела на метр оборвав все провода.
boez » 11 фев 2010, 12:56
а надо смотреть характеристики конкретных транзисторов. Будет медленно - делать на фотодиодах.
Victorovych » 11 фев 2010, 13:35
[quote="Широкий"]...при тактовой частоте 8Мгц ?...quote]
Внутренний RC не используй - плыть будет
Master » 11 фев 2010, 13:44
Фотодиод и фототранзистор одно и тоже, полюбому базовую ногу фототранзистора никто не юзает.
Внутренний кварц не юзать - поддерживаю.
Широкий » 11 фев 2010, 14:24
Вот потому и рамочный. В него стрелять можно с расстояния (главное попасть куда надо).
Хотел бы найти схему индукционного датчика - было бы ещё кошернее. Толь чтобы рамка индукционная была не меньше чем 20 на 20 см...
По поводу программирования - я думал стартовать таймер если статус 0. А если статус 1 брать его показания. А по переполнению (16 бит) - выдавать ошибку. Так одним 16-битным таймером можно обойтись. Переполнение возникнет (при частоте таймера 1 Мгц) через 0,8 секунды примерно. Что есть гут.
В ППЗУ писать количество тиков таймера замеренное. Пересчитывать при выдаче на индикатор.
По поводу индикатора - у меня валяются 3 принтера старых лазерных. У них ЖК 2 строчки вроде - думал его и примостырить.
Кроме того дома лежит ардуино - на нем прошивку буду тестить.
vvk74 » 11 фев 2010, 21:34
Victorovych писал(а):Широкий писал(а):...при тактовой частоте 8Мгц ?...quote]
Внутренний RC не используй - плыть будет
Вы его в воду не пускайте, он и не уплывет
а если серьезно, то для такой задачи особая стабильность не нужна, я часы делал с использованием внутреннего генератора (у него кстати стабильность почти как у керамического резонатора) так уход был порядка 1-2 сек в сутки.
Широкий » 11 фев 2010, 23:57
Пуля при скорости 300 м/с пролетает расстояние 0,1 м за 0,00033 сеунды. Так что тактовая частота пороговая касательно минимальной погрешности на менее 500Кгц.