Оглавление:

Таймеры Arduino: 8 проектов: 10 шагов (с изображениями)
Таймеры Arduino: 8 проектов: 10 шагов (с изображениями)

Видео: Таймеры Arduino: 8 проектов: 10 шагов (с изображениями)

Видео: Таймеры Arduino: 8 проектов: 10 шагов (с изображениями)
Видео: 7 ПОЛЕЗНЫХ устройств на АРДУИНО, которые можно собрать за 15 минут. 2024, Июнь
Anonim
Таймеры Arduino: 8 проектов
Таймеры Arduino: 8 проектов

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

Использование таймеров может напугать, если вы начнете с полного описания ATMEGA328, в котором 90 страниц посвящены их описанию! Некоторые встроенные команды Arduino уже используют таймеры, например, millis (), delay (), tone (), AnalogWrite () и библиотеку сервопривода. Но чтобы использовать их всю мощь, вам нужно настроить их через регистры. Я поделюсь здесь некоторыми макросами и функциями, чтобы сделать это проще и прозрачнее.

После очень краткого обзора таймеров рассмотрим 8 интересных проектов, которые основаны на генерации сигналов с помощью таймеров.

Шаг 1. Необходимые компоненты

Обязательные компоненты
Обязательные компоненты

Для реализации всех 8 проектов вам понадобится:

  • Arduino Uno или совместимый
  • Прототип щита с мини-макетной платой
  • 6 соединительных кабелей на макетной плате
  • 6 коротких перемычек на макетной плате (сделайте себя из соединительного провода со сплошным сердечником 10 см)
  • 2 поводка из крокодиловой кожи
  • 1 белый светодиод 5 мм
  • резистор 220 Ом
  • резистор 10кОм
  • потенциометр 10 кОм
  • 2 керамических конденсатора емкостью 1 мкФ
  • 1 электролитический конденсатор 10 мкФ
  • 2 диода, 1n4148 или аналогичный
  • 2 микро-серводвигателя SG90
  • 1 динамик 8Ом
  • 20 м тонкого (0,13 мм) эмалированного провода

Шаг 2: Обзор таймеров Arduino для генерации сигналов

Timer0 и timer2 - это 8-битные таймеры, что означает, что они могут считать от 0 до 255 максимум. Timer1 - это 16-битный таймер, поэтому он может считать до 65535. Каждый таймер имеет два связанных выходных контакта: 6 и 5 для timer0, 9 и 10 для timer1, 11 и 3 для timer2. Таймер увеличивается с каждым тактовым циклом Arduino или со скоростью, которая уменьшается на коэффициент предварительного масштабирования, который равен 8, 64, 256 или 1024 (32 и 128 также разрешены для таймера2). Таймеры отсчитывают от 0 до «TOP», а затем снова (быстрая ШИМ) или в обратном порядке (ШИМ с правильной фазой). Таким образом, значение «TOP» определяет частоту. Выходные контакты могут устанавливаться, сбрасываться или переключаться на значение регистра сравнения выходных данных, поэтому они определяют рабочий цикл. Только timer1 может независимо устанавливать частоту и рабочие циклы для обоих выходных контактов.

Шаг 3: мигание светодиода

Image
Image
Светодиод мигает
Светодиод мигает
Светодиод мигает
Светодиод мигает

Самая низкая частота, которую можно достичь с помощью 8-битных таймеров, составляет 16 МГц / (511 * 1024) = 30,6 Гц. Итак, чтобы светодиод мигал с частотой 1 Гц, нам нужен timer1, который может достигать частоты в 256 раз меньшей, 0,12 Гц.

Подключите светодиод анодом (длинной ножкой) к выводу 9 и подключите его катод с резистором 220 Ом к земле. Загрузите код. Светодиод будет мигать с частотой точно 1 Гц при рабочем цикле 50%. Функция loop () пуста: таймер инициализируется в setup () и не требует дальнейшего внимания.

Шаг 4: светодиодный диммер

Image
Image
Светодиодный диммер
Светодиодный диммер
Светодиодный диммер
Светодиодный диммер

Широтно-импульсная модуляция - эффективный способ регулирования яркости светодиода. При наличии соответствующего драйвера это также предпочтительный метод регулирования скорости электродвигателей. Поскольку сигнал либо на 100% включен, либо на 100% выключен, на последовательное сопротивление не тратится энергия. По сути, это похоже на мигание светодиода быстрее, чем может заметить глаз. 50 Гц в принципе достаточно, но может показаться, что он немного мерцает, и когда светодиод или глаза двигаются, может возникнуть раздражающий прерывистый «след». Используя предварительное масштабирование 64 с 8-битным таймером, мы получаем 16 МГц / (64 * 256) = 977 Гц, что соответствует цели. Мы выбираем timer2, чтобы timer1 оставался доступным для других функций, и мы не вмешивались в функцию Arduino time (), которая использует timer0.

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

Шаг 5: Цифро-аналоговый преобразователь (ЦАП)

Image
Image
Цифро-аналоговый преобразователь (ЦАП)
Цифро-аналоговый преобразователь (ЦАП)
Цифро-аналоговый преобразователь (ЦАП)
Цифро-аналоговый преобразователь (ЦАП)

У Arduino нет настоящего аналогового выхода. Некоторые модули используют аналоговое напряжение для регулирования параметра (контрастность дисплея, порог обнаружения и т. Д.). Имея всего один конденсатор и резистор, таймер 1 может использоваться для создания аналогового напряжения с разрешением 5 мВ или лучше.

Фильтр нижних частот может «усреднить» сигнал ШИМ до аналогового напряжения. Конденсатор подключен через резистор к выводу ШИМ. Характеристики определяются частотой ШИМ и номиналами резистора и конденсатора. Разрешение 8-битных таймеров будет 5 В / 256 = 20 мВ, поэтому мы выбираем Timer1, чтобы получить 10-битное разрешение. Цепь RC представляет собой фильтр нижних частот первого порядка, и в нем будет присутствовать некоторая пульсация. Временной масштаб RC-цепи должен быть намного больше, чем период сигнала ШИМ, чтобы уменьшить пульсации. Период, который мы получаем для 10-битной точности, составляет 1024/16 МГц = 64 мкс. Если мы используем конденсатор 1 мкФ и резистор 10 кОм, RC = 10 мс. Пульсации от пика к пику составляют не более 5 В * 0,5 * T / (RC) = 16 мВ, что здесь считается достаточным.

Обратите внимание, что этот ЦАП имеет очень высокий выходной импеданс (10 кОм), поэтому напряжение значительно упадет, если он потребляет ток. Чтобы избежать этого, его можно буферизовать с помощью операционного усилителя или выбрать другую комбинацию R и C, например, 1 кОм с 10 мкФ.

В этом примере выход ЦАП управляется потенциометром. Второй независимый канал ЦАП может работать с таймером 1 на выводе 10.

Шаг 6: метроном

Image
Image
Метроном
Метроном
Метроном
Метроном

Метроном помогает отслеживать ритм при воспроизведении музыки. Для очень коротких импульсов выход таймера Arduino может подаваться непосредственно на динамик, который будет производить отчетливо слышимые щелчки. С помощью потенциометра частоту ударов можно регулировать от 40 до 208 ударов в минуту с 39 ступенями. Timer1 необходим для требуемой точности. Значение TOP, определяющее частоту, изменяется внутри функции loop (), и это требует внимания! Здесь вы видите, что режим WGM отличается от других примеров с фиксированной частотой: этот режим с TOP, установленным регистром OCR1A, имеет двойную буферизацию и защищает от пропуска TOP и получения длинных сбоев. Однако это означает, что мы можем использовать только 1 выходной контакт.

Шаг 7: звуковой спектр

Image
Image
Спектр звука
Спектр звука
Спектр звука
Спектр звука

Люди могут слышать более 3 порядков звуковых частот, от 20 Гц до 20 кГц. Этот пример генерирует полный спектр с помощью потенциометра. Между динамиком и Arduino установлен конденсатор емкостью 10 мкФ, который блокирует постоянный ток. Timer1 выдает прямоугольную волну. Режим генерации сигнала здесь - фазокорректная ШИМ. В этом режиме счетчик начинает обратный отсчет, когда достигает максимума, что приводит к импульсам с фиксированным средним значением, даже если рабочий цикл изменяется. Однако это также приводит к (почти) двойному периоду, и просто так получилось, что с предварительным масштабированием 8 таймер 1 охватывает весь слышимый спектр без необходимости изменения предварительного масштабирования. Также здесь, поскольку значение TOP изменяется на ходу, использование OCR1A в качестве top уменьшает сбои.

Шаг 8: серводвигатели

Image
Image
Сервомоторы
Сервомоторы
Сервомоторы
Сервомоторы

Существуют мощные библиотеки сервоприводов, но если у вас есть только два сервопривода для управления, вы также можете сделать это напрямую с помощью timer1, тем самым уменьшив использование ЦП, памяти и избегая прерываний. Популярный сервопривод SG90 принимает сигнал 50 Гц, а длина импульса кодирует положение. Идеально подходит для таймера1. Частота фиксирована, поэтому оба выхода на выводе 9 и выводе 10 могут использоваться для независимого управления сервоприводами.

Шаг 9: Удвоитель напряжения и инвертор

Удвоитель напряжения и инвертор
Удвоитель напряжения и инвертор
Удвоитель напряжения и инвертор
Удвоитель напряжения и инвертор
Удвоитель напряжения и инвертор
Удвоитель напряжения и инвертор

Иногда для вашего проекта требуется напряжение выше 5 В или отрицательное напряжение. Это может быть запуск МОП-транзистора, пьезоэлемент, питание операционного усилителя или сброс EEPROM. Если потребляемый ток достаточно мал, до ~ 5 мА, подкачка заряда может быть самым простым решением: всего 2 диода и два конденсатора, подключенные к импульсному сигналу от таймера, позволяют удвоить напряжение Arduino с 5 В до 10 В. На практике есть 2 диодных спада, поэтому на практике это будет больше похоже на 8,6 В для удвоителя или -3,6 В для инвертора.

Частота прямоугольной волны должна быть достаточной для прокачки достаточного заряда через диоды. Конденсатор 1 мкФ перемещается на 5 мкКл при изменении напряжения от 0 до 5 В, поэтому для тока 10 мА частота должна быть не менее 2 кГц. На практике более высокая частота лучше, поскольку она уменьшает пульсации. С таймером 2, отсчитывающим от 0 до 255 без предварительного масштабирования, частота составляет 62,5 кГц, что хорошо работает.

Шаг 10: Беспроводная передача энергии

Image
Image
Беспроводная передача энергии
Беспроводная передача энергии
Беспроводная передача энергии
Беспроводная передача энергии

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

Сначала подготовьте катушки. Я использовал рулон бумаги диаметром 8,5 см и эмалированный провод диаметром 0,13 мм, чтобы сделать 2 катушки: первичная с 20 витками, вторичная с 50 витками. Самоиндукция этого типа катушки с N обмотками и радиусом R составляет ~ 5 мкГн * N ^ 2 * R. Таким образом, для N = 20 и R = 0,0425 получается L = 85 мкГн, что было подтверждено тестером компонентов. Мы производим сигнал с частотой 516 кГц, что дает полное сопротивление 2pi * f * L = 275 Ом. Это достаточно много, чтобы Arduino не перегрузился по току.

Чтобы катушка работала наиболее эффективно, мы хотели бы использовать настоящий источник переменного тока. Есть трюк, который можно сделать: два выхода таймера могут работать в противофазе, инвертируя один из выходов. Чтобы сделать его еще более похожим на синусоидальную волну, мы используем ШИМ с коррекцией фазы. Таким образом, между контактами 9 и 10 напряжение будет меняться между 0 В, контактом 9 + 5 В, обоим 0 В, контактом 10 + 5 В. Эффект показан на картинке по кривой осциллографа (с предварительным масштабированием 1024, этот игрушечный прицел не имеет большой полосы пропускания).

Подключите первичную катушку к контактам 9 и 10. Подключите светодиод к вторичной катушке. Когда вторичная катушка приближается к первичной, светодиод загорается ярко.

Рекомендуемые: