pwm output что это
Использование широтно-импульсной модуляции (ШИМ) в микроконтроллерах AVR ATmega16
Также при использовании ШИМ можно генерировать аналоговые сигналы используя цифровые сигналы. В данной статье мы рассмотрим основы применения широтно-импульсной модуляции (ШИМ) в микроконтроллере ATmega16 (семейство AVR) на примере изменения интенсивности свечения светодиода. Данный пример уже рассматривался на нашем сайте в этой статье (более подробная и наглядная статья), но здесь материал изложен немного по другому – у вас есть возможность выбрать какой из этих материалов использовать.
Контакты ШИМ в микроконтроллере AVR ATmega16
Также ATmega16 имеет два 8-битных (Timer0 и Timer2) и один 16-битный таймер (Timer1). Для понимания принципов формирования ШИМ мы должны понимать основы работы с этими таймерами. Как известно, частота представляет собой количество циклов в секунду поэтому она однозначно связано зависимостью с временем. То есть чем более высокая частота нам нужна, тем более быстрый таймер мы должны использовать. Чем выше частота ШИМ, тем более точно мы можем управлять ее параметрами.
В данной статье для управления ШИМ в микроконтроллере ATmega16 мы будем использовать его Timer2. С его помощью можно выбрать коэффициент заполнения/скважность (duty cycle) ШИМ в широких пределах. Кратко рассмотрим основы этого процесса.
Что такое ШИМ сигнал
Коэффициент заполнения (скважность) ШИМ
Процент времени, в течение которого ШИМ сигнал имеет высокий уровень, называется коэффициентом заполнения (скважностью). К примеру, коэффициент заполнения ШИМ сигнала с периодом (длительностью) 100 мс, в котором в течение 50 мс сигнал имеет высокий уровень и в течение 50 мс имеет низкий уровень, равен 50%. Аналогично, если для такой же длительности (100 мс) сигнал 25 мс остается на высоком уровне и 75 мс на низком, то коэффициент заполнения для такого сигнала будет равен 25%. Для его определения нам необходимо знать только длительность высокого уровня сигнала (длительность низкого уровня легко определить как разность между периодом сигнала и длительность сигнала высокого уровня). Более наглядно ШИМ сигнал представлен на следующем рисунке.
Формула для расчета коэффициента заполнения/скважности (Duty Cycle) выглядит следующим образом:
Duty Cycle (%) = On Time/(On Time + Off Time)
Таким образом, изменяя коэффициент заполнения ШИМ сигнала мы можем изменять интенсивность свечения светодиода.
Выбор режима ШИМ
После выбора нужного нам коэффициента заполнения необходимо выбрать еще режим ШИМ – то есть то, каким образом ШИМ будет работать. Существует три типа ШИМ:
Быстрая ШИМ используется в случаях когда нам не важна фаза импульсов, например, управление скоростью вращения двигателя или яркостью свечения светодиода.
Для генерации быстрой ШИМ нам необходимо будет запустить на таймере счет и когда он досчитает до определенного значения сбрасывать значение таймера снова в ноль. Таким образом мы установим период следования ШИМ импульсов. Таким образом мы можем контролировать импульс, устанавливая высокое значение сигнала когда счетчик таймера досчитает до определенного значения. А когда счетчик будет возвращаться в 0 на это время сигнал будет низкого уровня. Таким образом, мы имеем большую гибкость в управлении ШИМ сигналом используя всего лишь один таймер.
Необходимые компоненты
Схема устройства
Схема устройства приведена на следующем рисунке.
Мы будем использовать для формирования ШИМ сигнала контакт OC2 микроконтроллера ATmega16, поэтому соедините контакт Pin21 (PD7) микроконтроллера со светодиодом.
Программирование ШИМ сигнала в микроконтроллере ATmega16 на языке С (Си)
Полный текст программы приведен ниже, а в этом разделе поясним ключевые особенности программы. Видео, демонстрирующее работу схемы, приведено в конце статьи. На видео вы можете видеть как яркость свечения светодиода будет изменяться постепенно в зависимости от изменения коэффициента заполнения ШИМ.
Начать программирование ШИМ ATmega16 необходимо с установки нужного значения регистра Таймера 2 – его биты приведены на следующем рисунке. Изменяя данные биты, мы можем настраивать нужные нам параметры ШИМ.
В регистре Таймера 2 три группы битов:
Установим биты WGM20 и WGM21 чтобы активировать режим быстрой ШИМ.
Широтно-импульсная модуляция и Ардуино
Широтно-импульсная модуляция, сокращенно ШИМ, может быть реализована на Arduino несколькими способами. В этой статье объясняются простые методы ШИМ, а также методы использования этих регистров для точного контроля над рабочим циклом и частотой.
Расшифровка и определение ШИМ
Модуляция ширины импульса означает, что ширина импульса возникает строго в прямоугольной волне.
Это улучшает управление двигателем. Вместо чистого сигнала постоянного тока к двигателю используется серия импульсов. Они могут находиться на максимальном напряжении, но только на долю секунды. Выполнение повторных действий приведет к тому, что двигатель начнет вращаться. Это позволит более комфортно управлять скоростью. Простое применение сигнала постоянного тока не приведет к преодолению трения двигателя и передач, наоборот, запуск будет обрывистый с низкой скоростью.
Увеличивая частоту импульсов ШИМа на Ардуино, можно выполнять операции на высокой скорости.
Декодер создает этот сигнал для управления двигателем. Это та же концепция, что и функции мощности импульса, находящиеся на блоках питания постоянного тока.
Рассмотрим основные преимущества использования ШИМ Ардуино:
Создать широтно-импульсный модулятор можно на esp8266 шим, на Ардуино УНО и Ардуино Нано шим. То есть для конструирования подойдет любая модель описываемого микроконтроллера.
Формирование аналогового сигнала
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, мы видим, что, изменяя положение потенциометра, яркость светодиода мы также можем изменить.
Еще один вариант скетча для Ардуино:
Широтно-импульсные модуляторы в Ардуино
Чтобы использовать частотный ШИМ на Arduino Uno, нужно всего лишь установить один из ШИМ-выводов в качестве выхода, затем вызывать команду analogWrite и установить уровень. Частота установлена примерно на 500 Гц, поэтому не нужно беспокоиться об этой части.
Мы выбираем контакт под номером 3, устанавливаем его, как output, и analogWrite значение для него. При выборе выхода у нас есть 256 уровней на выбор. Уровень рабочего цикла можно установить между номерами 0 и 255, где 0 – рабочий цикл 0 %, а 255 – 100 % рабочего цикла.
Последний вывод микроконтроллера на плате Arduino Uno составляет 5 В. Чтобы установить светодиод, который мы выбрали для полной яркости, нам необходимо подать напряжение 3,3 В и 15 мА тока. Для этого мы понижаем напряжение на резисторе 100 Ом.
Увеличение частоты и разрядности ШИМ Ардуино
Для изменения частоты ШИМа Ардуино в большую сторону необходимо обратиться к следующей инструкции.
Когда высокочастотный ШИМ-сигнал фильтруется, его небольшой компонент всегда будет проходить через фильтр. Это происходит потому, что конденсатор слишком мал, чтобы полностью его фильтровать. Можно было бы выбрать большую комбинацию конденсаторов и резисторов, но тогда потребуется долгое время для достижения надлежащего выходного напряжения при зарядке конденсатора.
Это значительно ограничило бы то, как быстро сигнал может измениться и быть видимым на выходе. Поэтому нужно выбрать разумное значение напряжения пульсации. Популярным приложением было бы изменение напряжения MOSFET. Поскольку МОП-транзисторы являются устройствами, контролирующими напряжение, можно легко управлять ими с помощью нашего микроконтроллера с ШИМ и фильтром нижних частот. На выходе будет присутствовать любое пульсационное напряжение, присутствующее на входе.
Рис.: а) структура МОП ПТ с индуцированным каналом. б) графическое изображение.
В этом примере предположим, что MOSFET будет управлять не критической нагрузкой, такой, как светодиод высокой мощности. В этом случае нам просто нужно оставаться в разумных пределах, поэтому пиковый ток в светодиоде не будет превышен. В этом случае пульсация в 0,1 вольта была бы более чем достаточной.
Примеры использования ШИМ на Ардуино
Широкополосная широтно-импульсная модуляция является способом кодирования напряжения на фиксированную несущую частоту. Он обычно используется для радиоуправляемых устройств. Каждый тип схемы модуляции имеет свои преимущества и недостатки.
AM-модуляция была первым типом модуляции, используемой для радиопередач. Самая простая схема модуляции для реализации требует только одного транзистора или усилителя вакуумной трубки, как это было сделано в первые дни с момента создания радио.
С необходимостью цифровой связи был изобретен новый метод модуляции – ШИМ. Этот метод обладает той же помехоустойчивостью, что и радиоволны. Самая большая разница – простота и цифровая природа модуляции. Вместо того, чтобы изменять частоту модуляции с напряжением, выход просто включается и выключается с фиксированной частотой. Процент времени включения пропорционален сигнальному напряжению.
Что такое ШИМ – Широтно-Импульсная Модуляция?
Рассмотрим, что такое ШИМ или PWM. А также, чем отличается ШИМ от ШИР. Алгоритм широтно-импульсной модуляции применяется для плавного изменения мощности на нагрузке, поступающей от источника питания. Например, с целью регулирования скорости вращения вала двигателя; плавности изменения яркости освещения или подсветки. Отдельной широкой областью применения ШИМ являются импульсные источники питания и автономные инверторы.
Для питания нагрузки часто необходимо изменять величину напряжения, подводимого от источника питания. Принципиально можно выделить два способа регулирования напряжения – линейный и импульсный.
Примером линейного способа может послужить переменный резистор. При этом значительная часть мощности теряется на резисторе. Чем больше разница напряжений источника питания и потребителя, тем ощутимей потери мощности, которая попросту «сгорает» на резисторе, превращаясь в тепло. Поэтому линейный способ регулирования рационально применять только при небольшой разнице входного и выходного напряжений. В противном случае коэффициент полезного действия источника питания в целом будет очень низкий.
В современной преобразовательной технике преимущественно используются импульсное регулирование мощности на нагрузке. Одним из способов реализации импульсного регулирования является широтно-импульсная модуляция ШИМ. В англоязычной литературе PWM – pulse-width modulation.
Принцип импульсного регулирования
Основными элементами любого типа импульсного регулятора мощности являются полупроводниковые ключи – транзисторы или тиристоры. В простейшем виде схема импульсного источника питания имеет следующий вид. Источника постоянного напряжения Uип ключом K подсоединяется к нагрузке Н. Ключ К переключается с определенной частотой и остается во включенном состоянии определенную длительность времени. С целью упрощения схемы я на ней не изображаю другие обязательные элементы. В данном контексте нас интересует только работа ключа К.
Чтобы понять принцип ШИМ воспользуемся следующим графиком. Разобьем ось времени на равные промежутки, называемые периодом T. Теперь, например половину периода мы будем замыкать ключ K. Когда ключ замкнут, к нагрузке Н подается напряжение от источника питания Uип. Вторую часть полупериода ключа находится в закрытом состоянии. А потребитель останется без питания.
Время, в течение которого ключ замкнут, называется временем импульса tи. А время длительности разомкнутого ключа называют временем паузы tп. Если измерить напряжение на нагрузке, то оно будет равно половине Uип.
Среднее значение напряжения на нагрузке можно выразить следующей зависимостью:
Отношение времени импульса tи к периоду T называют коэффициентом заполнения D. А величина, обратная ему называется скважностью:
На практике удобнее пользоваться коэффициентом заполнения, который зачастую выражают в процентах. Когда транзистор полностью открыт на протяжении всего времени, то коэффициент заполнения D равен единице или 100 %.
Если D = 50 %, то это означает, что половину времени за период транзистор находится в открытом состоянии, а половину в закрытом. В таком случае форма сигнала называется меандр.
Следовательно, изменяя коэффициент D от 0 до единицы или до 100 % можно изменять величину Uср.н от 0 до Uип:
А соответственно регулировать и величину подводимой мощности:
Широтно-импульсное регулирование ШИР
В западной литературе практически не различают понятия широтно-импульсного регулирования ШИР и широтно-импульсной модуляции ШИМ. Однако у нас различие между ними все же существует.
Сейчас во многих микросхемах, особенно применяемых в DC-DC преобразователях, реализован принцип ШИР. Но при этом их называют ШИМ контроллерами. Поэтому теперь различие в названии между этими двумя способами практически отсутствует.
В любом случае для формирования определенной длительности импульса, подаваемого на базу транзистора и открывающего последний, применяют источники опорного и задающего напряжения, а также компаратор.
Рассмотрим упрощенную схему, в которой аккумуляторная батарея GB питает потребитель Rн импульсным способом посредством транзистора VT. Сразу скажу, что в данной схеме я специально не использовал такие элементы, необходимые для работы схемы: конденсатор, дроссель и диод. Это сделано с целью упрощения понимания работы ШИМ, а не всего преобразователя.
Упрощенно, компаратор имеет три вывода: два входа и один выход. Компаратор работает следующим образом. Если величина напряжения на входном выводе «+» (неинвертирующий вход) выше, чем на входе «-» (инвертирующий вход), то на выходе компаратора будет сигнал высокого уровня. В противном случае – низкого уровня.
В нашем случае, именно сигнал высокого уровня открывает транзистор VT. Рассмотрим, как формируется необходимая длительность времени импульса tи. Для этого воспользуемся следующим графиком.
При ШИР на одни вход компаратора подается сигнал пилообразной формы заданной частоты. Его еще называют опорным. На второй вход подается задающее напряжение, которое сравнивается с опорным. В результате сравнения на выходе компаратора формируется импульс соответствующей длительности.
Если на неинверитирующем входе компаратора опорный сигнал, то сначала будет идти пауза, а затем импульс. Если на неинвертирующий вход подать задающий сигнал, то сначала будет импульс, затем пауза.
Таким образом, изменяя значение задаваемого сигнала, можно изменять коэффициент заполнения, а соответственно и среднее напряжение на нагрузке.
Частоту опорного сигнала стремятся сделать максимальной, чтобы снизить параметры дросселей и конденсаторов (на схеме не показаны). Последнее приводит к снижению массы и габаритов импульсного блока питания.
ШИМ – широтно-импульсная модуляция
ШИМ в преобладающем большинстве применяется для формирования сигнала синусоидальной формы. Часто ШИМ применяется для управления работой инверторного преобразователя. Инвертор предназначен для преобразования энергии постоянного тока в энергию переменного тока.
Рассмотрим простейшую схему инвертора напряжения.
В один момент времени открывается пара транзисторов VT1 и VT3. Создается путь для протекания тока от аккумулятора GB через активно-индуктивную нагрузку RнLн. В следующий момент VT1 и VT3 заперты, а открыты диагонально противоположные транзисторы VT2 и VT4. Теперь тока протекает от аккумулятора через RнLн в противоположном направлении. Таким образом, ток на нагрузке изменяет свое направление, поэтому является переменным. Как видно, ток на нагрузке не является синусоидальным. Поэтому применяют ШИМ для получения синусоидально формы тока.
Существует несколько типов ШИМ: однополярная, двухполярная, одностороння, двухсторонняя. Здесь мы не будем останавливаться на каждом конкретном типе, а рассмотрим общий подход.
В качестве модулирующего сигнала применяется синусоида, а опорным является сигнал треугольной формы. В результате сравнивания этих сигналов формируются длительности импульсов и пауз (нижний график), которые управляют работой транзисторов VT1…VT4.
Обратите внимание, что амплитуда напряжения на нагрузке всегда равна амплитуде источника питания. Также остается неизменным период следования импульсов. Изменяется лишь ширина открывающего импульса. Поэтому при подключении нагрузки ток, протекающий через нее, будет иметь синусоидальную форму (показано пунктиром на нижнем графике).
Так вот, основное отличие между ШИР и ШИМ заключается в том, что при широтно-импульсном регулировании время импульса и паузы сохраняют постоянное значение. А при широтно-импульсной модуляции изменяются длительности импульсов и пауз, что позволяет реализовать выходной сигнал заданной формы.
Еще статьи по данной теме
Спасибо вам за вашу работу. Хотел бы предложить вам идею. Можно сделать такие видео, там например как очистить старые платы(разные способы) +как сделать из этих же плат новые(травление) и на них схемы собрать. Если вам идея понравилась скажите, если нет то тоже скажите.
Здравствуйте. Идея хорошая, только я ее не до конца понимаю. Точнее, не понимаю саму реализацию.
Дмитрий, ваши ролики стали для меня спасением в моем изучении радиотехники!
Решил обратиться к вам, может что подскажите или снимите ролик. По вашим видео начал разрабатывать схему ивентора с синусом изменяемой частоты от 0 до 20 кГц. С генератором треугольной формы разобрался, а с синусом (задаюший сигнал) оказалось сложней. Микрасхемы либо не способны выдавать нужную частоту, либо слабый сигнал, либо сильно искаженный сигнал. Есть ли какое-то решение этой проблемы?
Благодарю!
Здравствуйте вопрос
как называется величина, позволяющая качественно характеризовать ШИМ
Что такое ШИМ и как она используется в Arduino
Давайте разберёмся, что скрывается за аббревиатурой ШИМ, как это работает, для чего нужно и как мы можем использовать её в работе с Arduino.
Инструкция по использованию ШИМ в Arduino
1 Общие сведенияо широтно-импульсной модуляции
Цифровые выводы Arduino могут выдавать только два значения: логический 0 (LOW, низкий уровень) и логическую 1 (HIGH, высокий). На то они и цифровые. Но есть у Ардуино «особые» выводы, которые обозначаются PWM. Их иногда обозначают волнистой чертой «
» или обводят кружочками или ещё как-то выделяют среди прочих. PWM расшифровывается как Pulse-width modulation или широтно-импульсная модуляция, ШИМ.
Обозначение выходов с ШИМ на Arduino Leonardo
Если скважность равняется 100%, то всё время на цифровом выходе Arduino будет напряжение логическая «1» или 5 вольт. Если задать скважность 50%, то половину времени на выходе будет логическая «1», а половину – логический «0», и среднее напряжение будет равняться 2,5 вольтам. Ну и так далее.
Принцип работы широтно-импульсной модуляции (ШИМ)
В программе скважность задаётся не в процентах, а числом от 0 до 255. Например, команда analogWrite(10, 64) скажет микроконтроллеру подать на цифровой PWM выход №10 сигнал со скважностью 25%.
Выводы Arduino с функцией широтно-импульсной модуляции работают на частоте около 500 Гц. Значит, период следования импульсов – около 2 миллисекунд, что и отмеряют зелёные вертикальные штрихи на рисунке. Получается, что мы можем сымитировать аналоговый сигнал на цифровом выходе! Интересно, правда?!
2 Схема для демонстрации широтно-импульсной модуляции в Arduino
Схема для демонстрации ШИМ в Arduino
3 Пример скетча с ШИМ
Откроем из примеров скетч «Fade»: Файл Образцы 01.Basics Fade.
Открываем скетч для Arduino с использованием ШИМ
Немного изменим его и загрузим в память Arduino.
4 Управление яркостью светодиода с помощью PWM и Arduino
Включаем питание. Светодиод плавно наращивает яркость, а затем плавно уменьшает. Мы сымитировали аналоговый сигнал на цифровом выходе с помощью широтно-импульсной модуляции.
Управление яркостью светодиода – пример широтно-импульсной модуляции, используемой в Arduino
Посмотрите приложенные видео, где на экране осциллографа DSO138 наглядно показано изменение яркости светодиода, и как при этом меняется сигнал с Arduino.