Управление мощной нагрузкой

“Универсальное” электромагнитное реле


Электромагнитное реле является по сути управляемым механическим выключателем: подали на него ток – оно замкнуло контакты, сняли ток – разомкнуло. Контакты являются именно контактами: металлическими “пятаками”, которые прижимаются друг к другу. Именно поэтому такое реле может управлять как нагрузкой постоянного, так и переменного тока.

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

После изучения данного урока вы сами сможете её составить (транзистор и диод), а сейчас мы поговорим о модулях реле: готовая плата, на которой стоит само реле, а также цепи коммутации, защиты и даже оптическая развязка. Такие модули бывают “семейными” – с несколькими реле на борту. Спасибо китайцам за это! Смотрите варианты у меня в каталоге ссылок на Али.

Такое реле сделано специально для удобного управления с микроконтроллера: пины питания VCC (Vin, 5V) и GND подключаются к питанию, а далее реле управляется логическим сигналом, поданным на пин IN. С другой стороны стоит клеммник для подключения проводов, обычно контакты подписаны как NO, NC и COM. Это общепринятые названия пинов кнопок, переключателей и реле:

  • COM – Common, общий. Реле является переключающим, и пин COM является общим.
  • NO – Normal Open, нормально открытый. При неактивном реле данный контакт не соединён с COM. При активации реле он замыкается с COM.
  • NC – Normal Closed, нормально закрытый. При неактивном реле данный контакт соединён с COM. При активации реле он размыкается с COM.

Подключение нагрузки через реле думаю для всех является очевидным:

Важный момент: катушка реле в активном режиме потребляет около 60 мА, то есть подключать больше одного модуля реле при питании платы от USB не рекомендуется – уже появятся просадки по напряжению и помехи:

blank

Такие модули реле бывают двух типов: низкого и высокого уровня. Реле низкого уровня переключается при наличии низкого сигнала (GND) на управляющем пине digitalWrite(pin, LOW). Реле высокого уровня соответственно срабатывает от высокого уровня digitalWrite(pin, HIGH). Какого типа вам досталось реле можно определить экспериментально, а можно прочитать на странице товара или на самой плате. Также существуют модули с выбором уровня:

На плате, справа от надписи High/Low trigger есть перемычка, при помощи которой происходит переключение уровня. Электромагнитное реле имеет ряд недостатков перед остальными рассмотренными ниже способами, вы должны их знать и учитывать:

  • Ограниченное количество переключений: механический контакт изнашивается, особенно при большой и/или индуктивной нагрузке.
  • Противно щёлкает!
  • При большой нагрузке реле может “залипнуть”, поэтому для больших токов нужно использовать более мощные реле, которые придётся включать при помощи… маленьких реле. Или транзисторов.
  • Необходимы дополнительные цепи для управления реле, так как катушка является индуктивной нагрузкой, и нагрузкой самой по себе слишком большой для пина МК (решается использованием китайского модуля реле).
  • Очень большие наводки на всю линию питания при коммутации индуктивной нагрузки.
  • Относительно долгое переключение (невозможно поставить детектор нуля, читай ниже), при управлении индуктивными цепями переменного тока можно попасть на большой индуктивный выброс, необходимо ставить искрогасящие цепи.

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

Постоянный ток

Оптопара


Оптопара – отличный элемент, позволяет выполнять две функции: коммутировать нагрузку (пусть и небольшую) и полностью физически развязывает микроконтроллер с ней. Оптопары можно использовать для имитации нажатия кнопок у других внешних устройств, то есть замыкать чисто логический сигнал. Также можно использовать для разрывания питания различных датчиков и модулей в устройстве вместо транзистора. Оптопара состоит из двух частей: светодиод, который мы включаем при помощи микроконтроллера, и выходная часть, которая может быть разной (транзистор, симистор и проч.), таким образом сигнал с микроконтроллера отделяется от нагрузки через луч света, что очень важно при коммутации высоковольтных или каких-то чувствительных цепей. Для управления внешними устройствами надо брать оптопары с транзисторным выходом, например очень распространённую PC814 и её аналоги (FOD814, LTV814 и прочие), при желании можно выковырять почти из любого блока питания. Данная оптопара позволяет коммутировать нагрузку с напряжением до 60 Вольт и током до 50 мА. Покажу вырезку из даташита с этими параметрами, у остальных оптопар параметры будут называться точно так же:

