1 381

Re: Регуляторы мощности для ТЭНов

условный ноль(3.7...v).

Алкоголь не решает проблем, он их усугубляет и отодвигает.

1 382 (2018-03-23 20:58:10 отредактировано Kusnezov Oleg)

Re: Регуляторы мощности для ТЭНов

geha69 ©:

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

Между ардуинами? Универсальные развязки дорогие. А вот какую нибудь по-проще... для не очень торопливого обмена... Было-бы здОрово. Тогда и трансформаторы не нужны. Делитель - ардуино  - развязка - ардуино.  Или не так?

С уважением, Олег Кузнецов.

1 383 (2018-03-23 22:14:14 отредактировано geha69)

Re: Регуляторы мощности для ТЭНов

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

Алкоголь не решает проблем, он их усугубляет и отодвигает.

1 384 (2018-03-24 08:59:34 отредактировано geha69)

Re: Регуляторы мощности для ТЭНов

new34 ©:

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

наверное можно и модуль целиком использовать,только скеч надо отредактировать,и библиотеку под этот модуль поставить.я в скечах в c++ не силен вообще ни как,поэтому в этом вопросе помочь ни чем не смогу.

Алкоголь не решает проблем, он их усугубляет и отодвигает.

1 385 (2018-03-31 20:15:50 отредактировано Kusnezov Oleg)

Re: Регуляторы мощности для ТЭНов

Иван ©:

Так у нас принято, если начал - завершай...

Что бы завершить, решил представить регулятор мощности (целые полупериоды), переделанный (переписанный) в максимально простой, учебный.  Вообще без прерываний в коде, без настроек АЦП, без детекторов нуля, в общем,  для таких как .... я.
Скетч  прилагаю со слезами…  Это образец  - как делать не надо, но можно…
Вот схема.

Сетевое напряжение (с запасом)  – 400 … +400 преобразуем с помощью трансформатора, диодного моста и делителя в 0 … +5 .  Измеряем мгновенные значения  ардуиной, просто тупо analogread().  На картинке более 70 точек, которые успевает АЦП без настроек и прерываний отработать за полуцикл.

Эффективное напряжение пропорционально амплитудному – ищем максимум за устанавливаемое  время. В прилагаемом скетче – за 2 секунды ( 200 полупериодов).
Вот тест стабильности (нестабильности) измерений в комфортных условиях. Виден «шум», примерно+- 0,5 В.

Алгоритм  регулировки простой. Как только обнаруживаем, что напряжение падает, спрашиваем Брезенхема и включаем/выключаем управляющий импульс, далее ждем пока не  обнаружим, что напряжение растет, далее ждем, пока не обнаруживаем, что напряжение падает … и т.д. Оптопара, с контролем нуля, сама разберется, когда импульс на симистор давать. А тот на нуле сам закроется. В общем, промахнуться очень трудно.
Эффективное напряжение пропорционально количеству не вырезанных импульсов, которое пропорционально переменной алгоритма Брезенхема, которую задаем, вращая потенциометр. Потенциометр – исключительно для уменьшения  кода и наглядности.  Дабы не тратить ресурсы на опрос потенциометра и не бороться с дребезгом,  установлен тумблер: в одном положении работает регулятор мощности, в другом – только установка желаемого напряжения, от 0 до текущего сетевого.  Установленная переменная алгоритма Брезенхема  и напряжение,  относительно которого будет стабилизация,  записываются в энергонезависимую память.

Стабилизация. Если амплитудное напряжение отличается от установленного во время последней стабилизации  более чем на заданную величину,  переменная алгоритма Брезенхема  изменяется пропорционально амплитудному напряжению. Вроде, всё.

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

Кнопки, дисплеи, индикаторы, переключатели режимов специально выкинул, что бы «не замусоривать» скетч.

#include <EEPROM.h>

