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

Ошибки 

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

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

Для начала вспомним, что такое ШИМ. ШИМ сигнал - это импульсный сигнал определенной частоты и скважности:

Частота, это количество периодов за одну секунду. Скважность- отношение длительности импульса к длительности периода. Можно изменять и то и другое, но для управления светодиодами достаточно управлять скважностью. На картинке выше мы видим ШИМ сигнал со скважностью 50 %, так как длительность импульса (ширина импульса) ровно половина от периода. Соответственно светодиод будет ровно половину времени во включенном состоянии и половину в выключенном. Частота ШИМ очень большая и глаз не заметит мерцания светодиода из за инерционности нашего зрения, поэтому нам будет казаться, что светодиод светится на половину яркости. Если мы изменим скважность на 75%, то яркость светодиода будет на 3 четверти от полной, а график будет выглядеть так:

Получается, что мы можем регулировать яркость светодиода от 0 до 100 %. А теперь поговорим о таком параметре ШИМ, как разрешение. Разрешение- это количество градаций (шагов) регулировки скважности, мы будем рассматривать разрешение в 256 шагов.

С параметрами вроде разобрались, теперь поговорим о том, как нам получить этот самый ШИМ от микроконтроллера. Берем остро заточенный разогретый паяльник и начинаем пытать МК, одновременно подцепившись к двум его ногам осциллографом и проверяя наличие на них сигнала нужной нам скважности. В микроконтроллерах есть аппаратная поддержка ШИМ и несколько каналов для него, в нашем случае 3. За выдачу ШИМ отвечают определенные выводы МК, в нашем случае OC2, OC1A, OC1B (15,16,17 нога в DIP корпусе). Так же для этого используются таймеры микроконтроллера, в нашем случае TC1, TC2. Так как же сконфигурировать МК для выдачи сигнала необходимой скважности? Все очень просто, для начала сконфигурируем нужные нам ноги на выход:

PORTB=0x00; DDRB=0x0E; // 0b00001110

Далее начнем конфигурировать таймеры. Для таймера TC1 нам потребуются два регистра: TCCR1A и TCCR1B. Открываем даташит и читаем как настраиваются эти регистры. Я настроил его на 8 битный сигнал ШИМ, что соответствует разрешению в 256 шагов:

TCCR1A=0xA1; TCCR1B=0x09;

Для таймера TC2 мы будем использовать регистр TCCR2=0x69;. Его настройка выглядит так:

TCCR2=0x69;

Всё, таймеры сконфигурированы. Скважность будем задавать регистрами OCR1A,OCR1B, OCR2:

Зададим требуемые скважности:

OCR1A=0x32; //50 шагов OCR1B=0x6A; //106 шагов OCR2=0xF0; //240 шагов

Ну и поместим инкремент и декремент этих регистров в бесконечный цикл:

While(1) { OCR1A++; OCR1B--; OCR2++; delay_ms(50); }

Первая тестовая программа готова и выглядит для CVAVR она так:

#include "mega8.h" #include "delay.h" void main(void) { PORTB=0x00; DDRB=0x0E; // 0b00001110 TCCR1A=0xA1; TCCR1B=0x09; TCCR2=0x69; OCR1A=0x32; //50 шагов OCR1B=0x6A; //106 шагов OCR2=0xF0; //240 шагов while (1) { OCR1A++; OCR1B--; OCR2++; delay_ms(50); }; }

АМн · ФМн · КАМ · ЧМн · GMSK
OFDM · COFDM · TCM Импульсная модуляция АИМ · ДМ · ИКМ · ΣΔ · ШИМ · ЧИМ · ФИМ Расширение спектра FHSS · DSSS См. также: Демодуляция

Широтно-импульсная модуляция (ШИМ, англ. Pulse-width modulation (PWM) ) - приближение желаемого сигнала (многоуровневого или непрерывного) к действительным бинарным сигналам (с двумя уровнями - вкл /выкл ), так, что, в среднем, за некоторый отрезок времени, их значения равны. Формально, это можно записать так:

,

где x (t ) - желаемый входной сигнал в пределе от t1 до t2 , а ∆T i - продолжительность i -го ШИМ импульса, каждого с амплитудой A . ∆T i подбирается таким образом, что суммарные площади (энергии) обеих величин приблизительно равны за достаточно продолжительный промежуток времени, равны также и средние значения величин за период:

.

Управляемыми "уровнями", как правило, являются параметры питания силовой установки, например, напряжение импульсных преобразователей /регуляторов постоянного напряжения/ или скорость электродвигателя. Для импульсных источников x (t ) = U const стабилизации.

Основной причиной внедрения ШИМ является сложность обеспечения произвольным Напряжение_(электрическое). Есть некое базовое постоянное напряжение питания (в сети, от аккумуляторов и пр.) и на его основе нужно получить более низкое произвольное и уже им запитывать электродвигатели или иное оборудование. Самый простой вариант - делитель напряжения , но он обладает пониженным КПД, повышенным выделением тепла и расходом энергии. Другой вариант - транзисторная схема. Она позволяет регулировать напряжение без использования механики. Проблема в том, что транзисторы греются больше всего в полуоткрытом состоянии (50%). И если с таким КПД ещё "можно жить", то выделение тепла, особенно в промышленных масштабах сводит всю идею на нет. Именно поэтому было решено использовать транзисторную схему, но только в пограничных состояниях (вкл/выкл), а полученный выход сглаживать LC-цепочкой (фильтром) при необходимости. Такой подход весьма энергоэффективен. ШИМ широко применяется повсеместно. Если вы читаете эту статью на LCD-мониторе (телефоне/КПК/... с LCD-подсветкой), то яркость подсветки регулируется ШИМ. На старых мониторах можно убавить яркость и услышать как ШИМ начинает пищать (очень тихий писк частотой в несколько килогерц). Так же "пищат" плавно мигающие LED-лампочки, например, в ноутбуках. Очень хорошо слышно пищание ШИМ по ночам в тишине.

В качестве ШИМ можно использовать даже COM-порт. Т.к. 0 передаётся как 0 0000 0000 1 (8 бит данных + старт/стоп), а 255 как 0 1111 1111 1, то диапазон выходных напряжений - 10-90% с шагом в 10%.

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

Применение

ШИМ использует транзисторы (могут быть и др. элементы) не в линейном, а в ключевом режиме, то есть транзистор всё время или разомкнут (выключен), или замкнут (находится в состоянии насыщения). В первом случае транзистор имеет почти бесконечное сопротивление, поэтому ток в цепи почти не течёт, и, хотя всё напряжение питания падает на транзисторе, то есть КПД=0 %, в абсолютном выражении выделяемая на транзисторе мощность равна нулю. Во втором случае сопротивление транзистора крайне мало, и, следовательно, падение напряжения на нём близко к нулю - выделяемая мощность так же мала.

Принцип работы ШИМ

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

Генерируется аналоговым компаратором , на отрицательный вход которого подаётся опорный сигнал в виде «пилы» или «треугольника», а на положительный - собственно сам модулируемый непрерывный аналоговый сигнал. Частота импульсов соответствует частоте «зубьев» пилы. Ту часть периода, когда входной сигнал выше опорного, на выходе получается единица, ниже - нуль.

В цифровой технике, выходы которой могут принимать только одно из двух значений, приближение желаемого среднего уровня выхода при помощи ШИМ является совершенно естественным. Схема настолько же проста: пилообразный сигнал генерируется N -битным счётчиком. Цифровые устройства (ЦШИП) работают на фиксированной частоте, обычно намного превышающей реакцию управляемых установок (передискретизация ). В периоды между фронтами тактовых импульсов, выход ЦШИП остаётся стабильным, на нём действует либо низкий уровень либо высокий, в зависимости от выхода цифрового компаратора, сравнивающего значение счётчика с уровнем приближаемого цифрового сигнала V (n ). Выход за много тактов можно трактовать как череду импульсов с двумя возможными значениями 0 и 1, сменяющими друг-друга каждый такт Т . Частота появления единичных импульсов получается пропорциональной уровню приближаемого сигнала ~V (n ). Единицы, следующие одна за другой, формируют контур одного, более широкого импульса. Длительности полученных импульсов переменной ширины ~V (n ), кратны периоду тактирования T , а частота равна 1/(T *2 N ). Низкая частота означает длительные, относительно T , периоды постоянства сигнала одного уровня, что даёт невысокую равномерность распределения импульсов.

Описанная цифровая схема генерации подпадает под определение однобитной (двухуровневой) импульсно-кодовой модуляции (ИКМ ). 1-битную ИКМ можно рассматривать в терминах ШИМ как серию импульсов частотой 1/T и шириной 0 либо T . Добиться усреднения за менее короткий промежуток времени позволяет имеющаяся передискретизация. Высоким качеством обладает такая разновидность однобитной ИКМ, как импульсно-плотностная модуляция (pulse density modulation ), которая ещё именуется импульсно-частотной модуляцией .

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

См. также

  • Векторная модуляция - векторная широтно-импульсная модуляция, используемая в силовой электронике.
  • SACD - формат аудиодисков, использующий широтно-импульсную модуляцию звукового сигнала.

Mark Thoren and Chad Steward, Linear Technology

Design Note 538

Введение

Широтно-импульсная модуляция (ШИМ) является распространенным методом формирования аналоговых напряжений с помощью цифровых устройств, таких, например, как микроконтроллеры или ПЛИС. В большинстве микроконтроллеров имеются специализированные периферийные блоки, предназначенные для формирования ШИМ, а для генерации сигналов ШИМ средствами ПЛИС достаточно написать лишь несколько строк RTL-кода. Эта технология исключительно проста и практична в случаях, когда требования к параметрам аналоговых сигналов не слишком строги, поскольку для ее реализации требуется всего один выход микросхемы, а количество необходимых строк программного кода, несоизмеримо меньше того, что потребовалось бы в случае использования цифро-аналогового преобразователя (ЦАП) с интерфейсом SPI или I 2 C. На Рисунке 1 приведен типичный пример приложения с цифровым выводом, выходной сигнал которого превращается в аналоговое напряжение с помощью фильтра.

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

Этот преобразователь ШИМ-аналог лучше?

Рисунок 2 иллюстрирует попытку исправить эти недостатки. Благодаря выходному буферу появилась возможность использования в фильтре высокоомных резисторов при сохранении низкого импеданса аналогового выхода. За счет использования внешнего КМОП буфера, получающего питание от прецизионного опорного источника, повысилась точность коэффициента передачи, так как границами изменения сигнала ШИМ теперь стали земля и точное положительное напряжение. Эта схема, безусловно, работоспособна, однако требует большого количества компонентов, не позволяет сделать время установления лучше, чем 1.1 с, и не содержит никаких механизмов, с помощью которых было бы возможно «удерживать» аналоговое напряжение при отключенном сигнале ШИМ.

Усовершенствованный преобразователь ШИМ-аналог

Цифро-аналоговые преобразователи (ЦАП) Dual 10-bit PWM to VOUT DACs with 10ppm/ C Reference

  • Спасибо, очень интересная статья и очень хороший перевод. Не ввести ли у вас на сайте механизм поиска всех работ одного автора?
  • Это как? :) До такого даже библиотеки не додумались... Поиск по переводчику... Другое дело - стимул ему лично, пусть больше работает:) Статья интересная, тем более, что используется Linear Technology, от которой не было отказа в опытных образцах + периодический бумажный бесплатный журнал с доставкой на дом!!! :)
  • Нет ничего сложного. Вот такой запрос в google выдаст все материалы одного переводчика google.com.ua/search?.com.ua/search?.com.ua/search?.Рен тюк А вот поисковик РЛ немного неудобен, если не сказать неприменим при поиске по автору перевода http://www..html?adv=1 Таким же образом в google можно искать материалы конкретного автора на РЛ. Но результаты будут более "грязными", поскольку при поиске по одному лишь имени в результаты будут включены все найденные на сайте упоминания - статьи, ссылки с форума, временные страницы, некогда попавшие в поле зрения поисковой машины и т.п. Например, Einar Abell. Много лишнего. https://www.google.com.ua/search?q=s...ru+Einar+Abell В этом случае поисковик РЛ даёт гораздо лучшие результаты http://www..html?q=Einar+Abell К вопросу о библиотеках. Электронные каталоги, которые теперь есть почти во всех "выживших" библиотеках (университетских, городских, районных, областных и т.д.), а равно и в архивах, позволяют производить поиск по каталогам и картотекам с любым сочетанием слов в запросе. Не считая стандартного поиска по алфавитному и систематическому каталогам. Удивительно, сколько на самом деле содержится данных в каталожной карточке издания! Конечно же, если библиографическое описание и аннотация были составлены правильно и на совесть. Но есть и оборотная сторона электронных каталогов. Например, в трёх ближайших ко мне крупных библиотеках с количеством книг миллион+ в электронных каталогах до недавних пор содержалось лишь 10-20% библиотечного фонда. Чтобы занести в базу данных миллионы карточек нужна уйма времени. При этом, как правило, проводится сверка с фондами, что только затягивает процесс оцифровки каталогов. Но вся литература, полученная библиотеками после скажем 2000 года, попадает в электронный каталог в первую очередь.
  • Да всё это понятно, найти через поисковик можно всё, что угодно:) Но зачем искать по переводчику? Из любви к его творчеству? В первую очередь нужна инфа

На наш взгляд, первое, с чего можно начать знакомство с платформой Arduino это её цифровые выводы. Они нам пригодятся для подключения различной периферии: светодиоды, реле модули и т.п

На плате Arduino UNO их 14 (D0-D13). Они могут работать как входы, как выходы и как выходы с поддержкой ШИМ.

Конфигурация выводов как вход либо выход задается в void setup

pinMode (3, OUTPUT ); // Инициализируем цифровой pin 3 как вход pinMode (3, INPUT );

1) Цифровые выходы

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

// Устанавливает высокий уровень напряжения на 3 пине digitalWrite (3, HIGH ); // Устанавливает низкий уровень напряжения на 3 пине digitalWrite (3, LOW );

При высоком уровне выход работает как "источник питания" с напряжением 5 Вольт, при низком же уровне выход соединяется с землей МК. В двух этих режимах порт может выдать либо принять ток до 40мА. Это позволит подключать к плате Arduino маломощные нагрузки. При превышении тока в 40мА может выгореть либо отдельно порт, либо весь камень.

Пример на практике

В качестве первого примера выполним некий "Hello, World!" в тематике Arduino - помигаем светодиодом.

Плата Arduino уже имеет на своем борту встроенный светодиод подключенный к выводу D13. Можно использовать и его, но в качестве примера соберем первую схемку на макетной плате.

2) Цифровые выходы с поддержкой ШИМ

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

Не все цифровые выводы имеют поддержку ШИМ. У Arduino UNO их 6 (D3, D5, D6, D9, D10, D11). У других плат количество может отличаться. Смотрите в спецификации.

В программном коде скважность задается числом от 0(min) до 255(max)

// Устанавливает ШИМ сигнал на 3 пине со скважностью 150 analogWrite (3, 150);

Пример на практике

В качестве наглядного примера поупрявляем яркостью светодиода с помощью ШИМ модуляции.

Как уже говорилось, Arduino имеет на своем борту встроенный светодиод подключенный к выводу D13. Однако, этот вывод не имеет поддержки ШИМ. ШИМ поддержку имеет вывод D3. К нему, как и в предыдущем примере, мы подключим светодиод

Для эксперимента нам понадобятся:

Описание примера:

