101

Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ

liman324 пишет:

По работе ОУ.

При питании 5 В, напряжение на выходе ОУ не может быть больше 3,5 В(примерно), при изменении коэффициента усиления ОУ проследите чтобы при токе от 0 до 5 А напряжение на выходе ОУ меняться, а не упираться в потолок отсечки выхода ОУ в 3,5 В.

Хорошо. По скетчу:
- напряжение после запятой регулируется.
- выставляю напряжение 28 вольт и ток 0,25А нажимаю кнопку отс/стаб и подключаю резистор 10 ом. Появляется надпись "STAB"  напряжение на выходе 23В, ток в нагрузке более 2А

102

Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ

выставляю напряжение 28 вольт и ток 0,25А нажимаю кнопку отс/стаб и подключаю резистор 10 ом. Появляется надпись "STAB"  напряжение на выходе 23В, ток в нагрузке более 2А

Если немного подождать, стабилизация выходит на ток 0,25А?

103

Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ

liman324 пишет:

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

Это более интересно

104

Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ

liman324 пишет:

выставляю напряжение 28 вольт и ток 0,25А нажимаю кнопку отс/стаб и подключаю резистор 10 ом. Появляется надпись "STAB"  напряжение на выходе 23В, ток в нагрузке более 2А

Если немного подождать, стабилизация выходит на ток 0,25А?

Подождал 10 секунд, ток без изменений

105

Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ

загрузил последний скетч:  напряжение падает со скоростью 0,1В в секунду, а за ним ток, но еще медленнее. Показания напряжения работают.

106

Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ

Но на ток стабилизации выходит в 0,25А?

107

Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ

выходит, процесс просто очень длительный: более минуты

108

Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ

Я работаю над ускорением, процесса. Монитор порта (если открыт) при тесте должен быть закрыт.

109

Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ

при достижении 0,25А происходит сброс и все начинается с начала

110

Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ

liman324 пишет:

Я работаю над ускорением, процесса. Монитор порта (если открыт) при тесте должен быть закрыт.

ардуино к компу не подключено

111

Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ

Стабилизация должна ускориться:

#include <Wire.h>
#include <EEPROM.h>
#include <Encoder.h>  // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip
#include <MsTimer2.h> // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip
#include <LiquidCrystal_I2C.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
 Encoder myEnc(8, 9);//CLK, DT
 LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей 
 
 unsigned long times,oldPosition  = -999,newPosition,times_lcd,times_u=millis()+50000,times_i=millis()+50000;
 int u_out,u_dig,menu,i_out;
 const float u_k = 7.10; // калибровка регулятора напряжения
 const float i_k = 0.975;// калибровка измерителя тока 
 const float r = 0.01;   // сопротивление шунта
 byte power = 1; // при подачи питания выходное напряжение 0 В - OFF
 float i;
 byte w,set_u,set_i;
 bool stab;
 int u_stab;
 
 
void setup(){
  Serial.begin(9600);
  Wire.begin();lcd.init();lcd.backlight();
  MsTimer2::set(1, to_Timer);MsTimer2::start();
  pinMode(10,INPUT);//  SW энкодер MENU
  pinMode(2,INPUT_PULLUP); // кнопка ON/OFF
  pinMode(3,INPUT_PULLUP); // кнопка U/I
  pinMode(4,INPUT_PULLUP); // кнопка STAB_I
  pinMode(A0,INPUT); // input I
  u_out=EEPROM.read(0)*256+EEPROM.read(1);
  i_out=EEPROM.read(2)*256+EEPROM.read(3);
  }
 
void loop(){
  if(stab==0){i_kz();}
  if(digitalRead(3)==LOW){menu++;if(menu>1){menu=0;}delay(200);}
  if(digitalRead(2)==LOW&&power==0){power = 1;delay(200);}
  if(digitalRead(2)==LOW&&power==1){power = 0;delay(200);}

  if(digitalRead(4)==LOW&&stab==0){stab = 1;lcd.setCursor(10, 1);lcd.print("S");delay(300);}
  if(digitalRead(4)==LOW&&stab==1){stab = 0;lcd.setCursor(10, 1);lcd.print(" ");delay(300);}
  
  if(digitalRead(10)==LOW && menu==0){set_u++;if(set_u>1){set_u=0;}set_i=100;times_u=millis();times_i=millis()+50000;delay(200);}
  if(digitalRead(10)==LOW && menu==1){set_i++;if(set_i>1){set_i=0;}set_u=100;times_i=millis();times_u=millis()+50000;delay(200);}
  
  //////// set out 0-28 V
  
  if(menu==0 && set_u==0 && millis()-times_u<5000){
    if (newPosition != oldPosition){times_u=millis();oldPosition = newPosition;u_out=u_out+newPosition*10;myEnc.write(0);newPosition=0;times=millis();w=1;}}
  if(menu==0 && set_u==1 && millis()-times_u<5000){
    if (newPosition != oldPosition){times_u=millis();oldPosition = newPosition;u_out=u_out+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;}}
  if(stab==0){
  if(u_out<0){u_out=0;}if(u_out>280){u_out=280;}u_dig = float(u_out)/10/u_k*4096/5.00; 
  }
  Serial.println(u_dig);  
 

  if(stab==1){
    i = analogRead(A0)/250.00*i_k;
    if(i - float(i_out)/100.0>=1){u_dig-=100;if(u_dig<0){u_dig=0;}lcd.setCursor(12, 1);lcd.print("STB");}
    else if(i - float(i_out)/100.0>=0.5 && i - float(i_out)/100.0<1){u_dig-=100;if(u_dig<0){u_dig=0;}lcd.setCursor(12, 1);lcd.print("STB");}
    else if(i - float(i_out)/100.0>=0.25 && i - float(i_out)/100.0<0.5){u_dig-=50;if(u_dig<0){u_dig=0;}lcd.setCursor(12, 1);lcd.print("STB");}
    else if(i - float(i_out)/100.0>=0.1 && i - float(i_out)/100.0<0.25){u_dig-=25;if(u_dig<0){u_dig=0;}lcd.setCursor(12, 1);lcd.print("STB");}
    else if(i - float(i_out)/100.0>0.00  && i - float(i_out)/100.0<0.1){u_dig--;if(u_dig<0){u_dig=0;}lcd.setCursor(12, 1);lcd.print("STB");}
    
     else{
      u_dig = float(u_out)/10/u_k*4096/5.00;lcd.setCursor(12, 1);lcd.print("ON ");
      }
      if(power==1){MCP4725(0);lcd.setCursor(12, 1);lcd.print("OFF");}else{MCP4725(u_dig+i*4.00);}
    }

     
  //////// set i 0-2.5 A
 
  if(menu==1 && set_i==0 && millis()-times_i<5000){
    if (newPosition != oldPosition){times_i=millis();oldPosition = newPosition;i_out=i_out+newPosition*100;myEnc.write(0);newPosition=0;times=millis();w=1;}}
  if(menu==1 && set_i==1 && millis()-times_i<5000){
    if (newPosition != oldPosition){times_i=millis();oldPosition = newPosition;i_out=i_out+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;}}
     
  if(i_out<0){i_out=0;}if(i_out>999){i_out=999;}
 
  //////// lcd
  if(stab==0){i_kz();}
  
  if(millis()-times_lcd>400){times_lcd=millis();}
  
  lcd.setCursor(0, 0);if(menu==0){lcd.print("U*= ");}else{lcd.print("U = ");}

  
  if(millis()-times_u<5000&&menu==0){
  if(set_u==0){ if(millis()-times_lcd>200){lcd.print(u_out/100);lcd.print(u_out/10%10);lcd.print(".");lcd.print(u_out%10);}else{lcd.print("  ");lcd.print(".");lcd.print(u_out%10);}}
  if(set_u==1){ if(millis()-times_lcd>200){lcd.print(u_out/100);lcd.print(u_out/10%10);lcd.print(".");lcd.print(u_out%10);}else{lcd.print(u_out/100);lcd.print(u_out/10%10);lcd.print(".");lcd.print(" ");}}
  }
  else{
    if(stab==0){lcd.print(u_out/100);lcd.print(u_out/10%10);lcd.print(".");lcd.print(u_out%10);set_u=1;}
    if(stab==1){lcd.print((u_dig *10 *u_k *5.00/4096.00)/10,1);set_u=1;}
    }
  lcd.print(" V "); 
  lcd.setCursor(11, 0);lcd.print(abs(i),2);lcd.print("A");



  lcd.setCursor(0, 1);if(menu==1){lcd.print("I*= ");}else{lcd.print("I = ");}
  
  if(millis()-times_i<5000&&menu==1){
  if(set_i==0){ if(millis()-times_lcd>200){lcd.print(i_out/100);lcd.print(".");lcd.print(i_out/10%10);lcd.print(i_out%10);}
    else{lcd.print(" ");lcd.print(".");lcd.print(i_out/10%10);lcd.print(i_out%10);}}
  if(set_i==1){ if(millis()-times_lcd>200){lcd.print(i_out/100);lcd.print(".");lcd.print(i_out/10%10);lcd.print(i_out%10);}
    else{lcd.print(i_out/100);lcd.print(".");lcd.print("  ");}}
  }
  else{lcd.print(i_out/100);lcd.print(".");lcd.print(i_out/10%10);lcd.print(i_out%10);set_i=1;}
  lcd.setCursor(9, 1);lcd.print("A");

  if(stab==0){i_kz();}

  //////////////// EEPROM
  if(millis()-times>5000&&w==1){EEPROM.update(0,highByte(u_out));EEPROM.update(1,lowByte(u_out));
  EEPROM.update(2,highByte(i_out));EEPROM.update(3,lowByte(i_out));
  times=millis();w=0;}
  }//loop
 
void MCP4725(int data){  
  byte buffer[3];
  buffer[0] = 0b01000000;
  // data=0;
  // buffer[0] = 0b01100000; // запись в память ЦАП 0 В 
  buffer[1] = data >> 4;              
  buffer[2] = data << 4;
  Wire.beginTransmission(0x60);
  Wire.write(buffer[0]);
  Wire.write(buffer[1]);
  Wire.write(buffer[2]);
  Wire.endTransmission();
  }  
void i_kz(){  
  i = analogRead(A0)/250.00*i_k;
 
  if(i > float(i_out/100.0)){MCP4725(0);lcd.setCursor(12, 1);lcd.print("ERR");delay(3000);power=1;}
  else{lcd.setCursor(12, 1);
  if(power==0){MCP4725(u_dig+i*4.00);lcd.print("ON ");}
  if(power==1){MCP4725(0);lcd.print("OFF");}
  }
  
  }
  
 
void to_Timer(){newPosition = myEnc.read()/4;}

112

Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ

Обратите внимание на этот код:
   if(i - float(i_out)/100.0>=1){u_dig-=100;if(u_dig<0){u_dig=0;}lcd.setCursor(12, 1);lcd.print("STB");}
    else if(i - float(i_out)/100.0>=0.5 && i - float(i_out)/100.0<1){u_dig-=100;if(u_dig<0){u_dig=0;}lcd.setCursor(12, 1);lcd.print("STB");}
    else if(i - float(i_out)/100.0>=0.25 && i - float(i_out)/100.0<0.5){u_dig-=50;if(u_dig<0){u_dig=0;}lcd.setCursor(12, 1);lcd.print("STB");}
    else if(i - float(i_out)/100.0>=0.1 && i - float(i_out)/100.0<0.25){u_dig-=25;if(u_dig<0){u_dig=0;}lcd.setCursor(12, 1);lcd.print("STB");}
    else if(i - float(i_out)/100.0>0.00  && i - float(i_out)/100.0<0.1){u_dig--;if(u_dig<0){u_dig=0;}lcd.setCursor(12, 1);lcd.print("STB");}

Жирным я выделил значения, попробуйте их увеличить от 2 до 5 раз. Должно еще больше ускорить стабилизацию.

113

Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ

стабилизация ускорилась в разы! Даже без увеличения значений.
Осталась проблема цикличность процесса: ток стабилизируется до 0,25А, а потом снова возвращается на исходное значение и так по кругу.

114

Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ

стабилизация ускорилась в разы! Даже без увеличения значений.
Осталась проблема цикличность процесса: ток стабилизируется до 0,25А, а потом снова возвращается на исходное значение и так по кругу.

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

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

Добавьте строку:

else if(float(i_out)/100.0-0>0.00  && float(i_out)/100.0 - i <= 0.1){u_dig++;if(u_dig<0){u_dig=0;}lcd.setCursor(12, 1);lcd.print("STB");}

сразу после этих строк

    if(i - float(i_out)/100.0>=1){u_dig-=100;if(u_dig<0){u_dig=0;}lcd.setCursor(12, 1);lcd.print("STB");}
    else if(i - float(i_out)/100.0>=0.5 && i - float(i_out)/100.0<1){u_dig-=100;if(u_dig<0){u_dig=0;}lcd.setCursor(12, 1);lcd.print("STB");}
    else if(i - float(i_out)/100.0>=0.25 && i - float(i_out)/100.0<0.5){u_dig-=50;if(u_dig<0){u_dig=0;}lcd.setCursor(12, 1);lcd.print("STB");}
    else if(i - float(i_out)/100.0>=0.1 && i - float(i_out)/100.0<0.25){u_dig-=25;if(u_dig<0){u_dig=0;}lcd.setCursor(12, 1);lcd.print("STB");}
    else if(i - float(i_out)/100.0>0.00  && i - float(i_out)/100.0<0.1){u_dig--;if(u_dig<0){u_dig=0;}lcd.setCursor(12, 1);lcd.print("STB");}


Сейчас теоретически:

else if(float(i_out)/100.0-0>0.00  && float(i_out)/100.0 - i <= 0.1){u_dig++;if(u_dig<0){u_dig=0;}lcd.setCursor(12, 1);lcd.print("STB");}

если ток измеренный меньше установленного от 0,00 до 0,1 происходит повышение напряжения, до значения при котором снова начинается токовая стабилизация

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

115

Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ

Сработало! После отключения нагрузки, напряжение выходит на установленное ранее значение.
Приятно иметь дело с профессионалом!

116

Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ

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

Поправил, должно работать:

#include <Wire.h>
#include <EEPROM.h>
#include <Encoder.h>  // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip
#include <MsTimer2.h> // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip
#include <LiquidCrystal_I2C.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
 Encoder myEnc(8, 9);//CLK, DT
 LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей 
 
 unsigned long times,oldPosition  = -999,newPosition,times_lcd,times_u=millis()+50000,times_i=millis()+50000;
 int u_out,u_dig,menu,i_out;
 const float u_k = 7.10; // калибровка регулятора напряжения
 const float i_k = 0.975;// калибровка измерителя тока 
 const float r = 0.01;   // сопротивление шунта
 byte power = 1; // при подачи питания выходное напряжение 0 В - OFF
 float i;
 byte w,set_u,set_i;
 bool stab;
 int u_stab;
 
 
void setup(){
  Serial.begin(9600);
  Wire.begin();lcd.init();lcd.backlight();
  MsTimer2::set(1, to_Timer);MsTimer2::start();
  pinMode(10,INPUT);//  SW энкодер MENU
  pinMode(2,INPUT_PULLUP); // кнопка ON/OFF
  pinMode(3,INPUT_PULLUP); // кнопка U/I
  pinMode(4,INPUT_PULLUP); // кнопка STAB_I
  pinMode(A0,INPUT); // input I
  u_out=EEPROM.read(0)*256+EEPROM.read(1);
  i_out=EEPROM.read(2)*256+EEPROM.read(3);
  }
 
void loop(){
  if(stab==0){i_kz();}
  if(digitalRead(3)==LOW){menu++;if(menu>1){menu=0;}delay(200);}
  if(digitalRead(2)==LOW&&power==0){power = 1;delay(200);}
  if(digitalRead(2)==LOW&&power==1){power = 0;delay(200);}

  if(digitalRead(4)==LOW&&stab==0){stab = 1;lcd.setCursor(10, 1);lcd.print("S");delay(300);}
  if(digitalRead(4)==LOW&&stab==1){stab = 0;lcd.setCursor(10, 1);lcd.print(" ");delay(300);}
  
  if(digitalRead(10)==LOW && menu==0){set_u++;if(set_u>1){set_u=0;}set_i=100;times_u=millis();times_i=millis()+50000;delay(200);}
  if(digitalRead(10)==LOW && menu==1){set_i++;if(set_i>1){set_i=0;}set_u=100;times_i=millis();times_u=millis()+50000;delay(200);}
  
  //////// set out 0-28 V
  
  if(menu==0 && set_u==0 && millis()-times_u<5000){
    if (newPosition != oldPosition){times_u=millis();oldPosition = newPosition;u_out=u_out+newPosition*10;myEnc.write(0);newPosition=0;times=millis();w=1;}}
  if(menu==0 && set_u==1 && millis()-times_u<5000){
    if (newPosition != oldPosition){times_u=millis();oldPosition = newPosition;u_out=u_out+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;}}
  if(stab==0){
  if(u_out<0){u_out=0;}if(u_out>280){u_out=280;}u_dig = float(u_out)/10/u_k*4096/5.00; 
  }
  Serial.println(u_dig);  
 

  if(stab==1){
    i = analogRead(A0)/250.00*i_k;
    if(i - float(i_out)/100.0>=1){u_dig-=100;if(u_dig<0){u_dig=0;}lcd.setCursor(12, 1);lcd.print("STB");}
    else if(i - float(i_out)/100.0>=0.5 && i - float(i_out)/100.0<1){u_dig-=100;if(u_dig<0){u_dig=0;}lcd.setCursor(12, 1);lcd.print("STB");}
    else if(i - float(i_out)/100.0>=0.25 && i - float(i_out)/100.0<0.5){u_dig-=50;if(u_dig<0){u_dig=0;}lcd.setCursor(12, 1);lcd.print("STB");}
    else if(i - float(i_out)/100.0>=0.1 && i - float(i_out)/100.0<0.25){u_dig-=25;if(u_dig<0){u_dig=0;}lcd.setCursor(12, 1);lcd.print("STB");}
    else if(i - float(i_out)/100.0>0.00  && i - float(i_out)/100.0<0.1){u_dig--;if(u_dig<0){u_dig=0;}lcd.setCursor(12, 1);lcd.print("STB");}
    else if(float(i_out)/100.0-0>0.00  && float(i_out)/100.0 - i <= 0.1){u_dig++;if(u_dig<0){u_dig=0;}lcd.setCursor(12, 1);lcd.print("STB");}
    
     else{
      
      u_dig = float(u_out)/10/u_k*4096/5.00;lcd.setCursor(12, 1);lcd.print("ON ");
      }}
      if(power==1){MCP4725(0);lcd.setCursor(12, 1);lcd.print("OFF");}else{MCP4725(u_dig+i*4.00);}
    

     
  //////// set i 0-2.5 A
 
  if(menu==1 && set_i==0 && millis()-times_i<5000){
    if (newPosition != oldPosition){times_i=millis();oldPosition = newPosition;i_out=i_out+newPosition*100;myEnc.write(0);newPosition=0;times=millis();w=1;}}
  if(menu==1 && set_i==1 && millis()-times_i<5000){
    if (newPosition != oldPosition){times_i=millis();oldPosition = newPosition;i_out=i_out+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;}}
     
  if(i_out<0){i_out=0;}if(i_out>999){i_out=999;}
 
  //////// lcd
  if(stab==0){i_kz();}
  
  if(millis()-times_lcd>400){times_lcd=millis();}
  
  lcd.setCursor(0, 0);if(menu==0){lcd.print("U*= ");}else{lcd.print("U = ");}

  
  if(millis()-times_u<5000&&menu==0){
  if(set_u==0){ if(millis()-times_lcd>200){lcd.print(u_out/100);lcd.print(u_out/10%10);lcd.print(".");lcd.print(u_out%10);}else{lcd.print("  ");lcd.print(".");lcd.print(u_out%10);}}
  if(set_u==1){ if(millis()-times_lcd>200){lcd.print(u_out/100);lcd.print(u_out/10%10);lcd.print(".");lcd.print(u_out%10);}else{lcd.print(u_out/100);lcd.print(u_out/10%10);lcd.print(".");lcd.print(" ");}}
  }
  else{
    if(stab==0){lcd.print(u_out/100);lcd.print(u_out/10%10);lcd.print(".");lcd.print(u_out%10);set_u=1;}
    if(stab==1){lcd.print((u_dig *10 *u_k *5.00/4096.00)/10,1);set_u=1;}
    }
  lcd.print(" V "); 
  lcd.setCursor(11, 0);lcd.print(abs(i),2);lcd.print("A");



  lcd.setCursor(0, 1);if(menu==1){lcd.print("I*= ");}else{lcd.print("I = ");}
  
  if(millis()-times_i<5000&&menu==1){
  if(set_i==0){ if(millis()-times_lcd>200){lcd.print(i_out/100);lcd.print(".");lcd.print(i_out/10%10);lcd.print(i_out%10);}
    else{lcd.print(" ");lcd.print(".");lcd.print(i_out/10%10);lcd.print(i_out%10);}}
  if(set_i==1){ if(millis()-times_lcd>200){lcd.print(i_out/100);lcd.print(".");lcd.print(i_out/10%10);lcd.print(i_out%10);}
    else{lcd.print(i_out/100);lcd.print(".");lcd.print("  ");}}
  }
  else{lcd.print(i_out/100);lcd.print(".");lcd.print(i_out/10%10);lcd.print(i_out%10);set_i=1;}
  lcd.setCursor(9, 1);lcd.print("A");

  if(stab==0){i_kz();}

  //////////////// EEPROM
  if(millis()-times>5000&&w==1){EEPROM.update(0,highByte(u_out));EEPROM.update(1,lowByte(u_out));
  EEPROM.update(2,highByte(i_out));EEPROM.update(3,lowByte(i_out));
  times=millis();w=0;}
  }//loop
 