#define PinGnd 13 //  будем использвать как GND, так было удобно припаять потенциометр
#define PinPlus 12 // будем использвать как VCC, так было удобно припаять потенциометр
#define PinPoten 14 // аналоговый вход для опроса потенциометра
#define PinImpuls 10 //  для подачи управляющего импульса на оптопару
#define PinSignal 15 // аналоговый вход для измерения напряжения в сети
#define PinReg 9 // для опроса тумблера перехода в режим установки
#define PinGnd1 8 //  будем использвать как GND, так было удобно припаять тумблер

const int regInterval  = 100; // интервал регулирования Берзенхема от 0 с шагом 1 (в нашем случае 0 - 100  это период 1 секунда)
int regValue = 0; // количество включенных преиодов в интервале, в нашем случае это напряжение,%  задается опреторм
int regError;// служебная переменная алгоритма Берзенхема, при изменении количества включений (regValue) устанавливается как 1/2 интервала regInterval

int startRegValue; // количество включенных преиодов в интервале, которое храниться в памяти, записывается при каждом изменении


bool flagBresenham = false; // решение алгоритма Берзенхема о включении/не выключении имульса
bool flagAskBresenham = false; // флаг момента необходимости принимать решение по алгоритму Берзенхема 
bool flagCycle = false; // флаг, указывает, что напряжение в рамках полуцикла падает (максимум пройден) 

int volt; // мгновенное значение измеренного напряжения 
int volt_0; // три измеренных подряд мгновенных значений  напряжения
int volt_1;
int volt_2;
int currentMaxVolt;// текущее амплитудное напряжение 
int oldMaxVolt; // амплитудное напряжение, в соответствии с которым проводилась последняя стабилизация 
int startMaxVolt; // амплитудное напряжение, для которого был выставлен параметр regValue, записывается в память после каждой переустановки 
int maxVolt; // текущее амплитудное значение измеренного за заданный период напряжения 
int const periodVoltMax =2000;// задаем период, мС определения максимума (амплитуда) напряжения 
int const devMaxVolt = 5; // допустимое отклонение амплитудного напряжения (условные единицы), при котором не нужна стабилизация

int adress = 0; // условный адрес энергонезависимой паммяти в который записывается первый байт первого значения
const int resistLoad = 15; //  сопротивление ТЭНа, Ом

float power = 0.; // мощность на выходе в Вт
float powerPercent = 0.;  // мощность на выходе в %

float const kfVoltage = 0.24 ;// константа для пересчета напряжения в Вольты, подбирается опытным путем
float voltage; // напряжение пересчитанное в в Вольты
unsigned long int oldTime; // служебная переменная для осчета времени периода измерений амплитуды

void setup() {

  Serial.begin(9600); 

  pinMode(PinGnd, OUTPUT);
  pinMode(PinGnd1, OUTPUT); 
  pinMode(PinPlus, OUTPUT);
  pinMode(PinImpuls, OUTPUT);
  pinMode(PinReg, INPUT_PULLUP);// включаем подтягивающий резистор

 
  // "допролнительные" GND и VCC
  digitalWrite(PinGnd ,LOW);
  digitalWrite(PinGnd1 ,LOW);
  digitalWrite(PinPlus ,HIGH);
  
  digitalWrite(PinImpuls,LOW); // выключаем управляющий импульс

  
 
 

 
  readMem(); //  читаем из памяти startRegValue  и startMaxVolt
  regValue = startRegValue;
  regError = regValue/2;
 
 
 // оределяем амплитудное напряжение - максимуи за период periodVoltMax, заполняем значение переменных

 oldTime = millis();
 
 while (  (millis () - oldTime) < periodVoltMax) {
 volt  = analogRead (PinSignal);
 volt_0 = volt_1;
 volt_1 = volt_2;
 volt_2 = volt;
 if (volt > maxVolt) maxVolt = volt;
 }
 
 currentMaxVolt = maxVolt; 
 oldMaxVolt = startMaxVolt;
 maxVolt = 0;
 oldTime = millis();
  
// отладка
  Serial.println(startRegValue);  
  Serial.println(startMaxVolt);  
 
 powerPercent =   100.* (  (float)regValue/(float)regInterval) * (  (float)regValue/(float)regInterval);  
 power =    ((float)currentMaxVolt * (float)regValue/(float) regInterval * kfVoltage) * ((float)currentMaxVolt * (float)regValue/(float)regInterval * kfVoltage) / resistLoad;
 
 voltage = currentMaxVolt * kfVoltage;
 // отладка
 Serial.print( "Voltage =  "); Serial.println(voltage); 
 Serial.print( "regValue =  "); Serial.println(regValue); 
 Serial.print( "powerPercent =  "); Serial.println(powerPercent);  
 Serial.print( "power =  "); Serial.println(power);  

}
void loop() {


//опрашиваем тумблер режима установки,если тумблер включен, все бросаем и "крутимся" внутри функции askPotentiometer()
// пока тумблер не будет выключен

askPotentiometer();

// если тумблер не включен
//постоянно измеряем напряжение и храним в переменных три последних величины
//будем использовать для определения: растет или падает напряжение в рамках полуцикла синусоиды
volt  = analogRead (PinSignal);
volt_0 = volt_1;
volt_1 = volt_2;
volt_2 = volt;
//

if (volt > maxVolt) maxVolt = volt; //определяем максимум = амплитудное значение 

// фиксируем максимум = амплитудное значение за periodVoltMax
if (  (millis () - oldTime) > periodVoltMax) {
oldTime = millis();
currentMaxVolt = maxVolt; 
maxVolt = 0;
stub(); // функция стабилизации
if ( currentMaxVolt < 100) Serial.println( "ERR 01  "); // отладка
}

if (  flagCycle & (volt_0 > volt_1) & (volt_1 > volt_2)) {// если напряжение падает и это впервые за полцикла (flagCycle == true) нужно спрашивать Брезенхема 
flagAskBresenham = true;
flagCycle = false; // потом изменим флаг, когда напряжение будет расти
}
if ( (!flagCycle) & ((volt_0 < volt_1) & (volt_1 < volt_2) )) {// если напряжение растет и это впервые за полцикла, нужно  объявить начало нового цикла - flagCycle = true;

flagCycle = true; // потом изменим флаг, когда напряжение будет падать
}
if (flagAskBresenham) {
Bresenham();

if (!flagBresenham){
digitalWrite(PinImpuls,LOW);

}
else {
digitalWrite(PinImpuls,HIGH);

}
flagAskBresenham = false;  // флаг будет изменен когда напряжение будет падать первый раз за полуцикл
}
 // отладка digitalWrite(PinImpuls,HIGH);
}


void Bresenham(){
// Serial.println(imp);
regError = regError - regValue;
if (regError < 0) {
regError = regError + regInterval; 
flagBresenham = true; // импульс включаетcя 
}
else {
flagBresenham = false; //  импульс выключается 
} 
}


