Принцип работы ШИМ
Сигнал, промодулированный по ширине импульса, формируется двумя способами:
- аналоговым;
- цифровым.
При аналоговом способе создания ШИМ-сигнала несущая в виде пилообразного или треугольного сигнала подается на инвертирующий вход компаратора, а информационный – на неинвертирующий. Если мгновенный уровень несущей выше модулирующего сигнала, то на выходе компаратора ноль, если ниже – единица. На выходе получается дискретный сигнал с частотой, соответствующей частоте несущего треугольника или пилы, и длиной импульса, пропорциональной уровню модулирующего напряжения.
В качестве примера приведена модуляция по ширине импульса треугольного сигнала линейно-возрастающим. Длительность выходных импульсов пропорциональна уровню выходного сигнала.
Аналоговые ШИМ-контроллеры выпускаются и в виде готовых микросхем, внутри которых установлен компаратор и схема генерации несущей. Имеются входы для подключения внешних частотозадающих элементов и подачи информационного сигнала. С выхода снимается сигнал, управляющий мощными внешними ключами. Также имеются входы для обратной связи – они нужны для поддержания установленных параметров регулирования. Такова, например, микросхема TL494. Для случаев, когда мощность потребителя относительно невелика, выпускаются ШИМ-контроллеры со встроенными ключами. На ток до 3 ампер рассчитан внутренний ключ микросхемы LM2596.
Цифровой способ осуществляется применением специализированных микросхем или микропроцессоров. Длина импульса регулируется внутренней программой. Во многих микроконтроллерах, включая популярные PIC и AVR, «на борту» имеется встроенный модуль для аппаратной реализации ШИМ, для получения PWM-сигнала надо активировать модуль и задать параметры его работы. Если такой модуль отсутствует, то ШИМ можно организовать чисто программным методом, это несложно. Этот способ дает более широкие возможности и предоставляет больше свободы за счёт гибкого использования выходов, но задействует большее количество ресурсов контроллера.
Простой способ улучшить ваш ЦАП на базе ШИМ
Мы не должны падать духом из-за компромисса № 2, потому что есть простой способ получить больше производительности от RC фильтра: просто увеличьте частоту ШИМ сигнала! Помните, что спектр ШИМ сигнала в полосе от постоянной составляющей до частоты несущей пуст. Таким образом, более высокая частота несущей означает более широкую полосу, в которой АЧХ фильтра может постепенно спадать – тот же фильтр, то же время установления, большее затухание. Давайте вернемся к нашему RC фильтру с fср ≈ 50 кГц и увеличим частоту несущей до 10 МГц. Вот результаты:
Рисунок 17 – Время установления напряжения на выходе ЦАП на базе ШИМ с тактовой частотой 10 МГц RC фильтром с частотой среза 50 кГц
Рисунок 18 – Пульсации на выходе ЦАП на базе ШИМ с тактовой частотой 10 МГц RC фильтром с частотой среза 50 кГц
Время установления составляет всего около 15 мкс, а пульсации составляют всего 25 мВ (по сравнению с 2,15 В, когда мы использовали фильтр 50 кГц и частоту несущей 100 кГц).
Характеристики ШИМ сигнала
Важными характеристиками ШИМ сигнала являются:
- амплитуда (U);
- частота (f);
- скважность (S) или коэффициент заполнения D.
Амплитуда в вольтах задается в зависимости от нагрузки. Она должна обеспечивать номинальное напряжение питания потребителя.
Частота сигнала, модулируемого по ширине импульса, выбирается из следующих соображений:
- Чем выше частота, тем выше точность регулирования.
- Частота не должна быть ниже времени реакции устройства, которым управляют с помощью ШИМ, иначе возникнут заметные пульсации регулируемого параметра.
- Чем выше частота, тем выше коммутационные потери. Он возникают из-за того, что время переключения ключа конечно. В запертом состоянии на ключевом элементе падает все напряжение питания, но ток почти отсутствует. В открытом состоянии через ключ протекает полный ток нагрузки, но падение напряжения невелико, так как проходное сопротивление составляет единицы Ом. И в том, и в другом случае рассеяние мощности незначительно. Переход от одного состояния к другому происходит быстро, но не мгновенно. В процессе отпирания-запирания на частично открытом элементе падает большое напряжение и одновременно через него идёт значительный ток. В это время рассеиваемая мощность достигает высоких значений. Этот период невелик, ключ не успевает значительно разогреться. Но с повышением частоты таких временных промежутков за единицу времени становится больше, и потери на тепло повышаются. Поэтому для построения ключей важно использование быстродействующих элементов.
- При управлении электродвигателем частоту приходится уводить за пределы слышимого человеком участка – 25 кГц и выше. Потому что при более низкой частоте ШИМ возникает неприятный свист.
Эти требования часто находятся в противоречии друг к другу, поэтому выбор частоты в некоторых случаях – это поиск компромисса.
Величину модуляции характеризует скважность. Так как частота следования импульсов постоянна, то постоянна и длительность периода (T=1/f). Период состоит из импульса и паузы, имеющих длительность, соответственно, tимп и tпаузы, причем tимп+tпаузы=Т. Скважностью называется отношение длительности импульса к периоду – S=tимп/T. Но на практике оказалось удобнее пользоваться обратной величиной – коэффициентом заполнения: D=1/S=T/tимп. Еще удобнее выражать коэффициент заполнения в процентах.
Пульсации и отклик при одном полюсе
Давайте посмотрим, какое качество ЦАП мы можем получить с помощью простейшего RC фильтра. Начнем с частоты среза (обозначаемой fср) в середине полосы от постоянной составляющей до частоты несущей:
\(f_{ср}=50\ кГц=\frac{1}{2\pi RC};\ выбираем\ C=10\ нФ\ \ \Rightarrow\ \ R\approx318\ Ом\)
Рисунок 7 – Схема моделирования в LTspice: генератор ШИМ сигнала и RC фильтр нижних частот
Рисунок 8 – Пульсации напряжения, полученного на выходе фильтра нижних частот
Не очень хорошо… Очевидно, нам нужно большее затухание, чем сейчас. Давайте переместим частоту среза на 1 кГц:
Рисунок 9 – Схема моделирования в LTspice: генератор ШИМ сигнала и RC фильтр нижних частот с частотой среза 1 кГц
Рисунок 10 – Время установления напряжения, полученного на выходе фильтра нижних частот с частотой среза 1 кГц
Теперь пульсации значительно уменьшились, но вы, вероятно, заметили, что у нас возникла новая проблема: выходной сигнал достаточно долго достигает требуемого напряжения ЦАП. Это происходит потому, что более высокое сопротивление в RC фильтре не только снижает частоту среза, но также увеличивает постоянную времени – большее сопротивление означает меньший ток, протекающий к конденсатору, и, следовательно, конденсатор заряжается медленнее. Следующий график помогает показать ограничение, накладываемое этим действием на ЦАП:
Рисунок 11 – Время установления напряжения
На этом графике вы видите довольно плохое «время установления», которое представляет собой характеристику, которая показывает, как быстро ЦАП может установить свой выходной сигнал на новое запрограммированное напряжение. График показывает, что, когда выходной сигнал увеличивается или уменьшается на половину диапазона полной шкалы, эта конкретная схема приводит к времени установления почти 1 мс. Не поймите меня неправильно, во многих приложениях время 1 мс было бы вполне приемлемым, но это не меняет того факта, что эта производительность установления никак не сравнится с тем, что вы ожидаете увидеть от типового ЦАП.
Приведенные выше результаты приводят нас к первому из двух основных компромиссов, связанных с проектированием ЦАП на базе ШИМ.
- Компромисс № 1: более низкая частота среза означает меньшие пульсации и большее время установления; более высокая частота среза означает большие пульсации и меньшее время установления. Поэтому вы должны подумать о своем приложении и решить, хотите ли вы, чтобы ЦАП быстрее реагировал на изменения или был менее подвержен пульсациям выходного сигнала.
Управление двигателем постоянного тока с использованием Н-моста
Если рассмотреть принцип действия, то Н-мост представляет собой логическую схему из четырех логических элементов (релейного или полупроводникового типа), способных переходить в два состояния (открытое и закрытое). В данном примере рассматривается мост собранный на полупроводниках. Простым изменением попарного состояния этих элементов двигатель будет вращаться то в одну, то в другую сторону без необходимости переключения его контактов.
Свое название данное устройство получило за счет внешнего сходства с буквой «Н», где каждая пара транзисторов находится в вертикальных элементах буквы, а непосредственно сам управляемый мотор в горизонтальном. Пример элементарного Н-моста из четырех транзисторов приведен на рисунке ниже. Попарно открывая и закрывая нужные элементы схемы, вы сможете пропускать ток через обмотки в противоположных направлениях.
Схема H-моста
Посмотрите на рисунок, в этой схеме управление питанием двигателя происходит от выводов А и В, на которые подается управляющий потенциал.
Принцип определения направления вращения в Н-мосте происходит следующим образом:
- при подаче на базы транзисторов Q1 и Q4 импульса для открытия перехода происходит протекание тока по обмоткам двигателя в одном направлении;
- при подаче на базы транзисторов Q2 и Q3 импульса для открытия перехода ток будет протекать в противоположном направлении, в сравнении с предыдущим и произойдет реверсивное движение;
- попарное открытие транзисторов Q1 и Q3, Q2 и Q4 приводит к торможению ротора;
- открытие транзисторов в последовательности Q1 и Q2 или Q3 и Q4 совершенно недопустимо, поскольку оно приведет к возникновению короткого замыкания в цепи.
Применяя схему Н-моста для управления работой двигателя постоянного тока, вы сможете реализовать полный набор операций для электрической машины без необходимости переподключения ее выводов. В виду сложности подбора транзисторов и подключения их в схему Н-моста, гораздо проще использовать уже существующие драйвера, имеющие такую функцию. Среди них наиболее популярными являются драйверы L293D и L298N.
Сравнивая оба драйвера, следует отметить, что L298N превосходит L293D как по параметрам работы, так и по доступным опциям. Несмотря на то, что L293D более дешевая модель, L298N, ввиду значительных преимуществ, стал использоваться куда чаще. Поэтому в данном примере мы рассмотрим принцип управления двигателем при помощи драйвера L298N и платы Arduino.
Третий пример
И, конечно, попробуем управлять поочередно всеми светодиодами:
#define BLUE 9 #define ORANGE 10 #define GREEN 11 void setup() { pinMode(BLUE, OUTPUT); pinMode(ORANGE, OUTPUT); pinMode(GREEN, OUTPUT); } void loop() { for (int i=0; i<256; i++) { analogWrite(BLUE,i); delay(10); } analogWrite(BLUE,0); for (int i=0; i<256; i++) { analogWrite(ORANGE,i); delay(10); } analogWrite(ORANGE,0); for (int i=0; i<256; i++) { analogWrite(GREEN,i); delay(10); } analogWrite(GREEN,0); }
Как увеличить частоту и разрядность ШИМ Ардуино
Не существует способа изменить частоту ШИМ 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
ШИМ, по-английски Pulse-Width Modulation (PWM) — это управление мощностью на нагрузке с помощью изменения скважности (ширины) импульсов при постоянной частоте и амплитуде сигнала. На следующем графике видно, что при разных значениях в функции analogWrite , амплитуда импульсов остается постоянной, но меняется ширина импульсов. Мощность сигнала определяет коэффициент заполнения импульса.
График. Параметры сигнала, коэффициент заполнения ШИМ
Можно выделить две области применения широтно-импульсной модуляции:
1. PWM используется в источниках питания, регуляторах мощности и т.д. Применение ШИМ на Arduino Nano позволяет значительно упростить управление яркостью источников света (светодиодов, LED-ленты) и скоростью вращения двигателей.
2. PWM используется для получения аналогового сигнала. Цифро-аналоговый преобразователь (ЦАП) на Ардуино прост в реализации, так как требует минимума радиоэлементов — достаточно одной RC цепочки из резистора и конденсатора.
Как увеличить частоту и разрядность ШИМ Ардуино
Не существует способа изменить частоту ШИМ 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 Гц.
Часть 2. Управление яркостью с помощью потенциометра
Необходимые компоненты
- Дополнительно на понадобится потенциометр
Схема
Добавим на схему потенциометр:
Управление яркостью светодиода с помощью потенциометра
Среднюю ногу потенциометра мы подключаем к аналоговому входу A0.
Скетч
/******************************************************* * (C) jarduino.ru 2022 * Изучение ардуино через опыты. * * Опыт №3.2 Управление яркостью светодиода с помощью потенциометра * * ****************************************************/ // Глобальные константы и переменные const int pinLed = 11; // порт для светодиода const int pinPot = A0; // порт для светодиода // настройка платы void setup() { Serial.begin(9600); // инициализировать последовательные порт pinMode(pinLed, OUTPUT); // установть пин светодиода в режим вывода // аналоговые пины по умолчанию уже стоят в режиме ввода. } // основной цикл void loop() { static int nValOld = 0; static int nVal; // статическая переменная для хранения текущей яркости светодиода nVal = analogRead(pinPot); // выведем значение nVal в окно отладки, а чтобы // не реагировать на помехи, будет выводить значение только если оно изменилось хотя бы на 3: if (abs(nValOld — nVal) > 3) { Serial.println(nVal); nValOld = nVal; } analogWrite(pinLed, nVal / 4); delay(10); // пауза в 0.01 сек. }
Результат
Когда вы вращаете ручку потенциометра, вы видите в мониторе последовательно порта как меняется напряжение и яркость светодиода в соответствии с ним.
Объяснение
В программе мы считываем аналоговое значение, задаваемое потенциометром, и применяем его к цифровому ШИМ порту, к которому подключен светодиод. В соответствии с изменением ШИМ-сигналом, меняется и яркость светодиода.
Обратите внимание, что максимальное значение для порта ШИМ – это 255, а аналогового порта – 1024. Поэтому считанное значение приходится делить на 4.
Индивидуальные задания
- Измените третий пример так, чтобы после плавного увеличения яркости, светодиоды гасли плавно.
- Подберите соотношение яркости светодиодов так, чтобы добиться белого свечения светодиода.
- Сделайте из шилда лампу настроения. Цвета должны случайным образом переливаться. Организуйте основной цикл так, чтобы сначала случайным образом выбирался номер вывода, а потом он плавно зажигался и гас. Для этого можно использовать функцию random(min,max). Для работы с ней объявите переменную int pin=0; и в цикле void loop() вызовите эту функцию pin=random(9,12);. Она запишет в переменную pin значение от 9 до 11.
Остальные статьи цикла можно найти здесь.
Мы будем очень рады, если вы поддержите наш ресурс и посетите магазин наших товаров shop.customelectronics.ru.
Широтно-импульсная модуляция Arduino
ШИМ, по-английски Pulse-Width Modulation (PWM) — это управление мощностью на нагрузке с помощью изменения скважности (ширины) импульсов при постоянной частоте и амплитуде сигнала. На следующем графике видно, что при разных значениях в функции analogWrite , амплитуда импульсов остается постоянной, но меняется ширина импульсов. Мощность сигнала определяет коэффициент заполнения импульса.
График. Параметры сигнала, коэффициент заполнения ШИМ
Можно выделить две области применения широтно-импульсной модуляции:
1. PWM используется в источниках питания, регуляторах мощности и т.д. Применение ШИМ на Arduino Nano позволяет значительно упростить управление яркостью источников света (светодиодов, LED-ленты) и скоростью вращения двигателей.
2. PWM используется для получения аналогового сигнала. Цифро-аналоговый преобразователь (ЦАП) на Ардуино прост в реализации, так как требует минимума радиоэлементов — достаточно одной RC цепочки из резистора и конденсатора.