0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 278

Фазо-импульсная модуляция на симисторе

30.11.2014, 00:43. Показов 18104. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Я тут недавно задался целью сделать управление гирляндами для елки. Соответственно нужна плавная регулировка яркости. Причем аж для 8 каналов. Решил использовать для этого симисторы в связке с оптосимисторами MOC3023 и детектор нуля на оптопаре. Сделал вот такую схему:


В теории все просто, ловим переход синуса через 0, ждем некоторый интервал времени и включаем симистор. Чем позже включили, тем меньше яркость. Выключится он сам при переходе тока через 0. но на практике все оказалось как-то не очень просто. Сделал так:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
 // AtMiko8, частота 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 == brykhtness[0]){ // если досчитали до значения яркости канала - включаем его
CH1_H;
_delay_us (20); // задержка для включения симистора
CH1_L;
}
 
if(cnt == brykhtness[1]){
CH2_H;
_delay_us (20);
CH2_L;
}
 
if(cnt == brykhtness[2]){
CH3_H;
_delay_us (20);
CH3_L;
}
 
if(cnt == brykhtness[3]){
CH4_H;
_delay_us (20);
CH4_L;
}
 
if(cnt == brykhtness[4]){
CH5_H;
_delay_us (20);
CH5_L;
}
 
if(cnt == brykhtness[5]){
CH6_H;
_delay_us (20);
CH6_L;
}
 
if(cnt == brykhtness[6]){
CH7_H;
_delay_us (20);
CH7_L;
}
 
if(cnt == brykhtness[7]){
CH8_H;
_delay_us (20);
CH8_L;
}
 
}
В принципе оно работает. Но если гонять яркость туда сюда, то периодически идут скачки яркости гирлянды. Плюс на малой яркости заметна равномерная пульсация, через равные промежутки времени (примерно 0,5с ярче, еще 0,5с тусклее). В чем может быть проблема? Может я как-то не так понимаю принцип работы такой системы?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.11.2014, 00:43
Ответы с готовыми решениями:

Широко импульсная модуляция
Составить проекты по изменению яркости светодиода от min до max и от max до min с шагом 1. min = 118, max=137.

Широтно-импульсная, фазо-импульсная модуляции
Здравствуйте! Мне нужно составить 2 модулированных сигнала. Вот программа для ptm: A=9; f=3; Fs=1000; fc=10; t=0:1/Fs:3; ...

Импульсная кодовая модуляция и дифференциальная импульсная кодовая модуляция сигнала
Добрый день, дали задание, создать программу, реализующую преобразование из ИКМ в ДИКМ. С алгоритмом и порядком действий проблем не...

40
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
03.12.2014, 13:13
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от BORS_
Осциллографа пока нет, возможно, придет на след. неделе. Анализатором подцеплюсь к схеме, гляну. 160 отсчетов подобрано экспериментально. Хотя таймер работает на частоте 20КГц, следовательно должно быть 200 отсчетов таймера, но они туда почему-то никак не помещаются. Если делать меньше - яркость при конце снижается ступенькой, больше - начинает сильнее дергаться.
Да, точно, совсем забыл про 0. А что тут лучше, добавить мост или скорректировать программно?
то что в 200 не вписывается дает намек на то, что что-то не так с таймингами
посчитайте теоретически задержку детектора нуля. когда будет осциллограф проверите фактическую задержку
для расчета надо взять из даташита на вашу оптопару trigger curren и forward voltage и с учетом ваших сопротивлений посчитать при каком напряжении полуволны сработает датчик
отсюда будет ясно сколько мкс отделяют срабатывание от реального нуля
возможно именно эта задержка причина не вписывания в 200 отсчетов

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

проще поставить мост
можно и программно, но тогда получится, что вы будете одну полуволну ловить, а вторую вслепую предсказывать
0
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 2,048
03.12.2014, 14:17
PC817 даёт задержку относительно нуля. Года полтора назад делал ФИМ, столкнулся с этим.
0
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
03.12.2014, 17:46
задержку даст любая оптоэлектроника если нет компенсационной схемы

кстати, читал даташит на pc817. без моста и без стабилитрона оптопара накроется, у нее всего 6В обратное допустимое напряжение
0
0 / 0 / 0
Регистрация: 12.08.2012
Сообщений: 1,217
03.12.2014, 18:55
Буду дома - скину схемку хорошего детектора нуля, там к оптопаре дополнительно нужно щепотку деталек добавить. Зато гораздо точнее детектит пересечение.
0
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 2,048
03.12.2014, 19:20
Цитата Сообщение от oxytt
задержку даст любая оптоэлектроника если нет компенсационной схемы

кстати, читал даташит на pc817. без моста и без стабилитрона оптопара накроется, у нее всего 6В обратное допустимое напряжение
Отчего накроется то? Там диод стоит в обратку.
0
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
03.12.2014, 20:02
Цитата Сообщение от Hotd
Цитата Сообщение от oxytt
задержку даст любая оптоэлектроника если нет компенсационной схемы

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

где диод? в обратку там только стабилитрон, накроется если его убрать
0
Dmytryy_1_b
03.12.2014, 21:04
Насчет детектирования нуля, если блок питания не импульсный можно сигнал синхронизации взять между выпрямителем и стабилизатором напряжения

Dmytryy_1_b
03.12.2014, 21:12
Можно еще сигнал детектирования подать на Ацп чтоб посмотреть вообще что там происходит
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
03.12.2014, 21:47
Цитата Сообщение от Dmytryy_1_b
Можно еще сигнал детектирования подать на Ацп чтоб посмотреть вообще что там происходит
это только если нет осциллографа
там смотреть не на что)) если только где-то что-то не так запаяно
0
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 278
03.12.2014, 22:14
Итак, начнем по пунктам =)

Добавил мост и поставил резистор на 47К (видимо, маловато, мост греется). Нашел небольшую ошибку в коде, прерывание было настроено на детектирование любого изменения фронта на выводе, изменил на детектирование нарастающего фронта.

Ткнулся анализатором в схему. Получил вот это:




(максимальная яркость)


(средняя яркость)

Задержка вроде не особо большая и влиять на работу не должна. Однако срывы в работе как были, так никуда и не ушли. Хотя стали появляться реже. Диапазон яркости растянулся до 180 отсчетов и судя по диаграмме - это практически максимум. Снятие напряжения с симистора сейчас происходит по достижению конца диапазона:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
ISR(TIMER2_COMP_vect){
 
if(++cnt >= BR_CONST){ // максимальна задержка 255 тиков
cnt = 0;
TCCR2 = 0; // выключаем таймер
GICR = (1<<INT0); // включаем прерывания
 
PORTB = 0;
CH1_L;
CH2_L;
}
 
if(cnt == brykhtness[0]) CH1_H;
if(cnt == brykhtness[1]) CH2_H;
if(cnt == brykhtness[2]) CH3_H;
if(cnt == brykhtness[3]) CH4_H;
if(cnt == brykhtness[4]) CH5_H;
if(cnt == brykhtness[5]) CH6_H;
if(cnt == brykhtness[6]) CH7_H;
if(cnt == brykhtness[7]) CH8_H;
}
0
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 278
03.12.2014, 22:17
0
0 / 0 / 0
Регистрация: 12.08.2012
Сообщений: 1,217
03.12.2014, 22:54
http://www.dextrel.net/diyzerocrosser.htm Вот тот самый детектор. В данном варианте реагирует на оба полупериода.
0
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
03.12.2014, 23:58
Цитата Сообщение от mShit
http://www.dextrel.net/diyzerocrosser.htm Вот тот самый детектор. В данном варианте реагирует на оба полупериода.
интересный вариант
насчет двух полупериодов - ничего удивительного, там диодный мост)

я так понимаю работает он так - энергия накапливается на электролите в течении полупериода
в нуле сети потенциал базы транзистора сравнивается с потенциалом плюсового контакта электролита из-за чего происходит открытие транзистора и разрядка электролита на светодиод оптопары

возникли два вопроса:
1. чем ограничено напряжение зарядки электролита?
2. чем задается ширина импульса детектора? указано 1мс
0
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 278
04.12.2014, 00:10
А в чем у меня может быть проблема?
0
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
04.12.2014, 00:18
Цитата Сообщение от BORS_
А в чем у меня может быть проблема?
выбросы яркости на 95% связаны именно с пропусками нуля
сделайте заведомо успешное отключение симистора во время

п.с. тема заразная))) у меня перестала работать моя схема, причем уже была отлажена эта часть на отдельном МК, отработанная схема и прошивка
и тут вчера то работает - то нет, потом вообще перестала. все перепаял, выпаял МК - прошивка на месте
проверил детектирование нуля - есть
а не работает! вот зараза)
вынужден на макетку опять все ставить и искать проблему
0
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 278
04.12.2014, 00:38
У меня все уже на платах спаяно, не люблю возиться с 220В, когда все на проводах висит да еще и к ноуту подключено.

Так судя по тому, что показывает анализатор, напряжение с симистора стабильно снимается до перехода через 0. И выбросы (точнее провалы) не обязательно на 95%, они возникают во всем диапазоне. Тааак, кстати, если яркость не меняется, то провалов нет. Так, так, а не может ли, случайно, быть такой ситуации, что значение яркости изменилось в такой момент, что в полупериоде с ним значение счетчика не совпало (там же строгое равно стоит), вот он и провал. Сейчас работают все 8 каналов с разной яркостью и ни один не дергается. Т.е. изменение яркости придется синхронизировать с таймером, чтобы не было провалов.
0
0 / 0 / 0
Регистрация: 12.08.2012
Сообщений: 1,217
04.12.2014, 12:37
Цитата Сообщение от oxytt
1. чем ограничено напряжение зарядки электролита?
2. чем задается ширина импульса детектора? указано 1мс
Напряжение на электролите ограничено делителем R3/(R1+R2+R3).
Ширина связана с порогом срабатывания и временем нарастания сетевого напряжения, для 60Гц например ширина будет меньше.
0
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
04.12.2014, 13:37
Цитата Сообщение от mShit
Напряжение на электролите ограничено делителем R3/(R1+R2+R3).
Ширина связана с порогом срабатывания и временем нарастания сетевого напряжения, для 60Гц например ширина будет меньше.
Посчитал, для входящего пика синуса в 310в подучается на конденсаторе 15в, а по номиналу стоит 10в
В статье явно указано, что ширина импульса не зависит ни от напряжения ни от частоты
0
0 / 0 / 0
Регистрация: 12.08.2012
Сообщений: 1,217
04.12.2014, 13:51
Цитата Сообщение от oxytt
В статье явно указано, что ширина импульса не зависит ни от напряжения ни от частоты
The typical putsi width is 1ms at 50Hz, omd 0.83ms at 60Hz,when using the somponent values shown.
От напряжения сети не зависит, зависит в некоторой степени от компонентов схемы.
0
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
04.12.2014, 14:10
Да, от частоты зависит, пропустил (забыл, читал бегло)
И все же. Если разрядка электролита происходит при переходе через ноль, то ширина импульса зависит от того, что раньше произойдет - разрядится конденсатор или закроется транзистор, так ведь?
Раз от частоты зависит видимо конденсатор стоит с запасом и тразистор закрывается как только потенциал базы падает ниже 0.6в от эмитера. Так?
Просто для понимания.

Хорошо иметь импульс ровно в нуле, с другой стороны компенсировать сдвиг можно програмно. Правда возникает факт ошибки. И если на малых мощностях можно просто сделать "мертвую зону" которая гарантирует, что не перескочим через ноль в следующий полупериод, то на полной мощности "промахи" увеличат помехи, потому, что включерие будет не в нуле, а в конце предыдущего полупериода
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.12.2014, 14:10

Широтно-импульсная модуляция (создание)
Ребят. Долго рассказывать. Вот лучше посмотрите что получается: clear all; clc; close all; % Построение треугольного импульса ...

Дифференциально импульсная кодовая модуляция
народ подскажите нужно написать курсач ,на тему дифференциально импульсная кодовая модуляция... теорию написал) А с реализацией...

Фазовый регулятор на симисторе
Всем привет. Не совсем вопрос. Очень срочно понадобилось регулировать мощность индуктивной нагрузки по цифре. За вечер на пару с гуглом и...

Шунтирующий регулятор напряжения на симисторе
Схема представляет из себя шунтирующий стабилизатор напряжения. А вот когда нагрузка отсутствует куда симистор рассеивает всю выдаваемую...

Регулятор напряжения на симисторе до 25А
Господа нужна ваша помощь. Нашёл схему в интернете для регулятора напряжения, но в этой схеме симистор был слабенький(TRIAC BT136-600E)....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru