Диммер, чертовщина на выходе MOC (имеется 2-х кан. осцил.)
Re: Диммер, чертовщина на выходе MOC (имеется 2-х кан. осцил
Это просто картинка.
Нельзя всё знать, достаточно понимать.
Re: Диммер, чертовщина на выходе MOC (имеется 2-х кан. осцил
Вновь взываю к помощи. Все попытки на протяжении этих 3 месяцев закончились неудачно. Так и не удалось добиться плавного включения. Проскакивают непонятные моргания
На текущей яркости горит без проблем. Моргает только при плавном изменении. Причем даже когда кнопка на пульте давным давно отпущена...
Переделал схему. Придал ей законченный вид. Синхронизация с сетью через резистивный делитель после трансформатора (как и было), после которого на прерывание идет "синусойда" с амплитудой 3,3 В.
Функция плавного включения:
Задержек в прерывании нет:

Вот снял видео:http://www.youtube.com/watch?v=50_hR24FwnI
Может какие то "биения" с сетью 50 Гц и прерываниями от пульта, но как от этого избавиться не знаю. В общем уже всю голову себе сломал.
Переделал схему. Придал ей законченный вид. Синхронизация с сетью через резистивный делитель после трансформатора (как и было), после которого на прерывание идет "синусойда" с амплитудой 3,3 В.
Функция плавного включения:
Код: Выделить всё
void soft_on () {
TCCR1B=0x02;
while (status<=98) {
status++;
OCR1A = nagruzka[status];
OCR1B = nagruzka[status]+100;
delay_ms(delay_);
sprintf(cnt,"%u",status); // преобразование "яркости" в строку
put_string(20, 40,cnt, 0x07E0, 3); // выводим на экран
};
status = 98;
TCCR1B=0x00;
TRIAC_PIN = 0; // полностью включили
}Задержек в прерывании нет:
Код: Выделить всё
// Timer 1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
TRIAC_PIN = 0; // открыли симистор
}
// Timer 1 output compare B interrupt service routine
interrupt [TIM1_COMPB] void timer1_compb_isr(void)
{
TRIAC_PIN = 1; // вернулись в режим ожидания
}
Вот снял видео:http://www.youtube.com/watch?v=50_hR24FwnI
Может какие то "биения" с сетью 50 Гц и прерываниями от пульта, но как от этого избавиться не знаю. В общем уже всю голову себе сломал.
Нельзя всё знать, достаточно понимать.
Re: Диммер, чертовщина на выходе MOC (имеется 2-х кан. осцил
Собственно с трансформатора приходит синусойда, 17 вольт. Дальше по схеме. На вывод МК через делитель идут полуволны с частотой 100 Гц. Учитывая что для МК ноль начинается ниже 1,7 вольта, я внес поправки. Я именно:
Подключил 2-х канальный осциллограф. Один щуп на "сеть" второй на вывод который управляет оптопарой. Изменил прошивку так чтобы при детекции ноля МК выдавал импульс ны вывод оптопары:

Т.е. МК детектирует ноль на 800 мкс раньше ноля реального! На основании этого внес поправки в интервал таймера Т1. Который и считает время до открытия симистора. Т.е. просто +800 мкс. Поэтому считаю что детекция нуля идеальная. Но может я не прав??? Потому что рывки при включении... не знаю уже прям...
Есть у меня последних 2 идеи:
1.Использовать последний 3-й таймер ATMega8. Им отсчитывать интервал 0,01 сек. (полупериод) +/- 20%. Если предывание попадает в этот интервал, по открываем симистор, нет - это помеха. Хотя какая к черту помеха если на постоянной яркости горит СТАБИЛЬНО!!!!!
2. Отключать прерывания от TSOP в момент плавного старта. Но как тогда быть при удержании кнопки??? При этом тоже моргания проскакивают.
Подключил 2-х канальный осциллограф. Один щуп на "сеть" второй на вывод который управляет оптопарой. Изменил прошивку так чтобы при детекции ноля МК выдавал импульс ны вывод оптопары:

Т.е. МК детектирует ноль на 800 мкс раньше ноля реального! На основании этого внес поправки в интервал таймера Т1. Который и считает время до открытия симистора. Т.е. просто +800 мкс. Поэтому считаю что детекция нуля идеальная. Но может я не прав??? Потому что рывки при включении... не знаю уже прям...
Есть у меня последних 2 идеи:
1.Использовать последний 3-й таймер ATMega8. Им отсчитывать интервал 0,01 сек. (полупериод) +/- 20%. Если предывание попадает в этот интервал, по открываем симистор, нет - это помеха. Хотя какая к черту помеха если на постоянной яркости горит СТАБИЛЬНО!!!!!
2. Отключать прерывания от TSOP в момент плавного старта. Но как тогда быть при удержании кнопки??? При этом тоже моргания проскакивают.
Нельзя всё знать, достаточно понимать.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Диммер, чертовщина на выходе MOC (имеется 2-х кан. осцил
для детекции нуля у вас не совсем кошерная схема. рекомендую от делителя отказаться, подав переменку через резистор 20 килоом прямо на вывод МК. в этом случае вы будете иметь на пине не синусоиду, а прямоугольный импульс с довольно крутым фронтом. лучше всего для такой синхронизации подходит вход встроенного компаратора, но и с INTx результат удовлетворительный.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Диммер, чертовщина на выходе MOC (имеется 2-х кан. осцил
Спасибо за совет. Это как то повлияет на проблемы со случайным морганием? Причем иногда моргает, иногда нет.
P.S. И ещё, простите конечно, но опять же я не понимаю... Почему все говорят про плохую детекцию нуля???? Вновь подчеркну что при постоянной яркости, например 30% или 50%, лампа горит без сбоев!!! Какого она тогда это делает???? Т.е. проблем с синхронизацией с сетью вроде бы нет. Тронешь пульт - начинаются проблемы. Не трогаешь - прекрасно горит на установленной яркости. Т.е. явно перекрытие по "прерываниям". Но где именно и в какой момент какое то из них отключить... мозгов не хватает.
P.S. Простите что гну свою линию. Буду рад любой помощи
P.S. И ещё, простите конечно, но опять же я не понимаю... Почему все говорят про плохую детекцию нуля???? Вновь подчеркну что при постоянной яркости, например 30% или 50%, лампа горит без сбоев!!! Какого она тогда это делает???? Т.е. проблем с синхронизацией с сетью вроде бы нет. Тронешь пульт - начинаются проблемы. Не трогаешь - прекрасно горит на установленной яркости. Т.е. явно перекрытие по "прерываниям". Но где именно и в какой момент какое то из них отключить... мозгов не хватает.
P.S. Простите что гну свою линию. Буду рад любой помощи
Нельзя всё знать, достаточно понимать.
Re: Диммер, чертовщина на выходе MOC (имеется 2-х кан. осцил
Заработало!!! Спасибо urry с форума kazus.ru и Goodefine с forum.cxem.net
Код: Выделить всё
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
OCR1A = nagruzka[status];
OCR1B = nagruzka[status]+200;
TCNT1 = 0; // сбросили таймер
//GICR| = 0x80; // запретили прерывание INT0 // GIFR = 0x10000000
GICR&=~(1<<6); // запретили прерывание INT0 // GIFR = 0x10000000
}
...
// Timer 1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
TRIAC_PIN = 0; // открыли симистор
}
// Timer 1 output compare B interrupt service routine
interrupt [TIM1_COMPB] void timer1_compb_isr(void)
{
TRIAC_PIN = 1; // вернулись в режим ожидания
GIFR|=(1<<6); // сбросили флаг прерывания - Флаг сбрасывается ЕДИНИЦЕЙ
GICR|=(1<<6); // разрешаем прерывание INT0.
}
...
if (cmd == 0b11011000) { // кнопка "TV" - вкл/выкл диммера
GICR&=~(1<<7); // запретили прерывание INT1 (от TSOP) // GIFR = 0x01000000
if (status == 0) {
soft_on (); // 100% мощности
}
else {
soft_off(); // плавно выключаем
};
GIFR|=(1<<7); // сбросили флаг прерывания - Флаг сбрасывается ЕДИНИЦЕЙ
GICR|=(1<<7); // разрешаем прерывание INT1
}
Нельзя всё знать, достаточно понимать.
Re: Диммер, чертовщина на выходе MOC (имеется 2-х кан. осцил
Уважаемые коты, помогите разобраться с теорией управления нагрузкой через симистор, у меня проект на ПИКе 12ф675 .....
я получаю через вход INT0 проход через ноль. дальше у меня открытия и закрытия симистора
примерно так это что бы получиться 50% мощности
выглядит это в Proteus таким образам
помогите пожалуйста с режимами 20% нагрузки 40%,60%, 80% и 100%...
заранее спасибо
я получаю через вход INT0 проход через ноль. дальше у меня открытия и закрытия симистора
примерно так это что бы получиться 50% мощности
Код: Выделить всё
// ОБРАБОТКА ПРЕРЫВАНИЙ
void interrupt()
{
if(INTCON.INTF){
counter++;
if (counter>0) {Delay_us(925);GP4_bit=1;counter=0;Delay_us(500); GP4_bit=0;}
OPTION_REG.INTEDG =~ OPTION_REG.INTEDG;
INTCON.INTF = 0;
}
}
выглядит это в Proteus таким образам
помогите пожалуйста с режимами 20% нагрузки 40%,60%, 80% и 100%...
заранее спасибо
- Вложения
-
- 675.JPG
- (74.41 КБ) 926 скачиваний