Частотомер на ардуино

IgorU
Offline
Зарегистрирован: 03.12.2014

Есть необходимость с помощью ардуино Мега измерять частоту от 1Мгц до 30 Мгц и максимально возможной точностью.  Думаю, на цифровом входе нужно посчитать количество импульсов за период, вот только проблема в том, что в Loop будет трудится и прочий код и временной интервал может плавать... Грызет сомнение, - справится ли с 30-тью Мгц, ведь частота самого МК = 16Мгц???  Кто-нибудь реализовал данную тему, есть опыт? Поделитесь пожалуйста, как это делается!

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

IgorU, не справится. Берите DUE. Либо дешевые микрочиповские PIC, они могут работать с частотами выше тактовой.

IgorU
Offline
Зарегистрирован: 03.12.2014

Согласен, 84 Мгц на DUE - интереснее. Теперь как производить опрос входной и опорной частоты МК программно, есть примеры кода? Ну, для начала увидеть бы собственную частоту МК.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

IgorU, конечно есть. Всё давно придумано и сделано в виде библы.

 

Datak
Offline
Зарегистрирован: 09.10.2014

Если не ошибаюсь, входные импульсы на ноге T1 можно считать таймером. Конкретных цифр не подскажу, но в любом случае, это в разы быстрее чем программно.

IgorU
Offline
Зарегистрирован: 03.12.2014

dimax пишет:
IgorU, конечно есть. Всё давно придумано и сделано в виде библы.

Скачал, попробовал запустить, выдает ошибку компиляции:
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.
Файл лежит вместе со всеми остальными в одном каталоге...

Datak пишет:
в любом случае, это в разы быстрее чем программно.

Где эта нога? Можно подробнее с таймером?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

IgorU пишет:

fatal error: FreqCount.h: No such file or directory compilation terminated.

Файл лежит вместе со всеми остальными в одном каталоге...

Какой полный путь к этому файлу?

IgorU
Offline
Зарегистрирован: 03.12.2014

Я распаковал скаченный архив, распаковал его, в обособленную папку(D:\FreqCount-master\examples\Serial_Output), из него запускаю демонстрашку "Serial_Output.pde"

Разобрался... Скопировал в папку библиотеки, все нормально.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Переименуй папку FreqCount-master в FreqCount. Потом перенеси её в папку с библиотеками для ардуино: Мои Документы -> Arduino -> libraries (C:\Users\%USERNAME%\Documents\Arduino\libraries\). Примеры должны появится в меню Arduino IDE. Оттуда их и запускай.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

IgorU, для библиотек существуют две специальные папки.

C:\Program Files (x86)\arduino\libraries\

C:\Users\%USERNAME%\Documents\Arduino\libraries\

 

IgorU
Offline
Зарегистрирован: 03.12.2014

Запустил, в мониторе порта нули. Должна быть отражена частота внутреннего генератора или все таки на какую-то ногу нужно сигнал подать???

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

IgorU пишет:

Запустил, в мониторе порта нули. Должна быть отражена частота внутреннего генератора или все таки на какую-то ногу нужно сигнал подать???

Там где вы качали все же написанно, почему не читаете.

Вот на этот пин нужно подать измеряемый сигнал.

Board Frequency
Input Pin
 
Teensy 3.0, 3.1, 3.2 13 -
Teensy LC 13 -
Teensy 2.0 11  
Teensy++ 2.0 6  
Teensy++ 1.0 6  
Arduino Uno 5  
Arduino Leonardo 12  
Arduino Mega 47  
Sanguino 1  

 

Datak
Offline
Зарегистрирован: 09.10.2014

IgorU пишет:
Datak пишет:
в любом случае, это в разы быстрее чем программно.
Где эта нога? Можно подробнее с таймером?

Это нога микроконтроллера, ATmega328, например. Номер ноги нужно узнать в даташите на контроллер, а потом посмотреть, какой ардуиновской ноге она соответствует.

Там же, в даташите, смотрите и подробности - скорее всего, в разделе про 16-разрядный таймер.

Из меня тут советчик плохой, сам я такого не делал. Но общий смысл в том, что таймеру на вход можно подавать не только внутреннюю частоту контроллера, но и внешний сигнал с определённой ноги.

А дальше - всё как обычно. Считаем количество импульсов за определённый интервал времени (или наоборот - время за которое насчитали определённое количество импульсов). По результатам вычисляем частоту.

IgorU
Offline
Зарегистрирован: 03.12.2014

bodriy2014 пишет:
Вот на этот пин нужно подать измеряемый сигнал.

Спасибо. Подал на Меге 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.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

IgorU пишет:

bodriy2014 пишет:
Вот на этот пин нужно подать измеряемый сигнал.

Спасибо. Подал на Меге 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 и тот что там стоит кварц замените на более точный.

Вот пример точного кварца

Там чеовек их за недорого делал и продавал.

Частотомер с высокостабильным температурно-компенсированным кварцевым генератором

А на ардуино быстро, дешево но не точно!)