roboforum.ru

Технический форум по робототехнике.
Текущее время: 14 авг 2025, 03:44

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Таймер в режиме счетчика
СообщениеДобавлено: 22 окт 2005, 22:37 
Не в сети
Мастер Самоделкин
Аватара пользователя

Зарегистрирован: 11 окт 2004, 19:20
Сообщения: 3678
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич
Народ, если кто делал, расскажите на пальцах как проще всего таймером длину импульса измерить? Как работают входы Т0 и Т1 и вообще че это такое. Цель - ШИМ в цифру преобразовать. Кстати есть ли такие хардовые конвертеры? Нао на хорошей скорости это делать...
В даташит не отправляйте, разбираться некогда...  :roll:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 окт 2005, 10:49 
Не в сети

Зарегистрирован: 21 апр 2005, 01:19
Сообщения: 111
Откуда: Екб
Если измерить длину импульса, то это как раз режим таймера, а не счётчика.
T0 и T1 - это счётные входы т/с. Работают как такие же входы у обычных счётчиков, типа ИЕхх. Надо только установить соответствующий режим работы. Но в данной задаче они скорее всего не понадобятся.
А длину импульса меряем так:
* Т/с - в режиме таймера с тактированием от основогоно ТГ (предделитель - по вкусу);
* Измеряемый сигнал на вход Exernal Int;
* По приходу этого самого ExtInt смотрим чё в TCNTx - это и будет длина импульса (точнее - периода между приходами прерываний). Сбрасываем TCNTx - начиаем новый отсчёт;
* Ждём слудующего ExtInt...

Первый период скорее всего будет подсчитан не корректно. Все следующие - правильно.

Именно так я мерял периоды оборота колеса в велокомпьюере.

Теперь модификация для данной задачи. Сброс TCNTx делаем по переднему фронту прерывания, а по  спаду - берём значение из него (TCNTx).
Такое можно сделать двумя путями:
1) установить режим срабатывания ExtInt на передний фронт, а по приходу его сразу переставить на срабатывание по спаду; а по приходу спада - обратно на передний фронт.
2) установить ExtInt на срабатывание по обеим фронтам (any logical change) и различать их программно (нога INTx должна читаться как PinX даже в режиме внешнего прерывания).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 окт 2005, 11:10 
Не в сети
Мастер Самоделкин
Аватара пользователя

Зарегистрирован: 11 окт 2004, 19:20
Сообщения: 3678
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич
Пасибо. А я полез в даташит и вычитал что-то про ICP вход и прочий геморрой...
А такая система работает надежно? Задача - система навигации на акселерометрах. У них на выходе ШИМ... Чтоб ошибки не было - надо чтоб все очень четко работало... Надеюсь прерывания обрабатываются с равной задержкой? Иначе черт знает что получится...  :roll:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 окт 2005, 17:24 
Не в сети

Зарегистрирован: 21 апр 2005, 01:19
Сообщения: 111
Откуда: Екб
А это какие акселерометры? Я видел такие, что у них простой аналоговый выход - напряжение пропорциональное ускорению.
Такая система работает довольно точно, только если МК сильно не нагружен обработчиками других прерываний. А то задержка будет действительно варьироваться.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 окт 2005, 23:28 
Не в сети
Мастер Самоделкин
Аватара пользователя

Зарегистрирован: 11 окт 2004, 19:20
Сообщения: 3678
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич
У меня на этом будет отдельный МК. Кроме того будет две системы, для дублрования... Акселерометр для опытов - ADXL202E. А вообще жду от Freescale какой-то модный, трехосевой, специально для навигации... Кстати нахаляву.  :wink:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 24 окт 2005, 10:04 
Не в сети
Аватара пользователя

Зарегистрирован: 27 июл 2005, 14:12
Сообщения: 197
Откуда: Дмитров, Москва
прог. языки: С, asm
Вообще-то специально для этих целей был создан input capture. Т. е. она позиционируется как фича, способная померять частоту, длительность импульса или вести лог событий. Работает она приблизительно так как описал Альфа. При наступлении события (изменения сигнала на входе input capture или на аналоговом компараторе) значение таймера записывается в регистр ICR1, что гарантирует синхронность полученного времени с пришествием события в отличие от программного метода. Также  в этом режиме доступен шумодав. Если input capture используеся для измерения длины импульса, то в подпрограмме обработки прерывания необходимо изменить фронт срабатывания на противоположный.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 4 часа


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

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


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

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO