DC-DC преобразователь на основе чипа XL4016 представляет собой бюджетный и мощный модуль с высокой эффективностью (до 96%). XL4016 обладает защитой от короткого замыкания и перегрева, что позволяет автоматически отключать выход в случае превышения рабочей температуры.
Входное напряжение XL4016 составляет от 8 до 40 Вольт, максимальный ток нагрузки может достигать 8 А.
Основные параметры:
- Эффективность преобразования (КПД): до 96%
- Частота переключения: 180 кГц
- Входное напряжение: от 8 до 40 В
- Выходное напряжение: от 1.25 до 36 В (регулируемое)
- Максимальная мощность: до 300 Вт
- Защита: от короткого замыкания, от перегрева, ограничение выходного тока
- Защита от переполюсовки: нет
На базе микроконтроллера LGT8F328 (аналог Atmega328) можно собрать относительно несложную схему управления DC-DC преобразователем на основе чипа XL4016. Схема управления преобразователем позволяет при помощи энкодера менять выходное напряжение от 0 до 25 В (ограничено программно), измерять ток нагрузки, отключать выход преобразователя при превышении значения заданного тока нагрузки.
Информация об установленном выходном напряжении, ток нагрузки и режимы работы будут выводиться на дисплей OLED 1.3 128×64 (чип драйвера — SH1106 I2C).
Основные параметры преобразователя XL4016 с блоком управления на LGT8F328:
- Входное напряжение от 27 до 30 В
- Выходное напряжение от 0 до 25 В (ограничено программно), шаг регулировки 0,1 В
- Диапазон регулировки зашиты по току от 0 до 3 А, шаг регулировки 0,1 А
Для сборки блока управления Вам понадобятся следующие компоненты:
- Плата разработчика LGT8F328P-LQFP32 MiniEVB, как использовать плату в среде программирования Arduino IDE рассказано в — http://rcl-radio.ru/?p=129966
- Энкодер KY-040
- OLED 1.3″ — OLED-дисплей с контроллером SH1106
Схема
XL4016 необходимо установить на небольшой теплоотвод. Дроссель — намотан на ферритовом кольце диаметром 25-30 мм, проводом 0,8-1 мм, намотка в один слой до заполнения.
Дисплей и управление
- Регулировка выходного напряжения осуществляется при помощи энкодера, шаг регулировки 0,1 В
- Измеренный ток нагрузки
- Максимальный ток нагрузки при котором сработает защита, при срабатывании защиты выходное напряжение преобразователя будет отключено. Для изменения значения тока защиты необходимо нажать на кнопку энкодера.
- Индикатор режима работы
- OVERLOAD — перегрузка, сработала защита
- enabled — выход активен
- disabled — выход выключен
Для отключения и включения выхода используется кнопка «ON/OFF», соответствующее состояние выхода отображается на дисплее, при КЗ выхода или превышении установленного тока защиты выход преобразователя отключается, для включения выхода необходимо нажать кнопку «ON/OFF».
Установленное значение выходного напряжения и ток защиты сохраняются в энергонезависимой памяти.
#define KALL_U 115 #define KALL_I 1.52 #define KALL_I_0 0.02 #include <Wire.h> #include <U8glib.h> // https://github.com/olikraus/u8glib/ #include <Encoder.h> // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip #include <EEPROM.h> #include <MsTimer2.h> // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip Encoder myEnc(6, 5);// DT, CLK U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST); float u=0, i_alarm=0; long i_dig,i_sum,i; int n,m; bool w,w1,alarm,iu,off; long times,oldPosition = -999,newPosition,times0; void setup() { delay(200); Wire.begin(); Serial.begin(9600); pinMode(7,INPUT); // SW ENCODER pinMode(12,INPUT_PULLUP);// OVERLOAD OFF MsTimer2::set(3, 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_alarm=float(EEPROM.read(1)); ADMUX = 0b000; ADCSRD |= 1 << REFS2; ADCSRA |= 1 << ADEN | 1 << ADSC | 1 << ADATE | 0b111; 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 = 5000; OCR1A = KALL_U*u/10; sei(); } void loop(){ while((ADCSRA & (1 << ADIF)) == 0); i_dig = (ADCL|ADCH << 8); i_sum = i_sum+i_dig; n++;if(n>999){n=0;i=i_sum/1000;i_sum=0;w=1;} 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(float(i)*KALL_I/1000.0-KALL_I_0>i_alarm/10.0){alarm=1;OCR1A = 0;} if(digitalRead(12)==LOW&&alarm==1){alarm=0;OCR1A = KALL_U*u/10;delay(200);} if(digitalRead(12)==LOW&&alarm==0 && off==0){off=1;alarm=0;OCR1A = 0;delay(200);} if(digitalRead(12)==LOW&&alarm==0 && off==1){off=0;alarm=0;OCR1A = KALL_U*u/10;delay(200);} 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(alarm==0&&off==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_alarm=i_alarm+newPosition;myEnc.write(0);newPosition=0; if(i_alarm<0){i_alarm=0;}if(i_alarm>30){i_alarm=30;}times=millis();w=1;w1=1;} } if(w==1){w=0; u8g.firstPage(); do { u8g.drawLine(0, 26, 128, 26);u8g.drawLine(0, 53, 128, 53); u8g.setFont(u8g_font_profont29r); u8g.drawStr(0,22,"U");u8g.setPrintPos(35, 22);u8g.print(u/10.0,1);u8g.drawStr(110,22,"V"); u8g.drawStr(0,50,"I");u8g.setPrintPos(35, 50);u8g.print(float(i)*KALL_I/1000.0-KALL_I_0,2);u8g.drawStr(110,50,"A"); u8g.setFont(u8g_font_profont12r);u8g.setPrintPos(0, 64);u8g.print(i_alarm/10.0,1); if(iu==0){u8g.drawStr(25,64,"A ");}else{u8g.drawStr(25,64,"A*");} u8g.setPrintPos(60, 64); if(alarm==1){u8g.print("OVERLOAD");} if(alarm==0&&off==0){u8g.print("enabled ");} if(alarm==0&&off==1){u8g.print("disabled");} } while( u8g.nextPage() );} if(millis()-times>3000 && w1==1){EEPROM.update(0,u);EEPROM.update(1,i_alarm);w1=0;w=1;iu=0;myEnc.write(0);} } void to_Timer(){newPosition = myEnc.read()/4;}
Блок управления преобразователем нуждается в настройке, настройка сводится к установке калибровочных коэффициентов:
#define KALL_U 115
#define KALL_I 1.52
#define KALL_I_0 0.02
KALL_U — калибровка выходного напряжения — установите на дисплее 20 В, измерьте выходное напряжение, если установленное и измеренное напряжение отличаются более чем на 0,1 В, то подберите значение поправочного коэффициента.
KALL_I — калибровка измерителя тока — производится на уровне 2,5-2,7 А, если измеренное значение тока отличается от фактического, то подберите значение поправочного коэффициента.
KALL_I_0 — калибровка нуля измерителя тока, установить режим disabled, на дисплее появится ток нуля, записать это значение в KALL_I_0.
Форум — http://forum.rcl-radio.ru/viewtopic.php?pid=9378#p9378
XL4016+LCD1602 — http://forum.rcl-radio.ru/viewtopic.php?pid=9417#p9417