Многоканальный диммер на 220В
- Войдите на сайт для отправки комментариев
Ср, 24/04/2013 - 15:12
Может кто-нибудь делал многоканальный диммер на 220 на базе Ардуино. В сети нашел несколько скетчей, но все на один канал, т.к. испульзуют в функциях delay(). Мне бы желательно на 4. Подскажите куда копать.
ни же скетчь на один канал:
01 | int AC_pin = 7; //Выход диммера - OptoTriac |
02 | byte dim = 100; //Начальный уровень диммирования от 0 до 255 |
03 |
04 | void setup () { |
05 | Serial .begin(9600); // для теста, управление через сериал |
06 | pinMode(AC_pin, OUTPUT); // установим выход диммера |
07 | attachInterrupt(0, light, FALLING); // Если на конт. 2 FALLING из HIGH в LOW, вкл. процедуру light! |
08 | } |
09 |
10 | void light() { |
11 | if ( Serial .available()) { // Если активен сериал, то запустим фунцию |
12 | dim = Serial .read(); // Прочитаем, что в сериале |
13 | if (dim < 1) { // Выключим TRIAC если dim равен 0 |
14 | digitalWrite(AC_pin, LOW); |
15 | } |
16 | if (dim > 254) { // Вклюичим TRIAC есил dim равен 255 |
17 | digitalWrite(AC_pin, HIGH); |
18 | } |
19 | } |
20 | if (dim > 0 && dim < 255) { // Утановим диммирование, если dim не равен 0 или 255 |
21 | delayMicroseconds(34*(255-dim)); |
22 | digitalWrite(AC_pin, HIGH); |
23 | delayMicroseconds(500); |
24 | digitalWrite(AC_pin, LOW); |
25 | } |
26 | } |
27 |
28 | void loop () { |
29 | } |
Мигаем светодиодом без delay() и micros()
maksim, а вы пробовали делать многоканальный диммер?
А разве с таким подходом нельзя использовать ШИМ? Трудно представить что остаётся после синусоиды
Купить Dimmer модуль
Описание работы, код, схема Многоканального Dimmer на Arduino
01
#define mpin1 2 // 1<<1 пины выходов
02
#define mpin2 4 // 1<<2
03
#define mpin3 8 // 1<<3
04
#define mpin4 16 //1<<4
05
06
unsigned
char
c1=5;
// скважности каналов
07
unsigned
char
c2=173;
08
unsigned
char
c3=219;
09
unsigned
char
c4=8;
10
11
volatile unsigned
char
a=0;
12
volatile unsigned
char
mask=0;
13
void
setup
()
14
{
15
Serial
.begin(9600);
16
TIMSK2 &= ~( (1<<OCIE2A) | (1<<OCIE2B) | (1<<TOIE2) );
17
TCCR2A &= ~((1<<WGM21) | (1<<WGM20));
// Режим работы таймера/счетчика
18
TCCR2B &= ~(1<<WGM22);
// Режим работы таймера/счетчика
19
ASSR &= ~(1<<AS2);
//Выбор источника синхронизации таймера если AS2=0 от системного генератора
20
21
TCCR2B = (TCCR2B & ~( (1 << CS22) | (1 << CS21) ) ) | (1 << CS20) ;
22
TIMSK2 |= (1<<TOIE2);
23
for
(
int
i=1; i<=13; i++)
24
pinMode(i, OUTPUT);
25
PORTD=PORTD & ~(mpin1 | mpin2 | mpin3 | mpin4);
26
}
27
28
ISR(TIMER2_OVF_vect)
29
{
30
PORTD=PORTD^mask;
31
mask=0;
32
if
(a==0)
33
mask=mpin1 | mpin2 | mpin3 | mpin4;
34
if
(a==c1)
35
mask=mask^mpin1;
36
if
(a==c2)
37
mask=mask^mpin2;
38
if
(a==c3)
39
mask=mask^mpin3;
40
if
(a==c4)
41
mask=mask^mpin4;
42
a++;
43
}
44
45
void
loop
()
46
{
47
}
Надо проверить на ошибки. Небольшая частота: 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, все работает замечательно!