? изменение частоты шим (pwm) ардуино

Содержание

Широтно-импульсная модуляция (ШИМ). Аналоговая и цифровая

Принцип ШИМ – широтно-импульсная модуляция заключается в изменении ширины импульса при постоянстве частоты следования импульса. Амплитуда импульсов при этом неизменна.

Широтно-импульсное регулирование находит применение там, где требуется регулировать подаваемую к нагрузке мощность. Например, в схемах управления электродвигателями постоянного тока, в импульсных преобразователях, для регулирования яркости светодиодных светильников, экранов ЖК-мониторов, дисплеев в смартфонах и планшетах и т.п.

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

Широтно-импульсная модуляция бывает аналоговой и цифровой.

Аналоговая широтно-импульсная модуляция

Как уже упоминалось выше, частота сигнала и его амплитуда при ШИМ всегда постоянны. Один из важнейших параметров сигнала ШИМ – это коэффициент заполнения, равный отношению длительности импульса t к периоду импульса T. D = t/T. Так, если имеем сигнал ШИМ с длительностью импульса 300 мкс и периодом импульса 1000 мкс, коэффициент заполнения составит 300/1000 = 0,3. Коэффициент заполнения также выражается в процентах, для чего коэффициент заполнения умножается на 100%. По примеру выше процентный коэффициент заполнения составляет 0,3 х 100% = 30%.

Скважность импульса – это отношение периода импульсов к их длительности, т.е. величина, обратная коэффициенту заполнения

S = T/t.

Частота сигнала определяется как величина, обратная периоду импульса, и представляет собой количество полных импульсов за 1 секунду. Для примера выше при периоде 1000 мкс = 0,001 с, частота составляет F = 1/0,001 – 1000 (Гц).

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

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

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

При управлении посредством ШИМ скорости вращения двигателя постоянного тока частота ШИМ должна быть очень высокой, и лежать за пределами слышимых звуковых частот, т.е. превышать 15-20 кГц, в противном случае двигатель будет «звучать», издавая раздражающий слух писк с частотой ШИМ. От частоты зависит и стабильность работы двигателя. Низкочастотный сигнал ШИМ с невысоким коэффициентом заполнения приведет к нестабильной работе двигателя и даже возможной его остановке.

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

Как увеличить частоту и разрядность ШИМ Ардуино

Не существует способа изменить частоту ШИМ Arduino без прямого управления памятью на низком уровне. Рассмотрим далее, как изменить режим работы таймера, чтобы увеличить частоту (frequency) ШИМ Ардуино. Таймер 0
используется для расчета времени, т.е. функции delay и millis . Увеличение частоты на Таймер 0 приведет к нарушению функций сохранения времени, которые могут использоваться в скетче.

Чтобы увеличить разрядность Ардуино на 9 и 10 аналоговом выходе, изменим частоту Таймера 1
без библиотеки . Максимальная частота PWM может достигать на платах Ардуино Уно и Нано — 62 500 Гц. Для этого в процедуре void setup() необходимо добавить соответствующую команду из таблицы, которая приведена далее.

Разрешение Частота ШИМ Команды установки режима
8 бит 62 500 Гц TCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x09;
7 812,5 Гц TCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x0a;
976,56 Гц TCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x0b;
244,14 Гц TCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x0c;
61,04 Гц TCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x0d;

Максимальная частота ШИМ Ардуино (Arduino PWM Frequency) — 62 500 Гц.

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

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

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

Увеличивая частоту импульсов ШИМа на Ардуино, можно выполнять операции на высокой скорости.

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

Рассмотрим основные преимущества использования ШИМ Ардуино:

  1. Эффективность электропитания: индукция обмоток ротора будет усреднять ток (индукторы сопротивляются изменению тока). Транзисторы имеют низкий импеданс при низком падении напряжения и рассеивании мощности. Резистор рассеивает большую мощность (I2R) в виде тепла.
  2. Управление скоростью: двигатель будет видеть источник с низким импедансом, даже если он постоянно переключается между высоким и низким напряжением. Результат очевиден – двигатель ускоряется. Серийное сопротивление приведет к тому, что двигатель будет испытывать малое напряжение, поэтому легко остановится в нужный момент.
  3. Цепь управления: для цифровой электроники (например, микроконтроллера) очень легко включать или выключать напряжение с помощью транзисторов. Аналоговый выход (с электронным или механическим управлением) требует большего количества компонентов и увеличивает рассеивание мощности. Это будет более дорогостоящим вариантом, с точки зрения электроники и требований к электропитанию.

Создать широтно-импульсный модулятор можно на esp8266 шим, на Ардуино УНО и Ардуино Нано шим. То есть для конструирования подойдет любая модель описываемого микроконтроллера.

Широтно-импульсная модуляция Arduino

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

Мощность сигнала определяет коэффициент заполнения импульса.


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

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

1. PWM используется в источниках питания, регуляторах мощности и т.д. Применение ШИМ на Arduino Nano позволяет значительно упростить управление яркостью источников света (светодиодов, LED-ленты) и скоростью вращения двигателей.

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

3Пример скетча с ШИМ

Откроем из примеров скетч «Fade»: Файл Образцы 01.Basics Fade.

Открываем скетч для Arduino с использованием ШИМ

Немного изменим его и загрузим в память Arduino.

int ledPin = 3;        // объявляем пин, управляющий светодиодом
int brightness = 0;    // переменная для задания яркости
int fadeAmount = 5;    // шаг изменения яркости

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  analogWrite(ledPin, brightness); // устанавливаем яркость brightness на выводе ledPin

  brightness += fadeAmount; // изменяем значение яркости

  /* при достижении границ 0 или 255 
     меняем направление изменения яркости */
  if (brightness == 0 || brightness == 255) { 
    fadeAmount = -fadeAmount; // изменяем знак шага
  }
  delay(30); // задержка для большей видимости эффекта
}

Формирование аналогового сигнала

AnalogRead – это функция, которая используется для считывания аналоговых значений из аналоговых контактов ШИМа на Ардуино. Плата Arduino UNO имеет 6-канальный 10-битный аналого-цифровой преобразователь (АЦП). Это означает, что АЦП в Arduino UNO будет отображать входные напряжения от 0 до 5 В в целое значение от 0 до 1023.

Следовательно, функция analogRead возвращает любое значение от 0 до 1023. Синтаксис функции analogRead – analogRead (аналоговый вывод no).

Поскольку мы считываем аналоговые напряжения от потенциометра на выводе A0, нам нужно написать analogRead (A0) в эскизе. Когда он возвращает целочисленное значение, с ним создается временная переменная целочисленного типа данных. Следующая функция – analogWrite. Это функция, которая используется для установки рабочего цикла сигнала ШИМ для любого заданного штыря ШИМ.

Синтаксис функции analogWrite – analogWrite (вывод PWM no, value).

Значение указывает рабочий цикл и должно быть значением от 0 (0 В) до 255 (5 В).

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

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

Но диапазон значений, принимаемых функцией analogWrite, находится в диапазоне от 0 до 255. Следовательно, нам нужно выполнить некоторые математические вычисления, чтобы поместить подходящее значение в функцию analogWrite.

Наконец, вычисленное значение помещается в функцию analogWrite вместе с выводом PWM для получения сигнала PWM.

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

Еще  один вариант скетча для Ардуино:

int ledPin = 3;        // объявляем пин, управляющий светодиодом
int brightness = 0;    // переменная для задания яркости
int fadeAmount = 5;    // шаг изменения яркости

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  analogWrite(ledPin, brightness); // устанавливаем яркость brightness на выводе ledPin

  brightness += fadeAmount; // изменяем значение яркости

  /* при достижении границ 0 или 255 
     меняем направление изменения яркости */
  if (brightness == 0 || brightness == 255) { 
    fadeAmount = -fadeAmount; // изменяем знак шага
  }
  delay(30); // задержка для большей видимости эффекта
}

Сравнение с линейным стабилизатором

Стабилизатор напряжения на транзисторе

Чтобы сравнить два принципа преобразования, нужно вспомнить, что линейные стабилизаторы (ЛС) – это обычно делитель напряжения. У него нестабильный потенциал подаётся на вход делителя, а стабильный – снимается со второго плеча (нижнего). Принцип стабилизации заключается в постоянном изменении сопротивления верхнего плеча схемы таким образом, чтобы на нижнем оно оставалось стабильным.

К сведению. Когда отношение Uвх/Uвых велико, то КПД линейного стабилизатора очень низкий. Это связано с потерями энергии на регулирующем резисторе. Он греется, оттого часть мощности на входе теряется.

У таких сборок есть свои плюсы, а именно: простота схемы, минимум элементов и неимение помех. По сравнению с линейными, импульсные стабилизаторы (ИС) сложнее, но работают стабильнее при правильно подобранной схеме.

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

Алгоритм управления Arduino

Программа управления симистором создана на базе таймера Timer1 и библиотеки Cyber.Lib, благодаря чему отсутствует влияние на работу других программных кодов. Принцип её действия следующий. При переходе сетевого напряжения через ноль «снизу вверх» таймер перенастраивается на обратный переход «сверху вниз» и начинает отсчёт времени в соответствии со значением переменной «Dimmer». В момент срабатывания таймера Arduino формирует управляющий импульс и симистор открывается. При следующем переходе через ноль симистор перестаёт пропускать ток и ожидает очередное срабатывание таймера. И так 50 раз в секунду. За регулировку задержки на открывание симистора отвечает переменная «Dimmer». Она считывает и обрабатывает сигнал с потенциометра и может принимать значение от 0 до 255.

1 Общие сведения о широтно-импульсной модуляции

Цифровые выводы Arduino могут выдавать только два значения: логический 0 (LOW, низкий уровень) и логическую 1 (HIGH, высокий). На то они и цифровые. Но есть у Ардуино «особые» выводы, которые обозначаются PWM
. Их иногда обозначают волнистой чертой «~» или обводят кружочками или ещё как-то выделяют среди прочих. PWM расшифровывается как Pulse-width modulation
или широтно-импульсная модуляция
, ШИМ
.

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

С помощью задания скважности можно менять среднее напряжение на выходе ШИМ.

Если скважность равняется 100%, то всё время на цифровом выходе Arduino будет напряжение логическая «1» или 5 вольт. Если задать скважность 50%, то половину времени на выходе будет логическая «1», а половину — логический «0», и среднее напряжение будет равняться 2,5 вольтам

Ну и так далее.

В программе скважность задаётся не в процентах, а числом от 0 до 255. Например, команда analogWrite(10, 64)
скажет микроконтроллеру подать на цифровой PWM выход №10 сигнал со скважностью 25%

Выводы Arduino с функцией широтно-импульсной модуляции работают на частоте около 500 Гц. Значит, период следования импульсов — около 2 миллисекунд, что и отмеряют зелёные вертикальные штрихи на рисунке.

Получается, что мы можем сымитировать аналоговый сигнал на цифровом выходе!

Как же мы можем использовать ШИМ? Применений масса! Например, управлять яркостью светодиода, скоростью вращения двигателя, током транзистора, звуком из пьезоизлучателя и т.д.…

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

Работа подобных устройств, их ещё называют импульсными стабилизаторами (ИС), основана на ключевой стабилизации. В схеме имеется элемент, который выполняет регулировку выходных параметров за счёт своего запирания-отпирания.

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

Внимание! Высокочастотные импульсные трансформаторы обладают меньшими габаритами, дешевле, но их мощность выше. Импульсные преобразователи напряжения (ИПН) допускают использование схем трёх типов:

Импульсные преобразователи напряжения (ИПН) допускают использование схем трёх типов:

  • повышающей;
  • понижающей;
  • инверторной.

ИПН обладают высоким КПД и малыми габаритами. Они включают в свой состав следующие элементы:

  • блок питания (источник питания);
  • ключ – элемент коммутации;
  • накопитель энергии индуктивной природы – дроссель, катушка;
  • диод блокировки;
  • фильтр выходного напряжения – конденсатор большой емкости.

Фильтр обычно включается параллельно нагрузке.

Изменение частоты ШИМ Ардуино (разрядности)

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

Схема. Широтно-импульсная модуляция для чайников

В Arduino на базе ATmega168/328 для ШИМ используются три таймера:

Таймер 0 — выводы 5 и 6 Таймер 1 — выводы 9 и 10 Таймер 2 — выводы 3 и 11

ШИМ Ардуино определяется интегральными компонентами, называемыми таймерами. Каждый таймер в платах Arduino Uno и Nano на базе микроконтроллера ATmega168/328 имеет по два канала, подключенных к выходам. Для изменения частоты PWM сигнала требуется изменение таймера, к которому он подключается. При этом PWM изменится и на аналоговых выходах, подключенных параллельно к этому же таймеру.

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

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

Посмотрите приложенные видео, где наглядно показано изменение яркости светодиода, на подключённом осциллографе видно, как при этом меняется сигнал с Arduino.

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

Изменение частоты ШИМ Ардуино (разрядности)

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

В Arduino на базе ATmega168/328 для ШИМ используются три таймера:

Таймер 0
— выводы 5 и 6Таймер 1
— выводы 9 и 10Таймер 2
— выводы 3 и 11

ШИМ Ардуино определяется интегральными компонентами, называемыми таймерами. Каждый таймер в платах Arduino Uno и Nano на базе микроконтроллера ATmega168/328 имеет по два канала, подключенных к выходам. Для изменения частоты PWM сигнала требуется изменение таймера, к которому он подключается. При этом PWM изменится и на аналоговых выходах, подключенных параллельно к этому же таймеру.

Изменение частоты ШИМ Ардуино (разрядности)

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


Схема. Широтно-импульсная модуляция для чайников

В Arduino на базе ATmega168/328 для ШИМ используются три таймера:

Таймер 0 — выводы 5 и 6Таймер 1 — выводы 9 и 10Таймер 2 — выводы 3 и 11

ШИМ Ардуино определяется интегральными компонентами, называемыми таймерами. Каждый таймер в платах Arduino Uno и Nano на базе микроконтроллера ATmega168/328 имеет по два канала, подключенных к выходам. Для изменения частоты PWM сигнала требуется изменение таймера, к которому он подключается. При этом PWM изменится и на аналоговых выходах, подключенных параллельно к этому же таймеру.

Широтно-импульсные модуляторы в Ардуино

Чтобы использовать частотный ШИМ на , нужно всего лишь установить один из ШИМ-выводов в качестве выхода, затем вызывать команду analogWrite и установить уровень. Частота установлена ​​примерно на 500 Гц, поэтому не нужно беспокоиться об этой части.

Мы выбираем контакт под номером 3, устанавливаем его, как output, и analogWrite значение для него. При выборе выхода у нас есть 256 уровней на выбор. Уровень рабочего цикла можно установить между номерами 0 и 255, где 0 – рабочий цикл 0 %, а 255 – 100 % рабочего цикла.

Последний вывод микроконтроллера на плате Arduino Uno составляет 5 В. Чтобы установить светодиод, который мы выбрали для полной яркости, нам необходимо подать напряжение 3,3 В и 15 мА тока. Для этого мы понижаем напряжение на резисторе 100 Ом.

Примеры использования ШИМ на Ардуино

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

AM-модуляция была первым типом модуляции, используемой для радиопередач. Самая простая схема модуляции для реализации требует только одного транзистора или усилителя вакуумной трубки, как это было сделано в первые дни с момента создания радио.

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

Характеристики ШИМ сигнала

Важными характеристиками ШИМ сигнала являются:

амплитуда (U);
частота (f);
скважность (S) или коэффициент заполнения D.

Амплитуда в вольтах задается в зависимости от нагрузки. Она должна обеспечивать номинальное напряжение питания потребителя.

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

Чем выше частота, тем выше точность регулирования.
Частота не должна быть ниже времени реакции устройства, которым управляют с помощью ШИМ, иначе возникнут заметные пульсации регулируемого параметра.
Чем выше частота, тем выше коммутационные потери. Он возникают из-за того, что время переключения ключа конечно. В запертом состоянии на ключевом элементе падает все напряжение питания, но ток почти отсутствует. В открытом состоянии через ключ протекает полный ток нагрузки, но падение напряжения невелико, так как проходное сопротивление составляет единицы Ом. И в том, и в другом случае рассеяние мощности незначительно. Переход от одного состояния к другому происходит быстро, но не мгновенно. В процессе отпирания-запирания на частично открытом элементе падает большое напряжение и одновременно через него идёт значительный ток. В это время рассеиваемая мощность достигает высоких значений. Этот период невелик, ключ не успевает значительно разогреться. Но с повышением частоты таких временных промежутков за единицу времени становится больше, и потери на тепло повышаются

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

Эти требования часто находятся в противоречии друг к другу, поэтому выбор частоты в некоторых случаях – это поиск компромисса.

Величину модуляции характеризует скважность. Так как частота следования импульсов постоянна, то постоянна и длительность периода (T=1/f)

Период состоит из импульса и паузы, имеющих длительность, соответственно, tимп и tпаузы, причем tимп+tпаузы=Т. Скважностью называется отношение длительности импульса к периоду – S=tимп/T. Но на практике оказалось удобнее пользоваться обратной величиной – коэффициентом заполнения: D=1/S=T/tимп. Еще удобнее выражать коэффициент заполнения в процентах.

Широтно-импульсная модуляция Arduino

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

Мощность сигнала определяет коэффициент заполнения импульса.

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

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

1. PWM используется в источниках питания, регуляторах мощности и т.д. Применение ШИМ на Arduino Nano позволяет значительно упростить управление яркостью источников света (светодиодов, LED-ленты) и скоростью вращения двигателей.

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

Схема и принцип её работы

Как и большинство недорогих диммеров, данная схема работает за счёт фазовой регулировки напряжения, что достигается путем принудительного открывания силового ключа – симистора. Принцип действия схемы следующий. Arduino на программном уровне формирует импульсы, частота которых подстраивается сопротивлением потенциометра. Управляющий импульс с вывода P1 проходит через оптопару MOC3021 и поступает на управляющий электрод симистора. Он открывается и пропускает ток до перехода полуволны сетевого напряжения через ноль, после чего закрывается. Затем приходит следующий импульс и цикл повторяется. Благодаря сдвигу управляющих импульсов, в нагрузке формируется обрезанная по фронту часть синусоиды.

Чтобы симистор открывался в соответствии с заданным алгоритмом, частота следования импульсов должна быть засинхронизирована с напряжением сети 220 В. Другими словами Arduino должен знать, в какой момент синусоида сетевого напряжения проходит через ноль. Для этого в диммере на элементах R3, R4 и PC814 реализована цепь обратной связи, сигнал с которой поступает на вывод P2 и анализируется микроконтроллером. В цепь детектора нуля добавлен резистор R5 на 10 кОм, который нужен для подпитки выходного транзистора оптопары.

Один силовой вывод симистора подключается к фазному проводу, а ко второму – подключается нагрузка. Нулевой провод сети 220 В напрямую следует от клеммника J1 к J2, а затем к нагрузке. Применение оптопар необходимо для гальванической развязки силовой и низковольтной части схемы диммера. Потенциометр (на схеме не показан) средним выводом подключается на любой аналоговый вход Arduino, а двумя крайними – на +5 В и «общий».

Откуда берётся ШИМ

Вариант 1 — аналоговый

ШИМ сигнал создаётся специально сконструированными устройствами – генераторами ШИМ сигнала или генераторами прямоугольных импульсов. Они могут быть собраны как на аналоговой базе, так и на основе микроконтроллеров, как в виде схемы из нескольких транзисторов, так и в виде интегральной микросхемы.

Самый простой вариант это микросхема NE555, собирается всё по схеме:

Схема ШИМ генератора на NE555

Но если лень разбираться и паять, то китайцы за нас всё уже давно сделали.

ШИМ генератор на NE555

Стоит $0,5, работает стабильно при питании от 5 до 16 вольт

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

Вариант 2 – цифровой

Более сложный для новичка – использование микроконтроллера, но вместе с тем более интересный и дающий широкие возможности. Звучит страшно, но самом деле реализуется довольно просто.

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

Как с ней работать написано вот здесь. Подключаем ардуинку к компьютеру и заливаем в неё вот такой наисложнейший код:

void setup() {
pinMode(3,OUTPUT); // опреднляем пин D3 как выход
}
void loop() {
int duty = 30; // определяем скважность равной 30%
int value = 255/10*duty; // переводим значение скважности в 8 битный формат
analogWrite(3, value); // выводим ШИМ значением value на пин D3

1
2
3
4
5
6
7

voidsetup(){

pinMode(3,OUTPUT);// опреднляем пин D3 как выход

}

voidloop(){

intduty=30;// определяем скважность равной 30%

intvalue=25510*duty;// переводим значение скважности в 8 битный формат

analogWrite(3,value);// выводим ШИМ значением value на пин D3

Далее цепляемся осциллографом к пину D3  и видим:

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

Сигнал частотой (Freq) -526 Гц, амплитудой (Vmax)- 5 вольт и скважностью (duty) – 30.9 %. Меняем скважность в коде — меняется и скважность на выходе

Добавляем датчик температуры или освещённости, прописываем зависимость скважности на выходе от показаний датчиков и — готова регулировка с обратной связью

Меняем скважность в коде — меняется и скважность на выходе. Добавляем датчик температуры или освещённости, прописываем зависимость скважности на выходе от показаний датчиков и — готова регулировка с обратной связью