blank

Подключается оптопара следующим способом: светодиодом мы управляем с МК через резистор, а выход подключаем в разрыв нагрузки, соблюдая полярность. Что касается светодиода на управляющем входе оптопары – для него нужен резистор, как считать резистор для светодиода было рассказано в уроке про светодиоды. В большинстве случаев достаточно поставить резистор на 220 Ом, как и для любых светодиодов. Если ток светодиода будет меньше указанного, соответственно уменьшится максимальный ток выхода, что для этой оптопары уже критично (светодиод хочет аж 50 мА). Оптопара не предусмотрена для управления большой нагрузкой, обычно это коммутация других логических цепей, поэтому о токе можно не думать. Подключение нагрузки (условный нагрузочный резистор):

blank

blank

Для управления “кнопкой” другого устройства (фотоаппарат, кофемашина) достаточно подключить оптопару параллельно кнопке. Во избежание замыкания оптопары на кнопку (что сожгёт оптопару) желательно поставить защитный резистор с номиналом 200-1000 Ом. Тут будет две схемы, по сути одинаковые. Перед подключением нужно проверить мультиметром, где у кнопки “плюс”, а где “минус”, так как выход с оптопары у нас полярный.

Существует также интересная оптопара TLP172 с мосфетным выходом, причём неполярным (может коммутировать нагрузку в любую сторону)! Управляет напряжением до 60 Вольт при токе до 400 мА – уже вполне серьёзная игрушка.

Транзистор


Самый компактный способ управлять нагрузкой постоянного тока – транзистор. Транзисторы бывают биполярные и полевые (MOSFET, полевик, ключ). Биполярные уже морально и физически устарели, имеют много характеристик и требуют дополнительного изучения темы, поэтому мы рассмотрим только полевые транзисторы. Схема типовая и выглядит вот так:

blank

Или вот так, конкретно для корпуса to220. Также на этой схеме плата Ардуино питается от внешнего источника в пин Vin:

blank

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

Что за резисторы? Резистор на 100 Ом (можно ставить в диапазоне 100-500 Ом) выполняет защитную функцию: затвор полевика представляет собой конденсатор, в момент открытия затвора конденсатор начнёт заряжаться и в цепи пойдёт большой ток (практически короткое замыкание), который может повредить пин Ардуино. Резистор просто ограничивает ток в цепи пин-затвор и спасает пин от скачков тока. В целом можно его не ставить, но когда-нибудь оно обязательно сломается =) Резистор на 10 кОм (можно ставить в диапазоне 5-50 кОм) выполняет подтягивающую функцию для затвора. Если случится так, что плата Ардуино выключена или сигнальный провод от неё отвалился – на затвор будут приходить случайные наводки и он может случайно открыться. Если в этот момент будет подключен источник питания – нагрузка тоже включится! Восстание машин начнётся именно с этого момента. Подтягивающий к GND резистор позволяет “прижать” затвор, чтобы он не открылся сам по себе. Имеет смысл ставить его прямо на корпус транзистора, если монтаж производится навесом:

Я привёл схему, в которой используется N-канальный полевой транзистор, который управляет линией GND. Существуют также P-канальные мосфеты, они управляют линией питания. Такие транзисторы в целом дороже, реже встречаются и имеют высокий порог напряжения открытия, т.е. для их работы придётся ставить ещё один транзистор (биполярный) и с его помощью подавать более высокий сигнал от внешнего источника на затвор P-канального полевика. Поэтому в 99% случаев просто используют более удобные N-канальные ключи. Как выбрать транзистор для своей задачи? Первым делом смотрим на напряжение открытия транзистора (как читать график в даташите – см. видео урок ниже), 100% подойдёт транзистор с пометкой Logic Level в описании или даташите: такие мосфеты точно будут работать на полную катушку от пина МК. Само собой ток и напряжение должны соответствовать (взяты с запасом) для нагрузки, которую будет коммутировать мосфет. Есть ещё параметр сопротивление открытого канала, на этом сопротивлении будет падать напряжение и превращаться в тепло. Для мощных нагрузок нужно рассматривать полевики с низким сопротивлением канала, чтобы сильно не грелись. Приведу свой список мосфетов в двух основных корпусах: выводной to220 и dpack для поверхностного монтажа, в нём “Ток при 3V” и “Ток при 5V” означает максимальный ток через транзистор (на нагрузку) в Амперах при управлении логическим сигналом 3 и 5 Вольт. Максимальное напряжение для нагрузки смотрите у конкретного транзистора, но у всех оно выше 24V. “R” – сопротивление открытого канала в миллиомах (10^-3 Ом). Также полевики отсортированы по увеличению цены в российских магазинах =) 

Корпус to220
Маркировка R, мОм Ток при 3V Ток при 5V
IRF3704ZPBF 7.9 10 120
IRLB8743PBF 3.2 20 >100
IRL2203NPBF 7 30 >100
IRLB8748PBF 4.8 10 >100
IRL8113PBF 6 40 >100
IRL3803PBF 6 20 >100
IRLB3813PBF 1.95 20 >100
IRL3502PBF 7 >100 >100
IRL2505PBF 8 20 >100
IRF3711PBF 6 80 >100
IRL3713PBF 3 20 >100
IRF3709ZPBF 6.3 40 >100
AUIRL3705N 6.5 20 >100
IRLB3034PBF 1.7 >100 >100
IRF3711ZPBF 6 20 >100
Корпус dpak
Маркировка R, мОм Ток при 3V Ток при 5V
STD17NF03LT4 50 5 40
IRLR024NPBF 65 4 20
IRLR024NPBF 40 5 40
IRLR8726PBF 6 10 110
IRFR1205PBF 27 10
IRFR4105PBF 45 10
IRLR7807ZPBF 12 10 100
IRFR024NPBF 75 8
IRLR7821TRPBF 10 11 100
STD60N3LH5 8 30 160
IRLR3103TRPBF 19 11 100
IRLR8113TRPBF 6 40 110
IRLR8256PBF 6 10 110
IRLR2905ZPBF 13 100
IRLR2905PBF 27 20 90

Для слаботочных цепей мне нравится использовать полевик 2n7000 (купить мешок) – тянет до 400 мА. Корпус – компактный выводной to-92. Также у друзей-китайцев есть удобные готовые модули с мосфетами и всей необходимой обвязкой:

blank

Ну и самый важный момент: на полевой транзистор можно подавать ШИМ сигнал для “плавного” управления нагрузкой: плавно менять скорость вращения мотора, яркость светодиодной ленты, мощность обогревателя и прочее прочее!

Внимание! При управлении индуктивной нагрузкой (клапан, мотор, электромагнит, соленоид) обязательно нужен диод! См. последнюю главу.

Твердотельное реле (SSR DC)


Более простой вариант – твердотельное реле (Solid State Relay, SSR) для постоянного тока (DC), найти можно на том же Aliexpress по запросу SSR DC. Внимательно смотрим на маркировку: под выходными клеммами должно быть написано VDC, т.е. постоянное напряжение. Твердотельное реле имеет стандартный корпус для моделей постоянного и переменного тока, поэтому нужно читать что написано и не перепутать. Также в маркировке после слова SSR обычно указан ток в Амперах, т.е. SSR-25 это реле на 25 Ампер. Максимальное напряжение указано под выходными клеммами.

blank

Твердотельное реле подключается напрямую к Arduino, пин “-” к GND, “+” к любому цифровому пину. Выход реле ставится в разрыв цепи питания нагрузки, как выключатель. Важно не перепутать плюс и минус, потому что внутри реле представляет собой полевой транзистор на радиаторе =)

blank

Внимание! При управлении индуктивной нагрузкой (клапан, мотор, электромагнит, соленоид) обязательно нужен диод! См. последнюю главу.

Переменный ток

Симистор как вкл/выкл


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

blank

Для управления нагрузкой только в режиме вкл/выкл желательно ставить оптопару с детектором нуля (например MOC306x), она будет сама отключать и включать нагрузку только в моменты перехода напряжения в сети через 0, что сильно уменьшает помехи в сети. Также здесь стоят резисторы: 220 Ом – для ограничения тока на светодиод оптопары (смотри характеристики оптопары, как подбирать резистор я писал выше). И резистор между оптопарой и симистором: 220-470 Ом с мощностью 1-2 Вт (будет греться). Симистор нужно брать с хорошим запасом по току, чтобы меньше грелся. Также симисторы бывают серии BTA и BTB, у BTA корпус (металлическая часть) изолирован и рекомендуется брать именно их, чтобы не шарахало током от радиатора. Распиновка компонентов:

blank

У китайцев есть готовые модули с симистором и всей обвязкой. Кстати да, симистор греется под нагрузкой! Наличие радиатора обязательно, начиная с 200 Ватт.

Симистор как диммер


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

Для этой схемы нужна оптопара без детектора нуля, например серии MOC302x. Схема такой поделки может выглядеть вот так:

blank

Резисторы 51к обязательно мощные, так как на них будет выделяться 1 Ватт: гасим лишнее напряжение, чтобы не сжечь светодиод оптопары детектора нуля. Также готовый модуль можно купить на Али. Выглядит он вот так и имеет пины питания, пин контроля симистора и вывод детектора нуля. Как со всем этим работать – смотрите видос ниже:

Где-то существует китайская библиотека для управления таким модулем, но она мне не очень понравилась. Привожу два примера для ручного управления таким диммером на базе библиотеки GyverTimers: одноканальный и многоканальный. В многоканальном режиме достаточно подключить к Ардуино выход детектора нуля только с одного модуля, а вот управляющие пины уже указать в скетче. Рассмотренные ниже примеры можно чуть оптимизировать, заменив digitalWrite() на быстрый аналог.

Скрытый текст
// пример диммера на симисторе с внешним детектором нуля
// или готовый китайский модуль https://ali.ski/xwpCCe
// одноканальный диммер без таймера, работает на пропуске
// полуволн синусоиды по прерываниям с детектора нуля
// подходит для моторов и обогревателей, лампы мерцают жутко!
// Алгоритм Брезенхема https://habr.com/ru/post/254719/
// диммер принимает значения 0-255
// переключения оптимизированы

#define ZERO_PIN 2    // пин детектора нуля
#define INT_NUM 0     // соответствующий ему номер прерывания
#define DIMMER_PIN 4  // управляющий пин симистора
int dimmer;           // переменная диммера

void setup() {
  pinMode(ZERO_PIN, INPUT_PULLUP);
  pinMode(DIMMER_PIN, OUTPUT);
  digitalWrite(DIMMER_PIN, LOW);
  attachInterrupt(INT_NUM, isr, FALLING);  // для самодельной схемы ставь RISING!
}

void loop() {
  // задаём значение 0-255
  dimmer = map(analogRead(A0), 0, 1023, 0, 255);
  delay(100); // в реальном коде задержек быть не должно
}

// прерывание детектора нуля
void isr() {
  static byte count, last, lastVal;
  int val = ((uint16_t)++count * dimmer) >> 9;
  if (lastVal != (val != last)) digitalWrite(DIMMER_PIN, val != last);
  lastVal = (val != last);
  last = val;
}
Многоканальный НЕ плавный
// пример диммера на симисторе с внешним детектором нуля
// или готовый китайский модуль https://ali.ski/xwpCCe
// многоканальный  диммер без таймера, работает на пропуске
// полуволн синусоиды по прерываниям с детектора нуля
// подходит для моторов и обогревателей, лампы мерцают жутко!
// Алгоритм Брезенхема https://habr.com/ru/post/254719/
// диммер принимает значения 0-255
// включения выключения оптимизированы

#define ZERO_PIN 2    // пин детектора нуля
#define INT_NUM 0     // соответствующий ему номер прерывания
#define DIM_AMOUNT 3  // количество диммеров
const byte dimPins[] = {3, 4, 5}; // их пины
int dimmer[DIM_AMOUNT]; // переменная диммеров

void setup() {
  pinMode(ZERO_PIN, INPUT_PULLUP);
  for (byte i = 0; i < DIM_AMOUNT; i++) pinMode(dimPins[i], OUTPUT);  
  attachInterrupt(INT_NUM, isr, FALLING);  // для самодельной схемы ставь RISING!
}

void loop() {
  // задаём значение 0-255
  dimmer[0] = 50;
  dimmer[1] = 120;
  dimmer[2] = 190;
  delay(100); // в реальном коде задержек быть не должно
}

// прерывание детектора нуля
void isr() {
  static byte count, last[DIM_AMOUNT], lastState[DIM_AMOUNT];
  count++;
  for (byte i = 0; i < DIM_AMOUNT; i++) {
    int val = ((uint16_t)++count * dimmer) >> 9;
    if (lastState[i] != (val != last[i])) digitalWrite(dimPins[i], val != last[i]);
    lastState[i] = (val != last[i]);
    last[i] = val;
  }
}
Одноканальный плавный
// пример диммера на симисторе с внешним детектором нуля
// или готовый китайский модуль https://ali.ski/xwpCCe
// используется библиотека GyverTimers (минимум версия 1.5)
// по аналогии можно сделать диммер на любом таймере ардуино
// в том числе любом из 6-ти таймеров для Mega
// вызов setPeriod оптимизирован

#define ZERO_PIN 2    // пин детектора нуля
#define INT_NUM 0     // соответствующий ему номер прерывания
#define DIMMER_PIN 4  // управляющий пин симистора

#include <GyverTimers.h>  // библиотека таймера
int dimmer;               // переменная диммера

void setup() {
  pinMode(ZERO_PIN, INPUT_PULLUP);
  pinMode(DIMMER_PIN, OUTPUT);
  attachInterrupt(INT_NUM, isr, RISING);  // для самодельной схемы ставь FALLING
  Timer2.enableISR();
}

void loop() {
  // задаём значение 500-9300, где 500 максимум мощности, 9300 минимум!!!
  // и 500-7600 для 60 Гц в сети
  dimmer = map(analogRead(A0), 0, 1024, 500, 9300);
  delay(100); // в реальном коде задержек быть не должно
}

// прерывание детектора нуля
void isr() {
  static int lastDim;
  digitalWrite(DIMMER_PIN, 0);  // выключаем симистор
  // если значение изменилось, устанавливаем новый период
  // если нет, то просто перезапускаем со старым
  if (lastDim != dimmer) Timer2.setPeriod(lastDim = dimmer);
  else Timer2.restart();
}

// прерывание таймера
ISR(TIMER2_A) {
  digitalWrite(DIMMER_PIN, 1);  // включаем симистор
  Timer2.stop();                // останавливаем таймер
}
Скрытый текст
// пример диммера на симисторе с внешним детектором нуля
// или готовый китайский модуль https://ali.ski/xwpCCe
// используется библиотека GyverTimers (минимум версия 1.5)
// по аналогии можно сделать диммер на любом таймере ардуино
// в том числе любом из 6-ти таймеров для Mega
// многоканальный диммер. Тут пример с разрешением 256 (значения 0-255)

#define ZERO_PIN 2    // пин детектора нуля
#define INT_NUM 0     // соответствующий ему номер прерывания
#define DIM_AMOUNT 3  // количество диммеров
const byte dimPins[] = {3, 4, 5}; // их пины

#include <GyverTimers.h>    // библиотека таймера
int dimmer[DIM_AMOUNT];     // переменная диммера
volatile int counter = 0;   // счётчик цикла

