Что такое ШИМ — принцип работы широтно-импульсной модуляции

Рассмотрим, что такое ШИМ или PWM. А также, чем отличается ШИМ от ШИР. Алгоритм широтно-импульсной модуляции применяется для плавного изменения мощности на нагрузке, поступающей от источника питания. Например, с целью регулирования скорости вращения вала двигателя; плавности изменения яркости освещения или подсветки. Отдельной широкой областью применения ШИМ являются импульсные источники питания и автономные инверторы.

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

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

В современной преобразовательной технике преимущественно используются импульсное регулирование мощности на нагрузке. Одним из способов реализации импульсного регулирования является широтно-импульсная модуляция ШИМ. В англоязычной литературе PWM – pulse-width modulation.

Что такое ШИМ-регулятор?

шим регулятор оборотов двигателя

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

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

Настоящим спасением из данной ситуации стал ШИМ-регулятор, который работает на мощных полевых силовых транзисторах. Они могут коммутировать большие токи (которые достигают 160 Ампер) при напряжении всего в 12-15В на затворе. Следует отметить, что сопротивление у открытого транзистора довольное мало, и благодаря этому можно заметно снизить уровень рассеиваемой мощности.

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

Выпускается целый ряд микросхем для ШИМ-регуляторов, которые смогут выдержать повышение входного напряжения до уровня 25-30В, при том, что питание будет всего 7-14В. Это позволит включать выходной транзистор в схеме вместе с общим стоком. Это, в свою очередь, необходимо для подключения нагрузки с общим минусом. В качестве примеров можно привести такие образцы: L9610, L9611, U6080B … U6084B. Большинство нагрузок не потребляет ток больше 10 ампер, поэтому они не могут вызвать просадку напряжения. И как результат – использовать можно и простые схемы без доработки в виде дополнительного узла, который будет повышать напряжение.

И именно такие образцы ШИМ-регуляторов и будут рассмотрены в статье. Они могут быть построены на основе несимметрического или ждущего мультивибратора. Стоит поговорить про ШИМ-регулятор оборотов двигателя. Об этом далее.

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); // задержка для большей видимости эффекта
}

Схема №1

шим регулятор

Основные проблемы ШИМ-преобразователей

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

Чтобы узнать, как проверить ШИМ-контроллер, следует ознакомится со списком основных неисправностей приборов, а лишь позже – с вариантами их устранения.

Схема №2

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

Управление многоуровневыми синусоидальными ШИМ (СШИМ)

Напряжение на участке инвертора.(а) Выходное напряжение с применением СШИМ. (b) Выходное напряжение с добавлением синусоидальной третьей гармоники.

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

Множество Nc-каскадов в одной фазе с их источниками, смещенными на угол θс = 360°/Nc и использующими то же управляющее напряжение, производят напряжение нагрузки с самым маленьким искажением. Этот результат был получен для многоэлементного инвертора в семи-уравневой конфигурацией, которая использует три подключенных последовательно сегмента в каждой фазе. Самое маленькое искажение получено, когда источник смещен на угол в θс = 360°/3 = 120 °.

Довольно обыденной практикой в промышленном применении для многоуровневого инвертора является вставка третьей гармоники в каждый сегмент, как показано на Рисунок справа(b), для увеличения выходного напряжения. Еще одна положительная сторона многоуровневого СШИМ -эффективная частота переключения напряжения нагрузки в Nc-количество раз, и частота переключения каждого сегмента, в зависимости от ее несущего сигнала. Это свойство позволяет сокращать частоты переключения каждого сегмента, таким образом уменьшая потери на переключении.

Метод опорных векторов (MOB)

Пространственно-векторная диаграмма :(а) для двух-уровневого ,(b) трех-уровневого, и (c) пяти-уровневого инвертора.

Техника МОВ может быть легко применима для всех многоуровневых инверторов. Рисунок справа показывает векторы пространства для традиционных двух-, трёх- и пятиуровневых инверторов. Эти векторные диаграммы универсальны независимо от типа многоуровневого инвертора. Другими словами, рисунок справа действителен для пятиуровневого зафиксированного на диод, зафиксированного на конденсатор, или расположенного каскадом инвертора. Смежные три вектора могут синтезировать желаемый вектор напряжения путем вычисления рабочего цикла (Tj, Tj+1, и Tj+2) для каждого вектора.

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

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

Широтно-импульсное регулирование ШИР

В западной литературе практически не различают понятия широтно-импульсного регулирования ШИР и широтно-импульсной модуляции ШИМ. Однако у нас различие между ними все же существует.

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

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

Упрощенно, компаратор имеет три вывода: два входа и один выход. Компаратор работает следующим образом. Если величина напряжения на входном выводе «+» (неинвертирующий вход) выше, чем на входе «-» (инвертирующий вход), то на выходе компаратора будет сигнал высокого уровня. В противном случае – низкого уровня.

В нашем случае, именно сигнал высокого уровня открывает транзистор VT. Рассмотрим, как формируется необходимая длительность времени импульса tи. Для этого воспользуемся следующим графиком.

Принцип ШИР Широтно-импульсное регулирование

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

Советуем к прочтению: Левитирующий глобус

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

Принцип ШИМ Широтно-импульсное регулирование

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

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

Электроника для всех

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

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

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

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

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

