Страница 1 из 4

Диммер, чертовщина на выходе MOC (имеется 2-х кан. осцил.)

Добавлено: Пн окт 11, 2010 20:46:59
mr_smit
Помогите пожалуйста разобраться с диммером. Итак:

Детекция ноля (на контроллер идет 5 вольт):
Изображение

Подключение:
Изображение

Только использую МОС 3052 и светодиод зажигаю 1 (единицей), а не нулем (как на схеме).

У нас в сети 50 Гц. Т.е. период равен 20 мс. Половина мощности будет если выключить напряжение через 5 мс после прохождения нуля.
Изображение

Изображение
Нижняя осциллограмма это детектор нуля. Верхняя это выход контроллера который управляет MOC.

Видно что МОС открывается раньше т.к. при 1,7 В МК думает что уже ноль. Т.е. разница примерно 0,8 - 1 мс. При этом лампа горит в полный накал.

Дальше уменьшаю интервал до 2 мс:
Изображение
Т.е. лампа должна еле светиться. При этом лампа горит в полный накал.

Увеличиваю интервал до 9 мс:
Изображение
При этом лампа горит в полный накал.

Дальше. Одноканальный режим. Один щуп к выводу 4 МОС, другой щуп к выводу 6 .
Изображение

Где я ошибся?

P.S. С прошивкой всё просто:

Код: Выделить всё

// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
PORTC.5 = 1; // установили 1
TCNT1 = 0; // сбросили таймер
}

// Timer 1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
PORTC.5 = 0; // установили 0
}

