Easyelectronics.ru

Электроника для всех
Текущее время: 18 ноя 2019, 10:23

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 41 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Фазо-импульсная модуляция на симисторе
СообщениеДобавлено: 01 дек 2014, 01:30 
Старожил
Аватара пользователя

Зарегистрирован: 28 сен 2012, 22:11
Сообщения: 377
Откуда: г.Таганрог/г.Геленджик/г.Одесса
Доброго времени суток.
Я тут недавно задался целью сделать управление гирляндами для елки. Соответственно нужна плавная регулировка яркости. Причем аж для 8 каналов. Решил использовать для этого симисторы в связке с оптосимисторами MOC3023 и детектор нуля на оптопаре. Сделал вот такую схему:
Вложение:
FIM.jpg
FIM.jpg [ 240.13 Кб | Просмотров: 5666 ]


В теории все просто, ловим переход синуса через 0, ждем некоторый интервал времени и включаем симистор. Чем позже включили, тем меньше яркость. Выключится он сам при переходе тока через 0. но на практике все оказалось как-то не очень просто. Сделал так:
Код:
// AtMega8, частота 8МГц.
ISR(INT0_vect){ // словили переход через 0, запустили таймер
   OCR2 = 250;
   TCCR2 |= _BV(WGM21) | _BV(CS20);
   GICR &= ~(1<<INT0);
}

ISR(TIMER2_COMP_vect){

if(++cnt >= 255){ // максимальна задержка 255 тиков
   cnt = 0;
   TCCR2 = 0; // выключаем таймер
   GICR = (1<<INT0); // включаем прерывания
}

if(cnt == brightness[0]){ // если досчитали до значения яркости канала - включаем его
  CH1_H;
  _delay_us (20); // задержка для включения симистора
  CH1_L;
}

if(cnt == brightness[1]){
  CH2_H;
  _delay_us (20);
  CH2_L;
}

if(cnt == brightness[2]){
  CH3_H;
  _delay_us (20);
  CH3_L;
}

if(cnt == brightness[3]){
  CH4_H;
  _delay_us (20);
  CH4_L;
}

if(cnt == brightness[4]){
  CH5_H;
  _delay_us (20);
  CH5_L;
}

if(cnt == brightness[5]){
  CH6_H;
  _delay_us (20);
  CH6_L;
}

if(cnt == brightness[6]){
  CH7_H;
  _delay_us (20);
  CH7_L;
}

if(cnt == brightness[7]){
  CH8_H;
  _delay_us (20);
  CH8_L;
}

}


В принципе оно работает. Но если гонять яркость туда сюда, то периодически идут скачки яркости гирлянды. Плюс на малой яркости заметна равномерная пульсация, через равные промежутки времени (примерно 0,5с ярче, еще 0,5с тусклее). В чем может быть проблема? Может я как-то не так понимаю принцип работы такой системы?

_________________
Количество полученного опыта прямо пропорционально выведенному из строя оборудованию....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Фазо-импульсная модуляция на симисторе
СообщениеДобавлено: 01 дек 2014, 03:26 
Старожил

Зарегистрирован: 19 июн 2012, 14:17
Сообщения: 3440
Возможно происходят пропуски поджига силового или управляющего симистора, например в следствии короткого управляющего импульса 20мкс или из-за маленького тока через управляющий электрод при заполнении близком к макс. и мин. значениям.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Фазо-импульсная модуляция на симисторе
СообщениеДобавлено: 01 дек 2014, 06:47 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3546
Откуда: Новосибирск
Оптопары тоже дают свои задержки. Лучше всего тиристорами управлять импульсными трансформаторами. Для надежного запуска тиристоров, симисторов на трансформаторы нужно подавать пачки импульсов. То есть схема получается такая:
на логике делается управляемые генераторы импульсов, частота несколько килогерц. Эти генераторы запускаются с МК (гирлянды). На выходе генераторов импульсные трансформаторы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Фазо-импульсная модуляция на симисторе
СообщениеДобавлено: 01 дек 2014, 13:04 
Старожил
Аватара пользователя

Зарегистрирован: 28 сен 2012, 22:11
Сообщения: 377
Откуда: г.Таганрог/г.Геленджик/г.Одесса
Да в том то и дело, что яркость может прыгнуть как в большую, так и в меньшую сторону. При этом абсолютно рандомно, но всегда ближе к середине яркости. А вот небольшие пульсации яркости есть всегда. Импульс увеличивал, результат тот же. С трансформаторами, конечно, интересно, но там сам схема получится размером с ящик, как-то сложновато для гирлянд =) У китайцев вообще все напрямую пашет, вообще без развязок. Кстати, интересно, когда тестировал алгоритм на Mega16 со схемой, собранной навесом и лампе 220В,таких проблем не было. Может надо частоту таймера пересчитать? Может быть такое, что он не всегда попадает в полупериод?

_________________
Количество полученного опыта прямо пропорционально выведенному из строя оборудованию....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Фазо-импульсная модуляция на симисторе
СообщениеДобавлено: 01 дек 2014, 13:24 
Старожил
Аватара пользователя

Зарегистрирован: 13 дек 2010, 23:15
Сообщения: 2065
Откуда: Киев
Когда то сталкивался с подобной проблемой. Во первых надо ограничить мин и макс значения яркости ,( сделать отступы от начала и конца полупериода например вольт 20). Ну и время работы таймера проверить/пересчитать.
Алсо у атмела есть аппноут по фим.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Фазо-импульсная модуляция на симисторе
СообщениеДобавлено: 01 дек 2014, 13:27 
Старожил
Аватара пользователя

Зарегистрирован: 28 сен 2012, 22:11
Сообщения: 377
Откуда: г.Таганрог/г.Геленджик/г.Одесса
Хорошо, вечером еще над ним поиздеваюсь.

_________________
Количество полученного опыта прямо пропорционально выведенному из строя оборудованию....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Фазо-импульсная модуляция на симисторе
СообщениеДобавлено: 01 дек 2014, 14:15 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2627
Откуда: Санкт-Петербург
Да, и вряд ли имеет отношение к делу, но я бы рефлекторно переписал код в виде
Код:
if(cnt == brightness[0]) CH1_H;
if(cnt == brightness[1]) CH2_H;
...
_delay_us (20); // задержка для включения симистора
CH1_L;
CH2_L;
...

(чтобы не было такого, что внутри прерывания сработало сразу несколько задержек).

Или даже выпилил бы задержку вообще:
Код:
CH1_L;
CH2_L;
...
if(cnt == brightness[0]) CH1_H;
if(cnt == brightness[1]) CH2_H;
...

(импульс получится ровно на один период таймера)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Фазо-импульсная модуляция на симисторе
СообщениеДобавлено: 01 дек 2014, 14:38 
Только пришел

Зарегистрирован: 31 дек 2013, 11:50
Сообщения: 6
Насчет миганий через 0,5с скорее всего вот этот код
if(++cnt >= 255){ // максимальна задержка 255 тиков
cnt = 0;
TCCR2 = 0; // выключаем таймер
GICR = (1<<INT0); // включаем прерывания
}
срабатывает чуть раньше детектирования 0(то есть если бы прерывние int0 было включено то оно бы сработало), сразу после его выполнения срабатывает прерывание int0, таким образом вот эта маленькая задержка копиться и вконце концов происходит пропуск импульса. Уменьшь 255, ну а про минимальную яркость то что нужно выдержать некоторый интервал уже писали.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Фазо-импульсная модуляция на симисторе
СообщениеДобавлено: 01 дек 2014, 14:41 
Старожил
Аватара пользователя

Зарегистрирован: 28 сен 2012, 22:11
Сообщения: 377
Откуда: г.Таганрог/г.Геленджик/г.Одесса
Всем спасибо за помощь. Вечером отпишусь о результатах =)

_________________
Количество полученного опыта прямо пропорционально выведенному из строя оборудованию....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Фазо-импульсная модуляция на симисторе
СообщениеДобавлено: 03 дек 2014, 02:36 
Старожил
Аватара пользователя

Зарегистрирован: 28 сен 2012, 22:11
Сообщения: 377
Откуда: г.Таганрог/г.Геленджик/г.Одесса
В общем запустил, проблема оказалась в нестабильном питании, не совсем удачно переделал китайски БП с 5В на 3.3В. Теперь пропала пульсация на малой яркости. Вот только что-то никак не могу понять, как правильно рассчитать таймер, чтобы его срабатывания нормально укладывались в полупериод. Градаций 200, думаю, хватит. Понимаю, что вопрос позорный, но что-то на меня ступор нашел...

_________________
Количество полученного опыта прямо пропорционально выведенному из строя оборудованию....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Фазо-импульсная модуляция на симисторе
СообщениеДобавлено: 03 дек 2014, 04:59 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5278
если хотите 200 срабатываний таймера на полупериод то получаете 200 * 100 = 20 кгц частота срабатывания таймера