Меня скважность (отношение длительности периода к длительности импульса) можно плавно менять эту площадь, а значит и напряжение на выходе. Таким образом если на выходе сплошные 1, то на выходе будет напряжение высокого уровня, в случае моего робота, на выходе из моста L293 это 12 вольт, если нули, то ноль. А если 50% времени будет высокий уровень, а 50% низкий то 6 вольт. Интегрирующей цепочкой тут будет служить масса якоря двигателя, обладающего довольно большой инерцией.

А что будет если взять и гнать ШИМ сигнал не от нуля до максимума, а от минуса до плюса. Скажем от +12 до -12. А можно задавать переменный сигнал! Когда на входе ноль, то на выходе -12В, когда один, то +12В. Если скважность 50% то на выходе 0В. Если скважность менять по синусоидальному закону от максимума к минимуму, то получим… правильно! Переменное напряжение. А если взять три таких ШИМ генератора и гнать через них синусоиды сдвинутые на 120 градусов между собой, то получим самое обычное трехфазное напряжение, а значит привет бесколлекторные асинхронные и синхронные двигатели — фетиш всех авиамоделистов. На этом принципе построены все современные промышленные привода переменного тока. Всякие Unidrive и Omron Jxx В качестве сглаживающей интегрирующей цепи в ШИМ может быть применена обычная RC цепочка:

Так, принцип понятен, приступаем к реализации. ШИМ сигнал можно сварганить и на операционных усилителях и на микроконтроллере. Причем последние умеют это делать просто мастерски, благо все у них для этого уже есть. Аппаратный ШИМ В случае ATMega16 проще всего сделать на его ШИМ генераторе, который встроен в таймеры. Причем в первом таймере у нас целых два канала. Так что без особого напряга ATmega16 может реализовать одновременно четыре канала ШИМ. Как это реализовано У таймера есть особый регистр сравнения OCR**

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

  • Прерывание по совпадению
  • Изменение состояния внешнего выхода сравнения OC**.

Выходы сравнения выведены наружу, на выводы микроконтроллера

На демоплате Pinboard к этим выводам как раз подключены светодиоды. А если поставить джамперы вдоль, в сторону надписи RC то к выводу ШИМ будет подключена интегрирующая цепочка.

Для Pinboard II разница в подключении невелика. Джамперы тут сгруппированы в один блок. А светодиоды и RC цепочки сгруппированы в левом верхнем углу платы.

Предположим, что мы настроили наш ШИМ генератор так, чтобы когда значение в счетном регистре больше чем в регистре сравнения, то на выходе у нас 1, а когда меньше, то 0. Что при этом произойдет? Таймер будет считать как ему и положено, от нуля до 256, с частотой которую мы настроим битами предделителя таймера. После переполнения сбрасывается в 0 и продолжает заново.

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

Так что меняя значение в регистре сравнения можно менять скважность ШИМ сигнала. А если пропустить этот ШИМ сигнал через сглаживающую RC цепочку (интегратор) то получим аналоговый сигнал. У таймера может быть сколько угодно регистров сравнения. Зависит от модели МК и типа таймера. Например, у Атмега16

  • Timer0 — один регистр сравнения
  • Timer1 — два регистра сравнения (16ти разрядных!)
  • Timer2 — один регистр сравнения

Итого — четыре канала. В новых AVR бывает и по три регистра сравнения на таймер, что позволяет одним МК организовать просто прорву независимых ШИМ каналов. Самих режимов ШИМ существует несколько: Fast PWM

В этом режиме счетчик считает от нуля до
255, после достижения переполнения сбрасывается в нуль и счет начинается снова. Когда значение в счетчике достигает значения регистра сравнения, то соответствующий ему вывод ОСхх сбрасыватся в ноль. При обнулении счетчика этот вывод устанавливается в 1. И все! Частота получившегося ШИМ сигнала определяется просто: Частота процесора 8Мгц, таймер тикает до 256 с тактовой частотой. Значит один период ШИМ будет равен 8000 000/256 = 31250Гц. Вполне недурно. Быстрей не получится — это максимальная скорость на внутреннем 8Мгц тактовом генераторе. Но если переключить FUSE биты на внешний кварц то можно раскачать МК на 16Мгц. Еще есть возможность повысить разрешение, сделав счет 8, 9, 10 разрядным (если разрядность таймера позволяет), но надо учитывать, что повышение разрядности, вместе с повышением дискретности выходного аналогового сигнала, резко снижает частоту ШИМ.
Phase Correct PWM

ШИМ с точной фазой. Работает похоже, но тут счетчик считает несколько по другому. Сначала от 0 до 255, потом от 255 до 0. Вывод OCxx при первом совпадении сбрасывается, при втором устанавливается. Но частота
ШИМ при этом падает вдвое, изза большего периода. Основное его предназначение, делать многофазные ШИМ сигналы, например, трехфазную синусоиду. Чтобы при изменении скважности не сбивался угол фазового сдвига между двумя ШИМ сигналами. Т.е. центры импульсов в разных каналах и на разной скважности будут совпадать.

Еще одна тонкость:

Чтобы не было кривых импульсов, то в регистр сравнения любое значение попадает через буфферный регистр и заносится только тогда, когда значение в счетчике достигнет максимума. Т.е. к началу нового периода
ШИМ импульса. Clear Timer On Compare
Сброс при сравнении. Это уже скорей ЧИМ — частотно-импульсно моделированный сигнал. Тут работает несколько иначе, чем при других режимах. Тут счетный таймер тикает не от 0 до предела, а от 0 до регистра сравнения! А после чего сбрасывается.

В результате, на выходе получаются импульсы всегда одинаковой скважности, но разной частоты. А чаще всего этот режим применяется когда надо таймером отсчитывать периоды (и генерить прерывание) с заданной точностью. Например, надо нам прерывание каждую миллисекунду. И чтобы вот точно. Как это реализовать проще? Через Режим СТС! Пусть у нас частота 8Мгц. Прескалер будет равен 64, таким образом, частота тиков таймера составит 125000 Гц. А нам надо прерывание с частотой 1000Гц. Поэтому настраиваем прерывание по совпадению с числом 125. Дотикал до 125 — дал прерывание, обнулился. Дотикал до 125 — дал прерывание, обнулился. И так бесконечно, пока не выключим. Вот вам и точная тикалка. Нет, конечно, можно и вручную. Через переполнение, т.е. дотикал до переполнения, загрузил в обработчике прерывания заново нужные значение TCNTх=255-125, сделал нужные полезные дела и снова тикать до переполнения. Но ведь через СТС красивей! :)

Аппаратура

А теперь контрольные регистры, которыми все это безобразие задается и программируется. Опишу на примере Двухканального FastPWM на таймере 1. В других все похоже. Даташит в зубы и вперед. Итак, тут правят бал регистры
TCCR1A и TCCR1B. Гы, кто бы сомневался %) Распишу их по битам. Регистр TCCR1A, биты COM1A1:COM1A0 и COM1B1:COM1B0. Эта братия определяет поведение вывода сравнения OC1A и OC1B соответственно.

COMxx1COMxx0Режим работы выхода
00вывод отцеплен от регистра сравнения и не меняется никак.
01Поведение вывода зависит от режима заданного в WGM, различается для разных режимов (FastPWM, FC PWM, Compar out) и разных МК, надо сверяться с даташитом.
10прямой ШИМ (сброс при совпадении и установка при обнулении счета)
11обратный ШИМ (сброс при обнулении и установка при совпадении)

Регистр TCCR1A, биты WGM11 и WGM10 вместе с битами WGM12 и WGM13, находящимися в регистре TCCR1B задают режим работы генератора.

WGM13WGM12WGM11WGM10Режим работы
0101Fast PWM 8 бит
0110Fast PWM 9 бит
0111Fast PWM 10 бит

Другие комбинации битов WGM задают режимы Phase Correct PWM и CTC (сброс OCxx при совпадении). Если интересно, то читай даташит, я для себя много интересного там не нашел, кроме Phase Correct PWM. И то мне сейчас важней скорость, а не точность фазы :) После остается только запустить таймер, установив бит CS10 (подсчет тактовых импульсов с делителем 1:1) Пример кода:
Попробуем поиграться яркостью светодиодов с помощью ШИМ сигналов. Подключи джамперы, чтобы запитать светодиоды LED1 и LED2

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

1 2 3 4 5 6 7 8 9 10 11 12;FastPWM Init SETB DDRD,4,R16 ; DDRD.4 = 1 Порты на выход SETB DDRD,5,R16 ; DDRD.5 = 1 ; Выставляем для обоих каналов ШИМ режим вывода ОС** сброс при совпадении. ; COM1A = 10 и COM1B = 10 ; Также ставим режим FAST PWM 8bit (таймер 16ти разрядный и допускает ; большую разрядность ШИМ сигнала. Вплоть до 10 бит. WGM = 0101 ; Осталось только запустить таймер на частоте МК CS = 001 OUTI TCCR1A,2<<<<<<<

;FastPWM Init SETB DDRD,4,R16 ; DDRD.4 = 1 Порты на выход SETB DDRD,5,R16 ; DDRD.5 = 1 ; Выставляем для обоих каналов ШИМ режим вывода ОС** сброс при совпадении. ; COM1A = 10 и COM1B = 10 ; Также ставим режим FAST PWM 8bit (таймер 16ти разрядный и допускает ; большую разрядность ШИМ сигнала. Вплоть до 10 бит. WGM = 0101 ; Осталось только запустить таймер на частоте МК CS = 001 OUTI TCCR1A,2<<<<<<<

Готово! Теперь ШИМ таймера1 генерит сигнал на выходаx OC1А и OC1B Закинем в регистры сравнения первого и второго канала число 255/3=85 и 255/2 = 128 Так как ШИМ у нас 8ми разрядный, то заброс идет только в младший разряд. Старший же остается нулем. Но регистры сравнения тут у нас 16ти разрядные поэтому грузить надо оба байта сразу. Не забыв запретить прерывания (это важно!!! ибо атомарный доступ)

1 2 3 4 5 6 7CLI OUTI OCR1AH,0 OUTI OCR1AL,85 OUTI OCR1BH,0 OUTI OCR1BL,128 SEI

CLI OUTI OCR1AH,0 OUTI OCR1AL,85 OUTI OCR1BH,0 OUTI OCR1BL,128 SEI
Поехали! :) Прошиваем, тыкаемся в ноги микроконтроллера осциллографом — видим следующую картину по каналам:

Как мы и запланировали. С первого канала длительность импульса в 1/3 периода, а со второго в 1/2 Ну и светодиоды горят с разной яркостью. Один ярче, другой тусклей. Меняя значение в регистрах OCR*** мы можем менять скважность. Давай сделаем так, чтобы светодиод плавно менял свою яркость от нуля до максимума. Как помнишь, у нас там была программа, с мигающем по таймеру0 светодиодом. Немного ее подправим, сделаем так, чтобы по таймеру не светодиод мигал, а менялось значение в регистрах сравнения OCR1A и OCR1B. Причем меняться оно будет в разные стороны :)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55; Main ========================================================= Main: LDS R16,TCNT ; Грузим числа в регистры LDS R17,TCNT+1 CPI R16,0x10 ; Сравниванем побайтно выдержку BRCS NoMatch CPI R17,0x01 ; Выдержку сделали поменьше = 0x0110 BRCS NoMatch ; Если совпало то делаем экшн Match: CLI ; Запрет прерываний, т.к. атомарный доступ ; Меняем первый канал ; Особенность 16ти разрядных регистров в том, что их надо правильно читать и записывать. ; Читают вначале младший, потом старший байты. Так надо, чтобы младший не успел измениться ; (он ведь может тикать по таймеру) пока читают первым старший. Укладывают их в обратном ; порядке. Сначала старший, потом младший. Правда для регистров OCR это не имеет большой ; разницы — они статичные, а вот для TCNT очень даже! IN R16,OCR1AL ; Достали первый байт сравнения IN R17,OCR1AH ; он 16ти разрядный, но старший байт будет 0 INC R16 ; Увеличили OUT OCR1AH,R17 ; И сунули их обратно OUT OCR1AL,R16 ; Меняем второй канал IN R16,OCR1BL ; Достали второй байт сравнения IN R17,OCR1BH ; он 16ти разрядный, но старший байт будет 0 DEC R16 ; Уменьшили OUT OCR1BH,R17 ; И сунули их обратно OUT OCR1BL,R16 SEI ; Конец атомарного доступа ; Теперь надо обнулить счетчик, иначе за эту же итерацию главного цикла ; Мы сюда попадем еще не один раз — таймер то не успеет натикать 255 значений ; чтобы число в первых двух байтах счетчика изменилось. CLR R16 ; Нам нужен ноль CLI ; Таймер меняется и в прерывании. Нужен ; атомарный доступ. Запрещаем прерывания OUT TCNT0,R16 ; Ноль в счетный регистр таймера STS TCNT,R16 ; Ноль в первый байт счетчика в RAM STS TCNT+1,R16 ; Ноль в второй байт счетчика в RAM STS TCNT+2,R16 ; Ноль в третий байт счетчика в RAM STS TCNT+3,R16 ; Ноль в первый байт счетчика в RAM SEI ; Разрешаем прерывания. ; Не совпало — не делаем :) NoMatch: NOP INCM CCNT ; Шарманка вращается дальше, вхолостую JMP Main

