Многоканальный диммер на 220В
- Войдите на сайт для отправки комментариев
Ср, 24/04/2013 - 15:12
Может кто-нибудь делал многоканальный диммер на 220 на базе Ардуино. В сети нашел несколько скетчей, но все на один канал, т.к. испульзуют в функциях delay(). Мне бы желательно на 4. Подскажите куда копать.
ни же скетчь на один канал:
int AC_pin = 7; //Выход диммера - OptoTriac
byte dim = 100; //Начальный уровень диммирования от 0 до 255
void setup() {
Serial.begin(9600); // для теста, управление через сериал
pinMode(AC_pin, OUTPUT); // установим выход диммера
attachInterrupt(0, light, FALLING); // Если на конт. 2 FALLING из HIGH в LOW, вкл. процедуру light!
}
void light() {
if (Serial.available()) { // Если активен сериал, то запустим фунцию
dim = Serial.read(); // Прочитаем, что в сериале
if (dim < 1) { // Выключим TRIAC если dim равен 0
digitalWrite(AC_pin, LOW);
}
if (dim > 254) { // Вклюичим TRIAC есил dim равен 255
digitalWrite(AC_pin, HIGH);
}
}
if (dim > 0 && dim < 255) { // Утановим диммирование, если dim не равен 0 или 255
delayMicroseconds(34*(255-dim));
digitalWrite(AC_pin, HIGH);
delayMicroseconds(500);
digitalWrite(AC_pin, LOW);
}
}
void loop() {
}
Мигаем светодиодом без delay() и micros()
maksim, а вы пробовали делать многоканальный диммер?
А разве с таким подходом нельзя использовать ШИМ? Трудно представить что остаётся после синусоиды
Купить Dimmer модуль
Описание работы, код, схема Многоканального Dimmer на Arduino
#define mpin1 2 // 1<<1 пины выходов #define mpin2 4 // 1<<2 #define mpin3 8 // 1<<3 #define mpin4 16 //1<<4 unsigned char c1=5; // скважности каналов unsigned char c2=173; unsigned char c3=219; unsigned char c4=8; volatile unsigned char a=0; volatile unsigned char mask=0; void setup () { Serial.begin(9600); TIMSK2 &= ~( (1<<OCIE2A) | (1<<OCIE2B) | (1<<TOIE2) ); TCCR2A &= ~((1<<WGM21) | (1<<WGM20));// Режим работы таймера/счетчика TCCR2B &= ~(1<<WGM22);// Режим работы таймера/счетчика ASSR &= ~(1<<AS2); //Выбор источника синхронизации таймера если AS2=0 от системного генератора TCCR2B = (TCCR2B & ~( (1 << CS22) | (1 << CS21) ) ) | (1 << CS20) ; TIMSK2 |= (1<<TOIE2); for (int i=1; i<=13; i++) pinMode(i, OUTPUT); PORTD=PORTD & ~(mpin1 | mpin2 | mpin3 | mpin4); } ISR(TIMER2_OVF_vect) { PORTD=PORTD^mask; mask=0; if (a==0) mask=mpin1 | mpin2 | mpin3 | mpin4; if (a==c1) mask=mask^mpin1; if (a==c2) mask=mask^mpin2; if (a==c3) mask=mask^mpin3; if (a==c4) mask=mask^mpin4; a++; } void loop () { }Надо проверить на ошибки. Небольшая частота: 16 000 000/(256*256)=244Гц (Можно немного увеличить, переведя таймер в CTC режим)
Ну и есть вариант сделать 4 ШИМа на 4-х таймерах-счётчиках, там будет нормальная частота.
Ну так сначала сделайте проверьте , а потом пишите.
Вы хотябы прочитали как работает Dimmer с переменным напряжением
схему бы хоть показали, чем вы там мигаете... на переменке как минимум нужно определять переход через 0, а просто открывать симистор через шим как то не очень... да и соседи вам спасибо не скажут :)
кстати поиск рулит, вот например, народ замутил
http://cyber-place.ru/showthread.php?t=525
сделал, как приведен пример по этой ссылке http://cyber-place.ru/showthread.php?t=525, все работает замечательно!