void MCP4725(int data){  
  byte buffer[3];
  buffer[0] = 0b01000000;
  // data=0;
  // buffer[0] = 0b01100000; // запись в память ЦАП 0 В 
  buffer[1] = data >> 4;              
  buffer[2] = data << 4;
  Wire.beginTransmission(0x60);
  Wire.write(buffer[0]);
  Wire.write(buffer[1]);
  Wire.write(buffer[2]);
  Wire.endTransmission();
  }  
void i_kz(){  
  i = analogRead(A0)/250.00*i_k;
 
  if(i > float(i_out/100.0)){MCP4725(0);lcd.setCursor(12, 1);lcd.print("ERR");delay(3000);power=1;}
  else{lcd.setCursor(12, 1);
  if(power==0){MCP4725(u_dig+i*4.00);lcd.print("ON ");}
  if(power==1){MCP4725(0);lcd.print("OFF");}
  }
  
  }
  
 
void to_Timer(){newPosition = myEnc.read()/4;}

117 (2023-01-21 00:49:41 отредактировано Sergey-77)

Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ

Блок находится в режиме стабилизации, нажимаю кнопку он/офф, появляется надпись OFF и напряжение с выхода снимается, не отключая нагрузки нажимаю кнопку он/офф, появляется напряжение выставленное ранее и начинается работа стабилизации до тока 0,25А.
это без последней правки

118

Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ

Проверьте в режиме отсечки отключение выхода.

119

Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ

с обновленным скетчем все работает так же

120

Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ

Отлично.

121

Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ

в режиме отсечки: при нажатии кнопки он/офф напряжение с выхода снимается

122

Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ

Я его завтра еще помучаю

123

Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ

Хорошо, если что пишите.

124

Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ

Если раскомментировать строки:

// data=0;

// buffer[0] = 0b01100000; // запись в память ЦАП 0 В

напряжение при нажатие кнопки ON не появляется

Сжег сейчас переходник USB/TTL, эксперименты временно откладываются...

125

Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ

жег сейчас переходник USB/TTL, эксперименты временно откладываются...

Очень жаль.

Если раскомментировать строки:

// data=0;

// buffer[0] = 0b01100000; // запись в память ЦАП 0 В

напряжение при нажатие кнопки ON не появляется

Эти строки кода служат, только один раз, для записи 0 В при старте ЦАП, пока не произошла инициация.

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