void setup() {
  pinMode(ZERO_PIN, INPUT_PULLUP);
  for (byte i = 0; i < DIM_AMOUNT; i++) pinMode(dimPins[i], OUTPUT);
  attachInterrupt(INT_NUM, isr, FALLING); // для самодельной схемы ставь RISING
  Timer2.enableISR();

  // 37 мкс - период прерываний для 255 шагов и 50 Гц
  // для 60 Гц ставь число 31
  Timer2.setPeriod(37); 
  Serial.begin(9600);
}
void loop() {
  // задаём значение
  //dimmer[0] = map(analogRead(A0), 0, 1023, 0, 9500);
  dimmer[0] = 50;
  dimmer[1] = 120;
  dimmer[2] = 190;
  delay(100); // в реальном коде задержек быть не должно
}

// прерывание детектора нуля
void isr() {
  counter = 255;
  Timer2.restart();
}

// прерывание таймера
ISR(TIMER2_A) {
  for (byte i = 0; i < DIM_AMOUNT; i++) {
    if (counter == dimmer[i]) digitalWrite(dimPins[i], 1);  // на текущем тике включаем
    else if (counter == dimmer[i] - 1) digitalWrite(dimPins[i], 0);  // на следующем выключаем
  }
  counter--;
}

Обновление! Я обернул эти алгоритмы в класс, библиотека GyverDimmer. Описание и примеры смотри на GitHub.

Твердотельное реле (SSR AC)


Твердотельное реле для переменного тока (купить SSR AC) выглядит и подключается точно так же, как твердотельное для постоянного. Единственное отличие в том, что нет полярности:

blank

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

Такие модули бывают низкого и высокого уровня (High/Low level trigger), подключаются точно так же как модули реле: к питанию GND-VCC и отдельно пин на управление. Сами SSRки здесь стоят маленькие и слабые: всего 2А (в районе 500 Ватт). Но для управления например освещением этого более чем достаточно. При помощи реле можно плавно управлять сильно инерционной нагрузкой, такой как большой обогреватель. Для этого нужно использовать сверхнизкочастотный ШИМ сигнал, у меня есть готовая библиотека.

Комбинированный способ


Электромагнитное реле и симистор (твердотельное реле) имеют недостатки при работе с большими токами, которые взаимно устраняются:

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

Существует отличная идея комбинирования этих двух устройств для коммутации мощных цепей: симистор (или SSR) ставится параллельно электромагнитному реле. Сначала цепь замыкается симистором, затем через несколько миллисекунд замыкается реле. Всё, симистор можно отключать, ток будет идти через реле. Для отключения нагрузки снова активируем симистор, отключаем ЭМ реле, и через несколько миллисекунд выключаем симистр. Бинго! Если коммутацией управляет микроконтроллер, реализовать такую схему – как два пина обозвать =) Про реализацию аналоговой схемы (без МК) можно почитать на Хабре.

Плавное управление (SSR LA)


Есть ещё один вариант плавного управления нагрузкой переменного тока: твердотельное реле со встроенным фазовым управлением и токовым входом, называется оно SSR LA. Нужно брать реле, у которого входное сопротивление в районе 250 Ом, чтобы можно было подавать на него 0-5 Вольт и получить заветные 0-20 мА. Я брал вот такие, работают отлично. Чтобы подать с Arduino 0-5 Вольт нам понадобится ШИМ и RC цепь (ссылка на проект симуляции в EasyEDA), на схеме это будет выглядеть вот так:

// Простой пример, в котором также подключен потенциометр на A0
void setup() {
  pinMode(3, OUTPUT);
  // https://alexgyver.ru/lessons/pwm-overclock/
  // Пины D3 и D11 - 8 кГц
  TCCR2B = 0b00000010;  // x8
  TCCR2A = 0b00000011;  // fast pwm
}

void loop() {
  analogWrite(3, analogRead(0) / 4);
  delay(10);
}

Защита от помех DC

Раздельное питание


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

Искрогасящие цепи DC


При размыкании контактов в цепи питания индуктивной нагрузки происходит так называемый индуктивный выброс, который резко подбрасывает напряжение в цепи вплоть до того, что между контактами реле или выключателя может проскочить электрическая дуга (искра). В дуге нет ничего хорошего – она выжигает частички металла контактов, из за чего они изнашиваются и со временем приходят в негодность. Также такой скачок в цепи провоцирует электромагнитный выброс, который может навести в электронном устройстве сильные помехи и привести к сбоям или даже поломке! Самое опасное, что индуктивной нагрузкой может являться сам провод: вы наверняка видели, как искрит обычный выключатель света в комнате. Лампочка – не индуктивная нагрузка, но идущий к ней провод имеет индуктивность. Для защиты от выбросов ЭДС самоиндукции в цепи постоянного тока используют обыкновенный диод, установленный встречно-параллельно нагрузке и максимально близко к ней. Диод просто закоротит на себя выброс, и все дела:

blank

Где VD – защитный диод, U1 – выключатель (транзистор, реле), а R и L схематично олицетворяют индуктивную нагрузку. Диод нужно ОБЯЗАТЕЛЬНО ставить при управлении индуктивной нагрузкой (электромотор, соленоид, клапан, электромагнит, катушка реле) при помощи транзистора, то есть вот так:

blank

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

Фильтры


Если силовая часть питается от одного источника с микроконтроллером, то помехи по питанию неизбежны. Простейший способ защитить МК от таких помех – конденсаторы по питанию как можно ближе к МК: электролит 6.3V 470 uF (мкФ) и керамический на 0.1-1 мкФ, они сгладят короткие просадки напряжения. Кстати, электролит с низким ESR справится с такой задачей максимально качественно.

blank

Ещё лучше с фильтрацией помех справится LC фильтр, состоящий из индуктивности и конденсатора. Индуктивность нужно брать с номиналом в районе 100-300 мкГн и с током насыщения больше, чем ток нагрузки после фильтра. Конденсатор – электролит с ёмкостью 100-1000 uF в зависимости опять же от тока потребления нагрузки после фильтра. Подключается вот так, чем ближе к нагрузке – тем лучше:

Подробнее о расчёте фильтров можно почитать здесь.

Защита от помех AC

Момент выключения


Напряжение в сети является синусоидой, которая 100 раз в секунду пересекает значение 0. Если выключить нагрузку в тот момент, когда напряжение в сети равно нулю – это сильно уменьшит выброс. Для этих целей проще всего использовать твердотельные реле (SSR) с детектором нуля (Zero-Crossing Detector): такие реле сами отключают и включают нагрузку в нужный момент. Детектор нуля есть почти во всех моделях SSR, но лучше уточнить в документации. Для самодельных симисторных ключей, работающих в режиме вкл/выкл (без диммирования) рекомендуется ставить управляющую оптопару с детектором нуля: она тоже будет включать и выключать нагрузку в лучший для этого момент, то есть в ближайшем нуле.

Искрогасящие цепи AC


Выбросы ЭДС после отключения нагрузки присутствуют также и в цепях переменного тока, особенно если нагрузка может быть выключена в случайный момент времени. Выброс напряжения может проявляться искрой между контактами в момент отключения нагрузки, что плохо для контактов и опасно в целом. Для гашения этих выбросов используются снабберные цепи из резистора и конденсатора. Теорию по расчёту искрогасящих цепей для переменного тока можно посмотреть вот в этой статье, а для большинства применений подойдёт резистор 39 Ом 0.5 Вт и конденсатор 0.1 мкФ 400V, установленные вот по такой схеме:

blank

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

Важные страницы


  • Набор GyverKIT – большой стартовый набор Arduino моей разработки, продаётся в России
  • Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с AliExpress у проверенных продавцов
  • Подборка библиотек для Arduino, самых интересных и полезных, официальных и не очень
  • Полная документация по языку Ардуино, все встроенные функции и макро, все доступные типы данных
  • Сборник полезных алгоритмов для написания скетчей: структура кода, таймеры, фильтры, парсинг данных
  • Видео уроки по программированию Arduino с канала “Заметки Ардуинщика” – одни из самых подробных в рунете
  • Поддержать автора за работу над уроками
  • Обратная связь – сообщить об ошибке в уроке или предложить дополнение по тексту (alex@alexgyver.ru)
Назад Работа с кнопками
Вперёд Светодиоды и ленты
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии