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

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

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

Pulse Width Regulator

Рис. 1. Принципиальная электрическая схема ШИМ регулятора мощности нагрузки с использованием Ардуино модуля.

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

В  системе с ручным управлением мощностью нагрузки резистор  R1, см. рис. 1 является задатчиком, с его помощью мы задаём электрическую мощность в нагрузке, а микроконтроллер, изменяя ширину импульсов на выходе D9 меняет среднее напряжение и ток в нагрузке. Так как мощности выходов микроконтроллера недостаточно для подключения нагрузки, например лампочки, мы подключаем лампочку через мощный транзистор Q1. Использование транзистора, работающего в ключевом режиме, на выходе нашей схемы позволяет нам запитать нагрузку более высоким напряжением +Vcc. Например, если в качестве нагрузки мы используем автомобильную лампочку на 12 Вольт, мы можем запитать нашу схему через клемму +Vcc напряжением 12 Вольт. Напряжение питания для платы Arduino понижает до +9 Вольт транзистор Q2.

В полу-автоматической системе управления мощностью нагрузки резистором R1, см. рис. 1, выставляют задание, а дополнительные датчики, подключаемые к аналоговым входам микроконтроллера непрерывно измеряют регулируемые параметры системы. Микроконтроллер, при этом, поддерживает неизменным заданный человеком параметр, увеличивая или уменьшая ширину импульсов на выходе D9.

Например, ваша схема предназначена для поддержания заданной температуры жала паяльника. В ручном режиме в можете задать максимальную температуру жала, но как только вы прикоснётесь жалом паяльника к металлу, температура жала упадёт. В системе с ручным управлением нет обратной связи. Микроконтроллер не имеет информации о реальной температуре. В полуавтоматической системе в качестве датчика мы подключим датчик температуры. Теперь, микроконтроллер будет сравнивать реальную температуру жала паяльника с заданной с помощью резистора R1. У микроконтроллера в полуавтоматической системе появилась возможность поддерживать заданную температуру при изменяющихся внешних условиях.

В автоматической системе, вместо резистора R1 можно подключить к микроконтроллеру датчик, а микроконтроллер сможет автоматически поддерживать заданный в программе параметр.

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

На схеме рис. 1 транзистор Q2 включён по схеме эмиттерного повторителя и снижает напряжение питания 12 В до 7,5 В для питания платы Arduino.

#define led 9
#define pot A0
void setup()
{
  pinMode(led, OUTPUT);
  pinMode(pot, INPUT);
  int x;
  x = analogRead(pot) / 4;
  for (int i = 0; i < x; i++) {
    analogWrite(led, i);
    delay(50);
  }
}
void loop()
{
  int x;
  x = analogRead(pot) / 4;
  analogWrite(led, x);
  delay(20);
}

Рис. 2. Программа