Световой диммер

Liberty_Prime
Offline
Зарегистрирован: 18.10.2013

Собрал эту схему: http://cxem.net/arduino/arduino71.php. Если принудительно подать высокий сигнал на третий цифровой вывод, то семистор открывается, но обрабатывать прерывания с второго цифрового пина(датчик пересечения нуля(4n25)) ардуина  не хочет. Использовал я про мини.

Скетч:

int AC_LOAD = 3;    // Output to Opto Triac pin
int AC_VOLTAGE = 180;  // Dimming level (0-128)  0 = ON, 128 = OFF

void setup()
{
  pinMode(AC_LOAD, OUTPUT);// Set AC Load pin as output
  attachInterrupt(0 , zero_crosss_int, RISING);  // Choose the zero cross interrupt # from the table above
  pinMode(13, OUTPUT);
}
// the interrupt function must take no parameters and return nothing
void zero_crosss_int()  // function to be fired at the zero crossing to dim the light
{
  // Firing angle calculation : 1 full 50Hz wave =1/50=20ms 
  // Every zerocrossing thus: (50Hz)-> 10ms (1/2 Cycle) For 60Hz => 8.33ms 
  // 10ms=10000us
  // (10000us - 10us) / 128 = 75 (Approx) For 60Hz =>65
  digitalWrite(13, HIGH);  
  int dimtime = (AC_VOLTAGE/31);    // For 60Hz =>65    
  delay(10+dimtime);    // Off cycle
  digitalWrite(AC_LOAD, HIGH);   // triac firing
  delayMicroseconds(1.2);         // triac On propogation delay (for 60Hz use 8.33)
  digitalWrite(AC_LOAD, LOW);    // triac Off
  digitalWrite(13, LOW);
}

void loop()  {
  
}

Если после датчика нуля подключить светодиод, то он едва заметно мерцает(прерывания присутствуют, но контроллер их не видит).

Помогите, кто может)

Liberty_Prime
Offline
Зарегистрирован: 18.10.2013

P.S. выложил я измененный скетч, но пробовал я и оригинал:

int AC_LOAD = 3;    // Output to Opto Triac pin
int dimming = 128;  // Dimming level (0-128)  0 = ON, 128 = OFF

void setup()
{
  pinMode(AC_LOAD, OUTPUT);// Set AC Load pin as output
  attachInterrupt(0, zero_crosss_int, RISING);  // Choose the zero cross interrupt # from the table above
}
// the interrupt function must take no parameters and return nothing
void zero_crosss_int()  // function to be fired at the zero crossing to dim the light
{
  // Firing angle calculation : 1 full 50Hz wave =1/50=20ms 
  // Every zerocrossing thus: (50Hz)-> 10ms (1/2 Cycle) For 60Hz => 8.33ms 
  // 10ms=10000us
  // (10000us - 10us) / 128 = 75 (Approx) For 60Hz =>65
  int dimtime = (75*dimming);    // For 60Hz =>65    
  delayMicroseconds(dimtime);    // Off cycle
  digitalWrite(AC_LOAD, HIGH);   // triac firing
  delayMicroseconds(10);         // triac On propogation delay (for 60Hz use 8.33)
  digitalWrite(AC_LOAD, LOW);    // triac Off
}

void loop()  {
 
  for (int i=5; i <= 128; i++){
    dimming=i;
      delay(10);
   }
}

 

axill
Offline
Зарегистрирован: 05.09.2011

вы 4n25 к какому входу ардуино подключили? может просто не на тот вход подключили и поэтому прерываний нет? Ну и конечно подключение оптрона к сети и к аржуино надо парочку раз перепроверить и наличие контакта и отсутствие замыканий и то что выводы не перепутаны. Схема простая, если правильно собрать она не может не заработать. Если есть осциллограф или логический анализатор - легко посмотерть что там происходит

скетч жутко кривой, начиная с того, что delayMicroseconds принимает только целые числа http://arduino.cc/en/Reference/DelayMicroseconds и заканчивая тем, что внутри прерываний использованы тупые задержки

у вас задача какая? если вы хотите сделать диммер у которого будет уровень задан константой в программе как в вашем скетче - оно еще как-то будет работать, но если вы хотите извне менять, то лучше переписать код убрав delay из обработки прерываний заменив на исопльзование прерываний по таймеру

Liberty_Prime
Offline
Зарегистрирован: 18.10.2013

Не смотря на срок давности, хочу все-таки ответить)

Скетч, не смотря на свою кривизну работает, в тот раз мне попался дохлый оптрон - заменил. В процессе откладки добавил подтягивающий к нулю резистор к управляющему выводу(накапливался заряд и переодически moc3021 самопроизвольно открывался). Теперь все работает =)

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

По классике - полезно симистор шунтировать снабберной цепочкой. http://forum.easyelectronics.ru/viewtopic.php?f=14&t=2671&view=previous цепочка R=39 и C=0.01.

std
Offline
Зарегистрирован: 05.01.2012

Да, кстате, о цепочке.

Она всегда 39 и 0.01? Или как-то считается? Мощность нагрузки 3 Вт (светодиодная сборка), но это какая-то явно индуктивная сборка - когда втыкаешь/вынимаешь с розетки, видна искра. Столкнулся с проблемой в модели светофора, он с такими лампами постоянно перезагружается или вообще виснет, несмотря на watchdog (питается от сети через китайский импульсный блок 5В 1А). Если вместо импульсника поставить трансформатор, выпрямитель и 7805, то всё равно идут косяки, а если запитать от USB - никаких проблем. С лампочками на 12В этих проблем не было, поставил бы их да начальство упёрлось, типа "уплочено, детали закуплены" и т. п. Понимаю что оффтоп но вроде как защита к этой теме хоть как-то относится.

Просвятите, т. к. в аналоговой электронике - полный нуб, и из приборов только китайский тестер, осциллограф только в мечтах.

axill
Offline
Зарегистрирован: 05.09.2011

Снаберная цепочка нужна чтобы предотвратить самопроизвольное открытие семистора, хотя такое открытие может генерить лишние помехи

в вашем случае снабер не помешает как и дополнительный фильтр по питанию. Плата ардуино?

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

std пишет:

Да, кстате, о цепочке. Она всегда 39 и 0.01? Или как-то считается?

Говорят, что как-то считается, но эти номиналы подходят для достаточно широкого диапазона мощностей.

Если надо гасить искру на вилке-розетке, то это лучше делать с помощью NTC-резистора, по аналогии с компьютерным блоком питания...

carduino.ru
Offline
Зарегистрирован: 06.12.2011

axill пишет:

Снаберная цепочка нужна чтобы предотвратить самопроизвольное открытие семистора, хотя такое открытие может генерить лишние помехи

в вашем случае снабер не помешает как и дополнительный фильтр по питанию. Плата ардуино?

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

std
Offline
Зарегистрирован: 05.01.2012

Да, кстати, пробовал поставить 120 Ом и 0.047 мкФ, сборки светились. С резистором 240 Ом норм, но всё же бывают висяки. Плата не дуино, собрано на отдельной меге.

Схема на каждый канал такая:

Разводка такая:

фотка паршивая так что макет вот:

Кислотно-зелёная яркая дорожка вдоль релюх - общий провод 220. Она разведена прямо рядом с плюсом питания, идущим к обмоткам и защитным диодам, и батя уже не раз сказал на эту тему "ой зря ты так, зря зря зря зря зря зря". Если непонятно что слева - там зарезервировано SPI и два провода (для nRF24L01, на случай синхронизации нескольких по радио), один вход под оптрон, один выход под три транзистора (для светодиодов в других оптронах, на случай синхро по кабелю).

По схеме R2 и C1 напаяно уже сверху навесным монтажом. Как уже писалось выше - тупит меньше чем раньше, но всё же немного есть. С вероятностью ~70% вешается после 15 минут работы. С питанием всё чотко, мощный блок с электролитом 3300 и керамикой 0.1, и непосредственно возле МК ещё керамика.

Уже жалею что не сказал заказчику сразу сделать на светодиодной ленте, рулили бы обычными TIP122 и не знали бы проблем...

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

std пишет:

Кислотно-зелёная яркая дорожка вдоль релюх - общий провод 220. Она разведена прямо рядом с плюсом питания, идущим к обмоткам и защитным диодам, и батя уже не раз сказал на эту тему "ой зря ты так, зря зря зря зря зря зря".

Это не страшно, а вот красную петлю по всей плате - я бы "срезал" перемычкой в середине. Она, скорее всего, и ловит помеху от искры в реле... Еще и питание силовое и процессорное не разделено ничем...

carduino.ru
Offline
Зарегистрирован: 06.12.2011

Поставь злектролит 47-100мкф и керамику 0,1мкф по питанию контроллера. Паять нужно максимально близко к самому контроллеру 

std
Offline
Зарегистрирован: 05.01.2012

0.1 рядом с МК уже есть, а 47.0-100.0 это мысль, надо поставить. Не разделил питание реле от МК т. к. из соображений "в схеме старого светофора на микросхемах серии К155 было так же", да и едят они не ахти, 70 мА каждая, то есть запас по питанию трёхкратный.

По искрогасящей цепочке интересно сколько что может быть максимум и как оно влияет. Если верно помню, вроде чем больше конденсатор, тем бОльший ток можно коммутировать. Т. е. в этом случае должно быть само то маленький конденсатор и большой резистор. Поправьте если не правильно.

axill
Offline
Зарегистрирован: 05.09.2011

на своей плате ресет к плюсу подтянули?

gena
Offline
Зарегистрирован: 04.11.2012

  Красный провод возле сетевого зелёного - не хорошо. Действительно, лучше всю петлю красного убрать, а пустить перемычку к реле. Танталовый конденсатор на 10...47 мкФ 10 В по питанию микроконтроллера не помешает.