Двойной измеритель частоты и периода (ARDUINO UNO)


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

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

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

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

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

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

Схема частотомера показана на рисунке.

Принципиальная схема двойного измерителя частоты и периода (ARDUINO UNO)

Рис. 1. Принципиальная схема двойного измерителя частоты и периода (ARDUINO UNO).

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

Программа для МК

Код программы для микроконтроллера

Рис. Код программы для микроконтроллера.

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

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

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

Программа на языке C++ приведена в таблице.

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

#include

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

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

LiquidCxystal lcd (2, 3, 4, 5, 6, 7);

Для измерения периода используется функция: pulseln . Эта функция измеряет в микросекундах длительность положительного либо отрицательного перепада входного импульса.

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

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

Htime1=pulseln(8,HIGH);

Ltime1=pulseln(8,LOW);

Htime=pulseln(10,HIGH);

Ltime=pulseln(10,LOW);

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

Ttime1=Htime1+Ltime1;

Ttime=Htime+Ltime;

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

fzequency1=1000000/Ttime1;

frequency=1000000/Ttime;

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

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

delay(1000);

Если на каком-то из входов нет сигнала, и нет сигнала на обоих входах, то в соответствующих строках будет «inf».

Каравкин В. РК-04-20.


0 134 На микроконтроллерах
частотомер частота измеритель частоты частот микроконтроллер avr микроконтроллер arduino
Оставить комментарий:

cashback