; Main ========================================================= Main: LDS R16,TCNT ; Грузим числа в регистры LDS R17,TCNT+1 CPI R16,0x10 ; Сравниванем побайтно выдержку BRCS NoMatch CPI R17,0x01 ; Выдержку сделали поменьше = 0x0110 BRCS NoMatch ; Если совпало то делаем экшн Match: CLI ; Запрет прерываний, т.к. атомарный доступ ; Меняем первый канал ; Особенность 16ти разрядных регистров в том, что их надо правильно читать и записывать. ; Читают вначале младший, потом старший байты. Так надо, чтобы младший не успел измениться ; (он ведь может тикать по таймеру) пока читают первым старший. Укладывают их в обратном ; порядке. Сначала старший, потом младший. Правда для регистров OCR это не имеет большой ; разницы — они статичные, а вот для TCNT очень даже! IN R16,OCR1AL ; Достали первый байт сравнения IN R17,OCR1AH ; он 16ти разрядный, но старший байт будет 0 INC R16 ; Увеличили OUT OCR1AH,R17 ; И сунули их обратно OUT OCR1AL,R16 ; Меняем второй канал IN R16,OCR1BL ; Достали второй байт сравнения IN R17,OCR1BH ; он 16ти разрядный, но старший байт будет 0 DEC R16 ; Уменьшили OUT OCR1BH,R17 ; И сунули их обратно OUT OCR1BL,R16 SEI ; Конец атомарного доступа ; Теперь надо обнулить счетчик, иначе за эту же итерацию главного цикла ; Мы сюда попадем еще не один раз — таймер то не успеет натикать 255 значений ; чтобы число в первых двух байтах счетчика изменилось. CLR R16 ; Нам нужен ноль CLI ; Таймер меняется и в прерывании. Нужен ; атомарный доступ. Запрещаем прерывания OUT TCNT0,R16 ; Ноль в счетный регистр таймера STS TCNT,R16 ; Ноль в первый байт счетчика в RAM STS TCNT+1,R16 ; Ноль в второй байт счетчика в RAM STS TCNT+2,R16 ; Ноль в третий байт счетчика в RAM STS TCNT+3,R16 ; Ноль в первый байт счетчика в RAM SEI ; Разрешаем прерывания. ; Не совпало — не делаем :) NoMatch: NOP INCM CCNT ; Шарманка вращается дальше, вхолостую JMP Main
А теперь давайте включим режим с точной фазой (WGM = 0001) и посмотрим на то как будет меняться скважность.

1 2OUTI TCCR1A,2<<<<<<<

OUTI TCCR1A,2<<<<<<<
ШИМ на прерываниях. Но вот засада — плата уже разведена, захотелось ШИМ, а выводы OCxx уже задействованы под другие цели. Ничего страшного, малой кровью можно это исправить. Также запускаем ШИМ, только:

  • Отключаем выводы OCxx от регистра сравнения.
  • Добавляем два обработчика прерывания на сравнение и на переполнение. В прерывании по сравнению сбрасываем нужный бит, в прерывании по переполнению счетчика устанавливаем.

Все просто :)Пример:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21;FastPWM Init на прерываниях ; ШИМ будет на выводах 3 и 6 порта D SETB DDRD,3,R16 ; DDRD.3 = 1 Порты на выход SETB DDRD,6,R16 ; DDRD.6 = 1 ; Выставляем для обоих каналов ШИМ режим вывода ОС** выключеным. ; COM1A = 00 и COM1B = 00 ; Также ставим режим FAST PWM 8bit (таймер 16ти разрядный и допускает ; большую разрядность ШИМ сигнала. Вплоть до 10 бит. WGM = 0101 ; Осталось только запустить таймер на частоте МК CS = 001 OUTI TCCR1A,0<<<<<<<

;FastPWM Init на прерываниях ; ШИМ будет на выводах 3 и 6 порта D SETB DDRD,3,R16 ; DDRD.3 = 1 Порты на выход SETB DDRD,6,R16 ; DDRD.6 = 1 ; Выставляем для обоих каналов ШИМ режим вывода ОС** выключеным. ; COM1A = 00 и COM1B = 00 ; Также ставим режим FAST PWM 8bit (таймер 16ти разрядный и допускает ; большую разрядность ШИМ сигнала. Вплоть до 10 бит. WGM = 0101 ; Осталось только запустить таймер на частоте МК CS = 001 OUTI TCCR1A,0<<<<<<<
Осталось только прописать обработчики и вектора:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72.CSEG .ORG $000 ; (RESET) RJMP Reset .ORG $002 RETI ; (INT0) External Interrupt Request 0 .ORG $004 RETI ; (INT1) External Interrupt Request 1 .ORG $006 RETI ; (TIMER2 COMP) Timer/Counter2 Compare Match .ORG $008 RETI ; (TIMER2 OVF) Timer/Counter2 Overflow .ORG $00A RETI ; (TIMER1 CAPT) Timer/Counter1 Capture Event .ORG $00C RJMP Timer1_OCA ; (TIMER1 COMPA) Timer/Counter1 Compare Match A .ORG $00E RJMP Timer1_OCB ; (TIMER1 COMPB) Timer/Counter1 Compare Match B .ORG $010 RJMP Timer1_OVF ; (TIMER1 OVF) Timer/Counter1 Overflow .ORG $012 RJMP Timer0_OV ; (TIMER0 OVF) Timer/Counter0 Overflow .ORG $014 RETI ; (SPI,STC) Serial Transfer Complete .ORG $016 RETI ; (USART,RXC) USART, Rx Complete .ORG $018 RETI ; (USART,UDRE) USART Data Register Empty .ORG $01A RETI ; (USART,TXC) USART, Tx Complete .ORG $01C RETI ; (ADC) ADC Conversion Complete .ORG $01E RETI ; (EE_RDY) EEPROM Ready .ORG $020 RETI ; (ANA_COMP) Analog Comparator .ORG $022 RETI ; (TWI) 2-wire Serial Interface .ORG $024 RETI ; (INT2) External Interrupt Request 2 .ORG $026 RETI ; (TIMER0 COMP) Timer/Counter0 Compare Match .ORG $028 RETI ; (SPM_RDY) Store Program Memory Ready .ORG INT_VECTORS_SIZE ; Конец таблицы прерываний ; Interrupts ============================================== Timer0_OV: PUSHF PUSH R17 PUSH R18 PUSH R19 INCM TCNT POP R19 POP R18 POP R17 POPF RETI ; Вот наши обработчики на ШИМ Timer1_OCA: SBI PORTD,3 RETI Timer1_OCB: SBI PORTD,6 RETI Timer1_OVF: CBI PORTD,3 CBI PORTD,6 RETI ; End Interrupts ==========================================

.CSEG .ORG $000 ; (RESET) RJMP Reset .ORG $002 RETI ; (INT0) External Interrupt Request 0 .ORG $004 RETI ; (INT1) External Interrupt Request 1 .ORG $006 RETI ; (TIMER2 COMP) Timer/Counter2 Compare Match .ORG $008 RETI ; (TIMER2 OVF) Timer/Counter2 Overflow .ORG $00A RETI ; (TIMER1 CAPT) Timer/Counter1 Capture Event .ORG $00C RJMP Timer1_OCA ; (TIMER1 COMPA) Timer/Counter1 Compare Match A .ORG $00E RJMP Timer1_OCB ; (TIMER1 COMPB) Timer/Counter1 Compare Match B .ORG $010 RJMP Timer1_OVF ; (TIMER1 OVF) Timer/Counter1 Overflow .ORG $012 RJMP Timer0_OV ; (TIMER0 OVF) Timer/Counter0 Overflow .ORG $014 RETI ; (SPI,STC) Serial Transfer Complete .ORG $016 RETI ; (USART,RXC) USART, Rx Complete .ORG $018 RETI ; (USART,UDRE) USART Data Register Empty .ORG $01A RETI ; (USART,TXC) USART, Tx Complete .ORG $01C RETI ; (ADC) ADC Conversion Complete .ORG $01E RETI ; (EE_RDY) EEPROM Ready .ORG $020 RETI ; (ANA_COMP) Analog Comparator .ORG $022 RETI ; (TWI) 2-wire Serial Interface .ORG $024 RETI ; (INT2) External Interrupt Request 2 .ORG $026 RETI ; (TIMER0 COMP) Timer/Counter0 Compare Match .ORG $028 RETI ; (SPM_RDY) Store Program Memory Ready .ORG INT_VECTORS_SIZE ; Конец таблицы прерываний ; Interrupts ============================================== Timer0_OV: PUSHF PUSH R17 PUSH R18 PUSH R19 INCM TCNT POP R19 POP R18 POP R17 POPF RETI ; Вот наши обработчики на ШИМ Timer1_OCA: SBI PORTD,3 RETI Timer1_OCB: SBI PORTD,6 RETI Timer1_OVF: CBI PORTD,3 CBI PORTD,6 RETI ; End Interrupts ==========================================
Почему я в этих обработчиках не сохраняю регистры и SREG? А незачем! Команды SBI меняют только конкретные биты (а больше нам и не надо), не влияя на флаги и другие регистры. Запустили… И получили полную херню. Т.е. ШИМ как бы есть, но почему то адово мерцает. А на осциллографе в этот момент полный треш. Кто виноват? Видимо конфликт прерываний. Осталось только выяснить где именно. Сейчас я вам дам практический пример реалтаймовой отладки :) Итак, что мы имеем: ШИМ, как таковой, работает. Скважность меняется. Значит наш алгоритм верен. Но длительности скачут. Почему? Видимо потому, что что-то мешает им встать вовремя. Когда у нас возникают фронты? Правильно — по прерываниям. А прерывания по таймерам. Т.е. врать не должны. Однако так получается. Давайте узнаем каком месте у нас конфликт. Первым делом надо добавить в код обработчика отладочную инфу. Будем в обработчике прерываний инвертировать бит. Пусть это будет PD7 — зашли в обработчик, инверснули. Зашли — инверснули. В результате, у нас на выходе этого бита будет прямоугольный сигнал, где каждый фронт — сработка прерываний. Послужит нам как линейка, отмеряющая время.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33; Interrupts ============================================== Timer0_OV: PUSHF PUSH R17 PUSH R18 PUSH R19 INCM TCNT POP R19 POP R18 POP R17 POPF RETI ; Установка бита ШИМ канала А Timer1_OCA: SBI PORTD,3 RETI ; Установка бита ШИМ канала Б Timer1_OCB: SBI PORTD,6 RETI ;Сброс бита ШИМ канала А и Б Timer1_OVF: CBI PORTD,3 CBI PORTD,6 ;DEBUG PIN BEGIN ————— PUSHF INVBM PORTD,7 POPF ;DEBUG PIN END —————— RETI

; Interrupts ============================================== Timer0_OV: PUSHF PUSH R17 PUSH R18 PUSH R19 INCM TCNT POP R19 POP R18 POP R17 POPF RETI ; Установка бита ШИМ канала А Timer1_OCA: SBI PORTD,3 RETI ; Установка бита ШИМ канала Б Timer1_OCB: SBI PORTD,6 RETI ;Сброс бита ШИМ канала А и Б Timer1_OVF: CBI PORTD,3 CBI PORTD,6 ;DEBUG PIN BEGIN ————— PUSHF INVBM PORTD,7 POPF ;DEBUG PIN END —————— RETI
Инверсия бита невозможна без логических операций, поэтому надо сохранять флаги. Из картинки стало понятно, что у нас накрывается прерывание по сравнению. Давайте попробуем посмотреть с какими прерыванием происходит конфликт. Особых вариантов у нас нет — прерываний у нас тут четрые. А наиболее очевиден конфликт Timer0_OV vs Timer1_OCA vs Timer1_OCB. OCA и OCB конфликтуют только тогда, когда счетные регистры у них сравниваются — вызов происходит почти одновременно, но сами обработчики короткие — всего несколько тактов, поэтому дребезг не столь сильный. А вот Timer0_OV делает довольно мощный прогруз стека и еще вычитает четырехбайтную переменную. Т.е. тактов на 20 может задержать обработчик установки бита Timer1_OC* от того и вылазят такие зверские дребезги. Давайте проверим эту идею. Разрешим прерывания в обработчике Timer0_0V

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28; Interrupts ============================================== Timer0_OV: SEI PUSHF PUSH R17 PUSH R18 PUSH R19 INCM TCNT POP R19 POP R18 POP R17 POPF RETI ; Установка бита ШИМ канала А Timer1_OCA: SBI PORTD,3 RETI ; Установка бита ШИМ канала Б Timer1_OCB: SBI PORTD,6 RETI ;Сброс бита ШИМ канала А и Б Timer1_OVF: CBI PORTD,3 CBI PORTD,6 RETI

; Interrupts ============================================== Timer0_OV: SEI PUSHF PUSH R17 PUSH R18 PUSH R19 INCM TCNT POP R19 POP R18 POP R17 POPF RETI ; Установка бита ШИМ канала А Timer1_OCA: SBI PORTD,3 RETI ; Установка бита ШИМ канала Б Timer1_OCB: SBI PORTD,6 RETI ;Сброс бита ШИМ канала А и Б Timer1_OVF: CBI PORTD,3 CBI PORTD,6 RETI
Картина сразу исправилась. Теперь более важное (для нас важное) прерывание задвигает обработчик от Таймера 0. Но тут надо просекать возможные риски:

  • Более глубокий прогруз стека
  • Нарушается атомарный доступ к четырехбайтной переменной TCNT, поэтому если бы у нас было еще какое-то прерывание, меняющее TCNT то его надо было бы запрещать локально. Иначе бы мы получили такой трешняк, что проще заново прогу переписать, чем это отладить

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

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

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

Рассмотрим простейшую схему инвертора напряжения.

Инвертор напряжения с ШИМ

В один момент времени открывается пара транзисторов VT1 и VT3. Создается путь для протекания тока от аккумулятора GB через активно-индуктивную нагрузку RнLн. В следующий момент VT1 и VT3 заперты, а открыты диагонально противоположные транзисторы VT2 и VT4. Теперь тока протекает от аккумулятора через RнLн в противоположном направлении. Таким образом, ток на нагрузке изменяет свое направление, поэтому является переменным. Как видно, ток на нагрузке не является синусоидальным. Поэтому применяют ШИМ для получения синусоидально формы тока.

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

Существует несколько типов ШИМ: однополярная, двухполярная, одностороння, двухсторонняя. Здесь мы не будем останавливаться на каждом конкретном типе, а рассмотрим общий подход.

В качестве модулирующего сигнала применяется синусоида, а опорным является сигнал треугольной формы. В результате сравнивания этих сигналов формируются длительности импульсов и пауз (нижний график), которые управляют работой транзисторов VT1…VT4. Обратите внимание, что амплитуда напряжения на нагрузке всегда равна амплитуде источника питания. Также остается неизменным период следования импульсов. Изменяется лишь ширина открывающего импульса. Поэтому при подключении нагрузки ток, протекающий через нее, будет иметь синусоидальную форму (показано пунктиром на нижнем графике).

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

ШИМ регулятор напряжения 12 вольт — описание

Особенностью данных схем является возможность применить фактически любые имеющиеся в наличии операционные усилители, с напряжение питания на уровне 12 вольт, например, операционный усилитель LM324 или операционный усилитель LM358.

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

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

Для предупреждения пробоя затвора полевого транзистора, в случае использовании ШИМ регулятора с напряжением питания 24 вольта, необходимо между затвором VT2 и коллектором транзистора VT1 подключить сопротивление величиной в 1 кОм, а параллельно сопротивлению R7 подключить стабилитрон на 15 вольт.

В случае если необходимо изменять напряжение на нагрузке, один из контактов которой подсоединен к «массе» (такое встречается в автомобиле), то применяется схема, в которой к плюсу источника питания подсоединяется сток n -канального полевого транзистора, а нагрузка подключается к его истоку.

Желательно для создания условий, при котором открытие полевого транзистора будет происходить в полной мере, цепь управления затвором должна содержать узел с повышенным напряжением порядка 27…30 вольт. В этом случае напряжение между истоком и затвором будет более 15 В.

Если ток потребления нагрузкой менее 10 ампер, то возможно применить в ШИМ регуляторе мощные полевые p- канальные транзисторы.

Во второй схеме ШИМ регулятор напряжения 12 вольт меняется и вид транзистора VT1, а также меняется направление вращения переменного резистора R1. Так у первого варианта схемы, уменьшение напряжения управления (ручка потенциометра перемещается к «-» источника питания) вызывает увеличение напряжения на выходе. У второго варианта все наоборот.

Как проверить ШИМ-контроллер

Тиристоры и симисторы

Есть несколько способов как сделать проверку ШИМ-контроллера. Можно, конечно это сделать без мультиметра, но зачем так мучаться, если можно воспользоваться нормальным прибором.

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

Шаг 1. Внимательно осмотреть в выключенном состоянии сам источник питания, в котором установлен PWM. В частности надо тщательно осмотреть электролитические конденсаторы на предмет вздутости.

Шаг 2. Провести проверку предохранителя и элементов входного фильтра блока питания на исправность.

Шаг 3. Провести проверку на короткое замыкание или обрыв диодов выпрями­тельного моста. Прозвонить их можно не вы­паивая из платы. При этом надо быть уверен­ным, что проверяемая цепь не шунтируется обмотками трансформатора или резистором. Если есть на это подозрение, то всё таки придётся выпаивать элементы и проверять уже по отдельности.

Шаг 4. Провести проверку исправностм выходных цепей, а именно электролитических конденсаторов низкочастотных филь­тров, выпрямительных диодов, диодных сборок и т.п.

Шаг 5. Провести проверку силовых транзисторов высокочастотного преобразователя и тран­зисторов каскада управления. При этом в обязательном порядке проверьте возвратные диоды, которые включенны параллельно электродам коллектор-эмиттер силовых транзисторов.

Проверка ШИМ-контроллера — видео инструкции:

Причины и области применения ШИМ

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

Советуем к прочтению: Транзисторы серий КТ315 и КТ 361

Возникает естественный вопрос – а почему нельзя усилить сигнал генератора сразу, например, применением мощных транзисторов? Потому что регулирующий элемент, работающий в линейном режиме, будет перераспределять мощность между нагрузкой и ключом. При этом на ключевом элементе впустую рассеивается значительная мощность. Если же мощный регулирующий элемент работает в ключевом режиме (тринистор, симистор, RGBT-транзистор), то мощность распределяется во времени. Потери будут намного ниже, а КПД – намного выше.

ШИМ-сигнал, сформированный с помощью синусоиды.

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

  1. За счет инерции нагрузки. Так, тепловая инерция термоэлектронагревателей и ламп накаливания позволяет объектам регулирования заметно не остывать в паузах между импульсами.
  2. За счёт инерции восприятия. Светодиод успевает погаснуть от импульса к импульсу, но человеческий глаз этого не замечает и воспринимает как постоянное свечение с различной интенсивностью. На этом принципе построено управление яркостью точек LED-мониторов. Но незаметное мигание с частотой несколько сот герц все же присутствует и служит причиной усталости глаз.
  3. За счет механической инерции. Это свойство используется при управлении коллекторными двигателями постоянного тока. При правильно выбранной частоте регулирования двигатель не успевает затормозиться в бестоковых паузах.

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

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

Управление RGB-светодиодом с помошью ШИМ.

Очень эффективно и эффектно управление методом ШИМ RGB-светодиодом. Этот прибор имеет три p-n перехода – красный, синий, зеленый. Изменяя раздельно яркость свечения каждого канала, можно получить практически любой цвет свечения LED (за исключением чистого белого). Возможности по созданию световых эффектов с помощью PWM безграничны.

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

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

Одним из параметров любого прямоугольного сигнала является коэффициент заполнения. У большинства прямоугольных сигналов он составляет 50%, это нормально, но сигналы не обязательно должны быть симметричными. Время состояния «открыт» (включен) может варьироваться от полностью выключенного сигнала до полного включения, от 0% до 100%, и принимать любые значения во всем диапазоне.
Ниже показаны примеры коэффициента заполнения 10%, 50% и 90%. Хотя частоты у сигналов одинаковы, это не является обязательным требованием.

Рисунок 1 – Примеры ШИМ сигналов

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

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

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

Область использования ШИМ довольно широка. ШИМ является сердцем усилителей класса D, где, увеличивая напряжение, вы увеличиваете максимальную выходную мощность, а частоту ШИМ выбираете за пределами человеческого слуха (обычно 44 кГц). Динамики не реагируют на высокие частоты, но повторяют низкие частоты, которые являются аудиосигналами. Для еще большей точности могут быть использованы более высокие частоты дискретизации, 100 кГц или более так же не слышны.

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

Обзор типичных схем

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

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

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

Печатная плата

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

Как изготовить своими руками?

Существуют различные варианты схем регулировки. Приведём один из них более подробно.

Вот схема его работы:

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

Слабым местом схемы, которое было определено при испытаниях её работы, является плохая пригодность при очень больших значениях силы тока. Это связано с некоторым замедлением работы транзисторных элементов схемы.

Рекомендуется, чтобы ток составлял не более 70 А. В этой схеме нет защиты по току и по температуре, поэтому рекомендуется встроить амперметр и контролировать силу тока визуально. Частота коммутации составит 5 кГц, она определяется конденсатором C2 ёмкостью 20 нф.

При изменении силы тока, эта частота может изменяться между 3 кГц и 5 кГц. Переменный резистор R2 служит для регулировки тока. При использовании электродвигателя в бытовых условиях, рекомендуется использовать регулятор стандартного типа.

При этом, рекомендуется подобрать величину R1 таким образом, чтобы правильно настроить работу регулятора. С выхода микросхемы, управляющий импульс поступает на двухтактный усилитель на транзисторах КТ815 и КТ816, далее идёт уже на транзисторы.

Печатная плата имеет размер 50 на 50 мм и изготавливается из одностороннего стеклотекстолита:

На этой схеме дополнительно указаны 2 резистора по 45 ом. Это сделано для возможного подключения обычного компьютерного вентилятора для охлаждения прибора. При использовании в качестве нагрузки электродвигателя, необходимо схему заблокировать блокирующим (демпферным) диодом, который по своим характеристикам соответствует удвоенному значению тока нагрузки и удвоенному значению питающего напряжения.

Работа устройства при отсутствии такого диода может привести к поломке вследствие возможного перегрева. При этом, диод нужно будет поместить на теплоотвод. Для этого, можно воспользоваться металлической пластиной, которая имеет площадь 30 см2.

Советуем к прочтению: Музыкальная шкатулка из старого МП3 плеера

Регулирующие ключи работают так, что потери мощности на них достаточно малы. В оригинальной схеме, был использован стандартный компьютерный вентилятор. Для его подключения использовалось ограничительное сопротивление 100 Ом и напряжение питания 24 В.

Собранное устройство выглядит следующим образом:

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

Диагностика неисправностей

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

Схемы ШИМ-контроллеров

Кроме того, существуют и другие неисправности, которые несколько сложнее обнаружить. Перед тем как проверить ШИМ-контроллер непосредственно, можно рассмотреть самые распространенные случаи поломок. К примеру:

  • Контроллер глохнет после старта – обрыв петли ОС, перепад по току, проблемы с конденсатором на выходе фильтра (если таковой имеется), драйвером; возможно, разладилось управление ШИМ-контроллером. Надо осмотреть устройство на предмет сколов и деформаций, замерить показатели нагрузки и сравнить их с типовыми.
  • ШИМ-контроллер не стартует – отсутствует одно из входных напряжений или устройство неисправно. Может помочь осмотр и замер выходного напряжения, в крайнем случае, замена на заведомо рабочий аналог.
  • Напряжение на выходе отличается от номинального – проблемы с петлей ООС или с контроллером.
  • После старта ШИМ на БП уходит в защиту при отсутствии КЗ на ключах – некорректная работа ШИМ или драйверов.
  • Нестабильная работа платы, наличие странных звуков – обрыв петли ООС или цепочки RC, деградация емкости фильтра.
Рейтинг
( 2 оценки, среднее 4.5 из 5 )
Понравилась статья? Поделиться с друзьями: