Страница 1 из 1

Вопрос по точности измерения частоты

Добавлено: Пн мар 22, 2010 13:31:54
Tiratron
Сконструировал частотомер на микроконтроллере tiny2313, программу написал самостоятельно на ассемблере. Результат об измеренной частоте выводится на шесть семисегментных индикаторов. Но есть "бег" младшего разряда. Тоесть, если я на вход подаю сигнал от генераторного кварца с частотой 12 МГц, то на индикаторе я наблюдаю значения в диапазоне 11.999.5 - 12. 0005. Сам процес измерения длится 800 мс, за это время временные ворота открываются 160 раз на протяжении 5 мс. Так вот сам вопрос - как можно уменьщить (убрать) величину "бега" младшего разряда. Быть может программы для измерения частоты строятся по другому принципу, тогда буду благодарен за описание другого принципа построения программы.
За ранее благодарен за дельные ответы!!!!!

Re: Вопрос по точности измерения частоты

Добавлено: Пн мар 22, 2010 14:54:41
Neekeetos
А входной делитель есть? сама тини2313 от какого генератора работает? с какой частотой?

Re: Вопрос по точности измерения частоты

Добавлено: Пн мар 22, 2010 15:06:43
Tiratron
Внешний делитель - LB3500 (коэфициент деления 8 ) + 74LS90 (коэфициент деления 10). Контроллер затактирован кварцевым резонатором 10 МГц.

Re: Вопрос по точности измерения частоты

Добавлено: Вт мар 23, 2010 23:43:52
MisterDi
Стабильность обычного кварцевого резонатора порядка 1е-9, Поэтому избежать бега последнего разряда простыми способами не удастся. У Вас и так получилась достаточно высокая точность. В промышленных частотомерах узел задающего генератора - один из самых сложных в разработке, изготовлении и наладке.

Re: Вопрос по точности измерения частоты

Добавлено: Ср мар 24, 2010 01:01:01
Liv
Как раз о частотомере речь зашла вот здесь: http://radiokot.ru/forum/viewtopic.php? ... 5&start=40

Что касается метода счета, то входной сигнал нужно подавать на вход захвата, по началу измерительного интервала запоминать значение таймера. Таймер для получения длительных измерительных интервалов придется расширить программно (в прерывании по переполнению считать эти самые переполнения). Затем по следущим захватам считать входные импульсы, и так до конца интервала. После окончания интервала осуществить второй захват. Затем взять посчитанное количество периодов входной частоты и разделить на их суммарную длительность, которую нужно найти по захваченным значениям. Получится входная частота, причем относительная точность измерения не будет зависеть от измеряемой частоты. Это и есть метод обратного счета. Грабли всего одни, заключаются в программном разруливании ситуации одновременного возникновения прерываний по захвату и переполнению. Голый ATtiny2313 способен измерять примерно 120 кГц с программой на Си и почти 500 кГц с программой на ASM. Если не прибегать к изврату со счетом периодов вторым таймером.

Re: Вопрос по точности измерения частоты

Добавлено: Ср мар 24, 2010 12:01:24
Tiratron
Спасибо всем за ответы! Разобрался в чем была причина слишком большого "бега" разрядов. Как уже было написано я Т/С0 назначил таймером, а Т/С1 счетчиком, но поскольку для таймера Т/С0 при включенном делении на 1024 и частоте кварца 10 МГц, состовляет чуть более 26 мс. Поэтому я написал программу так что таймер в процессе работы многократно включается и выключается. При этом тоже самое творится и со счетчиком - проходит 160 измерительных циклов. Известно что за один период временных ворот может быть ошибка в один входной импульс. А если таких ворот 160, вот и набегает хорошенькая ошибка.
Вчера изменил программу, теперь у меня только одни временные ворота с длительностью порядка 26 мс. Ошибка при таком составляет только единицу!!!!! Теперь подправлю чуть плату чтобы Т/С0 был счетчиком, а Т/С1 - таймером, потому что на нем просто реализовать ворота длительностью 800 мс.

А вот с "Голый ATtiny2313 способен измерять примерно 120 кГц с программой на Си и почти 500 кГц с программой на ASM." несогласен. Все зависит от частоты кварца, ну и от максимальной частоты самого микроконтроллера. Максимальная входная частота которую контроллер способен воспринять приблизительно можно определить разделив значение частоты кварца на 2,2. Тоесть если у Вас стоит кварц 16 МГц, то максимальная измеряемая частота будет 7,2 МГц.
Удачи!!!!!

Re: Вопрос по точности измерения частоты

Добавлено: Ср мар 24, 2010 14:20:16
Liv
Tiratron писал(а):А вот с "Голый ATtiny2313 способен измерять примерно 120 кГц с программой на Си и почти 500 кГц с программой на ASM." несогласен.
Я имел в виду метод обратного счета с программным счетом входных периодов в прерывании по захвату. Просто счет импульсов действительно работает почти до 1/2 тактовой. Но что толку? Чтобы точно измерить период N импульсов входной частоты, нужно делать захват по первому и последнему фронту. Можно, конечно, подать входной сигнал одновременно на ICP1 (для захвата) и T0 (для счета), но это уже изврат.

Вы, как я понял, используете просто счет входных импульсов во временных воротах. Попробуйте таким способом измерить низкую частоту (например, 100 Гц) и скажите, какая получилась точность :)

Re: Вопрос по точности измерения частоты

Добавлено: Ср мар 24, 2010 15:01:46
12val12
Tiratron
может мерять до fclk/2.01
если на входе меандр со скважностью 2 (т е если есть любой предделитель на степень 2 если коэф деления не степень 2 то скважность сторого не равна 2)
проверялось так 16 битный таймер на счёт
8 битный в режим деления CLK пополам
так вот эту частоту считает точно
но это не все при равных затратах метод товарища =GM= http://electronix.ru/forum/index.php?sh ... 9796&st=15
дает точность в 10-100 раз выше

Re: Вопрос по точности измерения частоты

Добавлено: Ср мар 24, 2010 17:10:11
Tiratron
Ответ для Liv:
Если мне нужно будет измерять низкие частоты - единицы, десятки герц - единицы килогерц я пойду по другому пути. С помощью встроенного аналогового компаратора будет включатся таймер (первое опрокидывание компаратора), а при втором опрокидывании таймер отключится. Таким образом я получу время одного периода измеряемого сигнала. А потом последует реализация деления единицы на полученную длительность периода.

Ответ-вопрос для Liv и 12val12:
Вы упоминаете про метод захвата и в статье что посоветовали тоже про это говорится. Но как его можно реализовать на tiny2313. У неё есть вывод для подачи сигнала захвата, также захват может происходить по сигналу аналогового компаратора. Если Вы знаете как реализовать этот захват то расскажите, буду благодарен.

Re: Вопрос по точности измерения частоты

Добавлено: Ср мар 24, 2010 17:29:37
clawham
чтото я не понимаю вообще какие у Вас проблемы с макс частотой? если таймер 8-мибитный то даже на частоте 32 мегагерца переполнение таймера будет происходить всего навсего 16000000/256=125000 раз в секунду а с этим любой МК на 16-ти мегагерцах справится запросто....а если таймер 16-ти разрядный как на мегах?
считать вообще нужно чисто аппаратно....написать два обработчика прерываний - первый - переполнение счетного таймера, второй - окончание счета времязадающего таймера и остановку счетного таймера....а ещё лучше - его переполнение чтоб период был побольшев тактах системного генератора...
в теле основного циклоа по кнопке или в вечном цикле работаем двумя путями - если измерение не начато то сбрасываем все переменные переполнений и таймеров в ноль, запускаем оба таймера и ждем в вечном цикле(можно с допустимым таймаутом на случай глюков ) остановки первого таймера вторым...как только это произошло расчитываем частоту зная сколько натюкало в счетном таймере за время переполнения временнОго таймера :), потом выводим результат на экран и потом снова в начало алгоритма :)))
вот и все дела....

Re: Вопрос по точности измерения частоты

Добавлено: Ср мар 24, 2010 17:32:26
clawham
а если нужна уж очень высокая точность измерения низких частот то можно предусмотреть запись значений временнОго таймера по первым трем-четырем импульсам счетного таймера и если там всего один импульс был - временнОй таймер замедлить в 8 раз и снова повторить :) а дальше действовать из расчета один такт за 10 секунд а не 1200 тактов за секунду(как при высокочастотном измерении) :)

Re: Вопрос по точности измерения частоты

