Управление сетевым напряжением

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем iglooshtosser, 3 дек 2015.

  1. iglooshtosser

    iglooshtosser Гик

    Задачка, вроде бы тривиальная. Хочу поуправлять ёлочными гирляндами ардуиной.
    Втал вопрос, что же использовать в качестве силового ключа?

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

    Реле, с очевидностью, не подходят. Симсторы, кажется, тоже не совсем, или я чего-то не понимаю...

    Что присоветуете, уважаемые "старики" и перспективная "молодежь"?
     
  2. iglooshtosser

    iglooshtosser Гик

    Или просто выпрямить сетевой ток, да подобрать транзисторы с обратным напряжением 300 ?
     
  3. Tomasina

    Tomasina Сушитель лампочек Модератор

  4. iglooshtosser

    iglooshtosser Гик

  5. iglooshtosser

    iglooshtosser Гик

    Последнее редактирование: 5 дек 2015
  6. Tomasina

    Tomasina Сушитель лампочек Модератор

    схема вроде годная, но многое зависит от транзистора, большинство очень не любят ШИМ на мощных нагрузках.
     
    iglooshtosser нравится это.
  7. iglooshtosser

    iglooshtosser Гик

    Нагрузка реально не очень мощная. 27Вт. То есть ток около 0.12 А, при максмальном 23 А. Опыт покажет. Оптопары и транзисторы я сегодня купил, так что скоро узнаю.
     
  8. iglooshtosser

    iglooshtosser Гик

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

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

    Схема.png
    К достоинствам такого решения считаю возможным отнести простоту. Как простоту самой сборки, так и простоту программирования. Нет необходимости обрабатывать прерывания.
     
  9. если хотите чтобы почти все что включено в розетку издавало звуки частотой ШИМа ардуины, то можно не обрабатывать прерывание.
     
    iglooshtosser нравится это.
  10. ИгорьК

    ИгорьК Гуру

    А чем плохо вот такое решение. Как мне видится, оно существенно упрощает программную часть до тривиального analogWrite:
    [​IMG]
     
    iglooshtosser нравится это.
  11. vvr

    vvr Инженерище

    так Пушной зверь это в своём видео и показал
     
    ИгорьК нравится это.
  12. ИгорьК

    ИгорьК Гуру

    Смотрим схему на 42 секунде - не это. Совсем не это.

    UPD: Каюсь, поспешил. Не въехал. Одно и то же.
     
    Последнее редактирование: 15 дек 2015
    iglooshtosser нравится это.
  13. а вы пробовали туда ШИМ подавать? просто это схема твердотельного реле, а опропара с зерокрос заботится чтобы включение симистора было только после перехода через ноль, это для защиты симистора.
     
    iglooshtosser нравится это.
  14. iglooshtosser

    iglooshtosser Гик

    А какова эта частота, не напомните? Не могу вмпомнить где читал, что порядка 490 Гц. В ходе испытаний схемы я не слышал таких звуков из колонок компьютера, а они были включены в одну розетку с тестовой схемой. Видимо дело в том, что мощность нагрузки не велика, всего 27 Вт.
    Изначально устройство планировплось четырехканальным - мощность возрастет вчетверо. Посмотрим. Может добавлю ёмкость параллельно выпрямителю.
     
    Последнее редактирование: 7 дек 2015
  15. iglooshtosser

    iglooshtosser Гик

    Действительно, шимом эта схема, похоже не управляется. Ведь симистор закроется не по спаду управляющего сигнала, а только по нулю питающего нагрузку...
     
  16. ИгорьК

    ИгорьК Гуру

    вопрос я спросил, поскольку сам не пробовал. Теперь придётся попробовать.
     
    iglooshtosser нравится это.
  17. я тоже не пробовал, но думаю что не заработает.
     
  18. ИгорьК

    ИгорьК Гуру

    В общем, кино (как оно работает):


    Это от обычного analogWrite.
    Если же увеличить частоту ШИМ - эта штука просто включается и светит независимости от заполнения ШИМ.

    Значицца, придется обращаться к теме, что замутил уважаемый Пушной Звер...
    Однако, код этот (со странички) надо перерабатывать:
    Код (C++):
    /*

    AC Light Dimmer - Inmojo
    AC Voltage dimmer with Zero cross detection
    Author: Charith Fernanado http://www.inmojo.com charith@inmojo.com
    License: Released under the Creative Commons Attribution Share-Alike 3.0 License.
    http://creativecommons.org/licenses/by-sa/3.0
    Target:  Arduino
    Attach the Zero cross pin of the module to Arduino External Interrupt pin
    Select the correct Interrupt # from the below table

    Pin    |  Interrrupt # | Arduino Platform
    ---------------------------------------
    2      |  0            |  All
    3      |  1            |  All
    18     |  5            |  Arduino Mega Only
    19     |  4            |  Arduino Mega Only
    20     |  3            |  Arduino Mega Only
    21     |  2            |  Arduino Mega Only
    */


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

    void setup()
    {
      pinMode(AC_LOAD, OUTPUT);       // Set the AC Load as output
      attachInterrupt(0, zero_crosss_int, RISING);  // Choose the zero cross interrupt # from the table above
    }

    void zero_crosss_int()  // function to be fired at the zero crossing to dim the light
    {
      // Firing angle calculation :: 50Hz-> 10ms (1/2 Cycle)
      // (10000us - 10us) / 128 = 75 (Approx)
      int dimtime = (75*dimming);  
      delayMicroseconds(dimtime);    // Off cycle
      digitalWrite(AC_LOAD, HIGH);   // triac firing
      delayMicroseconds(10);         // triac On propogation delay
      digitalWrite(AC_LOAD, LOW);    // triac Off
    }

    void loop()
    {

      for (int i = 1; i <= 128; i++){
        dimming = i;
        delay(20);
      }

      for (int i = 128; i >= 1; i -= 5){
        dimming = i;
        delay(200);
      }
    }
    Такие задержки в прерывании недопустимы, ИМХО :(
     
    Последнее редактирование: 14 дек 2015
    iglooshtosser и Пушной звер нравится это.
  19. ИгорьК

    ИгорьК Гуру

    Найдено решение для доработки на просторах интернета на предмет тормоза в прерывании:
    Код (C++):
    /*AC Light Control
    Updated by Robert Twomey
    Changed zero-crossing detection to look for RISING edge rather
    than falling.  (originally it was only chopping the negative half
    of the AC wave form).
    Also changed the dim_check() to turn on the Triac, leaving it on
    until the zero_cross_detect() turn's it off.
    Adapted from sketch by Ryan McLaughlin
    http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1230333861/30
    */


    #include  <TimerOne.h>          // Avaiable from http://www.arduino.cc/playground/Code/Timer1
    volatile int i=0;               // Variable to use as a counter volatile as it is in an interrupt
    volatile boolean zero_cross=0;  // Boolean to store a "switch" to tell us if we have crossed zero
    int AC_pin = 11;                // Output to Opto Triac
    int dim = 0;                    // Dimming level (0-128)  0 = on, 128 = 0ff
    int inc=1;                      // counting up or down, 1=up, -1=down

    int freqStep = 75;    // This is the delay-per-brightness step in microseconds.
                          // For 60 Hz it should be 65
    // It is calculated based on the frequency of your voltage supply (50Hz or 60Hz)
    // and the number of brightness steps you want.
    //
    // Realize that there are 2 zerocrossing per cycle. This means
    // zero crossing happens at 120Hz for a 60Hz supply or 100Hz for a 50Hz supply.

    // To calculate freqStep divide the length of one full half-wave of the power
    // cycle (in microseconds) by the number of brightness steps.
    //
    // (120 Hz=8333uS) / 128 brightness steps = 65 uS / brightness step
    // (100Hz=10000uS) / 128 steps = 75uS/step

    void setup() {                                      // Begin setup
      pinMode(AC_pin, OUTPUT);                          // Set the Triac pin as output
      attachInterrupt(0, zero_cross_detect, RISING);    // Attach an Interupt to Pin 2 (interupt 0) for Zero Cross Detection
      Timer1.initialize(freqStep);                      // Initialize TimerOne library for the freq we need
      Timer1.attachInterrupt(dim_check, freqStep);    
      // Use the TimerOne Library to attach an interrupt
      // to the function we use to check to see if it is
      // the right time to fire the triac.  This function
      // will now run every freqStep in microseconds.                                          
    }

    void zero_cross_detect() {  
      zero_cross = true;               // set the boolean to true to tell our dimming function that a zero cross has occured
      i=0;
      digitalWrite(AC_pin, LOW);       // turn off TRIAC (and AC)
    }                                

    // Turn on the TRIAC at the appropriate time
    void dim_check() {                  
      if(zero_cross == true) {            
        if(i>=dim) {                    
          digitalWrite(AC_pin, HIGH); // turn on light      
          i=0;  // reset time step counter                        
          zero_cross = false; //reset zero cross detection
        }
        else {
          i++; // increment time step counter                    
        }                              
      }                                
    }                                  

    void loop() {                      
      dim+=inc;
      if((dim>=128) || (dim<=0))
        inc*=-1;
      delay(18);
    }
     
    Как сделаю регулятор - займусь, если кто раньше не проверит.