Перейти к блогу GetChip.net - блог        JilTE[1] - в разработке     Модификации устройств - модификации

 
Текущее время: 17 дек 2018, 16:18

Часовой пояс: UTC + 3 часа [ Летнее время ]



Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: Счетно-фазовое управление в цепи переменного тока
СообщениеДобавлено: 30 июл 2017, 12:56 
Не в сети

Зарегистрирован: 30 июл 2017, 12:37
Сообщения: 1
Уважаемые форумчане!
Предлагаю вашему вниманию недавно рожденный способ управления мощностью в цепи переменного тока. Вполне возможно, что это изобретенный велосипед, но я его не встречал.
Итак, исходные данные:
1. Две параллельные лампы накаливания 12В 50Вт, всего 100Вт активной мощности.
2. Необходимо внедриться в систему, имеющую две кнопки управления – «больше» и «меньше», причем обе с фиксацией, предусматривая ситуацию различных вариантов «нажата»-«отжата» та или другая при сохранении функционала.
3. Исходное симисторное управление сгоревшей платой управления датой изготовления примерно 70-х годов. Фото приложено.
Вложение:
IMG_20160508_153709-1.jpg
IMG_20160508_153709-1.jpg [ 136.8 КБ | Просмотров: 447 ]

К сожалению, анализ вышедшей из строя платы показал, что элементная база там чрезвычайно устарела, и к некоторым элементам не нашлось справочных данных.
Вспоминая об основах управления симистором, всплыли давно забытые формирователи импульсов по «0»
переменного напряжения, генераторы пилообразного напряжения, компараторы, необходимость запоминания на конденсаторах, стабилизация опорного напряжения и пр.
Был опробован именно такой вариант, где в качестве генератора синхронных импульсов использовался
ATtiny13A, синхронизируемый с синусоидой, затем RC-цепь, формирующая пилу и еще один ATtiny13A, сочетающий роли обработки нажатия и сравнения полученной на RCпиле с управляющим напряжением. Практика личного моделирования в Proteus и последующего макетирования обнаружила факт нестабильности системы, особенно критично вблизи малых уровней мощности. Дальнейшая игра с синхронизацией прерываний по таймеру и опроса кнопок не привела к стабильным результатам.
После этого был новый вариант типа «наплевать и забыть», который начался с анализа: «а что же все-таки происходит при питании переменным напряжением». Естественно – начало мостовой выпрямитель и формирователь синхронных с переменным напряжением прямоугольных импульсов, но далее пилы не надо, ведь есть синхроимпульс! В результате, приходим к картине из кадров: пришла полуволна – единица, но они приходят с маленьким промежутком, определяемым прямым падением напряжения на диодах моста. Поэтому мост для синхронизации собираем из диодов Шоттки для максимального приближения к «0». Таким образом, между кадрами имеется некоторый промежуток, который самую малость уменьшит мощность в нагрузке, но это свойство диодов (в т.ч. и симисторов не включаться при нуле!) и он будет очень полезен в дальнейшем. Идея состоит в том, что можно подсчитывать количество импульсов и открывать симистор с вычисляемой задержкой, а поскольку отсчет будет начинаться синхронно с «0», налицо как бы фазовое управление углом (временем) включения нагрузки.
Камнем преткновения оказался момент обработки нажатия кнопок управления. Если прерывание срабатывает, это не значит, что оно начнется синхронно, а сколько времени оно там будет пребывать – вообще неизвестно (пока кнопку не отпустят наконец). Поэтому и здорово использовать маленький промежуток времени между сформированными прямоугольниками. Стандарт 50-герцовой сети дает возможность примерно каждые 10мс опрашивать кнопку без всяких прерываний! Чтобы еще больше обезопасить от рассинхронизации систему, читаем кнопки один раз за этот период времени, все равно реакция системы достаточно быстрая – 10мс. Обладая достаточно высокой тактовой частотой, контроллер в этом макете работает на 9,6 Мгц, в кадре можно посчитать более тысячи импульсов, которые являются градациями мощности и обеспечивают плавное управление яркостью ламп. Кроме всех выше описанных приятностей используем только один микроконтроллер ATtiny13A! Итак, собирая все вместе не забываем о развязке. В моем случае обязательна развязка кнопок управления, ну а симистор – само собой. А еще собственный маломощный стабилизатор для питания контроллера и узла формирования синхроимпульсов. Вот и все.
Фото платы прилагаю, но она разведена под местные условия.
Вложение:
20170710_132527.jpg
20170710_132527.jpg [ 157.33 КБ | Просмотров: 447 ]

Схемка простенькая.
Вложение:
temnitel02-1-trunc_circuit.jpg
temnitel02-1-trunc_circuit.jpg [ 68.5 КБ | Просмотров: 447 ]

Код:
Код:
#define F_CPU 9600000UL // 9.6 MHz
        int InvLight = 1394; //текущее инверсное значение яркости
        //для нуля: 1409-45=1364
        int MaxLight = 1394; //максимальное значение яркости
        int Pulse = 3; //количество импульсов пускового пакета
        bool OnePulse = true; //для однократной генерации п.пакета
        bool OneClick = true; //для однократного опроса нажатия в теч.кадра


        void setup()
        {
        PORTB |= 1<<1 | 1<<3 | 1<<4 | 1<<5; // Подтяг. резисторы на входах
        DDRB |= 1<<0; //| 1<<2; // PB0,2-как выход (вывод 7)

        #pragma optsize-//компилятор не оптимизирует
        CLKPR=0x80; //частота максимальная
        CLKPR=0x00;
        #ifdef _OPTIMIZE_SIZE_
        #pragma optsize+
        #endif
        }

        void MyDelay(unsigned int N)
        {
        while (N-- >0)
        {
        for (int i = 1; i < 10; i++) //ATTiny13 9,6Mhz ~ 6mcs
        asm("nop");
        }
        }

        void loop()
        {
        if (InvLight < 100) {Pulse = 50;} //вблизи 0 симистор может закрыться
        if (InvLight >= 100) {Pulse = 3;} //пакет перекрывает неуверенную зону
        //при приближении к ней
        if (bit_is_clear(PINB,PB1) && OnePulse)
        {
        MyDelay(InvLight);
        for (int i=0; i<Pulse ;i++)
        {
        PORTB |= 1<<0;
        MyDelay(1);
        PORTB &=~1<<0;
        MyDelay(1); //
        }
        OnePulse = false;
        OneClick = true;

        }
        if (bit_is_set(PINB,PB1) ) {OnePulse = true;}

        if (OneClick) //разрешен один клик
        {
        if (bit_is_clear(PINB,PB3)) //увеличение мощности UP
        {
        if (InvLight > 0) InvLight--; //
        }

        if (bit_is_clear(PINB,PB4)) //уменьшение мощности DOWN
        {
        if (InvLight < MaxLight) InvLight++;
        }
        }
        OneClick = false;

        }


Любая критика будет принята с благодарностью!


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

Часовой пояс: UTC + 3 часа [ Летнее время ]


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

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


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

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB