1

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

http://forum.rcl-radio.ru/uploads/images/2021/01/f77c2683bff06bf448ecb6f73ff4a0be.gif
Данный контент доступен только зарегистрированным пользователям.

http://forum.rcl-radio.ru/uploads/images/2021/01/650a45a9ad6f6d931e341438be32c879.png
http://forum.rcl-radio.ru/uploads/images/2021/01/ac2a9263d86c247feb04bae74a74179d.png

#include <Wire.h>
#include <EEPROM.h>
#include <MCP3421.h>  // http://rcl-radio.ru/?p=62308
#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
 MCP3421 mcp;
 LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей 
 
 unsigned long times,oldPosition  = -999,newPosition;
 int u_out,u_dig,menu,i_out;
 const float u_k = 7.08; // калибровка регулятора напряжения
 const float i_k = 1.007;// каибровка ограничителя тока 
 const float r = 0.01;   // сопротивение шунта
 byte power = 1; // при подачи питания выходное напряжение 0 В - OFF
 float i;
 byte w;

void setup(){
  Wire.begin();lcd.init();lcd.backlight();
  mcp.setConfig(3,3); 
  MsTimer2::set(3, to_Timer);MsTimer2::start();
  pinMode(10,INPUT);//  SW энкодер MENU
  pinMode(2,INPUT_PULLUP); // кнопка ON/OFF
  u_out=EEPROM.read(0)*256+EEPROM.read(1);i_out=EEPROM.read(2);
  }

void loop(){
  i_kz();
  if(digitalRead(10)==LOW){menu++;if(menu>1){menu=0;}delay(200);}
  if(digitalRead(2)==LOW&&power==0){power = 1;delay(300);}
  if(digitalRead(2)==LOW&&power==1){power = 0;delay(300);}
  //////// set out 0-28 V
  if(menu==0){
  if (newPosition != oldPosition){oldPosition = newPosition;
     u_out=u_out+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;
     if(u_out<0){u_out=0;}if(u_out>280){u_out=280;}u_dig = float(u_out/10.00)/u_k*4096/5.00;}}
  //////// set i 0-2.5 A
  if(menu==1){
  if (newPosition != oldPosition){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>250){i_out=250;}}}
  
  //////// lcd
  i_kz();
  lcd.setCursor(0, 0);if(menu==0){lcd.print("U*= ");}else{lcd.print("U = ");}if(u_out<100){lcd.print(" ");}
  lcd.print(float(u_out/10.00),1);lcd.print(" V ");  
  lcd.setCursor(11, 0);lcd.print(abs(i),3);
  lcd.setCursor(0, 1);if(menu==1){lcd.print("A*= ");}else{lcd.print("I = ");}lcd.print(float(i_out/100.00),2);lcd.print(" A ");
  i_kz();
  
  //////////////// EEPROM
  if(millis()-times>5000&&w==1){EEPROM.update(0,highByte(u_out));EEPROM.update(1,lowByte(u_out));EEPROM.update(2,i_out);menu=0;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 = mcp.readWire()*0.256/131071*i_k/r;
  if(i > float(i_out/100.0)){MCP4725(0);lcd.setCursor(12, 1);lcd.print("ERR");delay(5000);power=1;}
  else{lcd.setCursor(12, 1);
  if(power==0){MCP4725(u_dig+i*5);lcd.print("ON ");}
  if(power==1){MCP4725(0);lcd.print("OFF");}
  }}
  
void to_Timer(){newPosition = myEnc.read()/4;}  

2

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

http://forum.rcl-radio.ru/uploads/images/2021/01/dbb6cb96a20f8f2ce77bbe400cacf77f.gif
Данный контент доступен только зарегистрированным пользователям.

#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;
 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;
 
void setup(){
  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(A0,INPUT); // input I
  u_out=EEPROM.read(0)*256+EEPROM.read(1);i_out=EEPROM.read(2);
  }
 
void loop(){i_kz();
  if(digitalRead(10)==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);}
  //////// set out 0-28 V
  if(menu==0){
  if (newPosition != oldPosition){oldPosition = newPosition;
     u_out=u_out+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;
     if(u_out<0){u_out=0;}if(u_out>280){u_out=280;}u_dig = float(u_out/10.00)/u_k*4096/5.00;}}
  //////// set i 0-2.5 A
  if(menu==1){
  if (newPosition != oldPosition){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>250){i_out=250;}}}
 
  //////// lcd
  i_kz();
  lcd.setCursor(0, 0);if(menu==0){lcd.print("U*= ");}else{lcd.print("U = ");}if(u_out<100){lcd.print(" ");}
  lcd.print(float(u_out/10.00),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("A*= ");}else{lcd.print("I = ");}lcd.print(float(i_out/100.00),2);lcd.print(" A ");
  i_kz();

  //////////////// EEPROM
  if(millis()-times>5000&&w==1){EEPROM.update(0,highByte(u_out));EEPROM.update(1,lowByte(u_out));EEPROM.update(2,i_out);menu=0;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;}

3

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

Подскажите, а в чем смысл диода VD2?

4

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

http://forum.rcl-radio.ru/uploads/images/2021/02/cd64fed7d0b20aa564eb9f8d00a2e783.png

5

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

У меня мелькала подобная мысль, но где тут индуктивная нагрузка?

6

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

Да, диод можно не ставить. Но его наличие хуже не сделает.

7

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

Здравствуйте! Я сделал регулятор, но есть проблема, звездочка постоянно перемещалась, из 1 ряда на 2 ряд и обратно!

8

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

Проверьте подключение энкодера и наличие подтягивающих резисторов на платке энкодера

9

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

Все так как на схем-енкодер HW-040

10

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

Часто энкодеры бывают без подтягивающих резисторов.

11

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

На платке енкодера есть два резистеров 10к

12

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

Должно быть три

13

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

Я положил резистор и заработало нормално!Thank You very much! Have A nice day!

14 (2021-08-05 18:55:24 отредактировано sanj76a)

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

Добрый день. как увеличить выходное напряжение до 30в

15

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

Измените
if(u_out<0){u_out=0;}if(u_out>280){u_out=280;}u_dig = float(u_out/10.00)/u_k*4096/5.00;}}
на
if(u_out<0){u_out=0;}if(u_out>300){u_out=300;}u_dig = float(u_out/10.00)/u_k*4096/5.00;}}

16 (2021-08-05 18:55:58 отредактировано sanj76a)

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

а какое входное? 33 достаточно?

17

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

Достаточно, но не превышайте 40 В LM723 может сгореть.

18 (2021-08-16 11:55:48 отредактировано sanj76a)

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

Вместо транса хочу применить ИБП.
Для смещения LM хочу применит 1117-3.3, но входное у нее  максимум 15в,
Хочу взять на вход 1117-3.3 с входного питания ардуино (9в). Так можно?

-------
R5 - 1 Ом?

19

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

Вам нужно напряжение -5В относительно общего провода, -3.3 я подавал, что то на этом напряжении с линейностью выходного напряжения было не то.
R5 - шунт 0.01 Ом

20 (2021-08-16 12:15:04 отредактировано sanj76a)

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

понял,не внимательно посмотрел.
----

прошу уточнить, есть 1 ом, а у вас по обозначению 1 сотая ома,так и есть?

21

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

Да, это отрезок манганиновой проволоки

22 (2021-08-16 13:01:57 отредактировано sanj76a)

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

а можно ли увеличить R5, есть готовая керамика 1.5, 1, 0.5, 0.15, 0.33 ома

23

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

измените строчки:
const float r = 0.15;   // сопротивление шунта

i = mcp.readWire()*2.048/131071*i_k/r;

mcp.setConfig(3,0);// 12 14 16 18 bit - 0-3 // 1x 2x 4x 8x gain - 0-3

24 (2021-08-16 16:49:57 отредактировано sanj76a)

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

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

25

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

Без смещения нет смысла делать, напряжение будет начинаться от 2-3 В, токовая защита работать не будет.

7 вывод - общий