Устройство ФИУ на симисторе (диммер) для Ардуино

abulka
Offline
Зарегистрирован: 01.04.2018

Оптроны у меня такие же 3023 и 3063. Вопрос возник из-за того, что делаю (модифицирую рабочий) блок автоуправления процессами пиво-самогоноварения. На сайте самогонщиков есть коллективное творчество на эту тему с аппаратной и программной частями. Программы большие. Все работает. Они работают по схеме "детектор-программа-управление триаком". Используя Вашу схему, я сниму нагрузку с Ардуинки и нагружу ее какими-нибудь ненужными мульками :) Чтобы иметь возможность пошагового изменения программ и отлавливания ошибок, которых обязательно наделаю, я и спросил про возможность отправить сигнал на ардуинку. (Не силен в аналоговом сегменте, работал когда-то много только с цифрой, отсюда и дурацкие вопросы на простую тему). У меня есть "общепринятый детектор нуля-управление триаком", могу и оттуда использовать "ноль". Просто собирая Вашу схему, нашел свободное место на макетке под 817 и пару-тройку резисторов, а в корпусе блока не очень много свободного места. Вот и задумался заменить одну плату на другую.

Спасибо за ответ.

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

"Не для пития ради, а поправки больного здоровья для." :))

Если есть непонятки (после прочтения доков, конечно) или сомнения, всегда лучше спросить напрямую. Оно надежней. В Вашем случае, на мой взгляд, лучше два отдельныых устройства, поскольку:

1. Они идеологически разные. Это не вариации на одну и ту же тему.

2. После всевозможных опытов останется только одно. И это оставшиеся не должно содержать рудиментов от другого, ухудшающих его собственное качество. Какое бы в итоге не осталось.

3. Удачи! :))

abulka
Offline
Зарегистрирован: 01.04.2018

Так же решил. Немножко потеснил платы. Терпимо. Спасибо

 

abulka
Offline
Зарегистрирован: 01.04.2018

Столкнулся с проблемой.

ШИМ от 0 до 215 - схема работает, как положено. Дальше срыв - лампа вспыхивает и гаснет. Напряжение на нагрузке - 0. Измеряю True RMS вольтметром. Подключаю вход PC817 к +5В - результат тот же, то есть Ардуинка не виновата.

Посмотрел напряжение на стабилитроне VD8 и вижу сильное проседание напряжения от значения ШИМ:

ШИМ=0 - 12В /  100 - 11.8В /  200 - 9.5В /  215 - 9.27В /  220 - 9.0В (срыв. на нагрузке -0) / вход РС817 на +5В - 8.88В

Где можно поискать причину?

Отличия от "родной" схемы: стабисторы VD6-VD7 2С107А, транзистор VT4 - КТ315А вместо Г, С4 - 390пФ (вроде так должно быть, если на схеме только 390). Всё остальное соответствует исходнику.

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

abulka пишет:

ШИМ от 0 до 215 - схема работает, как положено.

У меня на неопределенный срок нет доступа к своей лаборатории и образцу устройства, восроизвести неполадки я не могу, так что придётся "медитировать".

1. В % ШИМ это сколько? Лампа в этом диапазоне набирает ожидаемую мощность, или нет?

2. Плата от остатков флюса хорошо отмыта? Там везде КМОП и слаботочка, это может сказываться.

3. Первоначальную настройку резистором R6 делали?

4. Проседание напряжение на стабилитроне VD8 одинаково, что при подключенной нагрузке, что при отключенной? Переменка, питающая плату, не проседает за счет "макетных" контактов?

5. R4, как на схеме - 22 к, не 2,2 к случаем? :)

abulka
Offline
Зарегистрирован: 01.04.2018

1.  ШИМ = 0 - 0В  ШИМ = 255 - д.б. 100% = 225В, но у меня 0В  На ШИМ=215 у меня на нагрузке 223В

2.  Отмыта. Пайка проводная. Параллельных нет. Высокая часть от низкой разнесена.

3.  Делал. Все по инструкции. Когда лампа почти затухла, на вольтметре  3.7В. Это скорее всего уже враньё. Но когда происходит срыв, вольтметр показывает полный ноль на нагрузке.

4.  22кОм

 Всё плавно работает по программе больше-меньше, но до ШИМ = 215. На нем уже почти полное напряжение входа   

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

Напрягает, что с ростом сигнала управления падает напряжение питания схемы. Такого быть не должно. Давайте попробуем лечить, как современные врачи - симптоматически. Дадим схеме чуть больше тока. Стабилитрон VD8 при этом может перегрузиться в пиках питающего напряжения, но не сильно. Замените R19 c 5,6 кОм на 3,3 кОм. Это должно добавить на питание схемы около 4 мА.

abulka
Offline
Зарегистрирован: 01.04.2018

Сейчас придумаю чего-нибудь. Нет запаса 1-2 Ваттных. Соберу на мелких, потом отпишусь. Но здесь что-то не то. Не может так питание падать, от ШИМ добавляется работа с потреблением только генератору импульсов на 3023 и VT4. Очень большое падение и в работающей зоне. Плохо без осциллографа :))

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

Можно до "лечения" поискать токового "жрача". Посмотреть сколько потребляет узел генератора запускающих импульсов, не возбуждается ли (с чего вдруг?) компаратор. Расчетный действующий ток через балластные резисторы 17 мА. Минимальный ток стабилитрона 3 мА. Оставшихся 14 мА должно хватать на всё про всё.

abulka
Offline
Зарегистрирован: 01.04.2018

1. Понизил общее сопротивление токозадающих резисторов с 12кОм до 9.5 кОм. Срыв остался там же. Стало хуже: изредка вспышки лампы нагрузки при малых значениях ШИМ в районе 30-50 (около 70В на нагрузке). Вернулся к исходным 12кОм

