реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Измерение ширины импульса, с помощью Меги 16
dvs85
сообщение Jul 7 2008, 00:04
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 86
Регистрация: 24-03-08
Из: Владивосток
Пользователь №: 36 170



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

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

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

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

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

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

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

Подскажите, это правильный алгоритм? Не могу понять также, как посчитать сам интервал таймером..
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Jul 7 2008, 02:04
Сообщение #2


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Цитата(dvs85 @ Jul 7 2008, 09:04) *
Все пытаюсь сделать программу для измерения ширины импульса. Мне посоветовали следующий алгоритм:

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

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

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

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

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

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

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

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


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
dvs85
сообщение Jul 7 2008, 03:19
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 86
Регистрация: 24-03-08
Из: Владивосток
Пользователь №: 36 170



Импульс - прямоугольный. Длительность любая, насколько хватит регистров. Амплитуда - 5 вольт. Частота очень небольшая - это тестовая программа, т.е. пускается одиночный импульс и измеряется его длительность.
Go to the top of the page
 
+Quote Post
dvs85
сообщение Jul 7 2008, 05:01
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 86
Регистрация: 24-03-08
Из: Владивосток
Пользователь №: 36 170



Можно ли сделать так к примеру: Компаратор включает таймер, тот начинает считать число переполнений, которые происходят примерно допустим в 0,1 секунду, и затем это число переполнений умножается на 0,1 секунды и выводится.. Это будет правильно?
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jul 7 2008, 05:17
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(dvs85 @ Jul 7 2008, 03:04) *
Подскажите, это правильный алгоритм? Не могу понять также, как посчитать сам интервал таймером..
Такой алгоритм имеет право быть. Только необходимо определиться с параметрами импульса и точностью измерений. Например, приведенный Вам алгоритм не сможет замерить длительность "очень коротких" импульсов - если импульс закончится до того, как программа выйдет из прерывания, инициирующего начало измерений.
Как считать интервал? Зависит от длительности и требуемой точности измерения. Например, можно измерять импульс по счетному регистру (зная, что каждая единица = Х мс или = Х мкс), можно считать ещё и переполнения таймера, расширяя программным путём счетный регистр таймера...
P.S. А, можно считать только переполнения таймера, если импульс очень длинный...
Go to the top of the page
 
+Quote Post
dvs85
сообщение Jul 7 2008, 05:27
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 86
Регистрация: 24-03-08
Из: Владивосток
Пользователь №: 36 170



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


А можно об этом попобробнее?
Что значит
Цитата
каждая единица = Х мс
?
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jul 7 2008, 05:36
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(dvs85 @ Jul 7 2008, 08:27) *
А можно об этом попобробнее?
Ваш МК тактируется от некоторого источника, например, кварц 10МГц. Таймер Вы запускаете с пределителем равным 1, тогда каждая единица в счетном регистре 0,1 мкс
Go to the top of the page
 
+Quote Post
dvs85
сообщение Jul 7 2008, 05:40
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 86
Регистрация: 24-03-08
Из: Владивосток
Пользователь №: 36 170



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

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

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

Сообщение отредактировал dvs85 - Jul 7 2008, 05:47
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jul 7 2008, 05:46
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Значение счетного регистра изменяются в зависимости от режима работы таймера, частоты источника тактирования и пределителя.
Go to the top of the page
 
+Quote Post
dvs85
сообщение Jul 7 2008, 05:50
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 86
Регистрация: 24-03-08
Из: Владивосток
Пользователь №: 36 170



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


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


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

Написано так

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

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

Сообщение отредактировал dvs85 - Jul 7 2008, 05:56
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jul 7 2008, 06:11
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(dvs85 @ Jul 7 2008, 08:40) *
Единица это имеется в виду тик таймера? То есть таймер тикнул, значение регистра изменилось на 1?
Что Вы понимаете под "тик таймера"? Обычно - это прерывание от таймера...
Цитата(dvs85 @ Jul 7 2008, 08:40) *
Каким образом происходит расширение счетного регистра?
Таймер имеет счетный регистр (8 бит или 16). Пусть, счетный регистр - 8 бит, тогда если подсчитывать число переполнений таймера в восьмибитном регистре (или ячейке памяти), мы расширяем программным путём его значение - оно становится 16-тибитным: старшие 8 бит -в ячейке памяти или регистре (число переполнений), младшие 8 бит - счетный регистр таймера. По-аналогии, подсчет в 16-тибитном слове числа переполнений таймера, имеющего 16-тибитный счетный регистр, расширяем счетный регистр до 32 бит.

Цитата(dvs85 @ Jul 7 2008, 08:50) *
То есть если частота кварца 4000000, предделитель = 1, режим работы по сравнению с регистром сравнения. Что из этого получается?
Это что за режим - не понимаю? Каждые 1/4000000=0.25 мкс к счетному регистру таймера будет прибавляться (вычитаться) единица. Дальнейшее поведение зависит от режима таймера: normal, PWM, fast PWM, CTC - и всё это в разновидностях...
Go to the top of the page
 
+Quote Post
dvs85
сообщение Jul 7 2008, 06:16
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 86
Регистрация: 24-03-08
Из: Владивосток
Пользователь №: 36 170



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

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

Сообщение отредактировал dvs85 - Jul 7 2008, 06:20
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jul 7 2008, 06:26
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(dvs85 @ Jul 7 2008, 09:16) *
В общем, что нужно сделать чтобы посчитать короткие импульсы (я так понимаю, если будет возможность считать короткие импульсы, то будет и возможность считать и импульсы подлинее)?
А то я не совсем понял, что програмно нужно сделать..
Вы, в начале, отпределитесь какие (по длительности) импульсы Вы хотите принимать и с какой точностью - это и будет определять: каким методом (алготитмом) длительность будет определяться...
Go to the top of the page
 
+Quote Post
dvs85
сообщение Jul 7 2008, 06:29
Сообщение #14


Частый гость
**

Группа: Участник
Сообщений: 86
Регистрация: 24-03-08
Из: Владивосток
Пользователь №: 36 170



Длительность от мсек до минут.. точность - сотые мсек
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jul 7 2008, 06:54
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(dvs85 @ Jul 7 2008, 09:29) *
Длительность от мсек до минут.. точность - сотые мсек
У Вас - что? Устройство исключительно для определения длительности импульсов? Уж очень требования - широкие...
Тагда, наверное, так:

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

P.S. Пределитель 1 - не догма, можно и 8 или 64 (может быть).
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 03:13
Рейтинг@Mail.ru


Страница сгенерированна за 0.16804 секунд с 7
ELECTRONIX ©2004-2016