Частотомер на Arduino
Частотомер на Arduino
Данная статья является второй в серии статей про измерение с помощью Arduino параметров различных компонентов и физических величин, используемых в радиоэлектронике. Рассмотрим измерение частоты сигнала с помощью Arduino.
Почти каждый радиолюбитель должен столкнуться со сценарием, в котором ему необходимо измерить частоту сигнала, генерируемого тактовым генератором или счетчиком или таймером. Для выполнения этой задачи мы можем использовать осциллограф, но не все из нас могут его себе позволить. Мы можем купить оборудование для измерения частоты, но эти устройства стоят дорого. Учитывая это, мы собираемся разработать с помощью Arduino и триггера Шмитта простой, но эффективный частотомер.
Частотомер на Arduino
Этот частотомер является экономически эффективным и может быть легко изготовлен. Для измерения частоты сигнала мы будем использовать Arduino Uno – сердце проекта.
Чтобы протестировать частотомер, мы собираемся создать простейший генератор сигнала. Этот простейший генератор сигнала будет изготовлен с использованием микросхемы таймера 555. Схема на таймере генерирует прямоугольный сигнал, который будет для тестирования подаваться на Arduino Uno.
В итоге у нас будет частотомер и генератор прямоугольного сигнала.
Входы и виды триггеров
В зависимости от структуры и выполняемых им функций можно определить число входов триггера.
По параметру записи информации триггеры можно разделить на:
- Синхронные – запись информации производится только при дополнительном, синхронизирующем сигнале, который, по сути, запускает триггер.
- Асинхронные – запись информации зависит от информационных сигналов, подающихся на вход триггера, и происходит она непрерывно.
В цифровой схемотехнике обычно можно найти следующие обозначения входов триггера:
- S – раздельный вход, устанавливающий триггер на единицу (на Q единица)
- Q – прямой выход
- R – раздельный выход, устанавливающий триггер на ноль (на Q ноль)
- С – вход синхронизации
- D – вход информационный (на него подаётся информация, которая будет занесена на триггер)
- T – счётный вход
Что касается функций, то в этом плане триггеры можно разделить на:
- RS-триггеры;
- JK-триггеры;
- D-триггеры;
- Т-триггеры.
RS- триггер
Это самый простой тип триггеров. На его основе создаются и другие типы. Возможные логические элементы в его построении – это 2И-НЕ (инверсионный вход) и 2ИЛИ-НЕ (прямые входы).
Из-за низкой помехоустойчивости такие триггеры почти не используются самостоятельно. Их можно применить, например, для устранения влияния дребезжащих контактов, которое возникает при коммутации механических переключателей. Тогда требуется тумблер с тремя выходами, один из которых подключается по очереди к остальным двум. Чтобы создать RS-триггер используется D-триггер с замкнутыми на состоянии «ноль» входы С и D.
Первый отрицательный сигнал на входе –R переводит в состояние «0». Первый отрицательный сигнал на входе –S переводит в состояние «1». Другие сигналы, возникшие из-за дребезга контактов, не могут оказать влияние на триггер. При таком подключении переключателя верхнее положение будет равно «1» на выходе, нижнее – «0».
RS-триггер сам по себе асинхронный, однако, иногда возникают случаи, когда нужно сохранить информацию. Тогда на помощь приходит синхронизируемый RS-триггер, который в этом случае должен состоять из обычного RS-триггера и схемы управления.
При этой схеме, импульсы, поступающие на Х1 и Х2 не имеют никакого значения, пока на входе С сохраняет значение «0». В этот момент RS-триггер находится в режиме хранения информации. Как только значение C становится равно «1» триггер запускается, начинается запись.
D-триггер
Это триггеры задержки. Используются они для создания регистров сдвига и хранения. Это одна из важнейших частей всех микропроцессоров.
У такого триггера два выхода – информационный и синхронизирующий. Триггер стабилен, когда состояние С находится на «ноль». При этом сигнал на выходе не будет зависеть от сигналов, которые поступают на информационный вход. Когда значение С изменяется на «1» на прямом выходе, тогда информация будет такой же, как и на триггере D.
JK-триггер
По своему принципу действия он очень похож на RS- триггеры. Но в отличие от него, у JK-триггеров нет проблем с неопределённостью, когда на вход одновременно поступают две «единицы». При возникновении подобной ситуации JK-триггер становится счётным триггером. Тогда при поступлении на вход сигналов со значением «1» триггер меняет своё состояние на противоположное.
Эти устройства очень универсальны. С одной стороны, они прекрасно находят своё применение в цифровых устройствах – счётчиках, регистрах, делителях частоты и т.д. С другой стороны при соединении определённых выводов можно получить вообще любой нужный вид триггера.
Т-триггер
У этих триггеров есть и другое название – счётные. На их основе создаёт двоичные счётчики и делители частот. У этих триггеров вход только один. На изображениях – асинхронный (1) и синхронный (2) Т-триггеры.
Импульс поступает на этот вход, состояние его меняется не противоположное. После поступления следующего импульса состояние становится исходным.
Триггер переключается в тот момент, когда на его вход поступается синхроимпульс. Тогда частота импульсов на выходе оказывается в 2 раза меньше начальной. Таким образом, один счётный триггер уменьшает частоту импульса двукратно. А два триггера, что были подключены последовательно, логично уменьшат частоту уже в 4 раза.
Почему эти триггеры называют ещё и делителями частот хорошо заметно по временным схемам:
1. Однозначность — важнейший триггер для сайта
Попадая на сайт, потенциальному покупателю важно сразу же понять, что конкретно вы продаете и, то, что это действительно продается. Очень важно чтобы понимание пришлой с первой же секунды, иначе человек просто закроет вкладку с вашим интернет-магазином.
Как задействовать триггер однозначность:
- Публиковать информацию о товаре или услугах, которые вы продаете.
- Обозначить, что товар продаётся. Сделайте это с помощью слов: поставки, продажи, приобретайте и т. д.
- Указать регион продаж.
Все это желательно размещать на видном месте, например, в шапке сайта.
Приведем примеры
Введем запрос в Гугл: «запчасти для ланоса», в городе Запорожье, поэтому логично получить в выдаче магазины, находящиеся в данном городе или совершающие сюда доставку.
Первый магазин был в рекламе, но он абсолютно не информативен. Здесь нет данных о запчастях тем более для ланоса. Нет информации о расположении и доставке. Вероятнее всего клиент сразу же закроет его и перейдет к следующему.
Следующий интернет-магазин подходит под запрос абсолютно точно.
Здесь сразу ясно, что продаются автозапчасти и в Запорожье, и по всей Украине, в частности, для искомого Ланоса.
Совет: на веб-ресурсах всегда предоставляйте однозначную информацию, чтобы покупателю все было понятно с первого взгляда, и он захотел изучить ваш товар.
Задание 3. Логика работы мс К155ТМ2 и К155ИЕ5.
ZuykovAV MEPhI » 13 мар 2011, 21:31
1. Проверка логики работы D-триггера — микросхема К155ТМ2.
2. Делители на D-триггерах.
3. Проверка логики работы счётчика — микросхема К155ИЕ5.
4. Делители частоты на счётчике — микросхема К155ИЕ5.
Re: Задание 3
KovalchukDV 1523 » 14 мар 2011, 16:08
Re: Задание 3
ZuykovAV MEPhI » 15 мар 2011, 00:41
Стр. 75-76, "Популярные цифровые микросхемы", Валерий Леонидович Шило.
Re: Задание 3
ZuykovAV MEPhI » 15 мар 2011, 00:45
1. Проверка логики работы D-триггера -микросхема K155ТМ2 .
— описание схемы,
— сборка схемы,
— проверка логики.
На схеме показан один D-триггер — элемент микросхемы К155ТМ2 (D1 — всего в микросхеме два D-триггера). У элемента есть входы R и S, вход данных D, тактовый вход C и два выхода — прямой Q (5) и инверсный (6). Обратите внимание на кружок у вывода 6 и вспомните обозначение выхода элемента ЛА3 (в нём также обозначается инверсия).
К входам R, S, D, C триггера подключены кнопки. При нажатии любой из кнопок соответствующий вход будет соединён с землёй (GND), значит, на нём будет логический ноль. Если на кнопку не нажимать, то на входах будет присутствовать уровень логической 1, так как сопротивления R1-R4 (1 кОм) вторыми выводами подключены к линии VCC. На следующем изображении показаны уровни состояний на входах при работе с кнопками (при нажатии — стрелка вниз и отпускании кнопки — стрелка вверх) :
Для индикации состояний к выходам триггера (прямой — 5 и инверсный — 6) через сопротивления R5, R6 (1кОм) подключены светодиоды VD1, VD2. Светодиоды подключены катодами к линии GND и поэтому будут светиться при логической единице на выходе триггера.
1) Отключите питание от макетной платы.
2) Соберите схему. Светодиоды расположите на макетке так, чтобы было понятно, где расположен VD1 (прямой выход микросхемы), а где — VD2 (инверсный). Выводы (8,9,10,11,12,13) второго элемента микросхемы могут висеть в воздухе. На изображении не установлены сопротивления R1-R4.
3) Проверьте правильность сборки.
4) Подайте питание.
После подачи питания один из двух светодиодов должен светиться.
Логика работы RS входов такая же как и во 2-ом задании (схема RS-триггера на элементах 2И-НЕ мс К155ЛА3).
При нажатии на R (тут KN1) прямой выход сбрасывается в 0 (светодиод VD1 не светится).
При нажатии на S (тут KN4) прямой выход устанавливается в 1 (светодиод VD1 светится).
Проверка логики работы триггера.
— Установка ( S etting) и Сброс ( R eset). Активным уровнем для входов R и S является 0:
при S = 0 на выходе выполняется Установка; Q = 1
при R = 0 на выходе происходит Сброс; Q = 0
— Запись. Если S=1 и R=1, то в момент положительного перепада на С состояние с D переходит на Q.
— Проверка логики работы входов RS (строки 1, 2, 3 по таблице).
— Проверка записи сигнала с входа D (строки 4, 5).
— Уточнение момента записи на тактовом входе С (для строк 4,5).
Проверка логики работы входов R и S (асинхронный Сброс и Установка):
1. Нажмите только на кнопку KN4 (S=0) и на прямом выходе Q (5) установится уровень логической 1 и поэтому светодиод VD1 будет светиться. Светодиод VD2 не будет светиться, так как на инверсном выходе (6) будет низкий уровень.
2. Нажмите только на кнопку KN1 (R=0) и светодиод VD1 погаснет, значит, на прямом выходе Q (5) происходит сброс в 0. Светодиод VD2 светится, так как на инверсном выходе (6) будет 1.
Итак,
при S=0, прямой выход Q = 1, на инверсном — 0 (асинхронная установка в 1),
при R=0, прямой выход Q = 0, на инверсном — 1 (асинхронный сброс в 0).
Вход S (Setting-Установка) служит для установки прямого выхода в 1, а вход R (Reset — Сброс) служит для сброса прямого выхода в 0. Они являются асинхронными входами, так как изменяют состояние триггера в любой момент времени, независимо от состояния входов D и C (в таблице показан знак Х). Чтобы происходили Сброс или Установка, на вход R или S должен подаваться низкий уровень.
При одновременном удержании кнопок KN1 и KN4 оба светодиода засветятся, так как на обоих выходах (прямом и инверсном) устанавливается высокий уровень. Этот режим работы элемента очень редко используется в схемотехнике.
Проверяем логику работы входа D (загрузка 1 или 0, строка 4 и 5 таблицы):
Один раз нажмите на кнопку KN1, чтобы светодиод VD1 не светился. Далее кнопки KN1 и KN4 нажимать не надо, чтобы на входах R и S были логические 1.
4. Кратковременно нажмите на кнопку KN3 (на тактовый вход С поступит импульс, поз. 2-3) и тогда должен засветиться светодиод VD1, так как на прямом выходе Q (5) устанавливается высокий уровень (поз.3). Светодиод VD2 не будет светиться, так как на инверсном выходе (6) низкий уровень.
5. Нажмите на кнопку KN2 (вход D = 0, поз.4 по диаграмме ниже) и удерживая её, кратковременно нажмите на кнопку KN3 (на тактовый вход С поступил импульс, поз.5-6) и светодиод VD1 должен погаснуть, так как на прямом выходе Q (5) устанавливается низкий уровень (поз.6). Светодиод VD2 засветится, так как на инверсном выходе (6) будет высокий уровень.
Итак, что происходит при подаче импульса на вход C ?
при D=1, прямой выход Q = 1 (В), на инверсном — 0 (Н); говорят: загрузка 1, запись 1, перенос 1 с D на Q.
при D=0, прямой выход Q = 0 (Н), на инверсном — 1 (В); говорят: загрузка 0, запись 0, перенос 0 с D на Q.
В какой момент времени происходит запись ?
Сигнал с входа D переходит на выход Q при подаче импульса на вход C. А точнее, при переходе от 0 к 1 ( или говорят, при положительном фронте импульса , поз. 3 и 6). Обратите внимание по схеме на косую черту (снизу вверх) у входа C элемента ТМ2. Чтобы убедиться в этом, повторите действия 4-5, но кнопку KN3 нажимайте не кратковременно, а в начале нажмите и только через короткую задержку отпустите. Обратите внимание, что переключение состояния светодиодов почти всегда будет происходить в момент отпускания кнопки (поз. 3 и 6). Ведь когда кнопка нажата – это низкий уровень, а когда отпускаете – становится высокий уровень, то есть, при отпускании и происходит перепад от низкого уровня к высокому уровню (от 0 к 1).
Управление входами R и S имеет приоритет по отношению к входу D и С. То есть, сбрасывать выход Q в 0 (0 на R) или устанавливать на Q выходе 1 (0 на S) можно независимо от состояния на входах D и C и поэтому можно понажимать на кнопки KN1 и KN4 при выполнении 4 и 5 пунктов.
При таком простом (кнопочном) управлении тактовым входом С неизбежен дребезг контакта, поэтому в тексте чуть ранее написано " почти всегда ". Для уменьшения (!) влияния дребезга в схеме можно установить конденсатор C1 (100 пф).
Синхронный RS-триггер
Рассмотрим синхронный RS-триггер (рис. 3.59).
Если на входе С — логический «0», то и на выходе верхнего входного элемента «И-НЕ», и на выходе нижнего будет логическая «1». А это, как отмечалось выше, обеспечивает хранение информации.
Если же на вход синхронизации С подана логическая единица, то схема реагирует на входные сигналы точно так же, как и рассмотренная ранее (рис. 3.56).
ШИМ сигнал
Аппаратный
Для генерации ШИМ сигнала с заданным заполнением есть стандартная функция analogWrite(pin, duty) , подробнее обсуждали в уроке про ШИМ сигнал, а частоту можно изменить перенастройкой таймера, как в уроке об увеличении частоты ШИМ. На самом деле таймеры позволяют настроить ШИМ сигнал с более точной или более высокой частотой и другими диапазонами заполнения (до 10 бит), но в ядре Arduino это не предусмотрено. Если такое будет нужно, можно воспользоваться библиотекой GyverPWM. Пример:
Программный ШИМ
Программная генерация ШИМ сигнала может пригодиться, если не хватает лишнего таймера или частота ШИМ низкая и не повлияет на остальной код, а он на неё. ШИМ сигнал на “миллисе” можно организовать вот таким образом, переключая выход по двум периодам:
Функцию PWMgen(заполнение) в данной реализации нужно вызывать как можно чаще в основном цикле программы:
Здесь мы на каждом вызове считаем новый период переключения, тратя на это какое-то время. Можно считать период в отдельной функции, а сам ШИМ генерировать отдельно. Реализацию можно посмотреть в библиотеке PWMrelay.
Полуаппаратный ШИМ
Можно снизить нагрузку на процессор, отдав счёт времени аппаратному таймеру. Примеры на базе GyverTimers (для ATmega328, 2560):
Как известно, digitalWrite() является очень тяжёлой и долгой функцией, и для генерации софт ШИМ рекомендуется заменить её чем-то более быстрым, например прямым обращением к регистру или вот такой конструкцией (для ATmega328p):
Если не хватает количества стандартных ШИМ-выходов, можно поднять полуаппаратный ШИМ на таймере на несколько пинов сразу:
Этот алгоритм является не самым оптимальным, более интересный можно посмотреть в GyverHacks.
Примечание: во всех трёх алгоритмах используется проверка совпадения со счётчиком counter == pwm_duty . Это сильно снижает использование процессорного времени в прерывании, но при резком уменьшении заполнения может приводить к одиночным “вспышкам” заполнения до максимума, так как условие не выполнится. Для более плавной работы можно сделать counter >= pwm_duty , тогда условие будет каждый раз “подстраиваться” под новое значение заполнения, но установка пина будет осуществляться на каждом тике!
Можно ввести буферизацию заполнения ШИМ и брать новое значение только при нулевом значении счётчика, это решит проблему:
Можно применить буферизацию и к остальным алгоритмам.
Библиотека Servo
Как известно, RC сервоприводы управляются при помощи ШИМ сигнала с частотой
50 Гц и длительностью импульса от
2500 микросекунд. В стандартной библиотеке Servo.h реализована генерация полуаппаратного ШИМ сигнала, причём количество пинов можно менять во время работы. Библиотеку можно использовать как генерацию ШИМ, если его параметры подходят для использования.
Практическое использование
Свойство триггеров сохранять записанную информацию даже при снятии внешних сигналов позволяет применять их в качестве ячеек памяти ёмкостью в 1 бит. Из единичных элементов можно построить матрицу для запоминания двоичных состояний – по такому принципу строятся статические оперативные запоминающие устройства (SRAM). Особенностью такой памяти является простая схемотехника, не требующая дополнительных контроллеров. Поэтому такие SRAM применяются в контроллерах и ПЛМ. Но невысокая плотность записи препятствует использованию таких матриц в ПК и других мощных вычислительных системах.
Выше упоминалось использование триггеров в качестве делителей частоты. Бистабильные элементы можно соединять в цепочки и получать различные коэффициенты деления. Та же цепочка может быть использована в качестве счетчика импульсов. Для этого надо считывать с промежуточных элементов состояние выходов в каждый момент времени – получится двоичный код, соответствующий количеству пришедших на вход первого элемента импульсов.
В зависимости от типа примененных триггеров, счетчики могут быть синхронными и асинхронными. По такому же принципу строятся преобразователи последовательного кода в параллельный, но здесь используются только стробируемые элементы. Также на триггерах строятся цифровые линии задержки и другие элементы двоичной техники.
RS-триггеры используются в качестве фиксаторов уровня (подавителей дребезга контактов). Если в качестве источников логического уровня применяются механические коммутаторы (кнопки, переключатели), то при нажатии эффект дребезга сформирует множество сигналов место одного. RS-триггер с этим успешно борется.
Область применения бистабильных устройств широка. Круг решаемых с их помощью задач во многом зависит от фантазии конструктора, особенно в сфере нетиповых решений.
Что такое компаратор напряжения и для чего он нужен
Режимы работы, описание характеристик и назначение выводов микросхемы NE555
Что такое операционный усилитель?
Что такое термистор, их разновидности, принцип работы и способы проверки на работоспособность