2. Отключил RC-цепь генератора импульсов запуска ТРИАКа. Напряжение на стабилитроне стоит, как вкопанное. От 12В опустилось до 11.9В при изменении ШИМ от 0 до 215. Получается напряжение питания схемы просаживает генератор. Срыв остался на месте.

3. Перебросил всю обвязку компаратора на вторую половину микросхемы (подумал может он хандрит). Ничего не изменилось. Т.е. напряжение на нагрузке достигает максимума при ШИМ=215 (на входе платы - 228В, на нагрузке - 227В). ШИМ=216 Лампа вспыхивает и гаснет. На стабилитроне 11.94В (поднялось на 0.4В относительно последнего работающего режима ШИМ=215). Генератор импульсов отключен, 561ЛА7 просто как буфер между компаратором и транзистором VT4. На нагрузке 0В, т.е. даже не начальное минимальное напряжение, когда еле заметное свечение.

P.S. Проверил напряжение по схеме. На выходе компаратора правильное значение (усредненное) меняется от 1.54В до 11.8В при изменении ШИМ от 0 до 255 (на положительном входе от 4.8В до 5.8В, на отрицательном от 8.3В до 0В). Т.е. здесь всё правильно.

Включил ШИМ = 40. Лампа тихонько горит. Замкнул вход 2 оптрона на ноль - Лампа горит в полный накал. Т.е. оптрон и высокая часть работают.

Получается проблема в районе Генератор импульсов - VT4. Сейчас 9 нога 561ЛА7 и правая сторона кондера С4 в воздухе. Напряжение на стабилитроне в норме. Срыв на том же месте.

Я не вижу, чтобы открывался нормально VT4. Ощущение, что оптрон все время на грани открытия, т.е.

ШИМ=215, U стаб. = 11.92В, Uкол.VT4=11.17В Лампа горит.

ШИМ=216 Лампа моргает.

ШИМ=217, U стаб. = 11.93В, Uкол.VT4=11.21В Лампа не горит.

P.S. P.S.

1. Баластные очень горячие. Плата раскаляется. Включил генератор. Напряжение падает.     Достигает U стаб. = 9.32В, Uкол.VT4=8.6В Лампа горит.                                                                      U стаб. = 9.07В, Uкол.VT4=8.4В Лампа не горит.

2.  Отключил защитный диод VD9. Посмотрел выход генератора-напряжение базы VT4. Имею следующее:

ШИМ=0, Uвых.ген.=1.56В, Uбазы= -0.02В

ШИМ=150, Uвых.ген.=6.8В, Uбазы= -0.2В

ШИМ=210, Uвых.ген.=8.1В, Uбазы= -0.3В

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

Спасибо за подробное описание ситуации. Тут мне жизнь подкинула несколько задачек, которыми придётся заниматься, бросив всё остальное. Как с ними разберусь, сразу вернусь к этому вопросу. Мысли есть, но их нужно целенаправленно подумать. :))

Tolik4
Offline
Зарегистрирован: 05.01.2018

Здравствуйте, извините что слегка не по теме, просто смотрю тут люди с пониманием собрались. У меня вопрос по релейному методу управления симистором: 

В библиотеке PID есть пример для подобной регулировки который представляет из себя по сути ШИМ на частоте 0,2Гц. 

/********************************************************
 * PID RelayOutput Example
 * Same as basic example, except that this time, the output
 * is going to a digital pin which (we presume) is controlling
 * a relay.  the pid is designed to Output an analog value,
 * but the relay can only be On/Off.
 *
 *   to connect them together we use "time proportioning
 * control"  it's essentially a really slow version of PWM.
 * first we decide on a window size (5000mS say.) we then
 * set the pid to adjust its output between 0 and that window
 * size.  lastly, we add some logic that translates the PID
 * output into "Relay On Time" with the remainder of the
 * window being "Relay Off Time"
 ********************************************************/

#include <PID_v1.h>

#define PIN_INPUT 0
#define RELAY_PIN 6

//Define Variables we'll be connecting to
double Setpoint, Input, Output;

//Specify the links and initial tuning parameters
double Kp=2, Ki=5, Kd=1;
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);

int WindowSize = 5000;
unsigned long windowStartTime;

void setup()
{
  windowStartTime = millis();

  //initialize the variables we're linked to
  Setpoint = 100;

  //tell the PID to range between 0 and the full window size
  myPID.SetOutputLimits(0, WindowSize);

  //turn the PID on
  myPID.SetMode(AUTOMATIC);
}

void loop()
{
  Input = analogRead(PIN_INPUT);
  myPID.Compute();

  /************************************************
   * turn the output pin on/off based on pid output
   ************************************************/
  if (millis() - windowStartTime > WindowSize)
  { //time to shift the Relay Window
    windowStartTime += WindowSize;
  }
  if (Output < millis() - windowStartTime) digitalWrite(RELAY_PIN, HIGH);
  else digitalWrite(RELAY_PIN, LOW);

}


Способ рабочий, но хотелось бы более равномерно распределить выделяемую мощность во времени. Обрезание части синусоиды как в предложенных в данном топике примерах справляется с этим на ура, но создает много помех, а в моем случае рядом с нагревателем располагаются несколько датчиков и специально усложнять им жизнь не есть хорошо. Напрашивается использование на переменном токе симистора управляемого оптроном с детекцией ноля и пропусканием в нагрузку целых волн(или полуволн) синусоиды. В случае использования целых волн для регулировки от 0 до 100 с шагом в 1 достаточно периода в 2 секунды. А чтобы равномернее распределить мощность во времени был написан следующий код:

