Широтно импульсная модуляция просто о сложном – Учебный курс. Широтно-импульсная модуляция (ШИМ, PWM). Управление яркостью светодиода. Генерация аналогового сигнала.

Содержание

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

Широтно-импульсная модуляция (ШИМ) – это метод преобразования сигнала, при котором изменяется длительность импульса (скважность), а частота остаётся константой. В английской терминологии обозначается как PWM (pulse-width modulation). В данной статье подробно разберемся, что такое ШИМ, где она применяется и как работает.

Область применения

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

Широтно-импульсная (ШИ) модуляция активно используется в построении систем управления яркостью светодиодов. Благодаря низкой инерционности, светодиод успевает переключаться (вспыхивать и гаснуть) на частоте в несколько десятков кГц. Его работа в импульсном режиме воспринимается человеческим глазом как постоянное свечение. В свою очередь яркость зависит от длительности импульса (открытого состояния светодиода) в течение одного периода. Если время импульса равно времени паузы, то есть коэффициент заполнения – 50%, то яркость светодиода будет составлять половину от номинальной величины. С популяризацией светодиодных ламп на 220В стал вопрос о повышении надёжности их работы при нестабильном входном напряжении. Решение было найдено в виде универсальной микросхемы – драйвера питания, работающего по принципу широтно-импульсной или частотно-импульсной модуляции. Схема на базе одного из таких драйверов детально описана здесь.

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

Масштабное применение ШИМ отражено во всех LCD панелях со светодиодной подсветкой. К сожалению, в LED мониторах большая часть ШИ-преобразователей работает на частоте в сотни Герц, что негативно отражается на зрении пользователей ПК.

Микроконтроллер Ардуино тоже может функционировать в режиме ШИМ контроллера. Для этого следует вызвать функцию AnalogWrite() с указанием в скобках значения от 0 до 255. Ноль соответствует 0В, а 255 – 5В. Промежуточные значения рассчитываются пропорционально.

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

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

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

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

Задача ШИМ контроллера состоит в управлении силовым ключом за счёт изменения управляющих импульсов. Работая в ключевом режиме, транзистор находится в одном из двух состояний (полностью открыт, полностью закрыт). В закрытом состоянии ток через p-n-переход не превышает несколько мкА, а значит, мощность рассеивания стремится к нулю. В открытом состоянии, несмотря на большой ток, сопротивление p-n-перехода чрезмерно мало, что также приводит к незначительным тепловым потерям. Наибольшее количество тепла выделяется в момент перехода из одного состояния в другое. Но за счёт малого времени переходного процесса по сравнению с частотой модуляции, мощность потерь при переключении незначительна.

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

Аналоговая ШИМ

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

Цифровая ШИМ

Широтно-импульсная модуляция в цифровой интерпретации является одной из многочисленных функций микроконтроллера (МК). Оперируя исключительно цифровыми данными, МК может формировать на своих выходах либо высокий (100%), либо низкий (0%) уровень напряжения. Однако в большинстве случаев для эффективного управления нагрузкой напряжение на выходе МК необходимо изменять. Например, регулировка скорости вращения двигателя, изменение яркости светодиода. Что делать, чтобы получить на выходе микроконтроллера любое значение напряжения в диапазоне от 0 до 100%?

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

  • высокой эффективности преобразования сигнала;
  • стабильность работы;
  • экономии энергии, потребляемой нагрузкой;
  • низкой стоимости;
  • высокой надёжности всего устройства.

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

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

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

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

Читайте так же

ledjournal.info

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

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

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

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

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

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

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

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

S = T/t.

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

Смысл ШИМ заключается в регулировании среднего значения напряжения путем изменения коэффициента заполнения. Среднее значение напряжения равно произведению коэффициента заполнения и амплитуды напряжения. Так, при коэффициенте заполнения 0,3 и амплитуде напряжения 12 В среднее значение напряжения составит 0,3 х 12 = 3,6 (В). При изменении коэффициента заполнения в теоретически возможных пределах от 0% до 100% напряжение будет изменяться от 0 до 12 В, т.е. Широтно-импульсная модуляция позволяет регулировать напряжение в пределах от 0 до амплитуды сигнала. Что и используется для регулирования скорости вращения электродвигателя постоянного тока или яркости свечения светильника.

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

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

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

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

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

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

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

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

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

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

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

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

В качестве источника сигнала цифровой ШИМ можно использовать COM-порт компьютера с 10-битовым сигналом на выходе. С учетом 8 информационных битов и 2 битов старт/стоп, в сигнале COM-порта присутствует от 1 до 9 «единичек», что позволяет регулировать напряжение в пределах 10-90% напряжения питания с шагом в 10%.

Похожие темы:

 

electrosam.ru

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

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

Широтно-импульсная модуляция применяется в технике для преобразования переменного напряжения в постоянное, с изменением его среднего значения (Ud). Управление средним значением напряжения происходит путем изменения скважности импульсов.

Скважность – это отношение одного периода, к времени действия (длительности) импульса в нем. В англоязычной литературе часто встречается понятие коэффициент заполнения, который обратно пропорционален скважности. Формула скважности:

где T – длительность периода, с;
t – время действия импульса (длительность), с;
D – коэффициент заполнения.

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

Рисунок 1 – Скважность импульсов

На приведенном выше рисунке изображены импульсы, которые возникают с определенной периодичностью. Длительность импульса равна ¼ периода Т, это означает, что коэффициент заполнения равен 25%, а скважность – 4. Специфическое название имеется у набора импульсов c коэффициентом заполнения – 50%, такой сигнал называется меандр.

Существуют цифровые и аналоговые ШИМ. Принцип их работы остается одинаковым вне зависимости от исполнения и заключается в сравнении двух видов сигналов:

Uоп – опорное (пилообразное, треугольное) напряжение;
Uупр – входное постоянное напряжение.

Cигналы поступают на компаратор, где они сравниваются, а при их пересечении возникает / исчезает (или становится отрицательным) сигнал на выходе ШИМ.

Выходное напряжение Uвых ШИМ имеет вид импульсов, изменяя их длительность, мы регулируем среднее значение напряжения (Ud) на выходе ШИМ:

Рисунок 2 – Скважность сигнала при однополярной ШИМ

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

В двухполярной модуляции вместо нулевого длительного напряжения формируется отрицательное напряжение, она проиллюстрирована на рисунке 4.

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

Работа широтно-импульсного преобразователя реализуется с помощью полупроводниковых приборов – транзисторов. Максимальные потери на транзисторах бывают при их полуоткрытом состоянии. Поэтому используют два крайних положения: полностью открыты или закрыты, тогда потери минимальны. Частота срабатывания транзисторов очень большая, то есть переходные состояния имеют мало времени и потери, фактически, сводятся к нулю.

ШИМ нашел широкое применение как регулятор оборотов двигателей постоянного тока (ДПТ).

Рисунок 3 – Схема ШИМ регулятора для ДПТ

Схема ШИМ управления двигателя постоянного тока состоит из тиристорного преобразователя VS1÷VS6, сглаживающего конденсатора С. Транзисторы VT1÷VT4 реализуют подачу импульсного напряжения на двигатель постоянного тока М. С помощью обратных диодов VD1÷VD4, энергия будет отдаваться в сеть при торможении двигателя. Наличие в данной схеме четырех транзисторов дает возможность работы ДПТ во всех 4-х квадрантах механической характеристики.

Принцип работы схемы основан на двухполярной модуляции:

Рисунок 4 – Двухполярная широтно-импульсная модуляция

Добавить комментарий

h4e.ru

AVR. Учебный курс. Использование ШИМ

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

Вкратце, Широтно Импульсная Модуляция (в буржуйской нотации этот режим зовется 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

 

 
Для версии Pinboard II все аналогично, с поправкой на другое расположение джамперов:

 

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

 

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<<COM1A0|2<<COM1B0|0<<WGM11|1<<WGM10	 
	OUTI	TCCR1B,0<<WGM13|1<<WGM12|1<<CS10

;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<<COM1A0|2<<COM1B0|0<<WGM11|1<<WGM10 OUTI TCCR1B,0<<WGM13|1<<WGM12|1<<CS10

 
Готово! Теперь ШИМ таймера1 генерит сигнал на выходаx OC1А и OC1B

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

 

1
2
3
4
5
6
7
	CLI
	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
2
	OUTI 	TCCR1A,2<<COM1A0|2<<COM1B0|0<<WGM11|1<<WGM10	 
	OUTI	TCCR1B,0<<WGM13|0<<WGM12|1<<CS10

OUTI TCCR1A,2<<COM1A0|2<<COM1B0|0<<WGM11|1<<WGM10 OUTI TCCR1B,0<<WGM13|0<<WGM12|1<<CS10

 

 
ШИМ на прерываниях.
Но вот засада — плата уже разведена, захотелось ШИМ, а выводы 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<<COM1A0|0<<COM1B0|0<<WGM11|1<<WGM10	 
	OUTI	TCCR1B,0<<WGM13|1<<WGM12|1<<CS10	
 
	SETB	TIMSK,OCIE1A,R16	; Включаем прерывание по сравнению А
	SETB	TIMSK,OCIE1B,R16	; Включаем прерывание по сравнению Б
	SETB	TIMSK,TOIE1,R16	; Включаем прерывание по переполнению Т1
					; Причем в режиме WGM=1010 переполнение
					; будет на FF т.е. таймер работает как
					; 8ми разрядный.

;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<<COM1A0|0<<COM1B0|0<<WGM11|1<<WGM10 OUTI TCCR1B,0<<WGM13|1<<WGM12|1<<CS10 SETB TIMSK,OCIE1A,R16 ; Включаем прерывание по сравнению А SETB TIMSK,OCIE1B,R16 ; Включаем прерывание по сравнению Б SETB TIMSK,TOIE1,R16 ; Включаем прерывание по переполнению Т1 ; Причем в режиме WGM=1010 переполнение ; будет на FF т.е. таймер работает как ; 8ми разрядный.

 
Осталось только прописать обработчики и вектора:

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 то его надо было бы запрещать локально. Иначе бы мы получили такой трешняк, что проще заново прогу переписать, чем это отладить

.

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

 
Исходник к статье

easyelectronics.ru

Широтно-импульсная модуляция (ШИМ): что это такое?

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

Суть ШИМ

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

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

Способы управления электрической мощностью

Рассмотрим, в чем разница между этими двумя способами. Электрическая мощность может быть активной и определять выделяемое тепло. Также существует реактивная мощность, определяющая электромагнитные поля. В любом случае величина мощности зависит от внешнего воздействия – напряжения. Свойства нагрузки при том или ином напряжении повлияют на силу тока, а также на мощность.

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

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

О ШИМ более детально

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

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

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

Разновидности

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

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

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

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

Принцип ШИМ

Диммер как разновидность ШИМ

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

Принцип работы и схема диммера

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

Схема ШИМ с обозначением генератора пилообразного напряжения Пилообразное напряжение от генератора на экране осциллографа

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

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

Похожие статьи:

domelectrik.ru

Широтно-импульсная модуляция (ШИМ, PWM, Pulse Width Modulation)

Оригинальная статья:
Pulse Width Modulation (Simon Baker, Shea Hagstrom)
Опубликовано:
Перевод:
Марат Таналин
Опубликован:
Обновлено:

Введение

Жидкокристаллические (ЖК-, LCD-) мониторы используются в самых разных условиях, поэтому желательно производить дисплеи, позволяющие изменять яркость и подходящие для работы как при свете, так и в темноте. Тогда пользователь сможет настроить экран на комфортный уровень яркости в зависимости от условий его работы и общего освещения.

В технических характеристиках дисплея производители обычно указывают его максимальную яркость, но важно принимать во внимание и более низкие значения яркости, на которых способен работать экран — ведь вы вряд ли захотите использовать его на максимальной яркости. Хотя в спецификациях часто фигурируют значения до 500 кд/м², вам наверняка потребуется использовать экран при яркости, несколько более комфортной для ваших глаз.

Напомним, что в каждом из наших обзоров на сайте tftcentral.co.uk мы проверяем полный диапазон регулирования яркости подсветки и соответствующие значения яркости. При калибровке мы также пытаемся установить яркость экрана на уровне 120 кд/м², который является рекомендуемым для ЖК-монитора при обычных условиях освещённости. Это помогает вам получить представление о том, как установить такой уровень яркости, при котором вы, скорее всего, захотите использовать его ежедневно.

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

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

Что такое ШИМ?

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

Ниже вы можете видеть графики светоотдачи подсветки на протяжении нескольких циклов с использованием «идеальной» ШИМ. Максимальная светоотдача подсветки в этом примере составляет 100 кд/м², а воспринимаемая яркость для коэффициентов заполнения 90%, 50% и 10% — 90, 50 и 10 кд/м² соответственно. Соотношение между минимальным и максимальным уровнями яркости в течение одного цикла называется глубиной модуляции и в данном случае составляет 100%. Обратите внимание, что на протяжении цикла в приведённом примере яркость подсветки максимальна.

Коэфф. заполнения 90%
Коэфф. заполнения 50%
Коэфф. заполнения 10%

Аналоговые (без использования ШИМ) графики, соответствующие воспринимаемым уровням яркости, представлены ниже. Здесь модуляция отсутствует.

Постоянная яркость 90%
Постоянная яркость 50%
Постоянная яркость 10%

Почему применяется ШИМ

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

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

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

Побочные эффекты ШИМ

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

Как видно из видео и соответствующих графиков, в течение одного цикла общая яркость изменяется примерно в 4 раза. Что интересно, цвет подсветки тоже значительно изменяется в течение каждого цикла. Скорее всего, это связано с тем, что люминофоры в CCFL имеют различающееся время отклика, и в этом случае мы можем сделать вывод, что люминофор, задействованный при продуцировании синего света, может включаться и выключаться быстрее, чем для других цветов. Применение люминофоров также означает, что подсветка продолжит излучать свет в течение нескольких миллисекунд после отключения подсветки в конце рабочего цикла и обеспечивает более постоянный уровень свечения (меньшую модуляцию), чем имели бы место в противном случае. Обратите внимание, что усреднённый во времени цвет остаётся неизменным.

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

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

Исходное изображение
Без ШИМ
ШИМ при CCFL-подсветке
ШИМ при LED-подсветке

Важно помнить, что это обусловлено исключительно подсветкой, и дисплей как таковой отображает статичное изображение. Часто говорят, что человек не способен воспринимать более 24 кадров в секунду (fps), что не является правдой и в действительности лишь соответствует приблизительной частоте кадров, необходимой для восприятия непрерывного движения. На самом деле при движении глаз (например, при чтении) реально увидеть эффекты мерцания на нескольких сотнях герц. У разных людей способность замечать мерцание значительно различается и даже зависит от расположения пользователя относительно дисплея, поскольку периферическое зрение является наиболее чувствительным.

Так насколько же часто включается и выключается подсветка при использовании ШИМ? По-видимому, это зависит от типа используемой подсветки. Подсветка на основе люминесцентных ламп почти всегда переключается с частотой 175 Гц, или 175 раз в секунду. Частота мерцания светодиодной подсветки, по разным сведениям, составляет от 90 Гц до 420 Гц, и при более низких частотах мерцание гораздо заметнее. Может показаться, что частота слишком высокая, чтобы быть заметной, но не забывайте, что 175 Гц — это ненамного чаще, чем мерцание 100—120 Гц, характерное для ламп освещения, подключённых напрямую к электросети.

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

Важно также понимать разницу между мерцанием дисплеев на основе электронно-лучевых трубок (ЭЛТ, CRT) и TFT-дисплеев с CCFL- и LED-подсветкой. В то время как ЭЛТ может мерцать на низкой частоте 60 Гц, лишь узкая полоса освещена в каждый отдельно взятый момент времени, поскольку луч электронной пушки движется сверху вниз. При использовании TFT-дисплеев с CCFL- и LED-подсветкой вся поверхность экрана светится одновременно, что означает гораздо большее количество света, излучённого за короткое время. В некоторых случаях это может быть более неприятно, чем мерцание ЭЛТ, особенно при высокой скважности.

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

Ослабление побочных эффектов ШИМ

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

Гораздо лучшим методом, конечно, было бы приобрести дисплей, не использующий ШИМ для управления яркостью или хотя бы использующий гораздо более высокую частоту ШИМ. К сожалению, похоже, ни один из производителей пока не реализовал ШИМ, работающую на частотах, которые находились бы за пределами воспринимаемых зрительных дефектов (вероятно, значительно выше 500 Гц для CCFL и выше 2 КГц для светодиодов). Кроме того, в некоторых дисплеев, в которых применяется ШИМ, коэффициент заполнения не равен 100% даже на полной яркости, в результате чего они мерцают в любом случае. Возможно, в некоторых из доступных сейчас дисплеев со светодиодной подсветкой ШИМ не используется, но до тех пор, пока частоту подсветки и модуляцию не станут указывать в технических характеристиках, каждый конкретный дисплей необходимо проверять лично.

Проверка и анализ

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

Съёмка:
  1. Установите на мониторе настройки, которые вы хотите проверить.
  2. (Необязательно) Установите баланс белого на фотоаппарате при отображении на экране только белого цвета. Если это невозможно, установите баланс белого вручную примерно на уровне 6000 K.
  3. Выведите на монитор узкую белую вертикальную полосу на чёрном фоне (толщины 1-3 точки будет достаточно). Должно быть видно только это изображение.
  4. Установите выдержку на фотоаппарате в значение из промежутка от 1/2 до 1/25 секунды. Для получения достаточного для съёмки количества света вам может потребоваться установить ISO-чувствительность и диафрагму. Убедитесь, что полоса располагается на фокусном расстоянии (при необходимости зафиксируйте его).
  5. Удерживайте камеру на расстоянии примерно 60 см от монитора и перпендикулярно ему. Нажмите кнопку спуска затвора во время медленного горизонтального перемещения камеры относительно экрана (при движении сохраняйте их взаимно перпендикулярное положение). Вам может потребоваться поэкспериментировать с перемещением фотоаппарата на разных скоростях.
Обработка:
  1. Подстройте яркость полученного изображения так, чтобы был хорошо различим узор.
  2. Подсчитайте количество циклов, запечатлённых на изображении.
  3. Разделите это число на величину выдержки. Например, если вы используете выдержку 1/25 секунды и насчитали 7 циклов, количество циклов в секунду составит 25 * 7 = 175 Гц. Это частота мерцания подсветки.
Проверочное изображение
Фотография
Вырезанный полезный фрагмент

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

Типичной проблемой при первых попытках использования этой техники является слишком тёмное изображение. Улучшить ситуацию в этом плане может использование большей диафрагмы фотоаппарата (более низкое значение f/число) или увеличение ISO-чувствительности. Выдержка на эскпозицию влияния не оказывает, поскольку мы используем её только для управления общей продолжительностью съёмки. Яркость изображения можно также подстроить путём изменения скорости перемещения фотоаппарата: более высокая скорость обеспечит более тёмное изображение при более высоком разрешении по времени, а следствием более низкой скорости будет более яркое изображение при более низком разрешении.

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

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

  • Изображение слишком тёмное
    • Увеличьте экспозицию после съёмки.
    • Используйте бОльшую диафрагму.
    • Перемещайте фотоаппарат медленнее.
  • Разные расстояния между столбцами
    • Перемещайте фотоаппарат на постоянной скорости.
    • Попробуйте перемещать фотоаппарат до и после съёмки.
  • Изображение расфокусировано
    • Зафиксируйте фокусное расстояние.
    • Наведите фокус заранее путём половинного нажатия кнопки спуска затвора.
    • Убедитесь, что фотоаппарат расположен перпендикулярно экрану.

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

Далее представлены примеры применения этого метода.

Dell 2007WFP (CCFL)

Яркость = 100
Яркость = 50
Яркость = 0

Используя выдержку 1/25 секунды, мы можем ясно увидеть 7 циклов, из чего следует, что подсветка мерцает на частоте 175 Гц. Даже на полной яркости есть небольшое мерцание, хотя оно, скорее всего, достаточно мало, чтобы быть незаметным. На половинной яркости появляется небольшое мерцание, а при достижении минимальной яркости появляется гораздо более заметное мерцание наряду с цветовым сдвигом.

NEC EA231WMi (CCFL)

Яркость = 100
Яркость = 50
Яркость = 0

На полной яркости видимое мерцание отсутствует. На половинной яркости становятся видны мерцание и цветовой сдвиг. При минимальной яркости наблюдаются более сильное мерцание и значительный цветовой сдвиг. При выдержке 1/25 секунды видно около 8 циклов, что соответствует частоте примерно 200 Гц. При более длительной выдержке получено более точное значение частоты — 210 Гц.

Samsung LN40B550 Television (CCFL)

Яркость = Max
Яркость = Min

Отключить автоматическую подстройку яркости нет возможности, поэтому показаны максимальный и минимальный уровни яркости, которых можно легко достичь. На полной яркости видимое мерцание отсутствует. На минимальной яркости есть сильное мерцание и цветовой сдвиг, за счёт которого видно разделение на жёлтую и синюю составляющие. При выдержке 1/25 секунды видны лишь 6 циклов, из чего следует, что подсветка мерцает на частоте 150 Гц.

2009 Apple MacBook (LED)

Яркость = 100
Яркость = 50
Яркость = 0

При использовании выдержки 1/25 секунды видимые мерцание и цветовой сдвиг отсутствуют вне зависимости от яркости. Этот дисплей не использует ШИМ. Причиной бороздчатости является зашумлённость изображения.

2008 Apple MacBook Pro (LED)

Яркость = 100
Яркость = 50
Яркость = 0

При выдержке 1/25 секунды наблюдается небольшое мерцание на полной яркости. При яркости 50 и 0 используется очень высокая скважность, дающая сильное мерцание. В этой светодиодной подсветке используется более высокая частота — 420 Гц, но она всё же слишком низка, чтобы устранить эффект мерцания. Видимый цветовой сдвиг в течение циклов отсутствует.

Заключение

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

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

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

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

Автор перевода не несёт ответственности за возможные неточности.

tanalin.com

Широтно-импульсная модуляция — это… Что такое Широтно-импульсная модуляция?

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

,

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

.


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

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

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

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

Применение

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

1.

2.

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

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


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

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

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

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

См. также

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

Ссылки

dic.academic.ru