| Ваш IP: 3.235.66.217 | Online(63) - гости: 25, боты: 38 | Загрузка сервера: 4.52 ::::::::::::


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

На рисунке показана схеме регулируемого стабилизатора напряжения с управлением от Arduino. Регулируемый стабилизатор питается от нестабилизированного источника постоянного напряжения 28…35 В. Выходное напряжение стабилизатора регулируется от 0 до 25 В, выходной ток до 3 А. В стабилизаторе предусмотрена плавная регулировка выходного напряжения, защита от короткого замыкания выхода и стабилизация тока при превышении заданного значения. Дополнительно применена температурная защита от перегрева выходного транзистора.

Схема стабилизатора напряжения условно поделена на две части, цифровую (Arduino, ЦАП, АЦП, индикатор и кнопки управления) и силовую. В силовой части используется параметрический стабилизатор на 27 В для питания ОУ LM358 который имеет максимальное напряжение питания 32В, что позволяет запитывать схему стабилизатора напряжением выше 32 В. Функцию регулирующего элемента осуществляется транзисторами КТ315Г и КТ825Г которыми управляет ОУ, на инвертирующий вход ОУ подается напряжение пропорциональное выходному, а на неинвертирующий опорное напряжение. Транзистор КТ825Г необходимо установить на теплоотвод площадью не менее 400 кв. см.

Цифровая часть схемы содержит АЦП и ЦАП, выходное напряжение задается 12-битным ЦАП MCP4725, напряжение с которого подается на неинвертирующий вход ОУ LM358, регулировка имеет 4096 ступеней (12 бит). АЦП 16 бит ADS1115 контролирует напряжение шунта, которое при токе 3 А не превышает 300 мВ. АЦП и ЦАП выполнены в виде готовых модулей, которые управляются при помощи шины I2C. Для устранения влияния шунта на выходное напряжение при изменении тока нагрузки, применена программная поправка выходного напряжения.

Температурная защита реализована на цифровом датчике (модуль) DS18B20, датчик необходимо закрепить на транзисторе КТ825Г. При превышении температуры корпуса транзистора больше 85 °С, выходное напряжение стабилизатора будет отключено на 10 секунд. Так же при КЗ выхода стабилизатора выходное напряжение также будет отключено на 10 секунд. При срабатывании защиты на экран выводится соответствующая надпись.

Питание всей цифровой части стабилизатора напряжения подается от интегрального стабилизатора 7805, так как входное напряжение стабилизатора 7805 выше 30 В, то питание на него подается через токоограничивающий резистор 160 Ом. Так же на стабилизатор 7805 необходимо установить небольшой теплоотвод.

Управление стабилизатором достаточно простое, кнопки «плюс» и  «минус» регулируют выходное напряжение, а при нажатии и удержании кнопки «ток» кнопками «плюс» и  «минус» устанавливается выходной ток. При превышении заданного тока, выходной ток перестанет расти и остановится на отметке максимального установленного тока, напряжение при этом уменьшится. Шаг регулировки напряжения 0,1 В, шаг регулировки тока 0,1 А, минимальное значение напряжения 0 В, минимальное значение регулировки тока 0,1 А, измирение тока с разрешением 0,01 А.

#include <Wire.h>
#include <Adafruit_MCP4725.h>
#include <DallasTemperature.h>
#include <EEPROMex.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;
  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(12)==HIGH&&digitalRead(10)==LOW){u_dig+=2;w=1;time1=millis();delay(10);}
  if(digitalRead(11)==HIGH&&digitalRead(10)==LOW){u_dig-=2;w=1;time1=millis();delay(10);}
  if(u_dig>4095){u_dig=4095;}if(u_dig<0){u_dig=0;}
 
  if(digitalRead(12)==HIGH&&digitalRead(10)==HIGH){i_reg=i_reg+0.1;w=1;time1=millis();delay(300);}
  if(digitalRead(11)==HIGH&&digitalRead(10)==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);lcd.print("U = ");lcd.print((u_dig-u_reg)*u_max/4096,1);lcd.print(" V  ");
    lcd.setCursor(0,1);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;
}