#define RELAY_PIN 6
#define SwitchTime 20

float Power = 0;
float ON = 0;
byte i = 1;
float AvgPower = 0;
unsigned long CurrMillis = 0;
unsigned long PrevMillis = 0;


void setup() {
  pinMode(RELAY_PIN, OUTPUT);
  digitalWrite(RELAY_PIN, LOW);
  Serial.begin(9600);
}

void loop() {
  CurrMillis = millis();
  if (CurrMillis - PrevMillis >= SwitchTime) {
    if (i <= 100) {
      i++;
    }
    else {
      i = 1;
      ON = AvgPower;
      Power = map(analogRead(0), 0, 995, 0, 100);

    }

    AvgPower  = ON / i ;
    if (AvgPower < Power ) {
      digitalWrite(RELAY_PIN, HIGH);
      ON += 100;
    }
    else if (AvgPower >= Power ) {
      digitalWrite(RELAY_PIN, LOW);
    }
    PrevMillis = millis();
  }

}

Допустим нам нужно получить 75% мощности. Пропуская первую волну в нагрузку мы получаем за первый период 100% мощности это больше чем 75, значит на следующий цикл мы ничего не пропускаем и за 2 периода получаем 50% заполнения, что меньше 75 соответственно следующий цикл мы снова подаем мощность в нагрузку и получаем уже 2/3 или 66% и т.д. Код так-же проверен на реальном нагревателе и работает. Вопрос как теперь оптимизировать то что получилось чтобы такая регулировка во-первых занимала меньше ресурсов контроллера, а во-вторых не была привязана к времени выполнения остального цикла программы - иногда хоть и редко на более сложной программе содержащей в себе ПИД регулировку в нагрузку проскакивают лишние волны . Может имеет смысл выполнять регулировку по прерыванию привязанному к таймеру или что-то в этом духе? Раньше подобного не пробовал так что сначала решил спросить совета. Спасибо.

nik182
Offline
Зарегистрирован: 04.05.2015

Гуглите алгоритм Брезенхема в приложении к тиристору. 

Tolik4
Offline
Зарегистрирован: 05.01.2018

Спасибо, действительно, то что нужно) Правда найденные примеры так же нужно вызывать по миллис и зависимость от остального цикла вроде никуда не делась. А автоматизировать этот процесс как-то можно? По-сути, способ и вправду лучше моего велосипеда, но все заданные в первом моем посте вопросы до сих пор актуальны.

ПС нашел пример вызова такой функции по прерыванию при переходе через ноль как в случае с обрезанием кусков синусоиды - мост->оптрон-> нога с прерыванием, но может есть какие-то альтернативы?

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

Tolik4 пишет:

Правда найденные примеры так же нужно вызывать по миллис и зависимость от остального цикла вроде никуда не делась.

Программы, работающие на одном контроллере, всегда будут "отъедать" ресурс друг у друга. Он у них один и общий. Выходом может оказаться аппаратное разделение ресурсов. Взять Тиньку или Нанку, на ней сделать управление симистором по Брезенхему с прерываниями, миллисами и всеми делами, требующими скорости исполнения. ПИД -регулятор и ЧМИ сделать на другом контроллере. Выход ПИДа одним числом передавать удобным способом в Тиньку (Нанку), управляющую симистором.

Tolik4 пишет:
А автоматизировать этот процесс как-то можно?

Что автоматизировать? Не понял.

Tolik4 пишет:
ПС нашел пример вызова такой функции по прерыванию при переходе через ноль как в случае с обрезанием кусков синусоиды - мост->оптрон-> нога с прерыванием, но может есть какие-то альтернативы?

Альтернативы ищут тогда, когда что-то не устраивает в текущем варианте. И альтернативу ищут такую, чтобы избавиться от конкретных минусов. Когда будет ясно, что не устраивает, тогда станет понятно, что искать.

Tolik4
Offline
Зарегистрирован: 05.01.2018

Тут же на форуме нашел очень лаконичный вариант Брезенхема с прямым управлением ногой МК без диджитал райт, достаточно быстрый чтобы вызывать по прерыванию. Прерывание беру с детектора нуля по вполне стандартной схеме оптрон + диодный мост, только с тем отличием что оптрон детектора нуля H11L1 имеет логический выход - на осциллограмме красивые фронты. Сами тиристоры пока подключить не успел, но управляющие импульсы выглядят вполне правдоподобно. Прерывание из-за падения на диодах оптрона и выпрямительного моста запускается чуть раньше реального перехода через 0, но т.к я хочу оставить в качестве драйвера тиристоров оптосимистор с детектором ноля проблемой это стать не должно.

Не устраивает меня необходимость вызова функции Брезенхема по миллис каждые 10мс в случае управления каждой полуволной. Если основной цикл будет занимать больше времени то, как я понимаю (поправьте пожалуйста если ошибаюсь), нормально работать такая регулировка не будет. Добавление отдельного МК тоже решает эту проблему, но мне как-то вариант с прерыванием нравится больше. Хотя изготовление отдельного модуля с цифровым интерфейсом, содержащего всю необходимую обвязку для управления парой силовых тиристоров  по такому алгоритму - идея интересная. В любом случае спасибо за комментарии)

nik182
Offline
Зарегистрирован: 04.05.2015

Расчёт и управление выходной ногой занимает несколько микросекунд. Если его засунуть в прерывание от пересечения нуля напряжения сети всё будет работать, а основной цикл даже не заметит увеличение нагрузки на ядро. Не надо будет миллис.    

Tolik4
Offline
Зарегистрирован: 05.01.2018