Добавлено: Чт мар 25, 2010 03:36:18
Liv
Tiratron писал(а):Если мне нужно будет измерять низкие частоты - единицы, десятки герц - единицы килогерц я пойду по другому пути.
Ну что ж, не хотите измерять любые частоты одинаково точно, как хотите.

Re: Вопрос по точности измерения частоты

Добавлено: Чт мар 25, 2010 10:11:34
Tiratron
Liv, я же ведь спрашивал - как реализовать захват на микроконтроллере tiny2313??? Судя по её архитектуре реализовать захват можно двумя путями - подачей фронта сигнала на вывод ICP или по сигналу аналогового компаратора. Можно, конечно, при старте и финише временных ворот формировать сигнал на каком-то выводе и соединить его с выводом ICP. Но, по-моему, подавать сигнал с одного внутреннего блока микроконтроллера на другой по средствам внешней связи (за пределами самого микроконтроллера) не рационально.

Re: Вопрос по точности измерения частоты

Добавлено: Чт мар 25, 2010 23:02:13
Liv
Tiratron писал(а):Liv, я же ведь спрашивал - как реализовать захват на микроконтроллере tiny2313??? Судя по её архитектуре реализовать захват можно двумя путями - подачей фронта сигнала на вывод ICP или по сигналу аналогового компаратора.
Всё верно, или через вход ICP, и через компаратор.
Tiratron писал(а):Можно, конечно, при старте и финише временных ворот формировать сигнал на каком-то выводе и соединить его с выводом ICP.
А зачем захват делать при старте и финише ворот? Захват нужно делать по фронту входного сигнала. Поэтому на вход ICP нужно подавать входной сигнал. При этом появляется проблема со счетом периодов входной частоты (сделать это можно только программно, наращивая в прерывании переменную), зато реализуется метод обратного счета, когда независимо от частоты входного сигнала получаем точность Тинтервала/Fclk.
Tiratron писал(а):Но, по-моему, подавать сигнал с одного внутреннего блока микроконтроллера на другой по средствам внешней связи (за пределами самого микроконтроллера) не рационально.
Полностью с Вами согласен. Это не очень красиво. А так можно было бы подать входной сигнал не только на ICP, но и на T0 для счета периодов. Вместо этого я в своем частотомере (ссылку давал выше) входную логику реализовал в маленькой CPLD. В результате получил возможность измерять методом обратного счета частоты до 100 МГц без предделителя (при условии соответствующего входного формирователя).

Re: Вопрос по точности измерения частоты

Добавлено: Пт мар 26, 2010 16:38:31
Tiratron
Liv, читал о методе обратного счета в книге "Искусство схемотехники", получается что в этом методе подсчитывается период, а потом, как написано, производится деление единицы на число подсчитанных импульсов. Хорошо, но как мне написать функцию деления на ассемблере для микроконтроллера, или я неправ??? Если неправ то, пожалуйста, поправте.

Re: Вопрос по точности измерения частоты

Добавлено: Пт мар 26, 2010 17:10:27
Liv
Tiratron писал(а):Liv, читал о методе обратного счета в книге "Искусство схемотехники", получается что в этом методе подсчитывается период, а потом, как написано, производится деление единицы на число подсчитанных импульсов.
Примерно так. Обычно измеряется длительность не одного периода входной частоты, а нескольких, сколько примерно вписывается в желаемый измерительный интервал. Затем количество периодов входного сигнала делят на полученную их длительность.
Tiratron писал(а):Хорошо, но как мне написать функцию деления на ассемблере для микроконтроллера
Ну Вы даёте! А что, написать деление на ассемблере - проблема? Помотрите, хотя бы, Application Note от Atmel AVR200. Ну и в сети полно примеров.

Re: Вопрос по точности измерения частоты

Добавлено: Пт мар 26, 2010 17:25:33
Tiratron
Спасибо, поищю примеры!!!!!

Re: Вопрос по точности измерения частоты

Добавлено: Пт мар 26, 2010 18:27:10
akl
Здравствуйте. Посмотрите эту веточку
http://radiokot.ru/forum/viewtopic.php?f=20&t=24703
Там есть скан из книги, очень хорошо описывающий этот метод. Есть в исходниках программы умножения, деления больших чисел вплоть до 2^79.