Диммер переменного тока

sintaz
Offline
Зарегистрирован: 22.12.2018

Здравствуйте, решил собрать диммер, и испытать на лампочке. 

Схема и код отсюда: https://github.com/AlexGyver/AC_Dimmer/blob/master/README.md

Вот только за неимением в наличии компоментов пришлось ставить что нашлось. В итоге вместо pc814 стоит pc817. Опторазвязка на диммировании отсутствует. Управляется симистор напрямую с пина arduino. 

Вроде бы все работает, регулируется, но лампочка очень сильно моргает, когда яркость выше 50%.

Есть ли способ победить это, не меняя существующие компоненты?

/*
   Диммер переменки на Arduino. Симистор через оптопару
   подключен к 4 пину, детектор нуля ко 2 пину.
   Переменная Dimmer - величина диммирования, от 0 до 255
   В этом коде на пин А0 подключен потенциометр для управления яркостью
   Также можно вводить число для переменной Dimmer через
   монитор порта, для этого в лупе надо раскомментировать код
*/

#define dimPin 4
#define zeroPin 2
#include <CyberLib.h> // шустрая библиотека для таймера
volatile int tic, Dimmer;

void setup() {
  Serial.begin(9600);
  pinMode(dimPin, OUTPUT);
  digitalWrite(dimPin, 0);
  pinMode(zeroPin, INPUT);                 // настраиваем порт на вход для отслеживания прохождения сигнала через ноль
  attachInterrupt(0, detect_up, FALLING);  // настроить срабатывание прерывания interrupt0 на pin 2 на низкий уровень

  StartTimer1(timer_interrupt, 40);        // время для одного разряда ШИМ
  StopTimer1();                            // остановить таймер

  Serial.println("Start");
}

void loop() {

  // раскомментировать для ввода числа диммирования чеерез монитор порта (0 - 255)
  if (Serial.available()) {
    Dimmer = Serial.parseInt();
    Serial.println(Dimmer);
  }
  
  // раскомментировать для управления потенциометром (аналоговый А0)
  // Dimmer = map(analogRead(0), 0, 1023, 240, 0);
}

//----------------------ОБРАБОТЧИКИ ПРЕРЫВАНИЙ--------------------------
void timer_interrupt() {       // прерывания таймера срабатывают каждые 40 мкс
  tic++;                       // счетчик
  if (tic > Dimmer)            // если настало время включать ток
    digitalWrite(dimPin, 1);   // врубить ток
}

void  detect_up() {    // обработка внешнего прерывания на пересекание нуля снизу
  tic = 0;                                  // обнулить счетчик
  ResumeTimer1();                           // перезапустить таймер
  attachInterrupt(0, detect_down, RISING);  // перенастроить прерывание
}

void  detect_down() {  // обработка внешнего прерывания на пересекание нуля сверху
  tic = 0;                                  // обнулить счетчик
  StopTimer1();                             // остановить таймер
  digitalWrite(dimPin, 0);                  // вырубить ток
  attachInterrupt(0, detect_up, FALLING);   // перенастроить прерывание
}
//----------------------ОБРАБОТЧИКИ ПРЕРЫВАНИЙ

Green
Онлайн
Зарегистрирован: 01.10.2015

Если ПК ещё не сгорел, то найдите отличие 814 от 817. Подумайте.

bwn
Offline
Зарегистрирован: 25.08.2014

Green пишет:

Если ПК ещё не сгорел, то найдите отличие 814 от 817. Подумайте.

Что то здесь другое. А вот что, понять не могу. Та же схема и с этим же обработчиком, на 4N25 работает корректно. 4N25 по схемотехнике ничем от 817 не отличается????????

То ТС, я понимаю, когда опасные для жизни цепи упрощали в советском союзе, там деталей было хрен найдешь. А вот зачем сейчас? Или считаете, что ваша шкура и ваших близких, не стоит пяти рублей?

Green
Онлайн
Зарегистрирован: 01.10.2015

Как раз с 4N25 тоже должен моргать.) Потому что по логике программы, зажегся один светодиод в начале полупериода - включили симистор (с задержкой по таймеру), погас светодиод - выключили симистор (кстати, это лишнее, т.к. симистор и сам выключится в нуле). А что со вторым полупериодом будем делать? Не видим мы его в упор без второго оптотранзистора! Или сдвоенного, как в 814.

bwn
Offline
Зарегистрирован: 25.08.2014

Все, виноват, давно делал. Там мостик стоит.((((

Green
Онлайн
Зарегистрирован: 01.10.2015

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

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

купи моську 63-ю и забуть все трудности как страшный сон

ПыСы.  НЕ СЛУШАЙ МЕНЯ. Я всё перепутал.

bwn
Offline
Зарегистрирован: 25.08.2014

Дида, злобный аднака, в диммер зерогросс предлагать.)))

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Green пишет:

Если ПК ещё не сгорел, то найдите отличие 814 от 817. Подумайте.

814-тый как нуль детектор выделит оба полупериода,
а 817-тый через один.

Ну и с какого хрена у вас всё должно сгореть?

А вот моргание как раз от того что нуль через один пермод детектится.
Поставить мостик на входе опторона - он всё и поправит.

 

Green
Онлайн
Зарегистрирован: 01.10.2015

trembo пишет:

Ну и с какого хрена у вас всё должно сгореть?

Читайте с начала.  Управляется симистор напрямую с пина arduino.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Green пишет:

trembo пишет:

Ну и с какого хрена у вас всё должно сгореть?

Читайте с начала.  Управляется симистор напрямую с пина arduino.

Нигде не сказано где он берёт питание.

 

sintaz
Offline
Зарегистрирован: 22.12.2018

Дико извиняюсь,, всю ночь долбался. Детектор нуля по другой схеме собрал, через резистор 82к 1w  напруга идет на мостик kbl06, с него уже на оптрон.

 

 

sintaz
Offline
Зарегистрирован: 22.12.2018

На счет безопасности, ардуина от телефонной зарядки работает. Максимум это она сгорит и автомат сработает. 

На счет экономии. Нет в городе магазинов с радиодеталями. Вот пока с али жду решил по эксперементировать

bwn
Offline
Зарегистрирован: 25.08.2014

sintaz пишет:

Дико извиняюсь,, всю ночь долбался. Детектор нуля по другой схеме собрал, через резистор 82к 1w  напруга идет на мостик kbl06, с него уже на оптрон.

С этой должно нормально работать.

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

bwn пишет:

Дида, злобный аднака, в диммер зерогросс предлагать.)))

