arduino ac dimmer aansturen pwm?
33 berichten
• Pagina 4 van 4 • 1, 2, 3, 4
- astrofrostbyte
- Berichten: 229
- Geregistreerd: 20 Jan 2013, 12:01
Re: arduino ac dimmer aansturen pwm?
'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.
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
Re: arduino ac dimmer aansturen pwm?
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???
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???
- astrofrostbyte
- Berichten: 229
- Geregistreerd: 20 Jan 2013, 12:01
Re: arduino ac dimmer aansturen pwm?
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
Zou op de terminal 10000 moeten geven zonder al te veel glitches.
ik kom op 9956 en 9948 met een 50Hz functiegenerator.
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
33 berichten
• Pagina 4 van 4 • 1, 2, 3, 4
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 105 gasten