Что такое шим в ардуино
Перейти к содержимому

Что такое шим в ардуино

  • автор:

ШИМ Ардуино что такое, изменение частоты pwm

Широтно-импульсная модуляция (ШИМ) на платах Ардуино Уно и Нано работает на цифровых портах 3, 5, 6, 9, 10 и 11 с частотой 488,28 Герц. При использовании функции analogWrite частота ШИМ (PWM) изменяется от 0 до 255 и соответствует коэффициенту заполнения импульса от 0 до 100%. Иногда частота ШИМ Arduino оказывается слишком низкой и ее необходимо увеличить, рассмотрим что такое ШИМ и как ее увеличить.

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

  • Arduino Uno / Arduino Nano / Arduino Mega
  • светодиод и резистор
  • макетная плата
  • коннекторы

Широтно-импульсная модуляция (на английском PWM – Pulse-Width Modulation) — это управление подачи питания на цифровом выходе микроконтроллера путем изменения ширины импульса при постоянной частоте и амплитуде исходящего сигнала. Следующий график иллюстрирует изменение ширины импульса при модуляции аналогового сигнала. Уровень PWM (ШИМ) сигнала определяется коэффициентом заполнения импульса.

Что такое широтно-импульсная модуляция Ардуино

Что такое широтно-импульсная модуляция Ардуино

ШИМ представляет собой изменение скважности импульсов, т.е. процент времени, когда прямоугольный импульс имеет уровень HIGH (смотри изменение скважности на графике выше). Например, скважность pwm сигнала в диапазоне 50% означает, что половину периода сигнал имеет высокий уровень, а половину периода низкий уровень. Скважность шим — это отношение периода повторения импульсов к его длительности.

Можно выделить два применения широтно-импульсной модуляции:

1. PWM используется в источниках питания, регуляторах мощности и т.д. Использование PWM (Pulse-Width Modulation) на Arduino Nano, Uno значительно упрощает управление яркостью разных источников света (светодиодов или светодиодных лент) и скоростью вращения коллекторных двигателей, подключенных к плате Ардуино.

2. PWM (Pulse-Width Modulation) используется для получения аналогового сигнала разной частоты. Аналогово — цифровой преобразователь (АЦП) на микроконтроллере Arduino довольно прост в реализации, поскольку требует для сборки электрической схемы минимум элементов — достаточно RC-цепочки, состоящей из резистора и конденсатора.

Реализация PWM Arduino (Pulse-Width Modulation)

Реализация PWM Arduino (Pulse-Width Modulation)

На следующем примере продемонстрируем использование ШИМ модуляции для управления яркостью светодиода с помощью функции analogWrite . Как показано на первом графике, мы будем задавать скважность сигнала на цифровом выходе 10 с разной интенсивностью — 0%, 25%, 50%, 75% и 100%. Визуально это будет отображаться в яркости светодиода, подключенного к порту 10 микроконтроллера с поддержкой PWM.

Скетч для реализация сигнала PWM Arduino

Управление ШИМ сигналом на Arduino Uno, Nano

Управление ШИМ сигналом на Arduino Uno, Nano

В следующем примере программы используем плавное изменение частоты ШИМ сигнала, как на графике. Для примера потребуется светодиод, подключенный к 10 пину. Можно использовать любой пин на микроконтроллере семейства Ардуино, поддерживающий pwm модуляцию (они обозначены знаком тильда). Частота импульсов будет меняться с помощью цикла for , при этом светодиод будет плавно включаться и плавно погасать.

Скетч для управления ШИМ сигналом на Arduino

Заключение. Платы Arduino Uno и Nano имеют 6 аппаратных ШИМ-модуляторов на аналоговых портах с номерами 3, 5, 6, 9, 10, 11. ШИМ-сигнал управляется функцией analogWrite, которая генерирует аналоговый сигнал на выходе и устанавливает коэффициент заполнения импульсов с частотой 488,28 Гц и разрешением 8 байт (от 0 до 255). На плате Arduino Mega порты с PWM модуляцией размещены на других выходах.

ШИМ (PWM) В Arduino

Широтно-импульсная модуляция ( PWM или ШИМ ) — с помощью этого метода можно изменять ширину импульса при сохранении постоянной частоты волны. При данном методе используется цифрой источник сигнала, из которого получают аналоговый сигнал.

Сигнал ШИМ состоит из двух основных составляющих, которые влияют на его работу. Одним из них является коэффициент заполнения (рабочий цикл), вторым — частота сигнала.

Коэффициент заполнения сигнала

Период импульса состоит из цикла включения +5В и цикла выключения . Величина, в течение которого сигнал находится в высоком уровне (включен) во время одного периода, известна как коэффициент заполнения (выраженная в процентах).

Например. Импульс с периодом 20 мс будет оставаться включенным (высоким) в течение 4 мс. Следовательно, рабочий цикл будет:

D = 4ms / 20ms × 100 = 20%

Применяя метод широтно-импульсной модуляции мы можем управлять регулировкой мощности, которую подают на нагрузку. Изменение мощности происходит за счет увеличения или уменьшения значения рабочего цикла. Сигналы ШИМ применяются для управления скоростью двигателей DC (постоянного тока) или для управления интенсивностью свечения светодиода.

Ниже показаны примеры сигналов с применением метода широтно-импульсной модуляции с разным коэффициентом заполнения (рабочим циклом).

Примеры сигналов ШИМ с разным коэффициентом заполнения

Рисунок 1. Примеры сигналов с разным коэффициентом заполнения

Частота сигнала

Частота сигнала определяет, как быстро ШИМ завершает цикл. То есть 2000 Герц будет 2000 циклов за одну секунду). Это означает, как быстро сигнал переходит из высокого уровня в низкий. Повторяя эту последовательность высокого и низкого уровня сигнала с высокой скоростью (частотой) и с определенным рабочим циклом(коэффициентом заполнения), выход ШИМ будет представлять из себя обычный аналоговый сигнал с постоянным напряжением.

Пример

Если мы хотим создать аналоговый сигнал +2В для данного цифрового источника, который может быть либо высоким (включен) при +5В , либо низким (выключен) при 0В , мы можем использовать ШИМ с рабочим циклом 40% . Он будет обеспечивать выход +5В в течение 40% времени.

Если цифровой сигнал циклически повторяется достаточно быстро, то напряжение на выходе оказывается средним напряжением. Если цифровое нижнее значение равно 0 В (что обычно и бывает), то среднее напряжение можно рассчитать, взяв цифровое высокое напряжение, умноженное на рабочий цикл:

Теперь давайте посмотрим на ШИМ в Arduino на примере Arduino Uno.

Контакты PWM (ШИМ) в Arduino

Arduino Uno имеет 6 8-битных каналов ШИМ. Эти контакты на плате обозначены символом «

». Эти выводы показаны на изображении ниже.

Контакты, которые поддерживают ШИМ, на плате ардуино уно

Рисунок 2. Контакты, которые поддерживают ШИМ, на плате ардуино уно

Функции Arduino для работы с ШИМ

Эта функция применяется для генерации ШИМ или вывода аналогового значения на указанный канал. Подробнее о функции analogWrite.

Параметры

  • Pin — вывод, на котором мы хотим генерировать ШИМ или аналоговый сигнал.
  • Duty — рабочий цикл, лежит в пределах от 0 (0%, всегда выключен) – 255 (100%, всегда включен).

Пример

Затухание светодиода с помощью Arduino PWM

Давайте создадим небольшое приложение, в котором светодиод будет постоянно гаснуть. Это приложение по управлению яркостью светодиода можно использовать, например, для украшения светодиодами дома или фестивалей.

Схема подключения светодиода к ардуино уно Рисунок 3. Схема подключения светодиода к ардуино уно

Скетч для затухания светодиода с помощью Arduino PWM

Управление яркостью светодиода с помощью потенциометра

Давайте создадим приложение, в котором мы будем управлять яркостью светодиода с помощью Arduino, изменяя ручку потенциометра. И так, когда мы вращаем ручку потенциометра, АЦП Arduino будет считывать этот аналоговый сигнал. Затем мы будем генерировать ШИМ-сигнал, пропорциональный аналоговому сигналу.

Схема подключения потенциометра и светодиода

Рисунок 4. Схема подключения потенциометра и светодиода

Использование широтно-импульсной модуляции (ШИМ) в Arduino

В этой статье мы рассмотрим принципы использования широтно-импульсной модуляции (ШИМ) в плате Arduino на основе схемы регулирования силы свечения светодиода.

Внешний вид конструкции для изучения принципов ШИМ в Arduino

Принципы работы широтно-импульсной модуляции (ШИМ)

Рассмотрим схему, изображенную на следующем рисунке. Как мы выясним, управляя скважностью модуляции ШИМ (PWM) можно регулировать силу свечения светодиода.

Если на представленном рисунке выключатель будет замкнут на протяжении некоторого времени, то на протяжении этого же времени лампочка будет гореть. Если переключатель будет замкнут в течение 8ms и будет разомкнут 2ms в течение интервала 10ms, тогда лампочка будет гореть только в течение интервала 8ms. В рассмотренном примере можно сказать, что среднее выходное напряжение (на лампочке) будет составлять 80% от напряжения батареи.

В другом случае выключатель замыкается на 5ms и размыкается на эти же самые 5ms в течение интервала 10ms, таким образом среднее напряжение на лампочке будет составлять 50% от напряжения батареи. Принято говорить, что если напряжение батареи 5В и цикл занятости составляет 50%, то среднее напряжение на оконечном устройстве (лампочке) будет составлять 2.5В.

В третьем рассмотренном на рисунке случае цикл занятости (duty cycle) составляет 20% и поэтому среднее напряжение на оконечном устройстве (лампочке) будет составлять 20% от напряжения батареи.

Более красочно принципы работы ШИМ показаны на следующих рисунках.

ШИМ с коэффициентом заполнения 50%

ШИМ с коэффициентом заполнения 10%

ШИМ с коэффициентом заполнения 90%

Рассмотрим какие возможности в плане ШИМ имеет плата Arduino.

ШИМ-контакты на плате Arduino Uno

Как показано на рисунке, плата Arduino UNO имеет 6 каналов ШИМ (по англ. – PWM, Pulse Width Modulation). Мы можем использовать ШИМ на любом из этих 6 контактов. В этом проекте мы будем использовать контакт 3 (PIN3).

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

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

  1. Плата Arduino Uno (купить на AliExpress).
  2. Конденсатор 100 мкФ (купить на AliExpress).
  3. Резистор 10 кОм (2 шт.) (купить на AliExpress).
  4. Светодиод (купить на AliExpress).
  5. Кнопка (2 шт.).
  6. Источник питания с напряжение 5 В.

Работа схемы и программы

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

Схема собрана на макетной плате. Хотя практически всем кнопкам присущ эффект «дребезга контактов» в данном случае не стоит беспокоиться о нем – нам он не помешает.

Управлять ШИМ модуляцией в плате Arduino очень просто в отличие, к примеру, от использования ШИМ в микроконтроллерах ATMEGA, в которых для выполнения этой задачи необходимо конфигурировать различные регистры и делать другие разнообразные установки – в Arduino всего этого делать не нужно.

По умолчанию все необходимые заголовочные файлы и все регистры, необходимые для работы с ШИМ, сконфигурированы программной средой ARDUINO IDE, нам просто нужно вызвать соответствующую функцию, указав ей в качестве параметра номер контакта, на котором необходимо сконфигурировать ШИМ-сигнал.

То есть, чтобы сформировать ШИМ сигнал на соответствующем контакте платы Arduino, необходимо сделать две вещи:

1. pinMode(ledPin, OUTPUT)
2. analogWrite(pin, value)

Сначала нам необходимо выбрать номер контакта для ШИМ из шести возможных, имеющихся для этой цели в Arduino, после этого мы должны сконфигурировать этот контакт для работы на вывод данных.

После этого мы должны сгенерировать ШИМ сигнал на конкретном контакте Arduino с помощью функции “ analogWrite(pin, value) ”. Здесь переменная ‘pin’ обозначает номер контакта, на котором необходимо формировать сигнал ШИМ, в нашем случае этот будет контакт 3. А переменная value обозначает требуемый цикл занятости ШИМ, она может принимать значения от 0 (сигнал всегда выключен) до 255 (сигнал всегда включен). Мы будем увеличивать и уменьшать значение этой переменной с помощью кнопок, присутствующих на схеме.

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

Далее приведен исходный код программы с комментариями, поясняющими смысл отдельных команд.

ШИМ. Урок 4. Ардуино

ШИМ

Привет! Продолжаем говорить про ардуино. Сегодня речь пойдет про широтно-импульсную модуляцию или шим. Что это, как использовать, при чем здесь ардуино? Давайте разбираться.

В прошлый раз мы говорили про написание своей собственной функции. Пожалуйста, посмотрите тот пост, если уже забыли или пропустили его.

В предыдущих статьях мы рассматривали возможности ардуино по приему и выводу цифровых сигналов. В этом случае мы можем вывести на пин напряжение 0 или 5 вольт. Что считается логическим 0 и 1 соответственно. И также мы можем считать напряжение на пине. Например, когда используем кнопку.

Но часто необходимо использовать напряжение между 0 и 5 вольтами. Чтобы вывести такое напряжение платы ардуино uno недостаточно. Можно использовать ардуино due или подключить внешнюю схему цифроаналогового преобразователя.

Однако, мы можем имитировать аналоговый сигнал на цифровых выходах ардуино с помощью широтно-импульсной модуляции или шим.

Контакты, которые можно использовать для генерации шим сигнала, помечены на плате ардуино специальным символом

На плате ардуино uno, контакты 3, 5, 6, 9, 10, 11 поддерживают вывод ШИМ сигнала.

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

  • Ардуино UNO
  • Макетная плата
  • Перемычки
  • 4 Резистора номиналом 220 Ом
  • 4 Светодиода 5 мм
  • Кабель USB

analogWrite()

Чтобы использовать возможности шим, рассмотрим новую функцию analogWrite().

Функция analogWrite() принимает два аргумента: номер пина для вывода и 8 разрядное число от 0 до 255, которое будет выводиться на контакте.

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

Загрузим программу из меню File — Examples — Basics — Fade.ino и соберем простую схему на макетной плате. Нам понадобятся один резистор, один светодиод и несколько перемычек.

Принципиальная схема подключения для шим сигнала

Текст программы

В тексте программы все уже должно быть понятно, чуть позже мы модифицируем ее и разберем подробнее. Пока что нас интересует только функция analogWrite() которая устанавливает на пин 9 напряжение 5 вольт, но особым способом.

Скважность

Скважность — это отношение периода повторения импульсов к длительности импульса. Чтобы лучше это понять рассмотрим графики.

ШИМ представляет собой изменение скважности прямоугольной последовательности импульсов. Скважность можно трактовать как процент времени, когда прямоугольный импульс имеет уровень HIGH, ко всему периоду повторения. Скважность 50% означает, что половину периода сигнал имеет высокий уровень, а половину — низкий.

ШИМ и скважность

Функция analogWrite() устанавливает скважность последовательности прямоугольных импульсов в зависимости от значения, передаваемого ей.

На графиках видно, что для сигнала со скважностью 25% значение HIGH действует в течение четверти периода, а остальные 75% времени установлено значение LOW. Частота прямоугольной последовательности импульсов в случае Arduino составляет приблизительно 490 Гц. Другими словами, уровень сигнала меняется от высокого (5 В) к низкому (0 В) приблизительно 490 раз каждую секунду.

Как видим, напряжение, подаваемое на светодиод, на самом деле не понижается, почему же при уменьшении скважности наблюдается спад яркости свечения светодиода? Это связано с особенностью нашего зрения. Если светодиод включается и выключается один раз за 1 мс (при скважности 50%), то вам кажется, что яркость свечения светодиода составляет приблизительно 50% от максимальной, потому что переключение происходит быстрее, чем глаза могут это зафиксировать. Ваш мозг фактически усредняет сигнал и создается впечатление, что светодиод работает на половине яркости.

Теперь изменим программу и соберем более интересную схему.

Принципиальная схема подключения светодиодов и шим

Подключим все 4 светодиода к шим портам ардуино через резисторы. Катоды всех диодов подключим к общей земле. Используем контакты 3, 6, 9 и 11.

Объявим массив светодиодов, счетчики и настроим пины на вывод.

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

А в основном цикле loop() будем вызывать функцию и последовательно передавать ей номер массива. В конце меняем знак переменной delta, чтобы цикл шел в обратном направлении.

Полный текст программы

Заключение

Мы рассмотрели понятия ШИМ и скважность. Использовали новую функцию analogWrite() и написали собственную функцию, которая плавно включает и выключает светодиод. В следующий раз посмотрим как можно считать аналоговый сигнал.

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

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