Re: Регулируемый стабилизатор напряжения с управлением от Arduino
1 выходное напряжение
2 выходной ток (если подключена нагрузка)
3 ток ограничения
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
forum.rcl-radio.ru → Тестирование скетчей → Регулируемый стабилизатор напряжения с управлением от Arduino
Чтобы отправить ответ, вы должны войти или зарегистрироваться
1 выходное напряжение
2 выходной ток (если подключена нагрузка)
3 ток ограничения
1.Мне кажется, было-бы лучше поменять местами
поз.2 и 3.
U=, I= -- это задаваемые параметра,
а поз. 3 реальные показания тока нагрузки.
2.при установке тока не удерживать кнопку, а нажатием (без удержания)
выбирать, что устанавливать U или I, а перед выбранным параметром знак " >",
Что нужно поменять в скетче, чтоб было так как я писал?
Било б не плохо на выходе поставить делитель и мерять выходное напряжение и
отображать на индикаторе
Я внес несколько правок, не тестировал
Обратите внимание на этот участок кода
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;
}
Использую транзистор TIP147
1. Кнопкой выбираем, что регулировать (I или U), работает!
2. Защита по температуре 85 гр., работает!
3. Ток потребляемый нагрузкой на мультиметре (328 мА), на ЛСД 970 мА.
Как подкорректировать?
4. Поменять местами показания на нижней строке (буду пытаться сам, но нужна ваша подсказка)
проверьте не подключена ли какая то нагрузка после шунта, ток потребления должен быть 0 мА. если ноль есть, то подключите нагрузку, замерьте ток
const float kalib2=1.000;// калибровка амперметра - 1.000 это множитель
проверьте не подключена ли какая то нагрузка после шунта, ток потребления должен быть 0 мА. если ноль есть, то подключите нагрузку, замерьте ток
const float kalib2=1.000;// калибровка амперметра - 1.000 это множитель
На фото, на выход подключена лампочка, реальный ток показывает мультиметр,
включенный последовательно с лампочкой тестируемой схемы, а на ЛСД другие показания (970 mA).
Без нагрузки ЛСД показывает - 0.00 А.
Это я понял : const float kalib2=1.000;// калибровка амперметра - 1.000 это множитель
Не понял как пересчитать? Что на что умножать?
Вот методом научного тыка подобрал : const float kalib2=0.450
У Вас шунт наверное не 0,1 Ом, а больше.
на фото видно 10WR1J. Покупал как 0.1 ом.
К сожалению точно нечем замерить и подогнать,(я в отпуске)
const float kalib2=1.000;// калибровка амперметра - 1.000 это множитель
как высчитывается множитель
Запитываю с этого БП.
Не работает защита от КЗ на выходе. При КЗ просаживает входное напряжение
до 5в и все тухнет.
///////////////////////////////////////// защита от КЗ //////////////////////////////////
if(I>3){MCP4725.setVoltage(0, false);lcd.setCursor(0,0);lcd.print(" SHORT CIRCUIT! ");delay(10000);}
Ток при котором срабатывает защита от КЗ 3 А.
if(I>3){MCP4725.setVoltage(0, false);lcd.setCursor(0,0);lcd.print(" SHORT CIRCUIT! ");delay(10000);}
Мне сложно что то сказать, почему так работает. У моего источника был большой запас по току.
В этой строке есть условие I>3 - срабатывает защита, установите I>2 проверьте будет ли срабатывать защита при превышении 2 А.
Так же убедитесь то амперметр правильно показывает ток нагрузки
Поправьте код, найдите эту строчку
if(i_iz>65000){i_iz=0;}I = i_iz*0.015625*kalib2/100;
измените на
I = i_iz*0.015625*kalib2/100;
f(I>3)- тупо закорачиваю "гвоздем" выход ВАШЕГО БП и все тухнет
if(I>2) - защита работает SHORT CIRCUIT!
if(I>1) - защита работает SHORT CIRCUIT!
Поправьте код, найдите эту строчку
if(i_iz>65000){i_iz=0;}I = i_iz*0.015625*kalib2/100;
измените на
I = i_iz*0.015625*kalib2/100;
одно и тоже
Возможно Ваш источник питания входит в защиту, при КЗ происходит бросок тока выше 3 А, попробуйте ограничит ток защиты до 2,5 А
if(I>2.5){MCP4725.setVoltage(0, false);lcd.setCursor(0,0);lcd.print(" SHORT CIRCUIT! ");delay(10000);}
Так же убедитесь то амперметр правильно показывает ток нагрузки
проверил правильно
Стабилизация тока работает, подробно расписывать не буду,
если нужно напишу подробно.
Возможно Ваш источник питания входит в защиту, при КЗ происходит бросок тока выше 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!
Возможно в блоке питания, найду другой, напишу
Чтобы отправить ответ, вы должны войти или зарегистрироваться
forum.rcl-radio.ru → Тестирование скетчей → Регулируемый стабилизатор напряжения с управлением от Arduino
Форум работает на PunBB, при поддержке Informer Technologies, Inc
|