Настройка стабилизатора напряжения:

  • Нажмите кнопку «плюс», подождите когда выходное напряжение достигнет максимального значения, исделайте замер выходного напряжение и укажите его в переменной: u_max=26.3 (в моем случае максимальное напряжение 26,3 В)
  • При использовании шунта с номиналом 0,1 Ом, калибровка тока не потребуется, но если шунт имеет большую погрешность то необходимо изменить коэффициент: kalib2=1.000

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

Фильтр выполнен на ферритовом кольце диаметром 3..4 см с магнитной проницаемостью 2000НН, две обмотки намотаны вместе, диаметр провода не менее 0,8 мм, кол-во витков 10-15.

Комментарии

  • om-andrej:

    Подскажите как увеличить выходной ток?

    • liman28:

      Не совсем понятен вопрос, если программно надо изменить предел, то необходимые правки кода я сделаю, но перед этим нужно что бы сам источник питания мог выдавать нужный ток.
      Увеличить выходной ток не трудно, более мощный трансформатор (или имп. ист питания), более мощный диодный мост, и несколько силовых транзисторов подключенных параллельно (коллекторы соединены через резисторы 0,1 Ом)

  • Shah:

    Почему при включении стабилизатора на выходе кратковременно появляется напряжение примерно 13 вольт и через секунду устанавливается ранее установленное напряжение?

    • liman28:

      После:
      MCP4725.begin(0x60);
      вставьте строку:
      MCP4725.setVoltage(0, false);

      • Shah:

        Спасибо, но все по прежнему.

        • liman28:

          В секцию void setup() добавьте:
          time1=millis();

        • liman28:

          Если не получится, то:
          создайте новую переменную int www=1;
          далее замените:
          MCP4725.setVoltage(u_dig-u_reg+16*I, false);
          на:
          if(www==1){MCP4725.setVoltage(0, false);www=0;}
          if(www==0){MCP4725.setVoltage(u_dig-u_reg+16*I, false);}

          • Shah:

            На выводе OUT MCP4725 при включении появляется напряжение 2,5 вольта и через пару секунд 1 вольт.

            • liman28:

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

              • Shah:

                Да, это происходит до инициализации ЦАП

                • liman28:

                  можно подать лог ноль на вход оу, пока происходит инициация

                  void setup(){
                  Serial.begin(9600);Wire.begin(); lcd.begin(16, 2);
                  pinMode(12,INPUT);// +
                  pinMode(11,INPUT);// —
                  pinMode(10,INPUT);// ok
                  pinMode(9,OUTPUT);
                  digitalWrite(9,LOW);
                  MCP4725.begin(0x60);
                  MCP4725.setVoltage(0, false);
                  delay(1000);
                  pinMode(9,INPUT);
                  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;
                  }

                  С 9 ЦИФРОВОГО ВЫХОДА ЧЕРЕЗ РЕЗИСТОР 1К КИНУТЬ ПРОВОД НА 3 НОЖКУ L358, ПРИ СТАРТЕ ЛОГ НОЛЬ С 9 ВЫХОДА БУДЕТ ДЕРЖАТЬ ВЫХОД ОУ НА НУЛЕ ПОКА НЕ ИНИЦИЛИРУЕТСЯ ЦАП. ДАЛЕЕ ВЫВОД 9 ПЕРЕХОДИТ В РЕЖИМ ИЗМЕРЕНИЯ И ИМЕЕТ ОЧЕНЬ ВЫСОКОЕ ВХОДНОЕ СОПРОТИВЛЕНИЕ И НЕ ВЛИЯЕТ НА ЦАП.
                  ДРУГОГО РЕШЕНИЯ ПРОБЛЕМЫ Я НЕ ВИЖУ, МОЖНО КОНЕЧНО ВЫХОД ИСТОЧНИКА ПИТАНИЯ ОТКЛЮЧАТЬ ЧЕРЕЗ РЕЛЕ НА 3 СЕК, НО НЕ ХОЧЕТСЯ В СХЕМУ ДОБАВЛЯТЬ НОВЫХ КОМПОНЕНТОВ.

                  • Shah:

                    Теперь на секунду напряжение поднимается до 13 вольт, затем на секунду падает до нуля и потом устанавливается предустановленное напряжение. Может стоит на 3 ножку поставить транзистор с эл.конденсатором, чтобы получилась задержка?

                    • liman28:

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

                  • Shah:

                    Собрал схему для задержки подачи питания на LM358. Всё работает нормально.

          • liman28:

            наверное напряжение 13В появляется до инициации ЦАП, чтобы это проверить замените код:
            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 setup(){
            Serial.begin(9600);Wire.begin(); lcd.begin(16, 2);
            pinMode(12,INPUT);// +
            pinMode(11,INPUT);// —
            pinMode(10,INPUT);// ok
            MCP4725.begin(0x60);
            MCP4725.setVoltage(0, false);
            delay(10000);
            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;

            если это так, то при включении должно быть напряжение 13В, далее 0 в течении 10 секунд и потом предустановленное напряжение.

  • Принципиально ли использование КТ825г?Можно ли заменить например на MJ11015G или на что ещё

  • какая мощность шунта-резистора?

  • profiart:

    Добрый день, я правильно понимаю, что схема не измеряет выходное напряжение, я задает его программно через ЦАП MCP4725 и LM358?

  • profiart:

    Спасибо, а не думали как нужно изменить схему для измерения выходного и входного напряжения напряжения? ADS1115 имеет 4е входа.

Добавить комментарий

Войти с помощью: 

Случайные статьи

  • Звуковое реле

    Схема звукового реле может работать от напряжения 5-12 В. При активации реле звуком оно будет отключатся через несколько секунд. При первом включении реле будет находиться под напряжением, из-за переходных процессов в С2, подождите несколько секунд, реле будет выключено. Вы можете увеличить или уменьшить время активации реле изменив значение C2. Не …Подробнее...
  • Преобразователь 12В>24В

    Преобразователь 12В>24В

    На рисунке показана схема простого преобразователя (DC) напряжения питающегося от напряжения 12В, выходное напряжение преобразователя 24В при максимальном токе нагрузки 800мА. При помощи резистора R6 можно установить выходное напряжение. L1 выполнена на ферритовом кольце 15*8*6 мм, катушка содержит 60 витков провода диаметром 0,63 мм. Для транзистора VT1 необходим небольшой радиатор. …Подробнее...
  • Нормирующий усилитель на дискретных элементах

    Нормирующий усилитель на дискретных элементах

    Нормирующий усилитель на дискретных элементах с большим динамическим диапазоном. Чтобы получить более качественные параметры, когда нет специализированных микросхем, нормирующий усилитель можно выполнить на базе дискретных компонентов. Он имеет следующие основные технические характеристики: Входное напряжение: номинальное ……….. 0,1 В максимальное………… 1,8 В Выходное напряжение: номинальное . ……….. 0,8 В максимальное………… 14 …Подробнее...
  • Высококачественный предварительный усилитель

    Высококачественный предварительный усилитель

    Характеристики: Коэффициент гармоник в диапазоне частот от 20 до 20000Гц не более 0,02% Отношение сигнал/шум -90дБ Диапазон регулировки громкости и тембра(60…16000Гц) соответственно 60 и +/-10дБ Переходное затухание между каналами в диапазоне частот 100…10000Гц не менее 50 дБ Входное и выходное сопротивление соответственно 220 и 3кОм Напряжение питания +/-5…16,5В Мостовой регулятор …Подробнее...
  • Автоматическое зарядное уст-во

    Автоматическое зарядное уст-во

    На рисунке показана схема автоматического зарядного уст-ва, которое позволяет заряжать автомобильный аккумулятор при разряде и прекращать зарядку при полном заряде аккумулятора. Такое уст-во желательно использовать для аккумуляторов которые находятся при длительном хранении. Переключение в режим заряда производится путем измерения напряжения на клеммах аккумулятора. Заряд начинается когда напряжение на клеммах аккумулятора …Подробнее...