26

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

http://forum.rcl-radio.ru/uploads/images/2021/03/22ac81ff0884b55534283d2cb84f4b4e.png

1 выходное напряжение
2 выходной ток (если подключена нагрузка)
3 ток ограничения

27 (2021-03-06 11:12:03 отредактировано sanj76a)

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

1.Мне кажется, было-бы лучше поменять местами
   поз.2 и 3.   
   U=, I=  -- это задаваемые параметра,
   а поз. 3  реальные показания тока нагрузки.
   
2.при установке тока не удерживать кнопку, а нажатием (без удержания)
   выбирать, что устанавливать U или I, а перед выбранным параметром знак " >",

   Что нужно поменять в скетче, чтоб было так как я писал?
Било б не плохо на выходе поставить делитель и мерять выходное напряжение и
отображать на индикаторе

28

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

Я внес несколько правок, не тестировал

Обратите внимание на этот участок кода

   lcd.setCursor(0,0);if(menu==0){lcd.print("U*= ");}else{lcd.print("U = ");}lcd.print((u_dig-u_reg)*u_max/4096,1);lcd.print(" V  ");
    lcd.setCursor(0,1);if(menu==1){lcd.print("I*= ");}else{lcd.print("I = ");}lcd.print(abs(I),2);lcd.print(" A  ");
    time2=millis();} lcd.setCursor(11,1);lcd.print(i_reg,1);lcd.print(" A");

Функция  lcd.setCursor(); позволит Вам переместить в нужное Вам место надписи.
например  lcd.setCursor(11,1); - 2 строка 11 знакоместо

#include <Wire.h>
#include <Adafruit_MCP4725.h>
#include <DallasTemperature.h>
#include <EEPROM.h>
#include <OneWire.h>
#include <Adafruit_ADS1015.h>
#include <LiquidCrystal.h>
   Adafruit_ADS1115 ads;
   Adafruit_MCP4725 MCP4725;
   OneWire oneWire(A2);// вход датчика 18b20
   DallasTemperature t(&oneWire);
   LiquidCrystal lcd(7, 6, 2, 3, 4, 5);// RS,E,D4,D5,D6,D7
 
  int u_dig,i,u_reg,w,w1,I_r,menu;
  unsigned int i_iz;
  float u_max=26.3,I,temp,i_reg,I_old;
  unsigned long time,time1,time2;
  const float kalib2=1.000;// калибровка амперметра
 
void setup(){
 Serial.begin(9600);Wire.begin(); lcd.begin(16, 2);
  pinMode(12,INPUT);// +
  pinMode(11,INPUT);// -
  pinMode(10,INPUT);// ok
   MCP4725.begin(0x60);
   t.begin();t.setResolution(9);//9 бит 
   ads.begin();ads.setGain(GAIN_EIGHT);
   u_dig=EEPROM.read(0)*256+EEPROM.read(1);i_reg=(float)EEPROM.read(2)/10.0;
}
 
void loop(){  
  if(digitalRead(10)==HIGH){menu++; if(menu>1){menu=0;}delay(100);}
  
  if(menu==0){
  if(digitalRead(12)==HIGH){u_dig+=2;w=1;time1=millis();delay(10);}
  if(digitalRead(11)==HIGH){u_dig-=2;w=1;time1=millis();delay(10);}
  if(u_dig>4095){u_dig=4095;}if(u_dig<0){u_dig=0;}
  }
  
  if(menu==1){
  if(digitalRead(12)==HIGH){i_reg=i_reg+0.1;w=1;time1=millis();delay(300);}
  if(digitalRead(11)==HIGH){i_reg=i_reg-0.1;w=1;time1=millis();delay(300);}
  if(i_reg>3){i_reg=3;}if(i_reg<0.1){i_reg=0.1;}I_r=i_reg*10.0;
  }
 
   MCP4725.setVoltage(u_dig-u_reg+16*I, false);
 
  ///////////////////////////////// амперметр /////////////////////////////////////////////
   i_iz = ads.readADC_SingleEnded(0);
   if(i_iz>65000){i_iz=0;}I = i_iz*0.015625*kalib2/100;
 
   ///////////////////////////////////////// защита от КЗ ////////////////////////////////// 
   if(I>3){MCP4725.setVoltage(0, false);lcd.setCursor(0,0);lcd.print(" SHORT CIRCUIT! ");delay(10000);} 
 
   //////////////////////////////////// стабилизация по току + ТЕРМОАЩИТА///////////////////////////////  
   if(w1==1){    if(I>i_reg&&u_dig>0){u_reg=u_reg+10;} if(I==i_reg){}
                 if(I<i_reg&&u_reg>0&&I>0.1){u_reg=u_reg-10;} if(I<0.08){w1=0;u_reg=0;}}
   if(I>i_reg&&u_dig>0&&w1==0){u_reg=u_dig-(u_dig*(i_reg/I));w1=1;MCP4725.setVoltage(u_dig-u_reg, false);}
   if(temp>85){MCP4725.setVoltage(0, false);lcd.setCursor(0,0);lcd.print("HIGH TEMPERATURE");delay(10000);} 
 
  ////////////////////////////////////// eeprom ///////////////////////////////////////////
   if(w==1&&millis()-time>1000){EEPROM.update(0,highByte(u_dig));EEPROM.update(1,lowByte(u_dig));
   EEPROM.update(2,I_r);time=millis();w=0;}
 
  if(millis()-time2>300){
    lcd.setCursor(0,0);if(menu==0){lcd.print("U*= ");}else{lcd.print("U = ");}lcd.print((u_dig-u_reg)*u_max/4096,1);lcd.print(" V  ");
    lcd.setCursor(0,1);if(menu==1){lcd.print("I*= ");}else{lcd.print("I = ");}lcd.print(abs(I),2);lcd.print(" A  ");
    time2=millis();} lcd.setCursor(11,1);lcd.print(i_reg,1);lcd.print(" A");
 
  ////////////////////// измерение температуры корпуса транзстора ///////
  if(millis()-time1>1000&&I_old==I){ t.requestTemperatures();
   temp=t.getTempCByIndex(0); lcd.setCursor(12,0);lcd.print(temp,0);
   lcd.print(char(223));lcd.print("C     ");time1=millis();}I_old=I;
}

