Добавить в корзинуПозвонить
Найти в Дзене
Старый радио любитель

Частотомер на Ардуино (3).

Делаем программу, которая позволит измерять гораздо более высокие частоты, чем с помощью оператора PulseIn. Для этого нужно скачать библиотеку FreqCount. Её разработал американец Пол Стоффреген, за что ему огромное спасибо. Эта библиотека осуществляет подсчет количества импульсов за определенный интервал времени. С сайта скачиваем библиотеку в любую папку. После этого открываете IDE, вкладку Скетч. Откроется окно, где вы должны найти скаченный архив. Теперь можно писать программу. //***** Частотомер на основе библиотеки FreqCount ******* #include <FreqCount> // подключаем библиотеку long int Frq; // объявляем переменную, в которой будет хранится истинное
//значение частоты void setup() {
Serial.begin(9600); // открываем порт для передачи данных
FreqCount.begin(1000); // устанавливаем измерительный интервал, равный 1 с
} void loop() {
if (FreqCount.available()) { // если вход готов к считыванию
unsigned long count = FreqCount.read(); // то с

Делаем программу, которая позволит измерять гораздо более высокие частоты, чем с помощью оператора PulseIn. Для этого нужно скачать библиотеку FreqCount. Её разработал американец Пол Стоффреген, за что ему огромное спасибо. Эта библиотека осуществляет подсчет количества импульсов за определенный интервал времени.

С сайта скачиваем библиотеку в любую папку. После этого открываете IDE, вкладку Скетч.

Рис. 1.
Рис. 1.

Откроется окно, где вы должны найти скаченный архив.

Рис. 2.
Рис. 2.

Теперь можно писать программу.

//***** Частотомер на основе библиотеки FreqCount *******

#include <FreqCount> // подключаем библиотеку

long int Frq; // объявляем переменную, в которой будет хранится истинное
//значение частоты

void setup() {
Serial.begin(9600); // открываем порт для передачи данных
FreqCount.begin(1000); // устанавливаем измерительный интервал, равный 1 с
}

void loop() {
if (FreqCount.available()) { // если вход готов к считыванию
unsigned long count = FreqCount.read(); // то считываем количество
//импульсов за 1 с и результат записываем в переменную
count
Frq=count*0.999294; // используем экспериментальный коэффициент для
//коррекции показаний
Serial.println(Frq); // выводим значение частоты в порт
}
}

Вот и вся программа. Есть только одна неясность: на какой вход подавать измеряемый сигнал? Открыл с помощью WordPad файл FreqCountTimers.h из папки Arduino\libraries\FreqCount-1.2.0\util. Конечно, я там ничего не понял, но частое упоминание Timer навело на мысль, что сигнал нужно подавать именно на вход таймера.

Рис. 3.
Рис. 3.

О таких входов на плате всего два: Т0 и Т1 (цифровые входы 4 и 5). Оказалось, что подавать сигнал нужно на вход 5, и все заработало. Как и в предыдущем случае, пришлось подобрать корректирующий коэффициент, значение которого я и указал в программе.

Вот какие результаты измерения я получил.

Рис. 4.
Рис. 4.

Меня удивило, что граничная частота была такая высокая - 7,2 МГц, выше измерения утрачивали корректность. Значит, для измерения более высоких частот нужно на входе ставить делитель. Ведь даже делитель на 4 на одном корпусе D-триггеров типа 74АС74, позволит измерять частоту 7,2 х 4 =28,8 МГц. А, если использовать делитель на 10, - то 72 МГц.

Получив частотомер, можно превратить его в цифровую шкалу, введя значение промежуточной частоты. Я выбрал 9 МГц, т.к. при частоте гетеродина в районе 5 МГц.

Рис. 5.
Рис. 5.

Вот результаты работы.

Рис. 6.
Рис. 6.

Справа принимаемая частота, слева - частота гетеродина.

Этот вариант программы оказался гораздо лучше, чем предыдущий. С очень хорошей стабильностью - +/- единица младшего разряда. Так что можно делать обвес - и в корпус трансивера. Достоинством является то, что этот цифровой частотомер и цифровую шкалу можно легко модернизировать, изменив программу и загрузив ее в микропроцессор.

Всем здоровья и успехов!