Jump to content
Nick  Iskrov

Диммер не работает под нагрузкой: MOC3052, PC814, BT139, arduino

Recommended Posts

Здравствуйте, форумчане!

Прошу у вас помощи разобраться в проблеме с диммером лампы накаливания на основе фазового управления.

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

При подключении лампы, напряжение на нагрузке = 0. Во всем диапазоне. Лампа загорается на 100% только когда фаза = 0. При всех остальных значениях фазы, напряжение на нагрузке = 0.

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

Код ардуинки:

#include <CyberLib.h> //Библиотека от Cyber-Place.ru
volatile uint8_t tic, Dimmer1;
uint8_t data;
int i;

void setup() 
{ 
  D4_Out; //Настраиваем порты на выход
  D4_Low; //установить на выходах низкий уровень сигнала
  D2_In; //настраиваем порт на вход для отслеживания прохождения сигнала через ноль  
    attachInterrupt(0, detect_up, LOW);  // настроить срабатывание прерывания interrupt0 на pin 2 на низкий уровень
    StartTimer1(halfcycle, 40); //время для одного разряда ШИМ
    StopTimer1(); //остановить таймер
    UART_Init(115200); //инициализация порта
}
//********************обработчики прерываний*******************************
void halfcycle()  //прерывания таймера
{ 
  tic++;  //счетчик  
  if(Dimmer1 < tic ) D4_High; //управляем выходом
}

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

void  detect_down()  // обработка внешнего прерывания. Сработает по заднему фронту
{   
 StopTimer1(); //остановить таймер
 D4_Low; //логический ноль на выходы
 tic=0;       //обнулить счетчик
 attachInterrupt(0, detect_up, LOW); //перепрограммировать прерывание на другой обработчик
} 
//*************************************************************************
void loop() 
{Start
  if (i >= 0 && i <= 200) {delay(50); Dimmer1 = i; i = i+1;}
  else {i = 0;}
  //Dimmer1=100;  
End}  

 

DIMMER_v2_tst_dlya_foruma.jpg

DIMMER_v2_tst_without_lamp.gif

DIMMER_v2_tst_with_lamp.gif

Edited by Nick Iskrov
редактировал 10 строку кода (D2_In;)

Share this post


Link to post
Share on other sites

Для регулирования "скважности" на синусе нужен более точный детектор перехода через 0.

Вот мой пример, регулирование ступенями по 100uS. 

zcd.GIF

Zero crossing DS3486M_capture 2ms.bmp

Zero crossing DS3486M_capture 5ms.bmp

Zero crossing DS3486M_capture 10us.bmp

Zero crossing DS3486M_capture 500us.bmp

Zero crossing DS3486M_capture1.bmp

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • Guest Андрей
      By Guest Андрей
      Доброго времени суток форумчане! Очень нужен ваш совет.
      Дано: светодиод 5 Вт питается от источника постоянного тока 700 мА. Всё хорошо. Возник вопрос о необходимости регулировки его яркости. Купил диммер, подключил к нему переменный резистор на 15 кОм, - и ничего, ноль реакции. Он даже не реагирует на подключение источника внешнего напряжения к тем же проводам (подключаю обычные батарейки). Что не так, что я делаю неправильно? Подскажите пожалуйста, очень хочу разобраться в этом.
    • By Merlok Life
      Хочу сделать монстр-машинку с двигателем rs550 с металлическим корпусом на ардуино.
      Подскажите как управлять мотором через ардуино нано? 
       
    • By Геннадий Быков
      Уважаемые электронщики и им сочувствующие!
      Хочу на даче собрать макет морского маяка в человеческий рост. Но для этого необходима схема управляющая светодиодами. Основное, схема должна иметь независимое питание(Солнечная панель) и быть слаботочной (5-9 вольт). Как вижу я. Маяк ориентировочно высотой 1,50-1,80 м. В маяке, с низу до верха 6 окошек (по одному 5мм светодиоду). И на верху сам маяк из 8-ми 0,5 ваттных светодиодов установленных по кругу. С наступлением темноты, включаются диоды на "1 этаже" и раз в 5-10 минут происходит действие. Диоды поэтажно (снизу вверх) начинают загораться (как будто кто-то поднимается вверх по ступеням) и после загорания самого верхнего окна, через пару секунд, включается маяк. Поочередно по кругу (эффект метеора), со скоростью 2-3 сек на круг, делает оборотов 10 и выключается. Потом в обратной последовательности гасятся окошки (светодиоды) сверху в низ и остаются два нижних, периодически и независимо включающиеся и выключающиеся (эффект присутствия). И вновь через 5-10 минут вышеописанное действие. Буду очень признателен любым советам, ссылкам, помощью. Немного умею паять, немного знаю Ардуино. Готов в разумных пределах спонсировать, разработку и сборку.
    • By Necro_KOT
      Добрый день.
      Хочу собрать подсветку для элемента.
      Смысл в том, чтобы зажигалась и гасла плавно. Т.е. я понимаю что должен быть по идеи диммер.
      И на этом провал (в электроннике новичек от слова совсем). Я так понимаю что надо с какой-то частотой просто включать-выключать питание диммера.
      Прошу подсказать схему для такого устройства.
      В идеале питание от CR2032..
      Спасибо за внимание.
    • Guest ренат
      By Guest ренат
      Всем здрасти))))
      прошу помощи в написании программы
      мои знания программирования на ардуино основаны на примерах и школьного курса )))
      так вот есть программы 
      int LedPin = 8;             // Подключаем светодиод к порту 13
      int ButPin = 2;             // Подключаем кнопку к выходу 10
      int flag = 0;                // флаг состояния
      int LedPinTime = 100;
      void setup()
      {
        pinMode(LedPin, OUTPUT);   // Инициализируем порт "ledPin" как выходной
      }  
      void loop()
      {
        if(digitalRead(ButPin) == HIGH && flag == 0)      
          {                                              
            digitalWrite(LedPin, !digitalRead(LedPin));
            flag = 1;
          }
        
        if(digitalRead(ButPin) == LOW && flag == 1)
          {
            flag = 0;
          }  
      }
      собрал из кусков, работает )))))
      но не то что мне нужно 
      Мне нужно чтобы при нажатие одной кнопки(без фиксации) светодиод загорался на три секунды ( и не важно держишь ты кнопку или кратковременно нажал, он через три секунды потухнет) 
      помогите кто может))) я в благодарность могу и на телефон денег кинуть )))) спасибо
×
×
  • Create New...