При установке высокого уровня (HIGH ), на выводе D3 появляется напряжение, которое протекая через светодиод (LED1) заставляет его светиться. При установке низкого уровня (LOW ), напряжение больше не подается и светодиод не горит. Резистор (R1) необходим для ограничения потребляемого светодиодом тока.

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

Принципиальная схема остается такой же как и в первом примере.

На реальной макетной плате всё будет выглядеть следующим образом:

Примечания по сборке:

Вывод D3 соединяется с анодом светодиода, а катод уходит на резистор. У резистора нет полярности и его можно устанавливать любой стороной.

Пример программного кода:

// Присваиваем имя цифровому выводу 3 int led = 3; void setup () { // Инициализируем цифровой pin 3 как выход pinMode (led, OUTPUT ); } void loop () { /* Задаем значение ШИМ равное 25 (10% от max) Иными словами (1/10 времени HIGH, 9/10 LOW) Такое мигание находится в диапазоне воспринимаемой человеком. Глаз видит мигание */ analogWrite (led, 25); delay (4000); // Ждем 4 секунды /* Задаем значение ШИМ равное 150 (60% от max) Иными словами (6/10 времени HIGH, 4/10 LOW) Частота смены картинки велика, выше воспринимаемой глазом человека, но не максимальна Глаз воспринимает как постоянно горящий светодиод с определенной яркостью */ analogWrite (led, 150); delay (4000); /* Задаем значение ШИМ равное 255 (100% от max) Иными словами (10/10 времени HIGH, 0/10 LOW) При максимальном значении ШИМ светодиод горит постоянно */ analogWrite (led, 255); delay (4000); // И для финального примера прогоним значения ШИМ от min до max for (int i = 0; i < 255; i++) { analogWrite (led, i); delay (50); } for (int i = 255; i > 0; i--) { analogWrite (led, i); delay (50); } }

3) Цифровые входы

Как уже говорилось, цифровые выводы могут использоваться как входы. Самым ярким примером использования данной возможности является подключение кнопки. Чтение производится функцией.

// Считываем значение с цифрового порта 4 digitalRead (4);

В ответ получаем значения HIGH или LOW .

Если к считываемому порту ничего не подключено, то функция digitalRead () может беспорядочно возвращать значения HIGH или LOW. Во избежание ложных срабатываний, входы необходимо подтягивать резистором 10-20кОм. При замыкании кнопки на землю - подтягивать к питанию, при замыкании на питание - к земле.

Широтно-импульсная модуляция. Описание. Применение. (10+)

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

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

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

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

К сожалению в статьях периодически встречаются ошибки, они исправляются, статьи дополняются, развиваются, готовятся новые. Подпишитесь, на новости , чтобы быть в курсе.

Если что-то непонятно, обязательно спросите!
Задать вопрос. Обсуждение статьи. сообщений.

Еще статьи

Силовой мощный импульсный трансформатор. Расчет. Рассчитать. Онлайн. O...
Онлайн расчет силового импульсного трансформатора....

Как не перепутать плюс и минус? Защита от переполюсовки. Схема...
Схема защиты от неправильной полярности подключения (переполюсовки) зарядных уст...

Резонансный инвертор, преобразователь напряжения повышающий. Принцип р...
Сборка и наладка повышающего преобразователя напряжения. Описание принципа работ...

Простой импульсный прямоходовый преобразователь напряжения. 5 - 12 вол...
Схема простого преобразователя напряжения для питания операционного усилителя....

Колебательный контур. Схема. Расчет. Применение. Резонанс. Резонансная...
Расчет и применение колебательных контуров. Явление резонанса. Последовательные...

Корректор коэффициента мощности. Схема. Расчет. Принцип действия....
Схема корректора коэффициента мощности...

Бесперебойник своими руками. ИБП, UPS сделать самому. Синус, синусоида...
Как сделать бесперебойник самому? Чисто синусоидальное напряжение на выходе, при...

Силовой мощный импульсный трансформатор, дроссель. Намотка. Изготовить...
Приемы намотки импульсного дросселя / трансформатора....