Обычный диодный выпрямитель отдаёт в нагрузку всё, что приходит из сети, и никак не регулируется. Стоит заменить диод тиристором и поручить Arduino момент открывания — и получается силовой узел, которым можно плавно управлять прямо с потенциометра.
Принцип работы
Тиристор (SCR, Silicon Controlled Rectifier) — трёхвыводной прибор с четырёхслойной структурой из чередующихся областей p- и n-типа. Выводы анода (A) и катода (K) включаются последовательно с нагрузкой, а третий вывод — управляющий электрод (Gate) — служит для управления прибором. По сути это тот же диод, только с разрешением на открывание.
В однополупериодной схеме напряжением на нагрузке управляет единственный тиристор. Он переходит в проводящее состояние (ON) при выполнении двух условий сразу: напряжение Vt на нём положительно (Vt > 0) и на управляющий электрод подан отпирающий импульс тока Ig. Регулировка сводится к задержке этого импульса на угол «альфа», который отсчитывается от точки перехода сетевого напряжения Vs через ноль. При чисто активной нагрузке ток id повторяет форму напряжения на нагрузке. Закрывается тиристор (состояние OFF) сам, когда напряжение на нагрузке, а вслед за ним и ток, пытаются уйти в отрицательную область.
Схема устройства
Все выводы «земли» в схеме соединены вместе.
Нажмите для увеличения (1650x1225)
На вход подаётся переменное напряжение 220 В/230 В 50 Гц прямо из бытовой розетки. Фазный провод идёт на анод тиристора T1, нулевой — напрямую на нагрузку. Катод тиристора подключён непосредственно к нагрузке. Нагрузка может быть как чисто активной (например, лампа), так и индуктивной (двигатель); в авторском варианте это простая лампа мощностью 40 Вт, то есть чисто активная нагрузка. В качестве T1 применён тиристор TYN1225.
Трансформатор TR1 — импульсный трансформатор, нужный исключительно для отпирания тиристора. Полное обозначение — KMB472/101 (KMB472-101) производства YHDC. Он рассчитан на напряжение 8 В, поэтому питание для него формирует стабилизатор LM7808, получающий 12 В от внешнего источника и выдающий стабилизированные 8 В. Подключён KMB472-101 к выходу LM7808 через резистор сопротивлением 1 Ом.
Диоды D1 и D2 — обычные, подойдут 1N4007 или 1N4148. Транзистор Q1 — NPN, например KSC2383 или аналогичный; в реальном макете использован именно KSC2383. База Q1 соединена с выводом 9 Arduino через резистор 1 кОм — этот транзистор и раскачивает первичную обмотку импульсного трансформатора.
⚠️ Внимание: схема работает под сетевым напряжением. Автор не даёт никаких гарантий, всё делается на собственный риск.
Детектор перехода через ноль и задание угла
Чтобы знать, откуда отсчитывать задержку, нужен детектор нуля. Здесь его роль играет сдвоенный компаратор LM393. Для той же цели можно применить оптрон, но компаратор даёт более точный момент перехода через ноль. Два диода 1N4007, включённые между неинвертирующим (+) и инвертирующим (-) входами компаратора, ограничивают напряжение между этими выводами. Выход LM393 (или LM339) — с открытым коллектором, поэтому добавлен подтягивающий резистор 4,7 кОм между +5 В и выводом 2 Arduino. Питание +5 В на микросхему компаратора берётся с платы Arduino.
Неинвертирующий вход подключён к фазе сети 220 В через четыре последовательных резистора по 220 кОм (суммарно 880 кОм), инвертирующий — точно так же, но к нулевому проводу, через четыре резистора по 220 кОм.
Угол отпирания «альфа» задаётся переменным резистором 10 кОм, выход которого заведён на аналоговый вход Arduino A0.
Как считается угол в программе
Частота сети 50 Гц означает период 20 мс, то есть один полупериод длится 10 мс. Отсюда соответствие углов и задержек:
- 0° — 0 мс;
- 45° — 2,5 мс (2500 мкс);
- 90° — 5 мс (5000 мкс);
- 135° — 7,5 мс (7500 мкс);
- 180° — полная ширина полупериода, 10 мс (10000 мкс).
Для сети 60 Гц период равен 16,67 мс, а полупериод — 8,33 мс, так что угол 90° там соответствует 4,167 мс (4167 мкс).
АЦП микроконтроллера ATmega328P платы Arduino Uno имеет разрешение 10 бит, то есть результат преобразования лежит в диапазоне от 0 до 1023. После чтения аналогового канала 0 угол «альфа» всегда оказывается в пределах от 0 до 9500 микросекунд:
alpha = (1023 - analogRead(pot)) * 10;
if(alpha > 9500)
alpha = 9500;
Выход компаратора LM393 заведён на цифровой вывод 2 Arduino — это вход аппаратного внешнего прерывания. При любом изменении состояния этого вывода (с высокого на низкий или наоборот) микроконтроллер прерывается и сразу выполняет функцию ZC_detect(). Прерывание разрешается строкой:
attachInterrupt(0, ZC_detect, CHANGE); // enable external interrupt (INT0)
Отпирается тиристор пачкой импульсов (ШИМ-сигналом), которую формирует модуль Timer1 на выводе 9 с частотой 3,9375 кГц. Скважность задана так, что получается импульс длительностью около 50 мкс — именно это требуется импульсному трансформатору YHDC KMB472-101:
// PWM configuration
OCR1A = 50; // set PWM duty cycle (about 50µs pulse, pin 9)
TCCR1B = 0x02; // set Timer1 clock to CLKio/8 (get PWM frequency of 3.9375 kHz)
ШИМ на выводе 9 включается записью TCCR1A = 0x81 и выключается записью TCCR1A = 0.
Скетч
/*************************************************************************
*
* Half wave controlled rectifier with Arduino.
* This is a free software with NO WARRANTY.
* https://simple-circuit.com/
*
************************************************************************/
#define pot A0
bool ZC = 0;
uint16_t alpha;
void setup(void)
{
pinMode(9, OUTPUT); // configure pin 9 as output
digitalWrite(9, LOW);
// PWM configuration
OCR1A = 50; // set PWM duty cycle (about 50µs pulse, pin 9)
TCCR1B = 0x02; // set Timer1 clock to CLKio/8 (get PWM frequency of 3.9375 kHz)
TCCR1A = 0;
attachInterrupt(0, ZC_detect, CHANGE); // enable external interrupt (INT0)
}
// pin 2 debounce function
bool debounce()
{
byte count = 0;
for(byte i = 0; i < 5; i++)
{
if(digitalRead(2))
count++;
delayMicroseconds(5);
}
if(count > 3)
return 1;
return 0;
}
void ZC_detect()
{
TCCR1A = 0; // turn off PWM (pins 9 & 10)
digitalWrite(9, LOW);
if(debounce())
ZC = 1;
}
// main loop
void loop()
{
if(ZC)
{
if(alpha < 9500)
{
delayMicroseconds(alpha);
TCCR1A = 0x81;
}
ZC = 0;
alpha = (1023 - analogRead(pot)) * 10;
if(alpha > 9500)
alpha = 9500;
}
}
// end of code.
Осциллограммы на нагрузке
Ниже — форма напряжения на нагрузке при питании от сети 220 В переменного тока 50 Гц и лампе на 40 Вт. Первый результат снят при угле отпирания 0 градусов (0 мкс):
Нажмите для увеличения (1147x612)
Второй — при альфа = 45° (2500 мкс):
Нажмите для увеличения (1147x612)
Третий — при альфа = 90° (5000 мкс):
Нажмите для увеличения (1147x612)
И последний — при альфа = 135° (7500 мкс):
Нажмите для увеличения (1147x612)
Хорошо видно, как с ростом угла от полупериода «отрезается» всё большая часть, а вместе с ней падает и отдаваемая в нагрузку мощность.
Источник теоретической части: Power Electronics Handbook, Muhammad H. Rashid.
Похожие материалы на сайте
Файлы проекта