Частотомер на ардуино
- Войдите на сайт для отправки комментариев
Ср, 03/02/2016 - 13:30
Есть необходимость с помощью ардуино Мега измерять частоту от 1Мгц до 30 Мгц и максимально возможной точностью. Думаю, на цифровом входе нужно посчитать количество импульсов за период, вот только проблема в том, что в Loop будет трудится и прочий код и временной интервал может плавать... Грызет сомнение, - справится ли с 30-тью Мгц, ведь частота самого МК = 16Мгц??? Кто-нибудь реализовал данную тему, есть опыт? Поделитесь пожалуйста, как это делается!
IgorU, не справится. Берите DUE. Либо дешевые микрочиповские PIC, они могут работать с частотами выше тактовой.
Согласен, 84 Мгц на DUE - интереснее. Теперь как производить опрос входной и опорной частоты МК программно, есть примеры кода? Ну, для начала увидеть бы собственную частоту МК.
IgorU, конечно есть. Всё давно придумано и сделано в виде библы.
Если не ошибаюсь, входные импульсы на ноге T1 можно считать таймером. Конкретных цифр не подскажу, но в любом случае, это в разы быстрее чем программно.
Скачал, попробовал запустить, выдает ошибку компиляции:
Arduino: 1.6.5 (Windows 7), Плата"Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)" Изменена опция сборки, пересобираем все Serial_Output.pde:6:23: fatal error: FreqCount.h: No such file or directory compilation terminated.
Файл лежит вместе со всеми остальными в одном каталоге...
Где эта нога? Можно подробнее с таймером?
fatal error: FreqCount.h: No such file or directory compilation terminated.
Файл лежит вместе со всеми остальными в одном каталоге...
Какой полный путь к этому файлу?
Я распаковал скаченный архив, распаковал его, в обособленную папку(D:\FreqCount-master\examples\Serial_Output), из него запускаю демонстрашку "Serial_Output.pde"
Разобрался... Скопировал в папку библиотеки, все нормально.
Переименуй папку FreqCount-master в FreqCount. Потом перенеси её в папку с библиотеками для ардуино: Мои Документы -> Arduino -> libraries (C:\Users\%USERNAME%\Documents\Arduino\libraries\). Примеры должны появится в меню Arduino IDE. Оттуда их и запускай.
IgorU, для библиотек существуют две специальные папки.
C:\Program Files (x86)\arduino\libraries\
C:\Users\%USERNAME%\Documents\Arduino\libraries\
Запустил, в мониторе порта нули. Должна быть отражена частота внутреннего генератора или все таки на какую-то ногу нужно сигнал подать???
Запустил, в мониторе порта нули. Должна быть отражена частота внутреннего генератора или все таки на какую-то ногу нужно сигнал подать???
Там где вы качали все же написанно, почему не читаете.
Вот на этот пин нужно подать измеряемый сигнал.
Input Pin
Это нога микроконтроллера, ATmega328, например. Номер ноги нужно узнать в даташите на контроллер, а потом посмотреть, какой ардуиновской ноге она соответствует.
Там же, в даташите, смотрите и подробности - скорее всего, в разделе про 16-разрядный таймер.
Из меня тут советчик плохой, сам я такого не делал. Но общий смысл в том, что таймеру на вход можно подавать не только внутреннюю частоту контроллера, но и внешний сигнал с определённой ноги.
А дальше - всё как обычно. Считаем количество импульсов за определённый интервал времени (или наоборот - время за которое насчитали определённое количество импульсов). По результатам вычисляем частоту.
Спасибо. Подал на Меге Pin47, результат не впечатлил. измеряет до 8 Мгц, выше бред полный(наверно с Мегой так и должно быть!)
50-100 Гц считает правильно, в Мгц разброс такой:
1000000-1000452/1000456 погрешеость 450 Гц
1800000-1800818/1800821 погрешность 820 Гц
3500000- 3501593/3501597 погрешность уже 1.6 Кгц
7000000 - 7003194/7003197 погрешность почти 3.2 Кгц
Имеется ли какой либо коэффициент в исходнике(чтобы поправить) или нужно методом тыка подобрать свой и корректировать измерения?
PS. На DUE - ничего не вышло, при компиляции куча ошибок со ссылкой на файл *.срр, подозреваю, что не для этой платформы библиотека. На плате стоит ATSAM3X8EAU.
Спасибо. Подал на Меге Pin47, результат не впечатлил. измеряет до 8 Мгц, выше бред полный(наверно с Мегой так и должно быть!)
50-100 Гц считает правильно, в Мгц разброс такой:
1000000-1000452/1000456 погрешеость 450 Гц
1800000-1800818/1800821 погрешность 820 Гц
3500000- 3501593/3501597 погрешность уже 1.6 Кгц
7000000 - 7003194/7003197 погрешность почти 3.2 Кгц
Имеется ли какой либо коэффициент в исходнике(чтобы поправить) или нужно методом тыка подобрать свой и корректировать измерения?
PS. На DUE - ничего не вышло, при компиляции куча ошибок со ссылкой на файл *.срр, подозреваю, что не для этой платформы библиотека. На плате стоит ATSAM3X8EAU.
--Ограничение упирается в частоту самоко микроконтроллера, так что выше нет-только другим более быстрым камнем.
--точнее тоже не получится связанно с кварцевым генератором и округлениями по таймеру.
Хотите мерять более быстрые сигналы и точно берите STM32 и тот что там стоит кварц замените на более точный.
Вот пример точного кварца
Там чеовек их за недорого делал и продавал.
Частотомер с высокостабильным температурно-компенсированным кварцевым генератором
А на ардуино быстро, дешево но не точно!)