void askPotentiometer(){
// крайние точки показаний конкретного плохого потенциометра (у правильного должноо быть 0 - 1023)
int const minPoten = 2 ;
int const maxPoten = 1020;
if ( digitalRead(PinReg)) return; // если тумблер установки не включен, возврашаемся
else  {         //если тумблер установки  включен:
digitalWrite(PinImpuls,LOW); // во-первых  выключаем управляющий импульс
Serial.println("Poten!"); // отладка
while ( !digitalRead(PinReg)) { // если тумблер включен крутимся здесь пока тумблер не будет выключен 
int potValue = analogRead (PinPoten); 
regValue = map(potValue, minPoten, maxPoten, 0, regInterval);
// на всякий случай ограничиваем возможные значения regValue
if (regValue > regInterval) regValue = regInterval;
if (regValue < 0) regValue = 0;
regError = regValue/2;
Serial.print("regValue= "); Serial.println(regValue); // отладка
//Serial.println(potValue); // отладка
powerPercent =   100.* (  (float)regValue/(float)regInterval) * (  (float)regValue/(float)regInterval);  
power =   ((float)currentMaxVolt * (float)regValue/(float) regInterval * kfVoltage) * ((float)currentMaxVolt * (float)regValue/(float)regInterval * kfVoltage) / resistLoad;
voltage = currentMaxVolt * kfVoltage;
Serial.print("powerPercent =  "); Serial.print(powerPercent); Serial.println(" %");
Serial.print("Voltage Stub =  "); Serial.print(roundf (220. *(float)regValue/(float)regInterval )); Serial.println(" V");
Serial.print("Power =  "); Serial.print(roundf (power)); Serial.println(" W");
delay (500);

}
}
// тумблер выключили  - пишем в память новые параметры.
startRegValue = regValue;
startMaxVolt = currentMaxVolt;
writeMem();

Serial.println("WRITE !!!!!!!!!!"); // отладка


Serial.println(startRegValue); // отладка
Serial.println(startMaxVolt); // отладка
}


 void writeMem(){   // пишем в память два целочисленных параметра
  Serial.println("write to ROM"); 
  byte lowByte = ((startRegValue >> 0) & 0xFF);
  byte highByte = ((startRegValue >> 8) & 0xFF);
  EEPROM.write(adress, lowByte);
  EEPROM.write(adress + 1, highByte);
  lowByte = ((startMaxVolt >> 0) & 0xFF);
  highByte = ((startMaxVolt >> 8) & 0xFF);
  EEPROM.write(adress + 2, lowByte);
  EEPROM.write(adress + 3, highByte);
  }
void readMem(){     // читаем из памяти два целочисленных параметра
  byte lowByte = EEPROM.read(adress);
  byte highByte = EEPROM.read(adress + 1);
  startRegValue = ((lowByte << 0) & 0xFF) + ((highByte << 8) & 0xFF00);
  lowByte = EEPROM.read(adress +2);
  highByte = EEPROM.read(adress + 3);
  startMaxVolt = ((lowByte << 0) & 0xFF) + ((highByte << 8) & 0xFF00);
}


void stub(){
// функция сравнивает текущее амплитудное напряжение currentMaxVolt с предыдущим текущим амплитудным oldMaxVolt, 
//которое запомнили в момент последней стабилизации 
//если разница меньше заданной ранее константы devMaxVolt, ничего не делаем
//если разница больше заданной ранее константы devMaxVolt, нужно пересчитать параметр алгоритма Брезенхема  regValue
// изменение параметра приведет к пропорциональному изменению мощности, например напряжение упало в два раза,
// значит мощность упала в 4 раза - увеличиваем параметр regValue в два раза и мощность увеличивается в 4 раза.
 
 if (  (  (currentMaxVolt > (oldMaxVolt + devMaxVolt))|(currentMaxVolt < (oldMaxVolt - devMaxVolt))) ){
 regValue  = roundf ( ((float) startRegValue * ( (float) startMaxVolt/ (float) currentMaxVolt)));
 
//если нет достаточного запаса - просто включаем на максимум
 if ( regValue > regInterval) regValue = regInterval; 
 regError = regValue/2;
 
oldMaxVolt = currentMaxVolt;
  }
 power =   ((float)currentMaxVolt * (float)regValue/(float) regInterval * kfVoltage) * ((float)currentMaxVolt * (float)regValue/(float)regInterval * kfVoltage) / resistLoad;
 voltage = currentMaxVolt * kfVoltage;
 
 //Serial.print(roundf (voltage)); Serial.print("  "); Serial.print(  roundf( regValue*voltage   / regInterval ));
 //Serial.print(" "); Serial.println(power);  
 }

добавил позже по просьбе коллег
https://yadi.sk/i/_XrHemDe3TvQTb

  • rm_potenДок.png
    size: 62.51Кб type: png
  • СинусоидаДок.png
    size: 120.32Кб type: png
  • СинусоидаДок.png
    size: 120.32Кб type: png
  • ТрансформаторДок.png
    size: 142.61Кб type: png
  • ТрансформаторДок.png
    size: 142.61Кб type: png
  • РегуляторДок.png
    size: 168.66Кб type: png
  • rm_poten20180321.png
    size: 64.43Кб type: png
С уважением, Олег Кузнецов.

1 386

Re: Регуляторы мощности для ТЭНов

Kusnezov Oleg, Выложи пожалуйста скетч или текст, на яндекс диск, или еще куда. При копировании все в кучу пишет, задолбаешься его править.

Ленивые всё делают быстро, что бы скорее отделаться от работы и делают хорошо, чтобы не переделывать.
С уважением, Николай.
Моё оборудование : → Винокурня Николя

1 387

Re: Регуляторы мощности для ТЭНов

Kusnezov Oleg ©:

Эффективное напряжение пропорционально амплитудному

Как-то это утверждение меня смущает.
ТОЭ и ЭРИ я изучал, конечно, уже давно, но растет внутренний подсознательный протест цитируемому утверждению.

РК 35х1600

1 388 (2018-03-28 12:30:45 отредактировано Kusnezov Oleg)

Re: Регуляторы мощности для ТЭНов

Николя ©:

Выложи пожалуйста  на яндекс диск

Пока не умею. разберусь чуть позже. Могу по почте переслать, если адрес скинешь в "приват". (Действительно "все в кучу" при копировании  :( ).

kvic ©:

Как-то это утверждение меня смущает.

Ну я университетов не кончал... Вам виднее. Может так лучше?
Эффективное напряжение, при известных допущениях, пропорционально амплитудному.
Я просто смиренно предположил, что определенный интеграл от 0 до пи от константы, умноженной на синус  х,  равен константе, умноженной на интеграл...   (Т.е. константе, деленной на корень из двух :)) .
kvic, спасибо за Ваш регулятор. Внушает!

С уважением, Олег Кузнецов.

1 389

Re: Регуляторы мощности для ТЭНов

geha69 ©:

Здравия Всем!нашел в на просторах регулятор мощности на ардуино нано пробовал и УНО со стабилизацией мощности на нагрузке.проверял на обогревателе 2 кВт.сеть скакала 8-10 вольт.выставленное напряжение стабилизировалось примерно 3 сек но скачки не более 1 вольта.можно использовать как отдельный блок,можно соединить в систему и управлять с монитора порта.к нагрузке подключен обычный понижающий трансформатор от 6 до как пишут 20 вольт.управление 2 кнопки плюс и минус.LCD1602 I2C но можно подключить напрямую силовая часть детектор ноля PC814,опто симистор без детектора ноля MOC3023,диодный мост DB157.подстроечным резистором выставляется выходное напряжение которое отображается на дисплее(контролируется настройкаTRUE RMS мультиметром).нелинейность показания дисплея и эталонного мультиметра по краям 3-5 вольт от 90 до 180 более менее точно.но это не принципиально если выход стабилен.забыл написать регулировка от 35 вольт до того что выдает сеть.
вот скеч

Греется у меня трансформатор, у тебя как с этим было.

Ленивые всё делают быстро, что бы скорее отделаться от работы и делают хорошо, чтобы не переделывать.
С уважением, Николай.
Моё оборудование : → Винокурня Николя

1 390

Re: Регуляторы мощности для ТЭНов

Kusnezov Oleg ©:

...при известных допущениях...


Блин, меня всё на фазовом методе клинит.
Брезенхем - он другой.
Извини.

Kusnezov Oleg ©:

kvic, спасибо за Ваш регулятор. Внушает!

Не мой, там ссылка на изначального автора есть.
Я только "разместил объяву". ;)

РК 35х1600

1 391 (2018-03-28 21:17:40 отредактировано geha69)

Re: Регуляторы мощности для ТЭНов

Николя ©:

Греется у меня трансформатор, у тебя как с этим было.

градусов до 45-50 нагревался за 3 часа при маленьком напряжении на выходе,а гдето от 90 вольт и далее переставал грется.
вчера попробовал собрал стабилизатор с zmpt трансформатором и второе ардуино,которое управляет процессом ректификации.ардуинки соеденины напрямую без опто развязки.все работает нормально.соберу все в кучу выложу фотки.

Алкоголь не решает проблем, он их усугубляет и отодвигает.

1 392 (2018-03-28 22:04:15 отредактировано Kusnezov Oleg)

Re: Регуляторы мощности для ТЭНов

Николя ©:

Греется у меня трансформатор

geha69 ©:

градусов до 45-50 нагревался

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

"Трансформаторы серии Т02-Т11 имеют … высокую точность, что позволяет их применять в большинстве малобюджетных приложений.
Трансформаторы серии Т02-Т11 с индексом АС  …  применять практически в любых приложениях для работы с симметричными сигналами, включая … прецизионное лабораторное оборудование.
Трансформаторы серии Т02-Т11 с индексом ДС … могут работать в условиях однополярного сигнала, т.е. с высоким подмагничиванием, что позволяет их применять практически в любых приложениях, включая преобразовательную технику…"

Наш случай - второй тип тр-ра.
Брезенхем -  третий тип тр-ра.
А применяем первый тип тр-ра.
Вот и греется (не всегда).

С уважением, Олег Кузнецов.

1 393

Re: Регуляторы мощности для ТЭНов

Благодарствую.

Ленивые всё делают быстро, что бы скорее отделаться от работы и делают хорошо, чтобы не переделывать.
С уважением, Николай.
Моё оборудование : → Винокурня Николя

1 394

Re: Регуляторы мощности для ТЭНов

Kusnezov Oleg ©:

регулятор мощности (целые полупериоды)

  Подскажите какой трансформатор у вас применен?  И если можно скетч. Копировать что то не получается.

1 395

Re: Регуляторы мощности для ТЭНов

Вот здесь текст скетча в текстовом формате https://yadi.sk/d/6FGw7VnT3Tu23q

Ленивые всё делают быстро, что бы скорее отделаться от работы и делают хорошо, чтобы не переделывать.
С уважением, Николай.
Моё оборудование : → Винокурня Николя

1 396 (2018-03-30 18:37:44 отредактировано Kusnezov Oleg)

Re: Регуляторы мощности для ТЭНов

West ©:

какой трансформатор

Подойдет любой силовой трансформатор, преобразующий 220 вольт в 3...40 вольт. У меня. конкретно в тестируемой схеме, трансформатор 220 - 6. Формула расчета резистора делителя R1 - непосредственно на схеме дана. Не забудьте, что напряжение, которое показывает вольтметр на выходе трансформатора (если в сети 220), необходимо умножить на корень из двух и коэффициент запаса, минимум 1,1. Да, и R2 лучше взять менее 10 к, например 4,7 к.
А если я неправильно понял вопрос, то вот другой вариант ответа: трансформатор на входе  - обычный; обсуждение выше - про трансформатор на выходе.

С уважением, Олег Кузнецов.

1 397

Re: Регуляторы мощности для ТЭНов

Kusnezov Oleg, может на вашей схеме для защиты поставить на вход A1 стабилотрон на 5 вольт.что бы случайно не убить вход.

Алкоголь не решает проблем, он их усугубляет и отодвигает.

1 398 (2018-03-31 11:37:45 отредактировано Kusnezov Oleg)

Re: Регуляторы мощности для ТЭНов

geha69, да, согласен, 5,6.

С уважением, Олег Кузнецов.

1 399 (2018-03-30 20:44:27 отредактировано geha69)

Re: Регуляторы мощности для ТЭНов

ато мало ли что люди начнут ардуинки убивать.а мы крайние будем.

Алкоголь не решает проблем, он их усугубляет и отодвигает.

1 400 (2018-03-30 23:34:23 отредактировано Kusnezov Oleg)

Re: Регуляторы мощности для ТЭНов

geha69, посоветуйте, какой, конкретно, стабилитрон  на схеме указать.

С уважением, Олег Кузнецов.