roboforum.ru

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

Таймер в режиме счетчика

Таймер в режиме счетчика

-= Александр =- » 22 окт 2005, 22:37

Народ, если кто делал, расскажите на пальцах как проще всего таймером длину импульса измерить? Как работают входы Т0 и Т1 и вообще че это такое. Цель - ШИМ в цифру преобразовать. Кстати есть ли такие хардовые конвертеры? Нао на хорошей скорости это делать...
В даташит не отправляйте, разбираться некогда...  :roll:

AlphA » 23 окт 2005, 10:49

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

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

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

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

-= Александр =- » 23 окт 2005, 11:10

Пасибо. А я полез в даташит и вычитал что-то про ICP вход и прочий геморрой...
А такая система работает надежно? Задача - система навигации на акселерометрах. У них на выходе ШИМ... Чтоб ошибки не было - надо чтоб все очень четко работало... Надеюсь прерывания обрабатываются с равной задержкой? Иначе черт знает что получится...  :roll:

AlphA » 23 окт 2005, 17:24

А это какие акселерометры? Я видел такие, что у них простой аналоговый выход - напряжение пропорциональное ускорению.
Такая система работает довольно точно, только если МК сильно не нагружен обработчиками других прерываний. А то задержка будет действительно варьироваться.

-= Александр =- » 23 окт 2005, 23:28

У меня на этом будет отдельный МК. Кроме того будет две системы, для дублрования... Акселерометр для опытов - ADXL202E. А вообще жду от Freescale какой-то модный, трехосевой, специально для навигации... Кстати нахаляву.  :wink:

North » 24 окт 2005, 10:04

Вообще-то специально для этих целей был создан input capture. Т. е. она позиционируется как фича, способная померять частоту, длительность импульса или вести лог событий. Работает она приблизительно так как описал Альфа. При наступлении события (изменения сигнала на входе input capture или на аналоговом компараторе) значение таймера записывается в регистр ICR1, что гарантирует синхронность полученного времени с пришествием события в отличие от программного метода. Также  в этом режиме доступен шумодав. Если input capture используеся для измерения длины импульса, то в подпрограмме обработки прерывания необходимо изменить фронт срабатывания на противоположный.


Rambler\'s Top100 Mail.ru counter