XL4015 — понижающий DC-DC преобразователь с микроконтроллерным управлением (Arduino)

DC-DC преобразователь на основе чипа XL4015 представляет собой бюджетный и мощный модуль с высокой эффективностью (до 96%). XL4015 обладает защитой от короткого замыкания и перегрева, что позволяет автоматически отключать выход в случае превышения рабочей температуры.

Входное напряжение XL4015 составляет от 8 до 36 вольт, максимальный ток нагрузки может достигать 5 А.

Основные параметры:

  • Эффективность преобразования (КПД): до 96%
  • Частота переключения: 180 кГц
  • Входное напряжение: от 8 до 40 В
  • Выходное напряжение: от 1.25 до 32 В (регулируемое)
  • Защита: от короткого замыкания, от перегрева, ограничение выходного тока
  • Защита от переполюсовки: нет

Ниже показана схема источника питания с выходным регулируемым выходным напряжением от 0 до 25 В с функцией стабилизации тока (от 0 до 2,5 А).

XL4015 необходимо установить на небольшой теплоотвод. Дроссель — намотан на ферритовом кольце диаметром 25-30 мм, проводом 0,8-1 мм, намотка в один слой до заполнения.

Блок регулировки и измерения тока и напряжения выполнен на платформе Arduino, плата контроллера основана на микроконтроллере LGT8F328 (LGT8F328P-LQFP32 MiniEVB). Этот микроконтроллер имеет 12-й битный АЦП, что дает возможность достаточно точно измерять ток и напряжение. Для регулировки тока и напряжения используются 2 модуля ЦАП MCP4725, выходное напряжение MCP4725 12 бит и может регулироваться от 0 до 5 В.

  • Плата разработчика LGT8F328P-LQFP32 MiniEVB, как использовать плату в среде программирования Arduino IDE рассказано в — http://rcl-radio.ru/?p=129966

Органом управления служит энкодер KY-040, который позволяет регулировать выходное напряжение и ток стабилизации. Нажатие на кнопку энкодера позволяет менять регулируемый параметр (U/I).

Информация об установленном выходном напряжении, ток нагрузки  и режимы работы будут выводиться на дисплей OLED 1.3 128×64 (чип драйвера — SH1106  I2C).

  1. Установленное напряжение
  2. Установленный уровень тока стабилизации
  3. Измеренное напряжение
  4. Измеренный ток

Так как в схеме используется 2 ЦАП MCP4725, то изначально в них одинаковые I2C адреса. Поэтому на плате модуля ЦАП имеется контакты (для пайки) которые позволяют изменить I2C адрес. Один ЦАП должен иметь I2C адрес 0х60, другой 0х61.

Для получения адреса 0х61 необходимо замкнуть центральный контакт с контактом VCC. Для адреса 0х60 оставить все контакты не замкнутыми. ЦАП с адресом 0х61 будет использоваться для регулировки напряжения, а с адресом 0х60 для регулировки тока стабилизации.

Следует заметить, что при подключении 2-х АЦП MCP4725 и дисплея OLED 1.3 128×64 к плате микроконтроллера LGT8F328, возникали постоянные сбои в работе дисплея и зависания контроллера, проблему удалось решить путем удаления с плат модулей АЦП MCP4725 всех подтягивающих резисторов (4,7 кОм) которые установлены на шине I2C. Вероятней всего при сборке DC-DC преобразователя у Вас так же возникнет подобная проблема.

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

В любом случае необходимо подобрать номиналы резисторов R1 R5 и R6 таким образом, чтобы максимальное выходное напряжение на делителе R1 R5 и выходе ОУ А2 при максимальном токе в 2,5 А не превышало 5 В.

Скетч

#define KALL_I_IZ 1.020 
#define KALL_U_IZ 0.970 

#define KALL_I_DAC 410.00 
#define KALL_U_DAC 395.00 

#define ADDR1 0x60 // I
#define ADDR2 0x61 // U

#include <EEPROM.h> 
#include <Wire.h> 
#include <U8glib.h>            // https://github.com/olikraus/u8glib/
#include <MsTimer2.h>           // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip  
#include <Encoder.h>            // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip   

  Encoder myEnc(6, 5);// DT, CLK
  U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST);

  int n,m,m1;
  float i_dig,u_dig,i_dig1;
  float u_iz,i_iz,i_iz1;
  long i_sum,u_sum,i_sum1;
  bool w=1,w1,iu,power;
  long times,oldPosition  = -999,newPosition;
  int un,in;

void setup(){
  delay(200);
  Wire.begin();
  analogReadResolution(12);// АЦП 12 БИТ
  MsTimer2::set(1, to_Timer);MsTimer2::start();
  un = EEPROM.read(0);in=EEPROM.read(1);
  analogReference(DEFAULT);
  pinMode(A0,INPUT); // Изм.I
  pinMode(A1,INPUT); // Изм.U
  pinMode(7,INPUT);  // SW ENCODER
  
  u8g.firstPage();  
   do {
  u8g.setFont(u8g_font_profont12r); 
  u8g.drawStr(30,10,"POWER SUPPLY");
  u8g.drawStr(30,25,"0-25V 0-2.5A");
  u8g.drawStr(30,55,"rcl-radio.ru");
  } while( u8g.nextPage() );
  delay(2000);
  I2C_write(0, true, ADDR2);
  I2C_write(0, true, ADDR1);
  }

void loop(){
  if(digitalRead(7)==LOW &&iu==0){iu=1;times=millis();w=1;w1=1;delay(200);}
  if(digitalRead(7)==LOW &&iu==1){iu=0;times=millis();w=1;w1=1;delay(200);}

  if(iu==0){
  if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
  un=un+newPosition;myEnc.write(0);newPosition=0;   
  if(un<0){un=0;}if(un>250){un=250;}times=millis();w=1;w1=1;}
  }
  if(iu==1){
  if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
  in=in+newPosition;myEnc.write(0);newPosition=0;   
  if(in<0){in=0;}if(in>250){in=250;}times=millis();w=1;w1=1;}
  }
  
  i_dig = analogRead(A0);
  i_sum = i_sum+i_dig;
  n++;if(n>9){n=0;i_iz=i_sum/10;i_sum=0;} 

  u_dig = analogRead(A1);
  u_sum = u_sum+u_dig;
  m++;if(m>9){m=0;u_iz=u_sum/10;u_sum=0;w=1;} 


  if(w==1){
    I2C_write(4095.00/KALL_U_DAC*un, false, ADDR2);
    I2C_write(4095.00/KALL_I_DAC*in, false, ADDR1);
    delay(10);
  u8g.firstPage();  
   do {
  u8g.drawLine(0, 16, 128, 16);//u8g.drawLine(0, 53, 128, 53);
  u8g.setFont(u8g_font_profont29r); 
  u8g.drawStr(0,40,"U");u8g.setPrintPos(35, 40);u8g.print(u_iz*KALL_U_IZ/100.0,1);u8g.drawStr(114,40,"V");
  u8g.drawStr(0,64,"I");u8g.setPrintPos(35, 64);u8g.print(i_iz*KALL_I_IZ/1000.0,2);u8g.drawStr(114,64,"A");
  u8g.setFont(u8g_font_profont15r);
  if(iu==0){u8g.drawStr(0,12,"U >");}else{u8g.drawStr(0,12,"U  ");}u8g.setPrintPos(25, 12);u8g.print(un/10.0,1);
  if(iu==1){u8g.drawStr(70,12,"I >");}else{u8g.drawStr(70,12,"I  ");}u8g.setPrintPos(95, 12);u8g.print(in/100.00,2);

  } while( u8g.nextPage() );
  }

  if(millis()-times>5000 && w1==1){EEPROM.update(0,un);EEPROM.update(1,in);w1=0;w=1;iu=0;myEnc.write(0);} 

  } 

void to_Timer(){newPosition = myEnc.read()/4;}  

void I2C_write(int data, byte eeprom, byte addr){  
  uint8_t cmd[3]; 
  if(eeprom==true){cmd[0]=0x60;}else{cmd[0]=0x40;}
  cmd[1] = (data / 16);    
  cmd[2] = (data % 16) << 4; 
  Wire.beginTransmission(addr);
  Wire.write(cmd[0]); 
  Wire.write(cmd[1]); 
  Wire.write(cmd[2]); 
  Wire.endTransmission();
  }      

После сборки DC-DC преобразователя необходимо настроить коэффициенты измерителей и регуляторов тока и напряжения:

#define KALL_I_IZ 1.020
#define KALL_U_IZ 0.970

#define KALL_I_DAC 410.00
#define KALL_U_DAC 395.00

Калибровка коэффициентов:

  • Для настройки коэффициента KALL_U_IZ к выходу DC-DC преобразователя подключите вольтметр, установите напряжение на выходе DC-DC преобразователя 20 В, подстройкой коэффициента KALL_U_IZ добейтесь одинаковых показаний вольтметра и измерителя напряжения (показания измеренного напряжения выводимые на дисплей).
  • Для настройки коэффициента KALL_I_IZ к выходу DC-DC преобразователя подключите нагрузку. Ток нагрузки должен быть в пределах 70-90% от максимального тока DC-DC преобразователя. Измерьте ток нагрузки амперметром, коэффициентом KALL_I_IZ добейтесь одинаковых показаний амперметра и измерителя тока (показания измеренного тока выводимые на дисплей).
  • Для настройки коэффициента KALL_U_DAC установите по показаниям измерителя напряжения в 15-20 В, изменением KALL_U_DAC добейтесь одинаковых показаний измерителя и регулятора напряжения.
  • Для настройки коэффициента KALL_I_DAC установите ограничение тока на уровень 0 А, далее замкните выход DC-DC преобразователя, после медленно контролируя показания тока по дисплею увеличивайте ток до уровня 1 А, при этом показания регулятора тока может отличаться от показания измерителя тока. Далее на уровне 1 А подберите коэффициент KALL_I_DAC таким образом, что бы показания регулятора тока так же стали равны 1 А.

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

Форум — http://forum.rcl-radio.ru/viewtopic.php?pid=10792#p10792

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

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