|
Счет частоты |
|
|
|
 |
Ответов
|
Mar 14 2007, 14:29
|

Знающий
   
Группа: Свой
Сообщений: 648
Регистрация: 11-02-06
Из: Санкт-Петербург
Пользователь №: 14 237

|
Цитата(djmixi(Димка) @ Mar 14 2007, 13:45)  Товарщи помогите посчитать частоту...нужно фискировать изменение частоты 400 кГц с точностью в 1кГц. я пишу на Алгоритме Билдере и думаю реализвать это так: 1. Настраиваю таймер0 внешний пин Т0. 2. Записываю в TCNT0 254. 3. По приходу импульса таймер переполняектся и срабатвывает прерывание от таймера 0 - там я прибавляю 1 к X. 4. В течении определенного времени провожу подсчет этих прерываний (по показанию X). Всё много проще. Есть два основных метода измерения частоты. 1. Подсчёт импульсов за единицу времени. В этом случае точность измерения зависит от того, сколько импульсов у Вас уложится за выбранную Вами единицу времени и насколько точно Вы сможете отмерить эту единицу. Именно этот метод лежит в основе предложенного Вами способа. Но реализован он у Вас нерационально (на мой взгляд). Предлагаю так. Счётчик 0 (8 битный) используем для отмеривания временных интервалов измерения. В Вашем случае этот интервал должен составлять не менее 1 мс. А счётчик 1 (16 битный) настраиваем на подсчёт импульсов с ножки Т1, куда и заводим исследуемую частоту. Прерывания будет генерить счётчик 0, например, по переполнению. В процедуре обработки считываем текущие показания счётчика 1, обнуляем его и вычисляем новое значение частоты. 2. Заполнение каждого пришедшего импульса импульсами существенно более высокой известной частоты. Этот способ применяется тогда, когда новое измеренное значение надо получать существенно чаще, чем это позволяет первый способ, вплоть до каждого периода. Для получения заявленной точности заполнение в Вашем случае будет частотой свыше 160 МГц, поэтому для реализации на AVR этот способ непригоден.
--------------------
Сделано в Китае. Упаковано в России.
|
|
|
|
|
Mar 14 2007, 15:23
|
Частый гость
 
Группа: Новичок
Сообщений: 75
Регистрация: 13-02-07
Пользователь №: 25 307

|
[quote name='Demeny' post='223613' date='Mar 14 2007, 17:29'] [quote name='djmixi(Димка)' post='223590' date='Mar 14 2007, 13:45'] Товарщи помогите посчитать частоту...нужно фискировать изменение частоты 400 кГц с точностью в 1кГц. я пишу на Алгоритме Билдере и думаю реализвать это так: 1. Настраиваю таймер0 внешний пин Т0. 2. Записываю в TCNT0 254. 3. По приходу импульса таймер переполняектся и срабатвывает прерывание от таймера 0 - там я прибавляю 1 к X. 4. В течении определенного времени провожу подсчет этих прерываний (по показанию X). [/quote] Всё много проще. Есть два основных метода измерения частоты.
1. Подсчёт импульсов за единицу времени. В этом случае точность измерения зависит от того, сколько импульсов у Вас уложится за выбранную Вами единицу времени и насколько точно Вы сможете отмерить эту единицу. Именно этот метод лежит в основе предложенного Вами способа. Но реализован он у Вас нерационально (на мой взгляд). Предлагаю так. Счётчик 0 (8 битный) используем для отмеривания временных интервалов измерения. В Вашем случае этот интервал должен составлять не менее 1 мс. А счётчик 1 (16 битный) настраиваем на подсчёт импульсов с ножки Т1, куда и заводим исследуемую частоту. Прерывания будет генерить счётчик 0, например, по переполнению. В процедуре обработки считываем текущие показания счётчика 1, обнуляем его и вычисляем новое значение частоты.
2. Заполнение каждого пришедшего импульса импульсами существенно более высокой известной частоты. Этот способ применяется тогда, когда новое измеренное значение надо получать существенно чаще, чем это позволяет первый способ, вплоть до каждого периода. Для получения заявленной точности заполнение в Вашем случае будет частотой свыше 160 МГц, поэтому для реализации на AVR этот способ непригоден. [/quote]
СПАСИБО ОСОБЕННО ЗА ПЕРВЫЙ СПОСПОБ! но возникал проблемма у меня тини26 контроллер там 8 разр таймер 0 - у него есть доступ в T0 а у первого таймера 16 разрядного нет настройки на T0....что делать???
[quote name='djmixi(Димка)' date='Mar 14 2007, 18:16' post='223630'] [quote name='Demeny' post='223613' date='Mar 14 2007, 17:29'] [quote name='djmixi(Димка)' post='223590' date='Mar 14 2007, 13:45'] Товарщи помогите посчитать частоту...нужно фискировать изменение частоты 400 кГц с точностью в 1кГц. я пишу на Алгоритме Билдере и думаю реализвать это так: 1. Настраиваю таймер0 внешний пин Т0. 2. Записываю в TCNT0 254. 3. По приходу импульса таймер переполняектся и срабатвывает прерывание от таймера 0 - там я прибавляю 1 к X. 4. В течении определенного времени провожу подсчет этих прерываний (по показанию X). [/quote] Всё много проще. Есть два основных метода измерения частоты.
1. Подсчёт импульсов за единицу времени. В этом случае точность измерения зависит от того, сколько импульсов у Вас уложится за выбранную Вами единицу времени и насколько точно Вы сможете отмерить эту единицу. Именно этот метод лежит в основе предложенного Вами способа. Но реализован он у Вас нерационально (на мой взгляд). Предлагаю так. Счётчик 0 (8 битный) используем для отмеривания временных интервалов измерения. В Вашем случае этот интервал должен составлять не менее 1 мс. А счётчик 1 (16 битный) настраиваем на подсчёт импульсов с ножки Т1, куда и заводим исследуемую частоту. Прерывания будет генерить счётчик 0, например, по переполнению. В процедуре обработки считываем текущие показания счётчика 1, обнуляем его и вычисляем новое значение частоты.
2. Заполнение каждого пришедшего импульса импульсами существенно более высокой известной частоты. Этот способ применяется тогда, когда новое измеренное значение надо получать существенно чаще, чем это позволяет первый способ, вплоть до каждого периода. Для получения заявленной точности заполнение в Вашем случае будет частотой свыше 160 МГц, поэтому для реализации на AVR этот способ непригоден. [/quote]
СПАСИБО ОСОБЕННО ЗА ПЕРВЫЙ СПОСПОБ! но возникал проблемма у меня тини26 контроллер там 8 разр таймер 0 - у него есть доступ в T0 а у первого таймера 16 разрядного нет настройки на T0....что делать??? ДЛЯ этого я и извращаюсь с таймером 0 - запихиваю туды 16 раз переменную X а таймер 1 для временных интервалов...
|
|
|
|
|
Mar 14 2007, 18:40
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(djmixi(Димка) @ Mar 14 2007, 18:16)  Цитата(Demeny @ Mar 14 2007, 17:29)  Цитата(djmixi(Димка) @ Mar 14 2007, 13:45)  Товарищи, помогите посчитать частоту...нужно фиксировать изменение частоты 400 кГц с точностью в 1кГц. я пишу на Алгоритме Билдере и думаю реализвать это так: 1. Настраиваю таймер0 внешний пин Т0. 2. Записываю в TCNT0 254. 3. По приходу импульса таймер переполняектся и срабатывает прерывание от таймера 0 - там я прибавляю 1 к X. 4. В течении определенного времени провожу подсчет этих прерываний (по показанию X).
Всё много проще. Есть два основных метода измерения частоты. 1. Подсчёт импульсов за единицу времени. В этом случае точность измерения зависит от того, сколько импульсов у Вас уложится за выбранную Вами единицу времени и насколько точно Вы сможете отмерить эту единицу. Именно этот метод лежит в основе предложенного Вами способа. Но реализован он у Вас нерационально (на мой взгляд). Предлагаю так. Счётчик 0 (8 битный) используем для отмеривания временных интервалов измерения. В Вашем случае этот интервал должен составлять не менее 1 мс. А счётчик 1 (16 битный) настраиваем на подсчёт импульсов с ножки Т1, куда и заводим исследуемую частоту. Прерывания будет генерить счётчик 0, например, по переполнению. В процедуре обработки считываем текущие показания счётчика 1, обнуляем его и вычисляем новое значение частоты. 2. Заполнение каждого пришедшего импульса импульсами существенно более высокой известной частоты. Этот способ применяется тогда, когда новое измеренное значение надо получать существенно чаще, чем это позволяет первый способ, вплоть до каждого периода. Для получения заявленной точности заполнение в Вашем случае будет частотой свыше 160 МГц, поэтому для реализации на AVR этот способ непригоден. СПАСИБО ОСОБЕННО ЗА ПЕРВЫЙ СПОСПОБ! но возникал проблемма у меня тини26 контроллер там 8 разр таймер 0 - у него есть доступ в T0 а у первого таймера 16 разрядного нет настройки на T0....что делать??? ДЛЯ этого я и извращаюсь с таймером 0 - запихиваю туды 16 раз переменную X а таймер 1 для временных интервалов... Делайте, как делали, поскольку у вас таймер1 тоже 8-битный. По моей оценке, даже если вы просто откроете окно на 10 мс, затем вычислите разность показаний таймера1, то посчитаете свои 400 кГц с точностью не хуже ±100 Гц. При условии, что у вас 16 МГц клок. Недавно было обсуждение похожего вопроса http://electronix.ru/forum/index.php?showtopic=27983, там правда мега 128 присутствовала, в посте 19 было предложено вообще без прерываний считать. Кстати, есть и третий способ, симбиоз первого и второго - заполнение точно М периодов частоты Fx периодами более высокой известной частоты Fo, точность существенно увеличивается. Для вашей частоты за примерно односекундное окно точность была бы не хуже ±0.025 Гц. Я в своё время на 8515 за 1.2 миллисекунды считал 1500 кГц с точностью ±10 Гц. К сожалению, данный подход на вашем МК не осуществим из-за отсутствия ICR.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
Сообщений в этой теме
djmixi(Димка) Счет частоты Mar 14 2007, 13:45 Dog Pawlowa Цитата(djmixi(Димка) @ Mar 14 2007, 1... Mar 14 2007, 14:11 muravei Цитата(djmixi(Димка) @ Mar 14 2007, 1... Mar 14 2007, 14:26 defunct Считаем количество импульсов и тактов, делим одно ... Mar 15 2007, 02:34  =GM= Цитата(defunct @ Mar 14 2007, 23:34) сорр... Mar 16 2007, 01:18   defunct Цитата(=GM= @ Mar 16 2007, 00:18) ....
Ни... Mar 16 2007, 02:46    =GM= Цитата(defunct @ Mar 15 2007, 23:46) коне... Mar 16 2007, 03:13 Яrik А какую максимальную частоту могут посчитать микро... Mar 14 2007, 22:05 =GM= Цитата(Яrik @ Mar 14 2007, 19:05) А какую... Mar 15 2007, 00:18
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|