Arduino: Коммутация высокого напряжения с помощью транзистора

Демонстрация коммутации высокого напряжения с транзистором

Зачем нужны транзисторы

Arduino работает при напряжении 5В или 3.3В с ограниченной токовой нагрузкой. Для управления устройствами с более высоким напряжением и током необходимы промежуточные коммутационные компоненты. Варианты включают: реле, твердотельные реле, транзисторы, полевые транзисторы (MOSFET), транзисторы Дарлингтона, тиристоры (SCR), IGBT, диаки и триаки.

Основы транзисторов

Биполярные транзисторы (BJT)

Биполярные транзисторы (BJT) имеют три вывода:

  • База (управляющий сигнал)

  • Коллектор (подключение нагрузки)

  • Эмиттер (подключение к земле для NPN в нижней коммутации)

Символы транзисторов NPN и PNP

Существуют два основных типа: NPN (лучше для нижней коммутации) и PNP (лучше для верхней коммутации).

Нижняя и верхняя коммутация

Распиновка 2N2222

Области работы транзистора

Транзисторы работают в четырёх состояниях:

  1. Отсечка (Cutoff): Нет тока базы; транзистор выключен

  2. Активная/Линейная область (Active/Linear): Ток базы увеличивается, позволяя пропорциональный ток коллектора

  3. Насыщение (Saturation): Максимальный ток коллектора; транзистор полностью включён

  4. Пробой (Breakdown): Чрезмерное напряжение приводит к отказу

Для коммутационных приложений используются только области отсечки и насыщения.

Области работы NPN BJT транзистора

Практический пример: 12В соленоидный клапан

12В соленоидный клапан

Характеристики:

  • Напряжение: 12В

  • Мощность: 4.6 Вт

  • Требуемый ток: 4.6 Вт / 12В = 0.385А (385 мА)

Выбор транзистора 2N2222A

Транзисторы

Транзистор 2N2222A

Сравнение характеристик:

Параметр

2N2222

2N2222A

PN2222

PN2222A

Макс. напряжение коллектор-эмиттер

30В

40В

30В

40В

Макс. ток коллектора

800 мА

600 мА

600 мА

1000 мА

Макс. коэффициент усиления (hFe)

300

300

300

300

2N2222A выдерживает 40В и 600 мА, что подходит для данного применения с запасом.

Коэффициент усиления по току (hFe)

Коэффициент усиления представляет усиление: ток коллектора = ток базы x усиление.

График усиления транзистора 2N2222A

График усиления транзистора (детали)

Из даташита 2N2222A при 10В и 25°C:

  • При 385 мА: усиление примерно 180 (граница активной области и насыщения)

  • При 500 мА: усиление примерно 40 (минимум, глубоко в насыщении)

График усиления с выделенной областью

Три варианта усиления:

  • 180: Граница между областями (не идеально)

  • 100: Стандартное эмпирическое правило (безопасно)

  • 40: Глубоко в насыщении (очень безопасно, но менее эффективно)

Расчёт базового резистора

Используя закон Ома: R = V / I

При усилении 100:

  • Требуемый ток базы: 0.385А / 100 = 0.00385А

  • Доступное напряжение: 5В - 0.7В (падение на переходе база-эмиттер) = 4.3В

  • Необходимое сопротивление: 4.3В / 0.00385А = 1116 Ом

  • Используем резистор 1 кОм (ближайший стандартный номинал)

Проверка: 4.3В / 1000 Ом = 0.0043А (в пределах ограничения пина Arduino 20 мА)

При усилении 40:

  • Требуемый ток базы: 0.385А / 40 = 0.009625А

  • Необходимое сопротивление: 4.3В / 0.009625А = 446 Ом

  • Используем резистор 330 Ом (обеспечивает 0.0130А)

Рекомендация: Используйте резистор 1 кОм с усилением 100 – это обеспечивает насыщение при меньшем потреблении тока от Arduino.

Защита схемы

Обратный диод (Flyback Diode)

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

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

Расположение: Подключается параллельно соленоиду (катод к плюсу, анод к минусу).

Соленоидный клапан с активным дренажом

Пример 2: Управление переключателем (Toggle)

Схема

Та же схема, что и в Примере 1, плюс кнопка на пине D2. Переключение: нажатие один раз активирует, повторное нажатие деактивирует.

Схема с переключателем

Схема примера 2

Макетная плата примера 2

Скетч

//  Sketch: Switching High Voltages With An Arduino - Use a toggle switch to turn a solenoid valve on and off
// www.martyncurrey.com
//
//  An  example of using a button switch as a toggle switch to turn a solenoid valve on or off
//
//  Pins
//  D10 to resistor and LED
//  D4 to resistor and transistor
//  D2 to push button switch

// Define the pins being used
const int PIN_LED = 10;
const int PIN_TRANSISTOR = 4;
const int PIN_SWITCH = 2;

// variables to hold the new and old switch states
boolean oldSwitchState = LOW;
boolean newSwitchState1 = LOW;
boolean newSwitchState2 = LOW;
boolean newSwitchState3 = LOW;

boolean valveStatus = LOW;

void setup()
{
    Serial.begin(9600);
    Serial.print("Sketch:   ");   Serial.println(__FILE__);
    Serial.print("Uploaded: ");   Serial.println(__DATE__);
    Serial.println(" ");

    pinMode(PIN_LED, OUTPUT);        digitalWrite(PIN_LED,LOW);
    pinMode(PIN_TRANSISTOR, OUTPUT); digitalWrite(PIN_TRANSISTOR,LOW);
    pinMode(PIN_SWITCH, INPUT);
}

void loop()
{
    newSwitchState1 = digitalRead(PIN_SWITCH);  delay(1);
    newSwitchState2 = digitalRead(PIN_SWITCH);  delay(1);
    newSwitchState3 = digitalRead(PIN_SWITCH);

    // if all 3 values are the same we can continue
    if (  (newSwitchState1==newSwitchState2) && (newSwitchState1==newSwitchState3) )
    {
        if ( newSwitchState1 != oldSwitchState )
        {
           oldSwitchState = newSwitchState1;
           if ( newSwitchState1 == HIGH )
           {
               if ( valveStatus == LOW ) { turnON();  }
               else                      { turnOFF(); }
           }
        }
    }
}

void turnON()
{
  digitalWrite(PIN_LED, HIGH);
  digitalWrite(PIN_TRANSISTOR, HIGH);
  valveStatus = HIGH;
}

void turnOFF()
{
  digitalWrite(PIN_LED, LOW);
  digitalWrite(PIN_TRANSISTOR, LOW);
  valveStatus = LOW;
}

Ключевая логика:

  • Считывает состояние кнопки три раза для дебаунса

  • Определяет изменение состояния с LOW на HIGH

  • Переключает клапан: если ВЫКЛ – включает; если ВКЛ – выключает

  • Обновляет переменную valveStatus для отслеживания состояния

Рекомендации по проектированию

Безопасность на макетной плате: Не подключайте Arduino напрямую к 12В. Используйте отдельные шины питания для 5В (Arduino) и 12В (соленоид), соединяя только линии земли.

Эффективность vs безопасность: Более высокие значения сопротивления (меньший ток базы) экономят заряд батареи, но требуют тщательных расчётов усиления. Меньшие значения сопротивления гарантируют насыщение, но потребляют больше тока от Arduino.

Специфика применения: 2N2222A хорошо работает для данного соленоида. Для других требований по току обратитесь к даташитам транзисторов для оптимизации усиления и значений базового резистора.