arduino ac dimmer aansturen pwm?

Arduino specifieke Software
Gebruikers-avatar
Berichten: 229
Geregistreerd: 20 Jan 2013, 12:01

Re: arduino ac dimmer aansturen pwm?

Berichtdoor astrofrostbyte » 12 Mei 2013, 21:49

'k heb ff de code getest met scope en functie generator en nu loopt het goed.

Wat hij niet leuk vond was als dimtime1 en 2 gelijk zijn , ging ie raar doen op: delayMicroseconds( dimtime1 - dimtime2);
Eigenlijk een delay van 0us ?. dan raakte hij uit sync

Ik heb ook een trigger op opgaande en neergaande flank .

er zit volgens mij nog een zwakheid in de code, dat als hij met de interrupt bezig en de volgende interupt treed op dat hij er niet meer uitkomt. dit zou kunnen optreden dimming 128 is en als de 50Hz bv 51Hz zou zijn.

Code: Alles selecteren
    int LED_Pin  =    6;   // LED_Pin van Pin 6
    int AC_LOAD1 =    7;   // Output to Opto Triac 1 pin
    int AC_LOAD2 =    8;   // Output to Opto Triac 2 pin
    byte dimming1 =  63;   // Dimming level (0-128) 0 = ON, 128 = OFF
    byte dimming2 =  32;   // Dimming level (0-128) 0 = ON, 128 = OFF

    //-------------------------------------------------------------------------
    void setup()
    {
      Serial.begin(9600);         
      pinMode(LED_Pin, OUTPUT);   
      pinMode(AC_LOAD1, OUTPUT);
      pinMode(AC_LOAD2, OUTPUT);
      attachInterrupt(0, zero_crosss_int, CHANGE);
    }
    //-------------------------------------------------------------------------
    void zero_crosss_int()
    { 
       int dimtime1 = (77 * dimming1);  // (10000us - 20us) / 128 = 77.9
       int dimtime2 = (77 * dimming2);
       digitalWrite(LED_Pin, HIGH);
       if ( dimming1 > dimming2)
       { delayMicroseconds(dimtime2);
         digitalWrite(AC_LOAD2, HIGH);
         delayMicroseconds(10);
         digitalWrite(AC_LOAD2, LOW);
     
         delayMicroseconds( dimtime1 - dimtime2);
         digitalWrite(AC_LOAD1, HIGH);
         delayMicroseconds(10);
         digitalWrite(AC_LOAD1, LOW);
        }
        else if (dimming1 == dimming2)
        { delayMicroseconds(dimtime1);
          digitalWrite(AC_LOAD1, HIGH);
          digitalWrite(AC_LOAD2, HIGH);
          delayMicroseconds(10);
          digitalWrite(AC_LOAD1, LOW);
          digitalWrite(AC_LOAD2, LOW);         
        }
        else //( dimming1 < dimming2)
        { delayMicroseconds(dimtime1);
          digitalWrite(AC_LOAD1, HIGH);
          delayMicroseconds(10);
          digitalWrite(AC_LOAD1, LOW);
     
          delayMicroseconds( dimtime2 - dimtime1);
          digitalWrite(AC_LOAD2, HIGH);
          delayMicroseconds(10);
          digitalWrite(AC_LOAD2, LOW);
        }
        digitalWrite(LED_Pin, LOW);
    }

    //-------------------------------------------------------------------------
    void loop()
    {
      if(Serial.available())
      { int c = Serial.read();
        Serial.println("Serial");
        switch (c)
        {
          case '+' :
          { dimming1 += 4;
            if ( dimming1 > 112) dimming1 = 125;
            break;
          }
          case '-' :
          { dimming1 -= 4;
            if ( dimming1 <  20) dimming1 =  20;
            break;
          }
          case '>' :
          { dimming2 += 4;
            if ( dimming2 > 112) dimming2 = 125;
            break;
          }
          case '<' :
          { dimming2 -= 4;
            if ( dimming2  <  20) dimming2 =  20;
            break;
          }
        }//switch
      }//fi
    }//loop
Gear: Arduino- Uno,Due,Ethernet,Mega2560 , OLS LogicAnalyser, TDS1002, Rigol DG1022, J-Link EDU, BusPirate

Advertisement

Berichten: 17
Geregistreerd: 23 Feb 2013, 14:51

Re: arduino ac dimmer aansturen pwm?

Berichtdoor ddarduino » 12 Mei 2013, 22:26

Hoi,

Ik weet niet of ik het al ergens vermeld had maar anders dan nu in iedere geval, het gaat om het dimmen van dimbare led verlichting. Op 230v. Misschien dat het daar ook mee te maken heeft???

Gebruikers-avatar
Berichten: 229
Geregistreerd: 20 Jan 2013, 12:01

Re: arduino ac dimmer aansturen pwm?

Berichtdoor astrofrostbyte » 12 Mei 2013, 22:30

Dus de Led's zijn aangesloten op een AC spanning, of een gelijkgerichte spanning ? . en je snijd de fase aan voor de trafo ?.

kan eens kijken of de interrupt op verwachte tijden binnenkomt
Code: Alles selecteren
unsigned long tijd, delta;
boolean tick = false;
//-------------------------------------------------------------------------
void setup()
{ Serial.begin(115200);
  tijd = micros();
  attachInterrupt(0, zero_crosss_int, CHANGE);
}
//-------------------------------------------------------------------------
void zero_crosss_int()
{ delta = micros() - tijd;
  tijd = micros();
  tick = true;
}
//-------------------------------------------------------------------------
void loop()
{ if( tick )
  {  Serial.println( delta );
     tick = false;
  }
}//loop
//-------------------------------------------------------------------------


Zou op de terminal 10000 moeten geven zonder al te veel glitches.
ik kom op 9956 en 9948 met een 50Hz functiegenerator.
Gear: Arduino- Uno,Due,Ethernet,Mega2560 , OLS LogicAnalyser, TDS1002, Rigol DG1022, J-Link EDU, BusPirate

Vorige

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 23 gasten