Двойной частотомер на частоты до 1000Гц (Arduino UNO, 1602A)


В некоторых случаях одного частотомера бывает недостаточно, потому что нужно измерять частоту в двух разных местах схемы, и желательно одновременно.

Здесь приводится описание двойного частотомера, измеряющего частоту до 1 МГц, представляющего собой практически два частотомера, в общем корпусе, с общим двухстрочным дисппеем и общим источником питания. построенного на основе платы ARDUINO UNO.

Но, прежде всего, хочу напомнить, что ARDUINO UNO это небопьшая печатная плата, на которой расположен микроконтроллер ATMEGA328, а так же вся его «обвязка», необходимая для его работы, включая USB-программатор и источник питания.

У частотомера есть два входа и двухстрочный ЖК-индикатор. В одной строке он показывает частоту с первого входа, а в другой - со второго. Индикация в герцах.

Измерение частоты происходит путем измерения периода и вычисления из него частоты. Поэтому прибор хорошо измеряет и низкую частоту, показывая её с точностью до сотых долей Гц. Максимальная измеряемая частота составляет 1 Мгц.

Но, при использовании какого-либо входного делителя частоты, верхний предел можно расширить и измерять десятки и сотни МГц, в этом случае нужно будет умножать показания прибора на коэффициент деления внешнего делителя. Впрочем, если прибор будет постоянно работать именно с этим делителем, это можно сделать и программно.

Принципиальная схема

Схема частотомера показана на рисунке. Как видно из схемы, к цифровым портам D2-D7 платы ARDUINO UNO подключен модуль жидкокристаллического индикатора Н1 типа 1602А.

А входные сигналы поступают через вполне понятные усилители-формирователи на транзисторах VT1 и VT2 и микросхеме D1 на порты D8 и D10. Питаются входные усилители-формирователи и ЖК-индикатор от стабилизатора напряжения 5V. имеющегося на плате ARDUINO UNO.

Принципиальная схема двойного частотомера на частоты до 1000Гц (Arduino UNO, 1602A)

Рис. 1. Принципиальная схема двойного частотомера на частоты до 1000Гц (Arduino UNO, 1602A).

Питание +5V на ЖК-индикатор поступает через вывод 2 его платы. Общий минус на выводы 3 и 1. Поскольку в индикатор планируется только передавать информацию от контроллера, а не наоборот, вывод 5 (RW) соединен с нулем. Данные на ЖК-индикатор будут поступать через его выводы 11-14 (выводы 7-10 не используются).

Выводы 15 и 16 служат для подключения подсветки ЖК-индикатора На них подается напряжение 5V.

Для управления ЖК-индикатором решено было использовать порты с D2 по D7 платы ARDUINO UNO. В принципе, можно и другие порты, но я вот так, решил использовать именно эти. Программа на языке C++ приведена в таблице.

Для того чтобы индикатор взаимодействовал с ARDUINO UNO нужно в программу загрузить подпрограмму для его управления. Такие подпрограммы называются «библиотеками», и в программном комплекте для ARDUINO UNO есть много разных «библиотек». Для работы с ЖК-индикатором на основе HD44780 нужна библиотека Liquidcrystal. Поэтому программа (таблица) начинается с загрузки этой библиотеки:

*include

Эта строка дает команду загрузить в ARDUINO UNO данную библиотеку. Затем, нужно назначить порты ARDUINO UNO, которые будут работать с ЖК-индикатором. Я выбрал порты с D2 по D7.

Можно выбрать другие. Эти порты назначены строкой:

LiquidCryatal led(2, 3, 4, 5, 6, 7);

Программа микроконтроллера для двойного частотомера на ARDUINO UNO

Рис. 0. Программа микроконтроллера для двойного частотомера на ARDUINO UNO.

Среди набора функций языка для программирования ARDUINO UNO есть такая функция: pulsein , перевести это можно как «входной импульс». Эта функция измеряет в микросекундах длительность положительного либо отрицательного перепада входного импульса. Поэтому измерение частоты здесь будет происходить через предварительное измерение периода.

Так как длительность положительного и отрицательного полупериодов в реальном входном сигнале могут различаться, если мы хотим измерить период входных импульсов нам нужно изменить и сложить длительность положительного и отрицательного полупериодов.

В программе длительность положительного полупериода обозначена для первого входа Htime1 , а для второго входа Htime, длительность отрицательного полупериода, соответственно, - Ltime1 и Ltime . ну а длительность всего периода, соответственно - Ttime1 и Ttirne. Измерение полупериодов происходит в строках:

Htime1=pulseln(8,HIGH);

Ltime1=pulseln(8,LOW);

Htime=pulseln(10,HIGH);

Ltime=pulseln(10,LOW);

Затем, производится вычисление полного периода в строках:

Ttime1=Htime1+Ltime1;

Ttime=Htime+Ltime;

Вычисление частоты, учитывая, что значение периода выражено в микросекундах. происходит здесь:

frequency1=1000000/Ttime1;

frequency=1000000/Ttime;

Затем, указывается верхняя строка ЖК-индикатора (0). в которую нужно записывать результат частоты с первого входа

lсd.setCursor(0,0);

И результат записывается в ЖК-индикатор

lcd.print(frequencyl);

Далее указывается единица измерения: lсd.print("hz");

Затем, указывается нижняя строка ЖК-индикатора (1), в которую нужно записывать результат частоты со второго входа

lсd.setCursor(0,1) ;

И результат записывается в ЖК-индикатор

lсd.print(frequency);

Далее указывается единица измерения: lсd.print("hz");

Завершается рабочий цикл частотомера индикацией результата в течение одной секунды, вернее, паузой в одну секунду, в течение которой на табло остается измеренное значение (время выражено в миллисекундах, поэтому 1 сек = 1000):

delay(1000);

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

frequency1=1000000/Ttime1;

или в строке:

frequency=1000000/Ttime;

в зависимости от того, с каким входом используется делитель, число 1000000 заменить другим, с поправкой на коэффициент деления входного делителя. Например, с первым входом работает входной делитель с коэффициентом деления 100, тогда строка вычисления частоты с первого входа будет выглядеть таким образом:

frequency1=100000000/Ttime1;

Теперь показания частоты с первого входа будут выводиться на дисплей уже умноженными на 100.

Каравкин В. РК-07-18.


1 181 На микроконтроллерах
микроконтроллер avr микроконтроллер arduino частотомер измерения
Оставить комментарий:

cashback