Перейти к содержанию
    

Измерение ширины импульса

Все пытаюсь сделать программу для измерения ширины импульса. Мне посоветовали следующий алгоритм:

 

1. Настроить таймеры и компаратор

 

2. Включить прерывание по нарастающему фронту

 

3. По сработке прерывания запустить таймер

 

4. Переключить срабатывание прерывания по фронту

 

5. Сбросить флаг прерывания компаратора

 

6. Когда сработает прерывание по ниспадающему фронту - остановить таймер

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все пытаюсь сделать программу для измерения ширины импульса. Мне посоветовали следующий алгоритм:

 

1. Настроить таймеры и компаратор

 

2. Включить прерывание по нарастающему фронту

 

3. По сработке прерывания запустить таймер

 

4. Переключить срабатывание прерывания по фронту

 

5. Сбросить флаг прерывания компаратора

 

6. Когда сработает прерывание по ниспадающему фронту - остановить таймер

 

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

А какой формы сигнал: прмоугольник, пила, синус...?

Максимальная частота, амплитуда?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Импульс - прямоугольный. Длительность любая, насколько хватит регистров. Амплитуда - 5 вольт. Частота очень небольшая - это тестовая программа, т.е. пускается одиночный импульс и измеряется его длительность.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно ли сделать так к примеру: Компаратор включает таймер, тот начинает считать число переполнений, которые происходят примерно допустим в 0,1 секунду, и затем это число переполнений умножается на 0,1 секунды и выводится.. Это будет правильно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите, это правильный алгоритм? Не могу понять также, как посчитать сам интервал таймером..
Такой алгоритм имеет право быть. Только необходимо определиться с параметрами импульса и точностью измерений. Например, приведенный Вам алгоритм не сможет замерить длительность "очень коротких" импульсов - если импульс закончится до того, как программа выйдет из прерывания, инициирующего начало измерений.

Как считать интервал? Зависит от длительности и требуемой точности измерения. Например, можно измерять импульс по счетному регистру (зная, что каждая единица = Х мс или = Х мкс), можно считать ещё и переполнения таймера, расширяя программным путём счетный регистр таймера...

P.S. А, можно считать только переполнения таймера, если импульс очень длинный...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Например, можно измерять импульс по счетному регистру (зная, что каждая единица = Х мс или = Х мкс), можно считать ещё и переполнения таймера, расширяя программным путём счетный регистр таймера...

 

А можно об этом попобробнее?

Что значит

каждая единица = Х мс
?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А можно об этом попобробнее?
Ваш МК тактируется от некоторого источника, например, кварц 10МГц. Таймер Вы запускаете с пределителем равным 1, тогда каждая единица в счетном регистре 0,1 мкс

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Единица это имеется в виду тик таймера? То есть таймер тикнул, значение регистра изменилось на 1?

 

можно считать ещё и переполнения таймера, расширяя программным путём счетный регистр таймера..

Каким образом происходит расширение счетного регистра?

Изменено пользователем dvs85

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

То есть если частота кварца 4000000, предделитель = 1, режим работы по сравнению с регистром сравнения. Что из этого получается?

 

 

Мне написали как расчитывать, только я никак понять не могу как это применить

 

Написано так

 

(24 бит * К) / 4 МГц

 

Может кто расшифрует, что это значит?

Изменено пользователем dvs85

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Единица это имеется в виду тик таймера? То есть таймер тикнул, значение регистра изменилось на 1?
Что Вы понимаете под "тик таймера"? Обычно - это прерывание от таймера...

Каким образом происходит расширение счетного регистра?
Таймер имеет счетный регистр (8 бит или 16). Пусть, счетный регистр - 8 бит, тогда если подсчитывать число переполнений таймера в восьмибитном регистре (или ячейке памяти), мы расширяем программным путём его значение - оно становится 16-тибитным: старшие 8 бит -в ячейке памяти или регистре (число переполнений), младшие 8 бит - счетный регистр таймера. По-аналогии, подсчет в 16-тибитном слове числа переполнений таймера, имеющего 16-тибитный счетный регистр, расширяем счетный регистр до 32 бит.

 

То есть если частота кварца 4000000, предделитель = 1, режим работы по сравнению с регистром сравнения. Что из этого получается?
Это что за режим - не понимаю? Каждые 1/4000000=0.25 мкс к счетному регистру таймера будет прибавляться (вычитаться) единица. Дальнейшее поведение зависит от режима таймера: normal, PWM, fast PWM, CTC - и всё это в разновидностях...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В общем, что нужно сделать чтобы посчитать короткие импульсы (я так понимаю, если будет возможность считать короткие импульсы, то будет и возможность считать и импульсы подлинее)?

А то я не совсем понял, что програмно нужно сделать..

Э

то что за режим - не понимаю? Каждые 1/4000000=0.25 мкс к счетному регистру таймера будет прибавляться (вычитаться) единица. Дальнейшее поведение зависит от режима таймера: normal, PWM, fast PWM, CTC - и всё это в разновидностях...

Я пытался сделать в режиме сброса при совпадении

Изменено пользователем dvs85

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В общем, что нужно сделать чтобы посчитать короткие импульсы (я так понимаю, если будет возможность считать короткие импульсы, то будет и возможность считать и импульсы подлинее)?

А то я не совсем понял, что програмно нужно сделать..

Вы, в начале, отпределитесь какие (по длительности) импульсы Вы хотите принимать и с какой точностью - это и будет определять: каким методом (алготитмом) длительность будет определяться...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Длительность от мсек до минут.. точность - сотые мсек
У Вас - что? Устройство исключительно для определения длительности импульсов? Уж очень требования - широкие...

Тагда, наверное, так:

 

Таймер1, пределитель 1, normal (от 0 до FFFF). Ловить начало импульса на ICR1. Подсчитывать программно переполнения таймера. Ловить конец импульса на ICR1. По двум значениям регистра захвата и числу переполнений вычислять длительность.

 

P.S. Пределитель 1 - не догма, можно и 8 или 64 (может быть).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...