29 (2021-03-10 11:11:41 отредактировано sanj76a)

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

http://forum.rcl-radio.ru/uploads/images/2021/03/c38c212df5bb076787e304e21ab3c266.jpg

Использую транзистор TIP147

1. Кнопкой выбираем, что регулировать (I или U), работает!

2. Защита по температуре 85 гр., работает! 

3. Ток потребляемый нагрузкой на мультиметре (328 мА), на ЛСД 970 мА.
    Как подкорректировать?

4. Поменять местами показания на нижней строке (буду пытаться сам, но нужна ваша подсказка)

30

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

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

const float kalib2=1.000;// калибровка амперметра - 1.000 это множитель

31 (2021-03-10 18:58:19 отредактировано sanj76a)

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

liman324 пишет:

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

const float kalib2=1.000;// калибровка амперметра - 1.000 это множитель

На фото, на выход подключена лампочка, реальный ток показывает мультиметр,
включенный последовательно с лампочкой тестируемой схемы,  а на ЛСД другие показания (970 mA).
Без нагрузки  ЛСД показывает - 0.00 А.

Это я понял : const float kalib2=1.000;// калибровка амперметра - 1.000 это множитель
Не понял как пересчитать? Что на что умножать?

Вот методом научного тыка подобрал : const float kalib2=0.450

32

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

У Вас шунт наверное не 0,1 Ом, а больше.

33

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

на фото видно 10WR1J. Покупал как 0.1 ом.
К сожалению точно нечем замерить и подогнать,(я в отпуске)

34

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

const float kalib2=1.000;// калибровка амперметра - 1.000 это множитель
как высчитывается множитель

35

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

http://forum.rcl-radio.ru/uploads/images/2021/03/6d0c34ab9ec9affb4b841ab3bb9016e3.jpg

Запитываю с этого БП.
Не работает защита от КЗ на выходе. При КЗ просаживает входное напряжение
до 5в и все тухнет.

36

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

///////////////////////////////////////// защита от КЗ //////////////////////////////////
   if(I>3){MCP4725.setVoltage(0, false);lcd.setCursor(0,0);lcd.print(" SHORT CIRCUIT! ");delay(10000);}

Ток при котором срабатывает защита от КЗ 3 А.

37

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

if(I>3){MCP4725.setVoltage(0, false);lcd.setCursor(0,0);lcd.print(" SHORT CIRCUIT! ");delay(10000);}

Мне сложно что то сказать, почему так работает. У моего источника был большой запас по току.

В этой строке есть условие I>3 - срабатывает защита, установите I>2 проверьте будет ли срабатывать защита при превышении 2 А.

38

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

Так же убедитесь то амперметр правильно показывает ток нагрузки

39

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

Поправьте код, найдите эту строчку
if(i_iz>65000){i_iz=0;}I = i_iz*0.015625*kalib2/100;
измените на
I = i_iz*0.015625*kalib2/100;

40

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

f(I>3)- тупо закорачиваю "гвоздем" выход ВАШЕГО БП и все тухнет
if(I>2) - защита работает SHORT CIRCUIT!
if(I>1) - защита работает SHORT CIRCUIT!

41 (2021-03-11 23:14:53 отредактировано sanj76a)

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

liman324 пишет:

Поправьте код, найдите эту строчку
if(i_iz>65000){i_iz=0;}I = i_iz*0.015625*kalib2/100;
измените на
I = i_iz*0.015625*kalib2/100;

одно и тоже

42

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

Возможно Ваш источник питания входит в защиту, при КЗ происходит бросок тока выше 3 А, попробуйте ограничит ток защиты до 2,5 А

  if(I>2.5){MCP4725.setVoltage(0, false);lcd.setCursor(0,0);lcd.print(" SHORT CIRCUIT! ");delay(10000);}

43

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

liman324 пишет:

Так же убедитесь то амперметр правильно показывает ток нагрузки

проверил правильно

44 (2021-03-12 01:43:49 отредактировано sanj76a)

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

Стабилизация тока работает, подробно расписывать не буду,
если нужно  напишу подробно.

45 (2021-03-12 01:44:03 отредактировано sanj76a)

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

liman324 пишет:

Возможно Ваш источник питания входит в защиту, при КЗ происходит бросок тока выше 3 А, попробуйте ограничит ток защиты до 2,5 А

  if(I>2.5){MCP4725.setVoltage(0, false);lcd.setCursor(0,0);lcd.print(" SHORT CIRCUIT! ");delay(10000);}

f(I>3)- тупо закорачиваю "гвоздем" выход ВАШЕГО БП и все тухнет
if(I>2) - защита работает SHORT CIRCUIT!
if(I>1) - защита работает SHORT CIRCUIT!

Возможно в блоке питания, найду другой, напишу