делал похожую схему только без D1
он что вам дает? теоретически им можно сделать срабатывания детектора раньше не превышая предельных токов светодиода оптопары
но у вас и без этого диода при гасящем 120К предельный ток не будет превышен


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Фазо-импульсная модуляция на симисторе
СообщениеДобавлено: 04 дек 2014, 00:52 
Старожил
Аватара пользователя

Зарегистрирован: 28 сен 2012, 22:11
Сообщения: 377
Откуда: г.Таганрог/г.Геленджик/г.Одесса
Стабилитрон просто для защиты от сюрпризов сети 220В =)

_________________
Количество полученного опыта прямо пропорционально выведенному из строя оборудованию....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Фазо-импульсная модуляция на симисторе
СообщениеДобавлено: 04 дек 2014, 02:26 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5278
BARS_ писал(а):
Стабилитрон просто для защиты от сюрпризов сети 220В =)

лишним не будет конечно)
но светодиод оптопары такой же стабилитрон, только с меньшим максимальным током
при резисторе 120к нужно подать на вход 6000В в пике, чтобы превысить допустимые для светодиода оптопары 50мА


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Фазо-импульсная модуляция на симисторе
СообщениеДобавлено: 04 дек 2014, 02:53 
Старожил
Аватара пользователя

Зарегистрирован: 28 сен 2012, 22:11
Сообщения: 377
Откуда: г.Таганрог/г.Геленджик/г.Одесса
Странно. Уже все рассчитано, яркость меняется плавно. НО, периодически есть какие-то провалы в яркости, буквально на долю секунды. При этом постоянно в разных областях значений яркости.

_________________
Количество полученного опыта прямо пропорционально выведенному из строя оборудованию....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Фазо-импульсная модуляция на симисторе
СообщениеДобавлено: 04 дек 2014, 02:58 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5278
первое. у вас включение симистора в основном цикле или на прерывании? а прерывания не запрещаете нигде?
дизайн должен предполагать точные тайминги по включению симисторов

второе. вы симистор импульсом включаете или держите на нем потенциал до момента перехода через ноль?
весьма вероятно, что вы поздно ловите ноль и ваш потенциал на открытие симистора снимается позже перехода через ноль, открывая симистор раньше срока на следующий полупериод

добавка - посмотрел ваш код.... надо полностью избавиться от _delay


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Фазо-импульсная модуляция на симисторе
СообщениеДобавлено: 04 дек 2014, 03:14 
Старожил
Аватара пользователя

Зарегистрирован: 28 сен 2012, 22:11
Сообщения: 377
Откуда: г.Таганрог/г.Геленджик/г.Одесса
От delay уже избавился, сейчас вот так:

Код:
ISR(INT0_vect){ // словили переход через 0, запустили таймер
   GICR &= ~(1<<INT0);
   OCR2 = 0x31;
   TCCR2 |= _BV(WGM21) | _BV(CS21);
}

ISR(TIMER2_COMP_vect){

if(++cnt >= 160){ // максимальна задержка 255 тиков
   cnt = 0;
   TCCR2 = 0; // выключаем таймер
   GICR = (1<<INT0); // включаем прерывания
}

PORTB = 0;
CH1_L;
CH2_L;

if(cnt == brightness[0]) CH1_H;
if(cnt == brightness[1]) CH2_H;
if(cnt == brightness[2]) CH3_H;
if(cnt == brightness[4]) CH4_H;
if(cnt == brightness[4]) CH5_H;
if(cnt == brightness[5]) CH6_H;
if(cnt == brightness[6]) CH7_H;
if(cnt == brightness[7]) CH8_H;

}


Сейчас импульс держится до перехода через 0.

_________________
Количество полученного опыта прямо пропорционально выведенному из строя оборудованию....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Фазо-импульсная модуляция на симисторе
СообщениеДобавлено: 04 дек 2014, 03:41 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5278
если есть возможность посмотрите осциллографом временную задержку датчику нуля
при ваших параметрах задержка должна быть довольно заметная
по хорошему нужно делать программную коррекцию на ваш датчик нуля
броски вполне могут быть из-за этого, но не 100%

еще хорошо бы логическим анализатором посмотреть на времена между входом МК по датчику нуля и выходом МК на какой-нибудь симистор
просто чтобы убедиться, что программа работает так как задумано


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Фазо-импульсная модуляция на симисторе
СообщениеДобавлено: 04 дек 2014, 03:45 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5278
еще
что такой 160 отсчетов? это длина полупериода сети в отсчетах таймера?
определили расчетно?
если нет осциллографа и нет возможности увидеть как оно на самом деле
попробуйте сократить программный цикл так чтобы иметь гарантировано снятие управляющих потенциалов с симисторов до нуля
если броски пропадут, значит верно предположение о том, что вы пропускаете ноль и заходите в следующий полупериод


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Фазо-импульсная модуляция на симисторе
СообщениеДобавлено: 04 дек 2014, 06:08 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5278
кстати
у вас детектор нуля срабатывает только по одной полуволне (я в своей схеме перед оптопарой ставил диодный мост)
а где в коде вы решаете эту проблему?
не вижу


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Фазо-импульсная модуляция на симисторе
СообщениеДобавлено: 04 дек 2014, 13:49 
Старожил
Аватара пользователя

Зарегистрирован: 28 сен 2012, 22:11
Сообщения: 377
Откуда: г.Таганрог/г.Геленджик/г.Одесса
Осциллографа пока нет, возможно, придет на след. неделе. Анализатором подцеплюсь к схеме, гляну. 160 отсчетов подобрано экспериментально. Хотя таймер работает на частоте 20КГц, следовательно должно быть 200 отсчетов таймера, но они туда почему-то никак не помещаются. Если делать меньше - яркость при конце снижается ступенькой, больше - начинает сильнее дергаться.
Да, точно, совсем забыл про 0. А что тут лучше, добавить мост или скорректировать программно?

_________________
Количество полученного опыта прямо пропорционально выведенному из строя оборудованию....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Фазо-импульсная модуляция на симисторе
СообщениеДобавлено: 04 дек 2014, 14:00 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5278
BARS_ писал(а):
Осциллографа пока нет, возможно, придет на след. неделе. Анализатором подцеплюсь к схеме, гляну. 160 отсчетов подобрано экспериментально. Хотя таймер работает на частоте 20КГц, следовательно должно быть 200 отсчетов таймера, но они туда почему-то никак не помещаются. Если делать меньше - яркость при конце снижается ступенькой, больше - начинает сильнее дергаться.
Да, точно, совсем забыл про 0. А что тут лучше, добавить мост или скорректировать программно?


то что в 200 не вписывается дает намек на то, что что-то не так с таймингами
посчитайте теоретически задержку детектора нуля. когда будет осциллограф проверите фактическую задержку
для расчета надо взять из даташита на вашу оптопару trigger curren и forward voltage и с учетом ваших сопротивлений посчитать при каком напряжении полуволны сработает датчик
отсюда будет ясно сколько мкс отделяют срабатывание от реального нуля
возможно именно эта задержка причина не вписывания в 200 отсчетов

у вас там запас по максимальным токам, я бы снизил сопротивление со 120к до 50-100к, не превышая максимальный ток стабилитрона
оставшуюся задержку корректировать программно

проще поставить мост
можно и программно, но тогда получится, что вы будете одну полуволну ловить, а вторую вслепую предсказывать


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Фазо-импульсная модуляция на симисторе
СообщениеДобавлено: 04 дек 2014, 15:04 
Старожил

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2867
PC817 даёт задержку относительно нуля. Года полтора назад делал ФИМ, столкнулся с этим.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Фазо-импульсная модуляция на симисторе
СообщениеДобавлено: 04 дек 2014, 18:33 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5278
задержку даст любая оптоэлектроника если нет компенсационной схемы

кстати, читал даташит на pc817. без моста и без стабилитрона оптопара накроется, у нее всего 6В обратное допустимое напряжение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Фазо-импульсная модуляция на симисторе
СообщениеДобавлено: 04 дек 2014, 19:42 
Старожил

Зарегистрирован: 16 авг 2012, 23:27
Сообщения: 1941
Откуда: Москва
Буду дома - скину схемку хорошего детектора нуля, там к оптопаре дополнительно нужно щепотку деталек добавить. Зато гораздо точнее детектит пересечение.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Фазо-импульсная модуляция на симисторе
СообщениеДобавлено: 04 дек 2014, 20:07 
Старожил

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2867
axill писал(а):
задержку даст любая оптоэлектроника если нет компенсационной схемы

кстати, читал даташит на pc817. без моста и без стабилитрона оптопара накроется, у нее всего 6В обратное допустимое напряжение

Отчего накроется то? Там диод стоит в обратку.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 41 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB