| Ваш IP: 3.235.11.178 | Online(29) - гости: 20, боты: 9 | Загрузка сервера: 1.98 ::::::::::::

Регулируемый стабилизатор напряжения с управлением от 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.

Комментарии

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

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

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

  • УКВ-ЧМ приемник на микросхемах «SAMSUNG»

    На микросхеме А1 выполнен приемный тракт ЧМ с низкой промежуточной частотой. Эта микросхема КА22429D, она аналогична К174ХА34 и TDA7010, но выполнена в миниатюрном корпусе SOP-225 с выводами под поверхностный монтаж со стороны печатных дорожек. Но у этой микросхемы есть отличия от аналогичных — в ней нет предварительно УНЧ, поэтому напряжение …Подробнее...
  • Домашняя метеостанция + будильник (Nokia 5110 LCD)(Arduino)

    Домашняя метеостанция + будильник (Nokia 5110 LCD)(Arduino)

    На странице https://rcl-radio.ru/?p=55605 рассматривался пример создания простой погодной метеостанции на основе датчиков давления, влажности и температуры с выводом информации на LCD экран Nokia 5110. На данной странице будет показан пример создания погодной станции с будильником, так как в погодной станции имеются часы реального времени, то добавить дополнительный функционал в виде будильника не …Подробнее...
  • Cетевой амперметр к ЛАТРу

    Кто занимался разработкой, налаживанием и ремонтом РЭС знает наверняка, как удобно пользоваться лабораторным автотрансформатором (ЛАТРом). Автор использует девятиамперный ЛАТР [1]. Для удобства эксплуатации ЛАТР автор дополнил амперметром переменного тока. Его принципиальная электрическая схема приведена на рис.1, а печатная плата — на рис.2. Конструкция амперметра хороша тем, что имеет одну шкалу …Подробнее...
  • Вольтамперметр для источника питания

    Вольтамперметр для источника питания

    На рисунке показана схема вольтамперметра для лабораторного источника питания с выходным напряжение от 0 до 50 В и максимальным током в 50А. В схеме используется микроконтроллер PIC16F877А и индикатор LCD WH1602D. Уст-во имеет два входа — для тока и напряжения. Вход АЦП AN0 микроконтроллера настроен на максимальное входное напряжение 5В, что …Подробнее...
  • Подключение дисплея LCD 1602 к Arduino

    Подключение дисплея LCD 1602 к Arduino

    В это статье мы рассмотрим как подключить жидкокристаллический дисплей LCD 1602 (чип HD44780) к Arduino Nano (Uno), для этого мы будем использовать библиотеку LiquidCrystal встроенную в Arduino IDE. Дисплей LCD1602 имеет 16 выводов, назначение каждого приведено ниже: 1 – VSS – GND (земля); 2 – VDD – (+5В питание); 3 – …Подробнее...