Nick  Iskrov

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

2 сообщения в этой теме

Nick Iskrov    0

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

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

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

При подключении лампы, напряжение на нагрузке = 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

Изменено пользователем Nick Iskrov
редактировал 10 строку кода (D2_In;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Для регулирования "скважности" на синусе нужен более точный детектор перехода через 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Похожие публикации

    • Автор: dengeneral
      Имеется вот такая плата индикации от стабилизатора ресанта. Подскажите пожалуйста как ее подключить к ардуино и какой скетч нужен для ее проверки?

    • Автор: ALEX__45
      хочу измерить напряжение до 110 вольт примерно. Проблема в том что земля не общая. Соединить невозможно (коммутируется мосфетом). Поэтому простой резист. делитель не подходит. Подозреваю нужен ОУ. Не подскажете как подключить?
      Схема примерно такая:
      Новый точечный рисунок.bmp
    • Гость Роман
      Автор: Гость Роман
      Собираю диммер с использованием микроконтроллера ардуино по следующей схеме:

      Оптрон использую МОС3020. Диммер не заработал. Начал проверять мультиметром:
      1. На J1 входе напряжение 220В
      2. На t1 и t2 ножках симистора напряжение 220В
      3. С PC814 с ножек 3 - 4 напряжение есть (1.2В - 1.8В), это уходит в ардуино
      4. С ардуино на МОС3020 на ножки 1 - 2 тоже напряжение подается (1.2В - 1.8В). А вот уже с 4 - 6 ножки оптрона МОС3020 напряжение снять не могу

      Схема должна быть рабочей, потому что другие люди по ней вроде как собирают устройство. Пайку проверил, вроде все нормально припаял.
      Собственно у меня ряд вопросов:
      1. Можно ли как-то проверить оптрон без выпайки? Или нужно выпаивать и проверять?
      2. Правильно ли я локализировал проблему или мой ход мыслей вообще неправильный?
      3. Как вообще правильно проверять такие схемы, если что-то не работает?
    • Гость Dir
      Автор: Гость Dir
      Здравствуйте.
      Есть ардуино уно R3 кит. копия,
      когда нужно было дисплей подключить, сделал от отдельного компьютерного блока питания 5В,
      и когда УНО была подключена от юсб, у неё горели две красные лампы ON и L с одной яркостью,
      когда я вставил штекер доп питания 5В от комп блока питания, то лампы загорелись ярче,
      и в данном варианте дисплей я проверил,
      в мануале указано 7-12В питание, допустимо до 20В,

      так вот, не могу понять как в данном случае будет работать УНО с доп питанием и одновременно с подключением по USB ,
      например, когда на пиккит3 программировал, то там он сам определяет откуда запитывать, плюс в коде это можно прописать.
      Что будет если дать 12В и одновременно кодить от USB.
      Не будет ли 12в + 5В от юсб.
      Спасибо.
    • Автор: gater06
      Добрый день,
      Подскажите, как сделать "дешифровку" сигналов на шаговый двигатель, чтобы понять на сколько шагов и в какую сторону он поворачивается?
      Есть шаговый биполярный мотор от епсон с65. 4 вывода. Он управляет подачей бумаги. Один шаг - поворот на 1,8 градуса. Может поворачиваться как в одну, так и в другую сторону.
      Каким образом можно декодировать сигналы, поступающие на шаговый двигатель, чтобы понять на сколько и в какую сторону он повернулся?