Re: Диммер, чертовщина на выходе MOC (имеется 2-х кан. осцил

Добавлено: Пн окт 11, 2010 21:01:56
anatol378
Микросхема не только оптоизолятор, но и оптосимистор. отключи схему управления (порт). Если лампа не горит, то идет "мусор" по управлению. На последней осциллограмме видно что симистор открыт.

Re: Диммер, чертовщина на выходе MOC (имеется 2-х кан. осцил

Добавлено: Пн окт 11, 2010 21:12:22
ARV
вы не могли бы картинки внедрять прямо в форум? с вашего радикала у меня нифига не открывается половина...

поэтому попробую угадать: вы говорите "выключить напряжение", но ведь симистор не может ВЫКЛЮЧИТЬ, он может только ВКЛЮЧИТЬ, а выключится само в нуле... то есть нет ли у вас ошибки в алгоритме? импульс на симистор надо подавать в момент, когда его надо открыть, а не убирать импульс, когда надо закрыть...

и второе: детектор нуля хреновый у вас. выкиньте R2, а R1 посчитайте так, чтобы через него текло не более 1 мА. кстати, мост тоже можно выкинуть, если он больше ни для чего не нужен.

Re: Диммер, чертовщина на выходе MOC (имеется 2-х кан. осцил

Добавлено: Пн окт 11, 2010 21:19:52
anatol378
ARV вы правы. Чел тупо закрывает симистор. В программе четко указано. А я мельком посмотрел и не заметил сразу. Что сделаешь - новое поколение. Вот "чернобыли" и появляются.

Re: Диммер, чертовщина на выходе MOC (имеется 2-х кан. осцил

Добавлено: Пн окт 11, 2010 22:24:47
mr_smit
anatol378 писал(а):... отключи схему управления (порт). Если лампа не горит, то идет "мусор" по управлению.

Отключал. Не горит. Подключаешь - горит.

Всё, дошло.
1) Надо отступить от нуля 5 мс (50% мощности)
2) Подать импульс на оптопару (длительность не важна...)
3) Симистор сам закроется в нуле.

ARV писал(а):вы не могли бы картинки внедрять прямо в форум? с вашего радикала у меня нифига не открывается половина...

Просто он сегодня тормозит, надо чуть подождать.

Уже поздно, завтра переделаю. Отпишусь. Спасибо ARV!!! Спасибо anatol378!!!

ARV писал(а):и второе: детектор нуля хреновый у вас. выкиньте R2, а R1 посчитайте так, чтобы через него текло не более 1 мА. кстати, мост тоже можно выкинуть, если он больше ни для чего не нужен.


С трансформатора 9 вольт идет. МК выдержит? Без делителя? И как тогда ловить ноль если убрать мост? INT0 на что настроить??? Any change?

Re: Диммер, чертовщина на выходе MOC (имеется 2-х кан. осцил

Добавлено: Вт окт 12, 2010 19:21:23
mr_smit
Датчик нуля не переделывал. Отступаем 7 мс от нуля и подаём импульс 200 мкс на оптрон.
Изображение

Изображение

Код: Выделить всё

// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
  {
  // <- тут надо подождать 800 мкс;  delay_us(800) ???
  TCNT1 = 0; // сбросили таймер
  }

// Timer 1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
  {
  PORTC.5 = 1; // открыли симистор
  delay_us(200); // импульс 200 мкс
  PORTC.5 = 0; // вернулись в режим "ожидания"
  }

Два вопроса у меня:

1. Разница между срабатыванием "датчика" и настоящим нулём = 800 мкс. Датчик срабатывает раньше. Как учесть эту разницу? delay_us(800) ???

2. Как подать кратковременный импульс на оптрон? Опять же delay_us(200) ???.

Нужно ли уйти от этих delay_us? Как лучше сделать?

Re: Диммер, чертовщина на выходе MOC (имеется 2-х кан. осцил

Добавлено: Вт окт 12, 2010 19:47:16
ARV
я вам сказал уже, как уменьшить разницу срабатывания вашего датчика - выкинуть его нафиг и сделать, как я посоветовал. я подаю синхронизацию прямо от 220 вольт через резистор 1,2 мегаома. у вас всего лишь 9 вольт, надо взять резистор 10 килоом и подавать на вход синхронизации. не знаю, на какой подаете вы, но лучше всего подавать на вход, который может генерировать прерывание по изменению уровня - тогда будет ловиться практически точный момент перехода через 0. если у вас нет ограничений по потребляемогму току, то нет смысла давать короткий импульс: просто в нужный момент зажигайте оптрон, а по срабатыванию вашего датчика нуля - гасите :) тогда и задержки в прерывании не потребуется.

но лично я делаю все по таймеру: завожу флаг, который будет означать, что идет импульс. в момент перехода через 0 запускаю таймер на 5 мс. по прерыванию таймера смотрю на флаг: если он 0, то включаю выходной сигнал на оптрон, снова запускаю таймер, но на 200 мкс и при этом делаю флаг = 1. если флаг уже 1, то снимаю сигнал с оптрона и выключаю таймер. вот как-то так...

Re: Диммер, чертовщина на выходе MOC (имеется 2-х кан. осцил

Добавлено: Вт окт 12, 2010 22:39:41
mr_smit
ARV писал(а):...надо взять резистор 10 килоом и подавать на вход синхронизации. не знаю, на какой подаете вы, но лучше всего подавать на вход, который может генерировать прерывание по изменению уровня - тогда будет ловиться практически точный момент перехода через 0...


Я и подаю на вход INT0 меги8. Настройка такая будет:
qwer.jpg
(57.09 КБ) 830 скачиваний

Правильно?

И ещё я не понимаю, если мы уберем диодный мост, то как подключить сигнал синхронизации к МК??? С трансформатора получаем 2 выхода с переменным током, т.е. нет ни "+" ни "-".

Re: Диммер, чертовщина на выходе MOC (имеется 2-х кан. осцил

Добавлено: Ср окт 13, 2010 07:37:51
ARV
убираете диодный мост, один вывод обмотки трансформатора соединяете с общим проводом, а второй вывод через резистор на вход МК для синхронизации. можно и сохранить мост, если он нужен еще для чего-то или вам просто боязно без него - тогда просто удалите R2 и измените R1, как я уже говорил.

на счет настроек скажу так: я с вашими CodeVision-скими штучками не знаком, а настраивать прерывание надо на режим ПО ИЗМЕНЕНИЮ УРОВНЯ - сами разберитесь, как оно там задается в ваших визардах.

для понимания сути процесса синхронизации советую нарисовать кусочек схемы с учетом ВСТРОЕННЫХ В МК ЗАЩИТНЫХ ДИОДОВ и проанализировать, что будет на пине при подаче на него через резистор переменного напряжения. не забывайте: ток через резистор не должен быть больше 1 мА ни при каких условиях! уж лучше меньше, чем больше.

Re: Диммер, чертовщина на выходе MOC (имеется 2-х кан. осцил

Добавлено: Ср окт 13, 2010 07:59:41
mr_smit
Вот как я хочу сделать в итоге:
Диммер.jpg
(129.02 КБ) 958 скачиваний

Нормально?

Re: Диммер, чертовщина на выходе MOC (имеется 2-х кан. осцил

Добавлено: Ср окт 13, 2010 08:15:03
ARV
сойдет.
если будут проблемы - можно использовать оба входа встроенного компаратора и тогда подавать на них прямо со вторички через резисторы, а прерывание уже использовать от компаратора. этот вариант так же отлично работает и для синхронизации по вторичке транса даже предпочтительнее.

Re: Диммер, чертовщина на выходе MOC (имеется 2-х кан. осцил

Добавлено: Ср окт 13, 2010 08:21:47
mr_smit
Вечером сделаю так как нарисовал. Выложу осциллограммы.

Re: Диммер, чертовщина на выходе MOC (имеется 2-х кан. осцил

Добавлено: Ср окт 13, 2010 21:40:35
mr_smit
Итак, собрал я схему (ту что выше указал). И вот что увидел на входе INT0:
1.jpg
(143.12 КБ) 632 скачивания

Напряжение не опускается ниже 2,1 вольта. :( Т.е. ни о каком нуле и речи не идет.

Пришлось подтянуть вход контроллера к земле через резистор 10 кОм:
2.jpg
(93.58 КБ) 543 скачивания

И сразу всё встало на свои места:
3.jpg
(151.59 КБ) 835 скачиваний


Чтобы посмотреть разницу между реальным нулем и моментом срабатывания датчика написал тестовую прошивку ( 3 строчки изменил :) ).Оптрон загорается в момент срабатывания. Разница составила 800 мкс или 0,8 мс.
4.jpg
(141.56 КБ) 572 скачивания

Т.е. опять же при 1,4 вольта контроллер думает что уже ноль. Это пустяк. Зато всё понятно, всё логично, всё работает.

Идем дальше. Теперь меня интересует такой вопрос: плавное включение. Понятно что нужно отступить, к примеру, сначала 10 мс от ноля, потом 9 мс, потом 8 мс и т.д. до полного включения.

Как это сделать красиво в коде?

Менять значения:

Код: Выделить всё

OCR1AH=0x27;  // для       //или  2710 в регистр сравнения
OCR1AL=0x10;  //10 мс
delay_ms(500);

OCR1AH=0x46;  // для       //или 4650 в регистр сравнения
OCR1AL=0x50;  //9 мс
delay_ms(500);

и т.д.

Как то криво... да и плавность тут хромает...

Re: Диммер, чертовщина на выходе MOC (имеется 2-х кан. осцил

Добавлено: Чт окт 14, 2010 17:59:18
Murav
mr_smit писал(а):Как это сделать красиво в коде?

Сделать переменную коэффициент заполнения на основе которой рассчитывать значение OCR1A(все нормальные компиляторы умеют работать с двухбайтными регистрами). Так же при желании можно сделать расчёт коэффициента заполнения из % мощность(зависимость мощность-коэффициент - это синусоида).

Re: Диммер, чертовщина на выходе MOC (имеется 2-х кан. осцил

Добавлено: Чт окт 14, 2010 21:03:49
mr_smit
Да это всё понятно! Я думал может кто кодом поделится. Ладно, сам напишу.

Массив. В него записать заранее просчитанные значения таймера для каждого уровня мощности. И подсовывать в OCR1A. Сделаю - отпишусь.

Re: Диммер, чертовщина на выходе MOC (имеется 2-х кан. осцил

Добавлено: Чт окт 14, 2010 22:58:10
Murav
Могу поделиться массивом из 64 значений четверти синуса.

Re: Диммер, чертовщина на выходе MOC (имеется 2-х кан. осцил

Добавлено: Пт окт 15, 2010 11:34:56
mr_smit
Набросал в Word, чтобы красиво было :)
формулы.jpg
(105.61 КБ) 909 скачиваний


И табличка с графиком:
Таблица, график.jpg
(190.67 КБ) 900 скачиваний


Я думаю нет смысла делать регулировку с шагом 1%. Сделать 20 точек т.е. шаг 5% и нормально будет. Прошивку подправлю - проверю в железе.

Идем дальше :) Пульт ДУ. Замучаю я вас своими вопросами. :)

Re: Диммер, чертовщина на выходе MOC (имеется 2-х кан. осцил

Добавлено: Пт окт 15, 2010 12:01:42
ARV
забодай меня комар! :) вы решили сделать дистанционно-управляемый диммер? да еще, небось, по командам от любого ИК-пульта? я совсем недавно делал такое на тини13...

Re: Диммер, чертовщина на выходе MOC (имеется 2-х кан. осцил

Добавлено: Пт окт 15, 2010 13:26:30
mr_smit
Да, дистанционно управляемый диммер. Для МОЕГО пульта от тв. тюнера (NEC кодировка). И добавить DS1307 чтобы сделать таймер пробуждения. Т.е. часиков с 6:30 до 7:00 утра свет плавно разгорается до 50% мощности (свет это два боковых настенных светильника). В грядущие темные утренние зимние часы это особенно актуально. Плюс к этому добавлю релюшку для того чтобы включать основное освещение ("энергосберегайки").

P.S. Кстати по поводу любого пульта. Я так понимаю надо ставить тогда 2 приемника: TSOP1736 и TSOP1738 правильно? Под RC-5 и под NEC.

Re: Диммер, чертовщина на выходе MOC (имеется 2-х кан. осцил

Добавлено: Пт окт 15, 2010 13:29:55
ARV
это уже будет не диммер с ДУ, а часы с ДУ и будильником-диммером :) вам еще и индикатор придется лепить для часов :)

P.S. NEC от RC5 и от остальных отличается в первую очередь ПРОТОКОЛОМ, а частота несущей - это мелочи, т.к. любой TSOP примет частоту на 2-3 килогерца больше-меньше своей родной, просто дальность приема уменьшится раза в 2.