ТОЧНО!!! Я спьяну забыл, я не ланпы диммировал моськой, а вентилятор в вытяжке.  Ланпа еще больше будет от моськи мерцать.  Спасибо, что поправил

sintaz
Offline
Зарегистрирован: 22.12.2018

bwn пишет:

С этой должно нормально работать.

 

Вот и я не пойму, что не так. 

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

Читал, что на общую сеть помехи могут идти. От лампочки ничего не было.

bwn
Offline
Зарегистрирован: 25.08.2014

Диммер, не совсем подходящая вещь для регулировки асинхронных двигателей. ИМХО.

AlexanderNO
Offline
Зарегистрирован: 08.11.2018
sintaz
Offline
Зарегистрирован: 22.12.2018

Вообщем заказал детали, а пока возник другой вопрос.

sintaz пишет:

Дико извиняюсь,, всю ночь долбался. Детектор нуля по другой схеме собрал, через резистор 82к 1w  напруга идет на мостик kbl06, с него уже на оптрон.

 

 


Почему у меня оптрон не сгорел? С диодного моста выходит 178вольт. Только сейчас задумался.

Green
Онлайн
Зарегистрирован: 01.10.2015

Без оптрона должно быть поболее.) Не сгорел из за R3. Срочно вспоминаем закон Ома (особенно, если не знал).)

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Для светодиодов критичным является протекающий ток. Если ограничить его правильно подобранным резистором, то ничего не сгорит.

tsv_33
Offline
Зарегистрирован: 11.04.2019

sintaz пишет:

...Управляется симистор напрямую с пина arduino.

Вроде бы все работает, регулируется, но лампочка очень сильно моргает, когда яркость выше 50%.

Есть ли способ победить это, не меняя существующие компоненты?

Полагаю, что нет. Посмотрите даташиты на BTA и BT для сравнения. Замените BTA на BT в случае без MOC.

sintaz
Offline
Зарегистрирован: 22.12.2018

Всем снова здравствуйте. Пришли мне детали с али, чтоб собирать по схеме в первом посте. Только злобный китаец прислал вместо pc814 el814.
С el814 вообще никак не работает. По даташиту разницы между ними не заметил, хотя может что то упустил.

bwn
Offline
Зарегистрирован: 25.08.2014

Должно работать. Проверяйте детали и монтаж.

sintaz
Offline
Зарегистрирован: 22.12.2018

Всю голову сломал уже. Симистор рабочий, детектор нуля тоже вроде работает.

Такой код заливаю, нули в мониторе приходят. 

void setup()
{
  Serial.begin(9600);
  attachInterrupt(0, zero_crosss_int, RISING); 
}

void zero_crosss_int()                         
{
   Serial.println("0");
}

void loop()
{

}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Где-то pinMode(interruptPin, ...) потеряли, если что.

Green
Онлайн
Зарегистрирован: 01.10.2015

sadman41 пишет:

Где-то pinMode(interruptPin, ...) потеряли, если что.

Та не, там обычный вход по умолчанию.

sintaz
Offline
Зарегистрирован: 22.12.2018

Похоже нашел в чем проблема. Не срабатывает moc2021.
Что то ума не хватает, как его проверить. На контакт N1 подаю 5v через резистор 220ом.
На контакт N2 - gnd.
Контакты 4 и 6 должны начать звониться тестером, или на них тоже надо напряжение подать?
Знаю, что вопрос наверное детский, но все же.

SLKH
Offline
Зарегистрирован: 17.08.2015

sintaz пишет:
Похоже нашел в чем проблема. Не срабатывает moc2021. Что то ума не хватает, как его проверить. На контакт N1 подаю 5v через резистор 220ом. На контакт N2 - gnd. Контакты 4 и 6 должны начать звониться тестером, или на них тоже надо напряжение подать? Знаю, что вопрос наверное детский, но все же.

тестеры разные бывают; возможно, твой слишком деликатный и измерительного напряжения/тока не хватает для срабатывания тиристора. 

sintaz
Offline
Зарегистрирован: 22.12.2018

Всё оказалось просто. 3 из 10 moc3021 не рабочие пришли.

Blackhock
Offline
Зарегистрирован: 09.02.2018

На МЕГА ошибка компиляции, видимо библиотека для МЕГИ недоработана.

bwn
Offline
Зарегистрирован: 25.08.2014

Blackhock пишет:
На МЕГА ошибка компиляции, видимо библиотека для МЕГИ недоработана.

А она для 2560 никогда и не заявлялась.