Частотомер на ардуино уно практические схемы

Частотомер на ардуино уно практические схемы

Каравкин В.
В статье автора «Ёлочная мигалка на ARDUINO как средство от боязни микроконтроллеров» («Радиоконструктор, №11, 2016 г. стр. 25-30) был дан своеобразный «вводный курс» для людей, желающих освоить микроконтроллеры на примере платы ARDUINO UNO, и пример создания на этой основе программируемого переключателя четырех ёлочных гирлянд, с подробным описанием программы.
Здесь приводится описание частотомера, измеряющего частоту до 1 МГц, так же, построенного на основе платы ARDUINO UNO.
Но, прежде всего, хочу напомнить, что ARDUINO UNO это небольшая печатная плата, на которой расположен микроконтроллер ATMEGA328, а так же вся его «обвязка», необходимая для его работы, включая USB-программатор и источник питания. Стоимость ARDUINO UNO лежит в пределах от 200 до 1000 рублей, в зависимости от места продажи. Конечно, самое дешевое на радиорынке и китайском интернет-посылторге «Aliexpress». Описание платы ARDUINO UNO, а так же программного обеспечения для неё, и подключения к персональному компьютеру приводится
в Л.1, так что, если кто не в курсе, обязательно прочтите сначала статью в Л.1.


Схема частотомера показана на рис. 1.
Как видно из схемы, к цифровым портам D2-D7 платы ARDUINO UNO подключен модуль жидкокристаллического индикатора Н1 типа 1602А. А входной сигнал поступает через вполне понятный усилитель-формирователь на транзисторе VT1 и микросхеме D1 на порт D8. Питается входной усилитель-формирователь и ЖК-индикатор от стабилизатора напряжения 5V, имеющегося на плате ARDUINO UNO.
Но, вернемся к ЖК-индикатору. Индикатор представляет собой плату, на которой установлен собственно ЖК-дисплей и схема для его обслуживания, выполненная на двух безкорпусных микросхемах. Индикатор 1602А стандартный, на основе контроллера HD44780. Обозначение 1602А фактически значит, что он на две строки по 16 символов в строке. Индикатор был куплен на «Aliexpress», найден по запросу «HD44780» (цены от 81 рубля).
Питание +5V на ЖК-индикатор поступает через вывод 2 его платы. Общий минус на выводы 3 и 1. Поскольку в индикатор планируется только передавать информацию от контроллера, а не наоборот, вывод 5 (RW) соединен с нулем. Данные на ЖК-индикатор будут поступать через его выводы 11-14 (выводы 7-10 не используются). Выводы 15 и 16 служат для подключения подсветки ЖК-индикатора. На них подается напряжение 5V.
Таблица 1.

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

Эта строка дает команду загрузить в ARDUINO UNO данную библиотеку. Затем, нужно назначить порты ARDUINO UNO, которые будут работать с ЖК-индикатором. Как я уже сказал, я выбрал порты с D2 по D7. Эти порты назначены строкой:
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); После чего, программа переходит собственно к работе частотомера.
Среди набора функций языка для программирования ARDUINO UNO есть такая функция: pulseln , перевести это можно как «входной импульс». Эта функция измеряет в микросекундах длительность положительного либо отрицательного перепада входного импульса. Так что измерение частоты здесь будет происходить через предварительное измерение периода. Так как длительность положительного и отрицательного полупериодов в реальном входном сигнале могут различаться, если мы хотим измерить период входных импульсов нам нужно сложить длительность положительного и отрицательного полупериодов.
В программе длительность положительного полупериода обозначена Htime, длительность отрицательного полупериода — Ltime, а длительность всего периода — Ttime.
Измерение полупериодов происходит в строках:
Htime=pulseIn(8,HIGH);
Ltime=pulseln(8,LOW);
Затем, производится вычисление полного периода в строке: Ttime=Htime+Ltime;
Вычисление частоты, учитывая, что значение периода выражено в микросекундах, происходит здесь: frequency=1000000/Ttime;
Затем, указывается строка ЖК-индикатора (нижняя строка, это строка 1), в которую записывается результат: lcd. setCursor (0,1);
И результат записывается в ЖК-индикатор:
lcd.print(frequency);
Далее указывается единица измерения: lcd.print(«hz»);
Завершается рабочий цикл частотомера индикацией результата в течение одной секунды, вернее, паузой в одну секунду, в течение которой на табло остается
измеренное значение (время выражено в миллисекундах, поэтому 1 сек = 1000): delay(1000);
Таким образом, наш частотомер, в отличие от типового, не занимается подсчетом импульсов за фиксированный временной интервал, а определяет частоту по предварительно измеренному периоду. При этом показания сменяются каждую секунду. Что, впрочем, не обязательно.
Период смены показаний (время индикации) можно установить любой величины, изменив продолжительность паузы в строке:
delay(1000); например, так: delay(2000);
Теперь показания будут сменяться каждые две секунды. Можно выбрать любое другое значение, как меньше 1000, так и больше, но слишком увлекаться его уменьшением не стоит, — чрезмерно частая смена показаний затрудняет зрительное восприятие. На мой взгляд, оптимально -1 секунда.
Теперь о других деталях программы. В строке:
pinMode(8, INPUT);
порт 8 платы ARDUINO UNO назначен как цифровой вход. На него поступают импульсы, частоту которых нужно измерить.
В строке: lcd.begin(16,2);
указано что индикатор двухстрочный, по 16 знаков в строке.
Индикатор у нас двухстрочный. Одна строка остается свободной и в неё можно записать что угодно. Здесь в верхнюю строку (верхняя строка, это строка 0) записано слово «frequency»:
lcd.setCursor(0,0);
lcd.print(«frequency»);
К сожалению, китайский ЖК-индикатор по-русски не понимает, поэтому писать можно только латинскими буквами. Если попробовать написать кириллицей, например, слово «частота», он начинает гнусно ругаться китайскими иероглифами.
Если на вход (порт D8 ARDUINO UNO) сигнал не поступает, на ЖК-индикаторе будет мигать: «infhz».
Работу частотомера можно ускорить или замедлить, изменив время индикации, как это сказано выше.
Точность частотомера весьма высокая, потому что тактовая частота микроконтроллера стабилизирована кварцевым резонатором, установленным на плате ARDUINO UNO. Однако, учитывая специфику прибора, в частности то, что он фактически измеряет период, а не частоту, а частоту только вычисляет, при сильно искаженном входном сигнале показания могут плавать.
Этот частотомер предназначен для измерения частоты входного сигнала. Но бывают и другие частотомеры, например, тахометры, спидометры, и др. которые импульсы получают от неких датчиков, а результат должны выдавать не в герцах, а в оборотах в минуту или метрах в секунду, километрах в час или других единицах.
В таком случае, изменить закон перевода измеренного периода в результат можно в этой строке:
frequency=1000000/Ttime;
подставив вместо 1000000 другое значение, или вообще изменив формулу вычисления результата, соответственно той, которая необходима для конкретного случая применения прибора.
Соответственно, нужно будет изменить и единицу измерения, заменив её в строке: lcd.print(«hz»);
И изменить заголовок в верхней строке ЖК-индикатора, изменив его в строке: lcd.print(«frequency»);
Напряжение питания частотомера может быть от 7 до 12V. Питание подается на соответствующее гнездо на плате ARDUINO UNO. Напряжение может быть нестабилизированным (на плате есть собственный стабилизатор на 5V), но
обязательно хорошо отфильтрованным (пульсации должны быть минимальными). Питание возможно и от источника напряжением 5V через USB-порт, но в этом случае, напряжение должно быть не только хорошо отфильтрованным, но и стабилизированным.
Схема входного усилителя состоит из собственно входного усилителя на транзисторе VT1 и триггера Шмитта на элементах микросхемы D1. Кстати, микросхему К561ЛЕ5 или К561ЛА7 можно заменить любой КМОП-микросхемой, в которой есть не менее трех инверторов, соответственно, изменив схему.
Схему входного усилителя можно выполнить и иначе, применив другие схемные решения. Но, в любом случае, там должен быть триггер Шмитта, на выходе которого должны быть прямоу-угольные импульсы размахом не менее 3V и не более 5V.
При питании от гальванической батареи, например, «Кроны» или её аналога напряжением 9V, с целью экономии источника питания можно отключить подсветку ЖК-индикатора. Для этого нужно в разрыв его вывода 15 или 16 включить выключатель, которым включать подсветку, если она нужна. Если же подсветка вообще не требуется, выводы 15 и 16 ЖК-индикатора можно вообще не подключать.
В стационарном же режиме, когда прибор питается от сетевого источника питания, подсветку можно сделать подключенной постоянно, как это показано в схеме на рисунке 1.
Набирая программу (таблица 1) совсем не обязательно набирать то, что в строках после знака « ; » (точка с запятой). Потому что это комментарии и пояснения, никак не влияющие на работу программы.
Литература:
1. Каравкин В. «Ёлочная мигалка на ARDUINO как средство от боязни микроконтроллеров», ж. Радиоконструктор, №11, 2016 г. стр. 25-30.
Радиокoнструктор 12-2016

Оставлять комментарии могут только зарегистрированные пользователи

Источник

Digitrode

цифровая электроника вычислительная техника встраиваемые системы

Частотомер на Arduino своими руками

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

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

Arduino генерирует точную 1-секундную временную основу для счетчика с помощью каскадирования таймеров timer0 и timer2. Связь между цифровыми входами 3 и 4 соединяет выход таймера 2 (250 Гц) со входом таймера 0. Программа ожидает, когда выход таймера 0 станет положительным, чтобы начать отсчет частоты входного сигнала таймером 1. Timer1 – это 16-разрядный таймер, он переполняется при достижении 2 в степени 16, что, в свою очередь, изменяет значение регистра переполнения overF. В конце 1 секунды записывается 16-разрядный регистр. Затем Arduino отправляет на ПК через USB и последовательный порт 6 байтов данных. Схема подключения очень проста, и ее можно проиллюстрировать с помощью рисунка, приведенного ниже.

Источник

Измеритель частоты (частотомер) на 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. Соединительные провода.

Работа схемы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

Adblock
detector