27 МОСКОВСКАЯ ВСТРЕЧА
Форум самогонщиков Сайт Барахолка Магазин 27 МОСКОВСКАЯ ВСТРЕЧА

Маленький скетч для управления триаком Ардуиной.

Форум самогонщиков Автоматика
Sonologist Профессор Москва 2.5K 885
24 Мая 19, 08:00
Друзья с ардуиновского сайта помогли мне сваять кусочек скетча, сильно упрощающего управлением триаком при фазоимпульсном
способе регулирования и стабилизации нагрева. То есть, не надо пересчитывать напряжение и мощность в угол открытия триака,
а сразу пользоваться временем. Делюсь.


/*   Объявляем переменную в виде таблицы зависимости времени открытия триака (от перехода напряжения через ноль) в микросекундах
от необходимого процента мощности. Числа по порядку соответствуют доле мощности от 0 до 100% с интервалом 1%*/

unsigned int table[] = {10000, 9362, 9097, 8892, 8718, 8564, 8425, 8295, 8174, 8060, 7952, 7848, 7748, 7652, 7559, 7468,
                        7380, 7294, 7211, 7129, 7048, 6969, 6892, 6816, 6741, 6667, 6594, 6522, 6450, 6380, 6310, 6241,
                        6172, 6104, 6037, 5970, 5903, 5837, 5771, 5706, 5641, 5576, 5511, 5447, 5383, 5319, 5255, 5191,
                        5127, 5064, 5000, 4936, 4873, 4809, 4745, 4681, 4617, 4553, 4489, 4424, 4359, 4294, 4229, 4163,
                        4097, 4030, 3963, 3896, 3828, 3759, 3690, 3620, 3550, 3478, 3406, 3333, 3259, 3184, 3108, 3031,
                        2952, 2871, 2789, 2706, 2620, 2532, 2441, 2348, 2252, 2152, 2048, 1940, 1826, 1705, 1575, 1436,
                        1282, 1108, 903, 638, 0
                      };

byte power; //Процент мощности
unsigned int latency; //Время задержки

void setup()
{
 Serial.begin(9600);
}

/* В данном скетче программа просто последовательно перебирает значения доли мощности от 0 до 100% с шагом 1% для
демонстрации. В реальной программе надо будет выбрать нужный процент мощности. Он равен положению  нужного значения
задержки в таблице*/

void loop ()
{
 for (power=0;power<101;power++)
 {
   delay (100);
   latency=table[power];
   Serial.print(power);
   Serial.print("   ");
   Serial.println(latency);
 }
}


Полагаю, что те, кто хоть немного ориентируется в программировании Ардуино (типа меня),
поймут, о чем речь.
Mnz Магистр Город 254 86
Отв.1  25 Мая 19, 11:12
Мощность измеряется в процентах? Я почему-то думал что в ваттах.
Вот допустим есть ТЭН на 2 кВт и паяльник на 40 Вт. Если я открою симистор на 50 % мощности, то сколько получу на ТЭНе и паяльнике?
Будет разная мощность верно? В том же время в программе она одинаковая.

Программа показывает только чтение из массива и передачу в UART, но никак не открытие симистора с определенным углом.
Массив лучше объявить как const uint16_t table[] Текущее объявление имеет "плавающий" тип, зависимый от платформы и без const массив будет создан в ОЗУ расходуя и без того малый ресурс памяти.
Z_h_e Доцент г. Чайковский 1.1K 313
Отв.2  25 Мая 19, 18:50
Если я открою симистор на 50 % мощности, то сколько получу на ТЭНеMnz, 25 Мая 19, 11:12
50% от номинальной при номинальном напряжении.
без const массив будет создан в ОЗУMnz, 25 Мая 19, 11:12
Но и с ней не факт что во флеш, от компилятора зависит. Надо проверять. А так то да, непозволительная роскошь выкидывать столько ОЗУ.

Еще важный момент. Задержки указаны для идельаного детектора фазы. По всей видимости их надо будет скорректировать по реальный или по другому решить.  Ну и само собой 0% мощность никак нельзя задавать 10000 мс. Есть вероятность вылететь в другой полупериод, тут вообще нельзя давать управляющий импульс на симистор, зачем если 0%?


Sonologist Профессор Москва 2.5K 885
Отв.3  26 Мая 19, 09:40
Программа показывает только чтение из массива и передачу в UART, но никак не открытие симистора с определенным углом.Mnz, 25 Мая 19, 11:12
Да, конкретно этот скетч делает именно это. Чисто для демонстрации. В реале, разумеется, надо определить точку перехода напряжения через ноль, отсчитать от нее соответствующее время и открыть триак через мос3021.
Задержки указаны для идеального детектора фазы. По всей видимости их надо будет скорректировать по реальный или по другому решить.Z_h_e, 25 Мая 19, 18:50
Разумеется, нужна эта коррекция: обычно зеро-детектор срабатывает несколько раньше реального перехода через ноль. Но это можно решить уже на готовом железе посредством осциллографа.
Ну и само собой 0% мощность никак нельзя задавать 10000 мс. Есть вероятность вылететь в другой полупериод, тут вообще нельзя давать управляющий импульс на симистор, зачем если 0%?Z_h_e, 25 Мая 19, 18:50
Совершенно верно. Я вообще предполагаю, что значения, близкие к 0%, на практике не понадобятся. Скорее всего, надо будет ограничиться диапазоном максимум 20-100%, а то и уже.
Sonologist Профессор Москва 2.5K 885
Отв.4  26 Мая 19, 09:52, через 13 мин
Кстати, друзья, кто в курсе (в даташите не нашел): какова минимальная длительность запускающего импульса для ВТА41-600 (800)?
Z_h_e Доцент г. Чайковский 1.1K 313
Отв.5  26 Мая 19, 10:07, через 16 мин
Тут так не скажешь. Ток то синусоидальнный. На 90 градусах можно и покороче импульс, а вот в начале и в конце фазы на коротком может и не открыться.  Я делал меньше микросекунды - работает, но смотреть на цифровом осцилле неудобно на миллисекундных развертках осцилл может его и не заметить. Сделал порядка мс, точно не помню или даже больше.

Правда у меня есть нюанс, у меня триак включен так, что управляющий импульс проходит через нагрузку (зачем-то захотелось фазу "рвать" ) и без нагрузки в начале фазы триак может не открыться. В наладке это было несколько неудобно и тогда сделал если угол открытия в начале фазы, то импульс намного шире.

Во! Ща пикчу найду, может интересно будет. Делал график для наглядности.

Добавлено через 10мин.:

Как ребенок был рад, когда осилил интеграл и вывел такие формулы Улыбающийся.
Маленький скетч для управления триаком Ардуиной
Маленький скетч для управления триаком Ардуиной. Автоматика.

А вот и график.Глядя на него видно, что регулирование в области  (0... 20) градусов и (155... 180) практического смысла не имеет.
Маленький скетч для управления триаком Ардуиной
Маленький скетч для управления триаком Ардуиной. Автоматика.


Добавлено через 15мин.:

Вот еще. Вывел из первой формулы вот эту. Как это сделал я сам не понял. Черкался черкался на листочке и вот, родил.
Маленький скетч для управления триаком Ардуиной
Маленький скетч для управления триаком Ардуиной. Автоматика.


Смотрю, к этой формуле у меня есть такое пояснение "Функция итерационная, чем больше итераций тем точнее. После проведения итераций результат надо разделить на два."  Я вывел ее, а для практического применения не пользовался.