Источник питания с цифровым управлением 0-25 В / 2,5 А (Arduino)

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

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

Регулирование напряжения и тока стабилизации цифровое, выполнено на микроконтроллере LGT8F328 (LGT8F328P-LQFP32 MiniEVB).

Как использовать плату в среде программирования Arduino IDE рассказано в — http://rcl-radio.ru/?p=129966

  • Энкодер KY-040

  • OLED 1.3″ — OLED-дисплей с контроллером SH1106

Схема источника питания

 

Регулировка тока стабилизации и выходного напряжения

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

Элемент дисплея 2 это текущее значение выходного напряжения, которое измеряется при помощи 12-битного входа АЦП микроконтроллера. Элемент 3 это установленное напряжение на выходе ИП, оно может отличаться от измеренного когда происходит стабилизация тока.

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

Элемент 6 обозначает состояние выхода ИП, включено или выключено.

Так как показанный пример является линейным ИП, то силовой транзистор КТ825 необходимо установить на достаточно большой радиатор охлаждения. Транзисторы Q2 и Q3 не нуждаются в дополнительном охлаждении. Все резисторы кроме указанных мощностью 0,125 Вт.

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

Скетч

#define KALL_U 214
#define KALL_I 1325
#define KALL_I_IZ 0.820 
#define KALL_U_IZ 1.090 

#include <Wire.h> 
#include <U8glib.h>             // https://github.com/olikraus/u8glib/ 
#include <EEPROM.h>
#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);

 
float u=0,i=0,u_iz,i_iz;
long times,oldPosition  = -999,newPosition,times0,i_sum,u_sum;
bool iu,w,w1,power;
int n,m;
float i_dig,u_dig;


void setup() {
  delay(200);Wire.begin();Serial.begin(9600);
  pinMode(7,INPUT);        // SW ENCODER
  pinMode(11,INPUT_PULLUP);// ON OFF OUTPUT
  MsTimer2::set(1, to_Timer);MsTimer2::start();
  if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении  
  u = float(EEPROM.read(0));i=float(EEPROM.read(1));
  analogReadResolution(12);// АЦП 12 БИТ
  analogReference(INTERNAL4V096);
  pinMode(A0,INPUT);
  pinMode(A1,INPUT);
    cli();
  // TIMER_1 D9 OUTPUT
  DDRB = 1 << PB1;
  TCCR1A = 0;TCCR1B = 0;
  TCCR1A = 1 << COM1A1 | 1 << WGM11;
  TCCR1B = 1 << WGM13 | 1 << WGM12 | 1 << CS10;
  ICR1 = 10000;
  OCR1A = 0;
  // TIMER_3 D2 OUTPUT
  TCCR3A=0;TCCR3B=0;
  DDRF |= (1<<PF2);
  HDR = 1 << HDR3;
  TCCR3A = 1 << COM3B1 | 1 << WGM31;
  TCCR3B = 1 << WGM33 | 1 << WGM32 | 1 << CS30;
  ICR3 = 5000;
  OCR3B = 0;
  sei();
  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);
  OCR1A = KALL_U*u/10;
  OCR3B = KALL_I*i/100.0;
}

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(digitalRead(11)==LOW &&power==0){power=1;OCR1A=0;times=millis();w=1;w1=1;delay(200);}
  if(digitalRead(11)==LOW &&power==1){power=0;OCR1A = KALL_U*u/10;times=millis();w=1;w1=1;delay(200);}  

  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(iu==0){
  if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
  u=u+newPosition;myEnc.write(0);newPosition=0;
  if(u<0){u=0;}if(u>250){u=250;}times=millis();if(power==0){OCR1A = KALL_U*u/10;}w=1;w1=1;}
  }
  if(iu==1){
  if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
  i=i+newPosition;myEnc.write(0);newPosition=0;
  if(i<0){i=0;}if(i>250){i=250;}times=millis();if(power==0){OCR3B = KALL_I*i/100.0;}w=1;w1=1;}
  }

u8g.firstPage();  
   do {
  u8g.drawLine(0, 26, 128, 26);u8g.drawLine(0, 53, 128, 53);
  u8g.setFont(u8g_font_profont29r); 
  if(iu==0){u8g.drawStr(0,22,"U>");}else{u8g.drawStr(0,22,"U ");}u8g.setPrintPos(35, 22);u8g.print(u_iz*KALL_U_IZ/100.0,1);
  if(iu==1){u8g.drawStr(0,50,"I>");}else{u8g.drawStr(0,50,"I ");}u8g.setPrintPos(35, 50);u8g.print(i_iz*KALL_I_IZ/1000.0,2);
  u8g.setFont(u8g_font_profont12r);
  u8g.setPrintPos(105, 22);u8g.print(u/10.0,1);
  u8g.setPrintPos(105, 50);u8g.print(i/100.0,2);
  if(power==0){u8g.drawStr(35,64,"OUTPUT ON ");}else{u8g.drawStr(35,64,"OUTPUT OFF");}
  u8g.setPrintPos(60, 64);
  } while( u8g.nextPage() );
  
if(millis()-times>5000 && w1==1){EEPROM.update(0,u);EEPROM.update(1,i);w1=0;w=1;iu=0;myEnc.write(0);} 
}

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

Источник питания нуждается в регулировке, регулировка содержит 4 параметра (коэффициента):

#define KALL_U 214
#define KALL_I 1325
#define KALL_I_IZ 0.820
#define KALL_U_IZ 1.090

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

  • KALL_U — установить на дисплее ИП выходное напряжение 20 В, измерить фактическое напряжение на выходе ИП, при необходимости изменить коэффициент.
  • KALL_U_IZ — установить на выходе ИП выходное напряжение 20 В, если измеренное напряжение отличается от фактического, то необходимости изменить коэффициент.
  • KALL_I — подключить нагрузку к выходу ИП, ток нагрузки должен быть не менее 1 А. Точно измерить ток нагрузки, если установленное значение тока отличается от измеренного, то необходимо изменить коэффициент.
  • KALL_U_IZ — подключить нагрузку к выходу ИП, ток нагрузки должен быть не менее 1 А. Точно измерить ток нагрузки, если измеренное микроконтроллером значение тока (выводимое на экран) отличается от измеренного внешним амперметром, то необходимо изменить коэффициент.

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


Доработки

  • ИП с дисплее LCD1602 I2C

Скетч — http://forum.rcl-radio.ru/viewtopic.php?pid=9487#p9487

 

 

  • XL4016 в качестве источника питания регулятора тока и напряжения для повышения КПД

Ранее в http://rcl-radio.ru/?p=131518 рассматривался пример создания ИП на XL4016, применив более простую схему подключения XL4016 можно использовать этот преобразователь как источник питания для ИП описанного в этой статье. Так как показанный выше пример является линейным ИП, то для повышения его КПД можно подавать на его вход напряжение на 2-3 В превышающее выходное, что дает возможность значительно уменьшить площадь радиатора для силового транзистора КТ825. При выходном напряжении менее 10 В выходное напряжение преобразователя XL4016 будет находится в пределах 12-13 В, при напряжении выше 10 В, выходное напряжение преобразователя XL4016 будет на 2-3 В выше выходного напряжения линейного ИП.

Управление преобразователем XL4016 осуществляется совместно с ИП от одного микроконтроллера.

Скетч — http://forum.rcl-radio.ru/viewtopic.php?pid=9488#p9488

работа в IT

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

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