Я наверно слегка путано написал, извиняюсь. Именно так я уже и сделал, осталось только подключить к МК тиристорный ключ с MOC3063 и проверить все в живую. 

 

Duino A.R. пишет:

Программы, работающие на одном контроллере, всегда будут "отъедать" ресурс друг у друга. Он у них один и общий. Выходом может оказаться аппаратное разделение ресурсов. Взять Тиньку или Нанку, на ней сделать управление симистором по Брезенхему с прерываниями, миллисами и всеми делами, требующими скорости исполнения. ПИД -регулятор и ЧМИ сделать на другом контроллере. Выход ПИДа одним числом передавать удобным способом в Тиньку (Нанку), управляющую симистором.

Прикинул что Аттини13 должно хватить ног для такого модуля: 3 ноги для SPI (только принимаем),+1нога вход прерывания, +1 управление оптосимистором.

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

Tolik4 пишет:
Прикинул что Аттини13 должно хватить ног для такого модуля: 3 ноги для SPI (только принимаем),+1нога вход прерывания, +1 управление оптосимистором.

Да, должно хватить. Брезенхема считать по прерываниям, я честно, не думал, что можно по-другому. :)) Возможно, прерывания стоит запускать не по началу нового полупериода, а по спаду предыдущего. Тогда зона нечувствительности датчика перехода через "0" не будет играть существенной роли, и оптотиристор силового симистора будет запускаться при минимально возможном напряжении.

Гриша
Offline
Зарегистрирован: 27.04.2014

Tolik4 пишет:

осталось только подключить к МК тиристорный ключ с MOC3063 и проверить все в живую. 

Сори если не правильно понял вопроса...

на кой вам ловить 0 ??? у вас он реализован в MOC3063, она иначе как при переходе через 0 и не откроется... ну разве что, считать полупериоды для перераспределения мощности т.к. скважность управления зависит от этих переходов и не может быть произвольной. 

т.е. подавать на MOC3063 управление в любой момент - она сама решит когда открыться...

 

Tolik4
Offline
Зарегистрирован: 05.01.2018

Duino A.R. пишет:

Возможно, прерывания стоит запускать не по началу нового полупериода, а по спаду предыдущего. Тогда зона нечувствительности датчика перехода через "0" не будет играть существенной роли, и оптотиристор силового симистора будет запускаться при минимально возможном напряжении.

Вроде так и получается. В оптрон H11L1 встроен инвертирующий триггер Шмидта и в описанной мной схеме он выдает "1" во время перехода через ноль. Как я уже писал детектор срабатывает с небольшим опережением и прерывание по RISING как раз приходится на спад предыдущего периода. 

Tolik4
Offline
Зарегистрирован: 05.01.2018

Гриша пишет:

т.е. подавать на MOC3063 управление в любой момент - она сама решит когда открыться...

Все так если бы я включал нагрузку на пару минут и потом на столько же отключал. Тут вопрос в вызове функции на каждый полупериод сетевого напряжения. 

Гриша
Offline
Зарегистрирован: 27.04.2014

UPD

Tolik4 пишет:

Гриша пишет:

т.е. подавать на MOC3063 управление в любой момент - она сама решит когда открыться...

Все так если бы я включал нагрузку на пару минут и потом на столько же отключал. Тут вопрос в вызове функции на каждый полупериод сетевого напряжения. 

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

UPD

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

ну или если все-же у вас ФИМ, а не ШИМ ? если период управления =1сек - переходов через 0 будет 100 шт т.е. минимальное управление 1 полупериод или 1%. если 0,5сек, то управление будет уже 2 % при том-же одном полупериоде.

Tolik4
Offline
Зарегистрирован: 05.01.2018

Сигнал управления на оптосимистор подается весь полупериод. При обсуждаемом методе управления, если я правильно понял, периода управления, в отличии от того же ШИМ, как такового нет. Прерывание используется для вызова функции равномерного распределения мощности с равными промежутками времени независимо от длительности основного цикла программы, который может в таком случае быть больше 10мс.

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

Гриша пишет:

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

не пытайтесь подать сигнал управления в момент перехода через 0  ...

Сначала прочитал... Ничего не понял... Пошёл, взял на грудь пару рюмок под горячую лапшу. Вернулся, там UPD. Опять не пойму. :))

1. Специально считать полупериоды не надо. Нужно, чтобы задание (здесь - это выход ПИД-регулятора) было согласовано по масштабу с алгоритмом Брезенхема.

2. Лучше подавать сигнал управления до момента срабатывания оптотиристора на открытие. Тогда зона нечувствительности на включение будет минимальной. Здесь же не импульсное управление тиристором. Нет импульса управления, которой можно пропустить, если подать его не вовремя. Если выключение, то тоже лучше сообщить об этом до перехода через "0". А выключиться симистор сам, да, когда анодный ток станет меньше тока удержания.

Гриша
Offline
Зарегистрирован: 27.04.2014

Duino A.R. пишет:

1. Специально считать полупериоды не надо. Нужно, чтобы задание (здесь - это выход ПИД-регулятора) было согласовано по масштабу с алгоритмом Брезенхема.

и если период регулирования много больше времени полупериода 50Гц нам вообще нафиг не нужен детектор нуля т.к. выбранная микросхема сама его определит и откроет тиристор на переходе. ИМХО на 1сек приходится 100 полупериодов, если выбрать время задания больше 1 сек детектор нуля можно выкидывать из схемы.

ЗЫ типа период ШИМ > 1сек, дискретность ШИМ равна полупериоду 50Гц и убрать все аппаратные прерывания.

Tolik4
Offline
Зарегистрирован: 05.01.2018

Гриша пишет:

и если период регулирования много больше времени полупериода 50Гц нам вообще нафиг не нужен детектор нуля т.к. выбранная микросхема сама его определит и откроет тиристор на переходе. ИМХО на 1сек приходится 100 полупериодов, если выбрать время задания больше 1 сек детектор нуля можно выкидывать из схемы.

ЗЫ типа период ШИМ > 1сек, дискретность ШИМ равна полупериоду 50Гц и убрать все аппаратные прерывания.

Вы извините, но я все-еще не понимаю( Откуда взялся ШИМ? Чему равен период регулирования в алгоритме Брезенхема? Как детектор ноля в MOC3063 поможет мне вызывать функцию равномерного распределения каждые 10мс в цикле длиной, допустим, 50мс?

Вот код функции равномерного распределения которую я использую, с тем отличием, что у себя я перевел название переменных с немецкого на аглицкий.

int leistung;	// установка мощности
int modulator;	// рабочая переменная
int reg_max;	// макс. значение периода регулирования
		// выходная мощность = leistung / reg_max

#define OUT_EIN (PORTB |= (1<<PB0)); // для примера выход на PB0
#define OUT_AUS (PORTB &= ~(1<<PB0));

void brasenham(void){
	modulator += leistung;
	if(modulator >= reg_max){
			modulator -= reg_max;
			OUT_EIN;
		}
		else	OUT_AUS;
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

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

Tolik4
Offline
Зарегистрирован: 05.01.2018

sadman41 пишет:

Я так понимаю, что если прибор будет полторы секунды выключен, а две - включен...

Откуда вы берете полторы секунды, или одну, или полсекунды? Для обсуждаемого алгоритма за одну секунду работа ключа будет выглядеть как-то так: 0101010100010001000010000100000010000001 и так до 100

sadman41
Offline
Зарегистрирован: 19.10.2016

Tolik4 пишет:

sadman41 пишет:

Я так понимаю, что если прибор будет полторы секунды выключен, а две - включен...

Откуда вы берете полторы секунды, или одну, или полсекунды? 

Я не беру ничего вообще. Выше Гриша написал "Если ... " (т.е. предложил вариант). Вы не поняли принцип, я пояснил. В конце-концов у вас там нагреватель какой-то. Может цементный, киловатт на 10050, которому что секунда, что период...

Если он не подходит, то просто напишите об этом.

Гриша
Offline
Зарегистрирован: 27.04.2014

Tolik4 пишет:

Гриша пишет:

и если период регулирования много больше времени полупериода 50Гц нам вообще нафиг не нужен детектор нуля т.к. выбранная микросхема сама его определит и откроет тиристор на переходе. ИМХО на 1сек приходится 100 полупериодов, если выбрать время задания больше 1 сек детектор нуля можно выкидывать из схемы.

ЗЫ типа период ШИМ > 1сек, дискретность ШИМ равна полупериоду 50Гц и убрать все аппаратные прерывания.

Вы извините, но я все-еще не понимаю( Откуда взялся ШИМ? Чему равен период регулирования в алгоритме Брезенхема? Как детектор ноля в MOC3063 поможет мне вызывать функцию равномерного распределения каждые 10мс в цикле длиной, допустим, 50мс?

ШИМ у вас взялся в следствии выбора микросхемы с детектором нуля, на ней по определению невозможно организовать фазовое регулирование.

длина цикла (пока без привязки к Брезенхаму) 50мс имеет (длительность полуволны 50ГЦ = 1/(50*2) = 10мсек) имеет 5 полуволн. Соответственно для 50 мсек имеем дискретность регулирования 20% - не грубо???

с алгоритмом Брезенхама я не знаком вообще, не смогу пояснить, но это не мешает делать выводы по другим константам.

вариант подхода к решению поставленной задачи: выбрать период регулирования 1сек в нее укладываются 100 полуволн (+- ошибка в 1 полуволну) т.е. дискретность 1% - это та точность с которой можно установить и регулировать мощность.

ИМХО. отсюда вывод: убиваем все прерывания и делаем на millis  - это необходимо и достаточно. Соответственно нужен простой таймер, период которого выбирается исходя из инерционности системы. Заводим переменную которая будет выражать длительность "Актинвости" в выбранном периоде регулирования. В приведенном куске кода пост 77 вообще нет привязки к ПИД...

 

nik182
Offline
Зарегистрирован: 04.05.2015

Гриша пишет:

....

с алгоритмом Брезенхама я не знаком вообще, 

....

ИМХО. отсюда вывод: убиваем все прерывания и делаем на millis  - это необходимо и достаточно. Соответственно нужен простой таймер, период которого выбирается исходя из инерционности системы. Заводим переменную которая будет выражать длительность "Актинвости" в выбранном периоде регулирования. В приведенном куске кода пост 77 вообще нет привязки к ПИД...

Чем Вам прерывания не угодили? Отличный таймер. В простейшем варианте, на оптроне, таймер 20 мс с привязкой к пересечению позже на 1-2 мс. В таком варианте регулятор получается совершенно не зависимый от основной программы.  Не будет ошибок от несоответствия миллис и фазы сети.  Алгоритм Брезенхама в данном случае равномерно распределяет включенные - выключенные периоды сетевого напряжения. 60% при применении алгоритма это не 60 периодов включено, 40 выключено,  а пересчитывает 3 на 2.

У меня вообще на тиньке25 прерывание от сети  прямо через 3 МОм на ногу и управление тиристором без моськи. Команда на компорт через оптрон сделана. А переменный резистор - ручной задатчик- с пластмассовым стержнем. Всё в корпус розетки удлинителя поместилось.     

Tolik4
Offline
Зарегистрирован: 05.01.2018

Ещё вопрос именно по брезенхему: при управлении каждой ПОЛУволной может создаться ситуация когда длительный период мы будем пропускать в нагрузку только положительные или только отрицательные полуволны(50%). Если симисторный(тиристорный) ключ установлен между трансформатором и теном, насколько такой режим полезен для трансформатора? Если бы я хотел управлять траннсом по первичке, то это однозначно Харам, а после трансформатора не уверен. Может привязать регулировку к периодам? Можно отрабатывать функцию брезенхема только каждое второе прерывание, или просто убрать из схемы детектора ноля мост, что скажете? Только без моста нужно будет наверное защитить светодиод от обратного напряжения стабилитроном, на 3.6в например. Эммм, ну или просто диодом.

Гриша
Offline
Зарегистрирован: 27.04.2014

nik182 пишет:

Чем Вам прерывания не угодили? Отличный таймер. В простейшем варианте, на оптроне, таймер 20 мс с привязкой к пересечению позже на 1-2 мс. В таком варианте регулятор получается совершенно не зависимый от основной программы.  Не будет ошибок от несоответствия миллис и фазы сети.  Алгоритм Брезенхама в данном случае равномерно распределяет включенные - выключенные периоды сетевого напряжения. 60% при применении алгоритма это не 60 периодов включено, 40 выключено,  а пересчитывает 3 на 2.

У меня вообще на тиньке25 прерывание от сети  прямо через 3 МОм на ногу и управление тиристором без моськи. Команда на компорт через оптрон сделана. А переменный резистор - ручной задатчик- с пластмассовым стержнем. Всё в корпус розетки удлинителя поместилось.     

Вот по тому я и общаюсь на форуме - всего знать невозможно (я о Брезенхаме). Я предложил вариант управления простого ШИМ, а вы еще предлагаете изменять период ШИМа пропорционально скважности. Конечно, с таким подходом привязать таймер к детектору обязательно. 

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

nik182
Offline
Зарегистрирован: 04.05.2015

Tolik4 пишет:
Ещё вопрос именно по брезенхему: при управлении каждой ПОЛУволной может создаться ситуация когда длительный период мы будем пропускать в нагрузку только положительные или только отрицательные полуволны(50%). Если симисторный(тиристорный) ключ установлен между трансформатором и теном, насколько такой режим полезен для трансформатора? Если бы я хотел управлять траннсом по первичке, то это однозначно Харам, а после трансформатора не уверен. Может привязать регулировку к периодам? Можно отрабатывать функцию брезенхема только каждое второе прерывание, или просто убрать из схемы детектора ноля мост, что скажете? Только без моста нужно будет наверное защитить светодиод от обратного напряжения стабилитроном, на 3.6в например. Эммм, ну или просто диодом.

Гриша пишет:

Вот по тому я и общаюсь на форуме - всего знать невозможно (я о Брезенхаме). Я предложил вариант управления простого ШИМ, а вы еще предлагаете изменять период ШИМа пропорционально скважности. Конечно, с таким подходом привязать таймер к детектору обязательно. 

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

Сразу на оба комментария. Всё зависит от постоянной времени того параметра системы, который надо регулировать. Постоянная составляющая для трансформатора не хорошо. Но если взять не каждое пересечение, а например только положительное, то время одного периода регулирования увеличится в двое,  но пропадёт постоянная составляющая напряжения. Если постоянная времени объекта будет больше нового времени периода регулирования, то для объекта ничего не изменится. И ПИД регулятор сильно от этого не пострадает. Для нагревательных целей это обычно справедливо. И если не нужна максимальная скорость начального нагрева, то лучше использовать ПИ регулятор. Для объектов с большими постоянными времени дифф канал регулятора очень трудно настраивать. 

Прерывание это очень сильный и полезный инструмент МК. Не сложнее ПИД ШИМ и прочих алгоритмов. Только вот ошибка от того, что импульс управления иногда будет приходить в конце текущего периода сети из за несинхронности сети с миллис может на долго вообще отключить напряжение от объекта. В этом случае надо постоянно держать на ноге управления напряжение. Это конечно спасёт, но по отношению к тиристору выглядит забавно.   

       

Гриша
Offline
Зарегистрирован: 27.04.2014

nik182 пишет:

 В этом случае надо постоянно держать на ноге управления напряжение. Это конечно спасёт, но по отношению к тиристору выглядит забавно.  

держать высокий уревень все активное время -  это стандартный режим для MOC3063  против прямого управления тиристором (без нее). Это значительно упрощает тайминги построения алгоритма управления и ничего забавного для такой связки нет. 

nik182
Offline
Зарегистрирован: 04.05.2015

Вау! Кто Вам такую глупость сказал? Зачем внутри триггер с защёлкой стоит? А рисунок 3 мануала, где импульс управления для номинального тока 100 мкс , а двойного всего 10 мкс зачем? 

Кроме того, я их часто встречаю в схемах с питанием от сети через конденсатор.  Ладно сам процессор - меньше миллиампера, но 10 мА плюс держать постоянно на нагрузке- очень большой конденсатор потребуется в блоке питания. 

Tolik4
Offline
Зарегистрирован: 05.01.2018

Думаю, завтра пересоберу детектор по такой схеме:

Скрин сделал до того как понял что вместо стабилитрона можно обычный диод поставить типа 4007 или даже 4148. Или светодиод - индикация чего-то появится)

Так и вопрос с постоянной составляющей снимается, и прерывание обрабатываем реже, мелочь а приятно)

nik182
Offline
Зарегистрирован: 04.05.2015

Рекомендую сделать по этой схеме. Никаких паразитных наводок. 

Tolik4
Offline
Зарегистрирован: 05.01.2018

Спасибо за схему. Триггер Шмитта на моей оптопаре встроен, так что правая часть для H11L1 не нужна. Для детекции только положительных полуволн, я так понимаю, нужно мостовой выпрямитель заменить на однополупериодный? Попробую пока попроще, если будет принимать сигналы из космоса - перейду на ваш вариант. 

Гриша
Offline
Зарегистрирован: 27.04.2014

nik182 пишет:

Вау! Кто Вам такую глупость сказал? Зачем внутри триггер с защёлкой стоит? А рисунок 3 мануала, где импульс управления для номинального тока 100 мкс , а двойного всего 10 мкс зачем? 

Кроме того, я их часто встречаю в схемах с питанием от сети через конденсатор.  Ладно сам процессор - меньше миллиампера, но 10 мА плюс держать постоянно на нагрузке- очень большой конденсатор потребуется в блоке питания. 

Не спорю, что им можно управлять в импульсном режиме, но имея ардуино и его источник питания:

All devices are guaranteed to trigger at an IF  value less than or equal to max I(FT). Therefore, recommended operating IF lies between max I  (FT) (15 mA for MOC3061-M, 10 mA for MOC3062-M & MOC3162-M, 5 mA for MOC3063-M & MOC3163-M) and absolute max I  (F)   (60 mA).

мне лично пофигу, проходит там ток постоянно для открытия или только импульс управления. Для меня вход этого устройства простой светодиод, который просит покушать определенный ток, чтобы устройство сработало. А вот если кормить его короткими импульсами , необходимо рассчитывать энергетику схемы, и как вы правильно заметили - если импульс короткий - ток требуется большой, как раз согласно рисунку 3. 

Figure 3. LED Current Required to Trigger vs. LED Pulse Width - вот только я его гоняю в постоянку. В моем случае мне не требуется точно рассчитывать подачу импульса открытия и переход через 0. 

APPLICATIONS:
 
• Solenoid/valve controls
• Static power switches
• Lighting controls
• E.M. contactors
• Solid state relays

на кой в этих областях такие заморочи? просто подал ток с БП, нажал тумблер и через эту микросхему развязался от высокого напряжения. Кроме того используя дискретный выход любого прибора того же siemens или ABB  или веспер который не тащит большие токи я могу напрямую без заморочек МОС + тиристор управлять лампочкой или пускателем.... или клапаном. Мне не нужно париться с генератором импульсов и гальванической развязкой для управления.

Гриша
Offline
Зарегистрирован: 27.04.2014

к посту 87

вот ссыль на интересный девайс под описание logic-sensitive gate  Z0103MN 5AA4, Симистор, 1А, 600В [SOT-223]

в стиралках клапанами рулит напрямую от МК

Different gate current sensitivities are available, allowing optimized performances when controlled directly from microcontrollers.

nik182
Offline
Зарегистрирован: 04.05.2015

Гриша пишет:

...А вот если кормить его короткими импульсами , необходимо рассчитывать энергетику схемы, и как вы правильно заметили - если импульс короткий - ток требуется большой, как раз согласно рисунку 3. 

Figure 3. LED Current Required to Trigger vs. LED Pulse Width - вот только я его гоняю в постоянку. В моем случае мне не требуется точно рассчитывать подачу импульса открытия и переход через 0... 

Дорогой Гриша! Давайте не будем ничего придумывать. Согласно рисунку 3 номинальный ток - это 15 10 или 5 мА нужно слать не менее 100 микросекунд. Это 0.1 мс или если период 20 мс то по энергетике 1/200 от постоянного привода. Если Ваша схема и блок питания позволяет постоянно светить диодом - пожалуйста. Но я Вас уверяю что это не основной режим работы МОСки.  

Гриша
Offline
Зарегистрирован: 27.04.2014

nik182 пишет:

 Если Ваша схема и блок питания позволяет постоянно светить диодом - пожалуйста. Но я Вас уверяю что это не основной режим работы МОСки.  

В ДШ я не усмотрел ничего ни "ЗА" ни "против" ваших слов или я вас не правильно понял.

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

Гриша
Offline
Зарегистрирован: 27.04.2014

ИМХО

могу предположить, что в МОСке нечто подобное этой эквивалентной схеме и длительность импульса и тока требуется для компенсации заряда на затворе.

думаю по этой схеме нет вопросов? А реальное устройство МОСки мне не известно.

 

nik182
Offline
Зарегистрирован: 04.05.2015

По этой схеме вопросов нет. А внутри моськи стоит триггер. Если в течении полупериода на управляющий электрод придёт импульс, то МОСка откроется с началом следующего периода и будет открыта до падения тока до нуля. Никаких компенсаций заряда. Импульс может прийти в любой момент предыдущего периода. Главное успеть до окончания текущего период уложиться в кривую рисунка 3.    

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

Оказался день без интернета, такую полуэпическую дискуссию пропустил. :)) Решил, пусть хоть вслед, и от себя бросить пару лопат... не, не на вентилятор, и не удобрений, а топлива в топку научной дискуссии. :))

Tolik4 пишет:
Ещё вопрос именно по брезенхему: при управлении каждой ПОЛУволной может создаться ситуация когда длительный период мы будем пропускать в нагрузку только положительные или только отрицательные полуволны(50%).

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

Tolik4 пишет:
Если симисторный(тиристорный) ключ установлен между трансформатором и теном, насколько такой режим полезен для трансформатора?

Для трансформатора вреден любой режим манипуляции нагрузкой. :)) При включении в сеть, резком подключении и отключении нагрузки трансформатор входит в переходной режим, характеризующийся увеличением потерь. Пример. (Дела давние, цифры по памяти.) Сделав "бесшумный" регулятор мощности паяльника, решил попробовать от него через штатный трансформатор питать целым количеством полных периодов низковольтный паяльник. Снимал осциллограммы токов и напряжений. При включении трансформатора идет первичное намагничивание сердечника, ток первого полупериода на 50% выше среднего значения тока, второго - на 30%, третьего - на 15%. Потом выравнивается. И так в каждом такте управления. Если в цепи нагрузки есть трансформатор, то манипулировать им нужно как можно реже. И в этом смысле вместо Брезенхема предпочтительнее будет классический ШИМ с максимально оправданным по длительности периодом.

Tolik4 пишет:
Если бы я хотел управлять траннсом по первичке, то это однозначно Харам, а после трансформатора не уверен.

Вот Вам "православный Харам". :)) Не для того, чтобы повторять, а для расширения кругозора. В серийно и давно выпускаемом управляемом сварочном источнике ВДУ-1250 (номинальный сварочный ток - 1250 А) тиристоры стоят по первичной стороне и имеют фазо-импульсное управление. Причина проста. На момент создания источника не нашлось тиристоров с нужным рабочим током. Пришлось ставить на высокую сторону, где ток меньше. А в источнике той же серии ВДУ-506 тиристоры стоят уже на низкой стороне.

Tolik4 пишет:
Может привязать регулировку к периодам? Можно отрабатывать функцию брезенхема только каждое второе прерывание, или просто убрать из схемы детектора ноля мост, что скажете? Только без моста нужно будет наверное защитить светодиод от обратного напряжения стабилитроном, на 3.6в например. Эммм, ну или просто диодом.

При мощной нагрузке лучше манипулировать целыми периодами. Для этого достаточно процедуру расчета вызывать каждое второе прерывание, оставив аппаратную часть без изменений. Следует участь только изменение масштаба времени. Если у Вас в цепи нагрузки трансформатор, не сильно представляю, по какой причине так случилось, то от управления по Брезенхэму лучше отказаться в пользу классического ШИМ с длинным периодом (см. выше).

Гриша
Offline
Зарегистрирован: 27.04.2014

nik182 пишет:

По этой схеме вопросов нет. А внутри моськи стоит триггер. Если в течении полупериода на управляющий электрод придёт импульс, то МОСка откроется с началом следующего периода и будет открыта до падения тока до нуля. Никаких компенсаций заряда. Импульс может прийти в любой момент предыдущего периода. Главное успеть до окончания текущего период уложиться в кривую рисунка 3.    

ИМХО чтобы триггер получил соответствующий уровень при передачи через оптический канал требуется открыть транзистор, думаю, что он полевой. Вот и получается, либо дать импульс тока согласно рис3 т.е. вкатить оптоприемнику некоторою энергию для переключения триггера (открытия транзистора) или обеспечить постоянно открытый ключ, который будет перезапускать триггер  на каждый новый полупериод.

nik182 пишет:

 Главное успеть до окончания текущего период уложиться в кривую рисунка 3.    

вот и я об этом. Открыл приемник и пусть он перезапускается на каждой новой полуволне. Ваш же вариант для системы с пониженным энергопотреблением и несколько сложнее в плане детектирования перехода и своевременной подачи управляющего импульса. Для прибора с детектором перехода и временем открытия более 1 сек не вижу смысла ИМХО

мне игрушек с КТ117 (315+361) хватило.

вот пример применения (просто в нете нашел), если скил программирования не прокачен, а в схемотехники дуб зеленый - так проще и понятнее... 

ЗЫ пост 92 смотрели?

 

Tolik4
Offline
Зарегистрирован: 05.01.2018

Duino A.R. пишет:

Если у Вас в цепи нагрузки трансформатор, не сильно представляю, по какой причине так случилось, то от управления по Брезенхэму лучше отказаться в пользу классического ШИМ с длинным периодом (см. выше).

К идее управления по Брезенхему пришел как-то так: в печи с низкоомным тэном подключенным через трансформатор потихоньку отмирает родная цепь управления нагрузкой на магнитных усилителях. Пока там еще остались живые части всем этим получилось управлять через регулируемый источник тока. Но это все походит на танцы с бубном - в системе целая куча оос и пос которые никак не удается настроить по штатной инструкции. Это пожалуй тема для отдельного обсуждения. Так вот, пока установка еще коптит решил подыскать альтернативу так сказать на опережение. Одной из проблем других относительно похожих печек переделанных под релейный метод управления стало снижение времени жизни тэнов (там вообще какая-то механика судя по звукам стоит, соответственно и период довольно большой). Спираль там из 4мм нихрома, да еще и сложной формы по типу раструба - навивать такую целое дело. Везде пишут что чем равномернее токи через спираль - тем лучше это для нагревателя. Рассматривались варианты: 

Инвертор на UC3845 - компактный, но сложный, и вдобавок шумный, печь лабораторная - рядом разные датчики.

Фазовое управление на симисторе, уже проще, но все еще шумно.

Шим с частотой менее герца - никаких проблем в реализации, но при длительных периодах регулирования, боюсь, срок жизни спирали так-же будет снижен. Это только мои догадки, но проверять их не хотелось бы.

И, наконец, управление, целыми периодами по Бразенхему. Одновременно малошумный и равномерный. Ток первички в трансформаторе могу посмотреть осциллографом через трансформатор тока. Может параллельно регулятору включить какой-то балласт для поддержания минимального тока через транс?

По поводу переделки аппаратной части для детекции каждого второго ноля, то с этим проблем нет, пока все собрано навесом, платы даже не разводились.

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

ВН
Offline
Зарегистрирован: 25.02.2016

Наверна в этой жизни так и не узнаешь, какой там мощности ТЭН и какого сопротивления