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

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

Расшифровка и определение ШИМ

Модуляция ширины импульса означает, что ширина импульса возникает строго в прямоугольной волне.

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

Увеличивая частоту импульсов ШИМа на Ардуино, можно выполнять операции на высокой скорости.

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

Рассмотрим основные преимущества использования ШИМ Ардуино:

  1. Эффективность электропитания: индукция обмоток ротора будет усреднять ток (индукторы сопротивляются изменению тока). Транзисторы имеют низкий импеданс при низком падении напряжения и рассеивании мощности. Резистор рассеивает большую мощность (I2R) в виде тепла.
  2. Управление скоростью: двигатель будет видеть источник с низким импедансом, даже если он постоянно переключается между высоким и низким напряжением. Результат очевиден – двигатель ускоряется. Серийное сопротивление приведет к тому, что двигатель будет испытывать малое напряжение, поэтому легко остановится в нужный момент.
  3. Цепь управления: для цифровой электроники (например, микроконтроллера ) очень легко включать или выключать напряжение с помощью транзисторов. Аналоговый выход (с электронным или механическим управлением) требует большего количества компонентов и увеличивает рассеивание мощности. Это будет более дорогостоящим вариантом, с точки зрения электроники и требований к электропитанию.

Создать широтно-импульсный модулятор можно на esp8266 шим, на Ардуино УНО и Ардуино Нано шим. То есть для конструирования подойдет любая модель описываемого микроконтроллера.

Формирование аналогового сигнала

AnalogRead – это функция, которая используется для считывания аналоговых значений из аналоговых контактов ШИМа на Ардуино. Плата Arduino UNO имеет 6-канальный 10-битный аналого-цифровой преобразователь (АЦП). Это означает, что АЦП в Arduino UNO будет отображать входные напряжения от 0 до 5 В в целое значение от 0 до 1023.

Следовательно, функция analogRead возвращает любое значение от 0 до 1023. Синтаксис функции analogReadanalogRead (аналоговый вывод no).

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

Синтаксис функции analogWrite – analogWrite (вывод PWM no, value).

Значение указывает рабочий цикл и должно быть значением от 0 (0 В) до 255 (5 В).

Перейдем к фактическому эскизу схемы управления яркостью светодиода. Окончательный эскиз показан на следующем рисунке.

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

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

Наконец, вычисленное значение помещается в функцию analogWrite вместе с выводом PWM для получения сигнала PWM.

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

Еще  один вариант скетча для Ардуино:

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

Широтно-импульсные модуляторы в Ардуино

Чтобы использовать частотный ШИМ на Arduino Uno, нужно всего лишь установить один из ШИМ-выводов в качестве выхода, затем вызывать команду analogWrite и установить уровень. Частота установлена ​​примерно на 500 Гц, поэтому не нужно беспокоиться об этой части.

Мы выбираем контакт под номером 3, устанавливаем его, как output, и analogWrite значение для него. При выборе выхода у нас есть 256 уровней на выбор. Уровень рабочего цикла можно установить между номерами 0 и 255, где 0 – рабочий цикл 0 %, а 255 – 100 % рабочего цикла.

Последний вывод микроконтроллера на плате Arduino Uno составляет 5 В. Чтобы установить светодиод, который мы выбрали для полной яркости, нам необходимо подать напряжение 3,3 В и 15 мА тока. Для этого мы понижаем напряжение на резисторе 100 Ом.

Увеличение частоты и разрядности ШИМ Ардуино

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

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

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

Рис.: а) структура МОП ПТ с индуцированным каналом. б) графическое изображение.
Рис.: а) структура МОП ПТ с индуцированным каналом. б) графическое изображение.

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

 

Примеры использования ШИМ на Ардуино

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

AM-модуляция была первым типом модуляции, используемой для радиопередач. Самая простая схема модуляции для реализации требует только одного транзистора или усилителя вакуумной трубки, как это было сделано в первые дни с момента создания радио.

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

Ардуино+