Двойной измеритель частоты и периода (ARDUINO UNO)
В некоторых случаях одного частотомера бывает недостаточно, потому что нужно измерять частоту в двух разных местах схемы, и желательно одновременно. К тому же, бывает желательно знать не только частоту, но и период измеряемого сигнала.
Здесь приводится описание двойного прибора, имеющего два входа, на каждом из которых, измеряющего частоту до 1 МГц, и период от 1 микросекунды, представляющего собой практически два частотомера - измерителя периода, в общем корпусе, с общим четырехстрочным дисплеем и общим источником питания, построенного на основе платы ARDUINO UNO.
Но, прежде всего, хочу напомнить, что ARDUINO UNO это небольшая печатная плата, на которой расположен микроконтроллер ATMEGA328, а так же вся его «обвязка», необходимая для его работы, включая USB-программатор и источник питания.
У прибора есть два входа и четырехстрочный ЖК-индикатор. В первой и второй строках он показывает частоту и период с первого входа, а в третей и четвертой строках частоту и период со второго входа. Индикация в герцах и микросекундах.
Прибор измеряет период в микросекундах, а затем из него вычисляет частоту в герцах. Поэтому прибор хорошо измеряет и низкую частоту, показывая её с точностью до сотых долей Гц. Максимальная измеряемая частота составляет 1 Мгц (отображается как 1000000 Hz).
Принципиальная схема
Схема частотомера показана на рисунке.
Рис. 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.
- Вольтметр и тахометр для автомобиля на основе Arduino UNO
- Схемы питания микроконтроллеров от разъёмов COM, USB, PS/2 (5-9В)
- Схемы самоблокировки питания для микроконтроллеров
- Контроль сигналов высокого напряжения через микроконтроллер
