Измеритель частоты (частотомер) на Arduino Uno


В своей жизни почти каждый радиолюбитель сталкивается с ситуацией, когда необходимо измерить частоту колебаний, генерируемых каким-нибудь электронными устройством. Для этой цели можно было бы задействовать осциллограф, но он есть не у всех. Другие устройства для измерения частоты колебаний также стоят недешево. Поэтому мы в данной статье рассмотрим создание простейшего измерителя частоты (частотомера) на основе платы Arduino Uno и триггера Шмитта.

Внешний вид частотомера на Arduino Uno

Чтобы протестировать наш частотомер, мы создадим и самодельный генератор сигналов на основе таймера 555 (555 timer chip), который будет формировать прямоугольную волну, подаваемую на плату Arduino Uno.

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress).
  2. Микросхема таймера 555 (555 timer IC) (купить на AliExpress).
  3. Триггер Шмитта 74LS14 (купить на AliExpress).
  4. ЖК дисплей 16х2 (купить на AliExpress).
  5. Потенциометр 47 кОм (купить на AliExpress).
  6. Резистор 1 кОм (2 шт.) (купить на AliExpress).
  7. Резистор 100 Ом (купить на AliExpress).
  8. Конденсатор 100 нФ (2 шт.) (купить на AliExpress).
  9. Конденсатор 1000 мкФ (купить на AliExpress).
  10. Источник питания.
  11. Макетная плата.
  12. Соединительные провода.

Работа схемы

Схема устройства представлена на следующем рисунке.

Схема частотомера на Arduino UnoЖК дисплей в схеме предназначен для отображения измеренной частоты. Ко входу ‘Wave Input’ будет подсоединяться наш генератор сигналов. Триггер Шмитта (микросхема 74LS14) нужен для того, чтобы на вход платы Arduino Uno поступала строго прямоугольная волна. Для фильтрации нежелательных помех в схему добавлены два конденсатора, включенных по питанию. Наш частотомер будет способен измерять частоты до 1 МГц.

Схема используемого нами генератора сигналов на основе таймера 555 представлена на следующем рисунке.

Схема используемого нами генератора сигналов на основе таймера 555

Этот генератор представляет собой так называемый несинхронизованный мультивибратор. Данный генератор будет необходим нам для того, чтобы проверить корректность работы нашего проектируемого частотомера – то есть нам будет необходимо устройство, частота колебаний которого нам будет известна. С его помощью мы и будем тестировать наш частотомер. Внешний вид собранного на макетной плате генератора прямоугольных колебаний показан на следующем рисунке.

Внешний вид собранного на макетной плате генератора прямоугольных колебаний

Типовая же схема несинхронизованного мультивибратора на основе таймера 555, которую мы использовали для создания нужного нам генератора колебаний, выглядит следующим образом:

Типовая схема генератора прямоугольных колебаний на основе таймера 555

Частота выходного сигнала данного генератора зависит от резисторов RA, RB, конденсатора C и может быть рассчитана по формуле:

Frequency (F) = 1/ (Time period) = 1.44/ ((RA+RB*2)*C).

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

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

Триггер Шмитта

Кроме прямоугольных в электронике встречается и много других видов сигналов, частоту которых необходимо измерять: треугольные волны, зубчатые волны, синусоидальные волны и т.д. Но плата Arduino Uno может измерять характеристики только прямоугольных волн, поэтому перед подачей сигнала, частоту которого необходимо измерить, на вход платы Arduino Uno, нам необходимо использовать устройство, которое преобразовывало бы все виды колебаний (волн) в прямоугольные. Этим устройством в нашей схеме будет триггер Шмитта.

Уровень сигнала на его выходе зависит от сигнала на его входе. Триггер Шмитта имеет определенную границу (порог) напряжения – если напряжение на входе триггера больше этой границы, то на выходе триггера сигнал высокого уровня, а если напряжение на входе триггера меньше этой границы, то на выходе триггера будет сигнал низкого уровня. Триггер Шмитта чаще всего используется совместно с логической схемой НЕТ (NOT) на его выходе.

Мы в нашем проекте будем использовать микросхему 74LS14, которая имеет в своем составе 6 триггеров Шмитта. Схема соединений этих триггеров с контактами микросхемы приведена на следующем рисунке.

Схема соединений триггеров Шмидта в микросхеме 74HC14

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

Таблица истинности триггера Шмидта с инверсным выходом

Таким образом, мы подаем сигнал с выхода таймера 555 на вход триггера Шмитта, на выходе которого получаем инвертированную прямоугольную волну, которая пригодна для подачи на вход Arduino Uno.

Исходный код программы

Плата Arduino Uno имеет специальную функцию pulseIn, с помощью которой можно измерить длительности положительной и отрицательной части прямоугольной волны.

Htime = pulseIn(8,HIGH);
Ltime = pulseIn(8, LOW);

Данная функция измеряет время наличия сигнала высокого (High) или низкого (Low) уровня на контакте PIN8 платы Arduino Uno. Таким образом, для одного периода (цикла) волны мы определим продолжительности этих состояний в микросекундах. Сложив эти две длительности (Htime + Ltime) мы получим длительность периода волны, инвертировав эту величину мы получим значение частоты.

Далее представлен полный текст программы.

Видео, демонстрирующее работу схемы

(1 голосов, оценка: 5,00 из 5)
Загрузка...
8 639 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *