На рисунке показана схема простого ШИМ регулятора напряжения. Выходное напряжение ШИМ регулятора может меняться от 0 до 25 В, при максимальном токе нагрузки 2,5 А (при выходном напряжении 25 В). Схема ШИМ регулятора разделена на две части, первая часть силовая, в которой основными компонентами являются два транзистора и дроссель. Вторая часть схемы это плата Arduino Nano, которая отвечает за работу силовой части, управление и индикацию.
Управление ШИМ регулятором очень простое, регулировка выходного напряжения осуществляется при помощи энкодера KY-040, а информация об установленном напряжении выводится на семисегментный четырех разрядный индикатор на базе TM1637.
- ШИМ регулятор имеет три режима работы:
Основной режим — на выходе присутствует напряжение установленное при помощи энкодера, напряжение отображается на индикаторе TM1637 как U10.0 - Режим изменения выходного напряжения — для перехода в этот режим необходимо нажать кнопку энкодера, на индикаторе будет отображено r10.0, поворотом ручки энкодера можно изменить выходное напряжение. Напряжение на выходе в этом режиме равно 0 В. При повторном нажатии кнопки энкодера, ШИМ регулятор переходит в режим работы №1 (на выходе появляется установленное напряжение).
- Режим КЗ — при коротком замыкании или при токе потребления ШИМ регулятора больше 2,7 А, выходное напряжение пропадает, на 2 секунды выводится сообщение Err0, далее ШИМ регулятор переходит в режим №2.
Сборка:
Транзистор КТ818Б необходимо установить на теплоотвод.
Дроссель — намотан на ферритовом кольце диаметром 25 мм, проводом 0,8-1 мм, намотка в один слой до заполнения.
Настройка:
- Установить значение 20 В, подключить к выходу вольтметр, подобрать значение переменной float pop (вольтметр должен показывать 20+/-0,1 В)
- При выходном напряжении 20 В, подключить нагрузку 10 Ом, подобрать значение переменной float pop1 (вольтметр должен показывать 20+/-0,1 В).
- Выходное напряжение во всем диапазоне выходных напряжений должен иметь погрешность +/-0,2В с подключенной нагрузкой и без нее.
#include <STM32_TM1637.h> // http://rcl-radio.ru/wp-content/uploads/2020/02/STM32_TM1637_V1_3.zip #include <Encoder.h> // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip #include <MsTimer2.h> // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip #include <EEPROM.h> STM32_TM1637 tm(2,3);// CLK, DIO Encoder myEnc(11, 12);//CLK, DT int u_dig; float u_ust=0; int h,reg=0; const float pop = 5.39; // поправочный коэффициент калибровки напряжения без нагрузки const float pop1=1.75; // поправочный коэффициент калибровки напряжения под нагрузкой long oldPosition = -999,newPosition; void setup() { MsTimer2::set(1, to_Timer);MsTimer2::start(); // 31 250 Гц 9 бит TCCR1A = TCCR1A & 0xe0 | 2; TCCR1B = TCCR1B & 0xe0 | 0x09; pinMode(9,OUTPUT); pinMode(A0,INPUT); pinMode(4,INPUT); u_ust = float(EEPROM.read(0))/10; analogWrite(9,h); tm.brig(7); // ЯРКОСТЬ 0...7 newPosition=0;tm.print_float(u_ust,1, 0b00111110,0,0,0); } void loop() { if(digitalRead(4)==LOW&®==0){analogWrite(9, 0);reg=1;MsTimer2::start();tm.print_float(u_ust,1,0b01010000,0,0,0);delay(300);} if(digitalRead(4)==LOW&®==1){reg=0;MsTimer2::stop();tm.print_float(u_ust,1,0b00111110,0,0,0);delay(300);EEPROM.update(0,round(u_ust*10));} if(reg==0){ while(5.00/1023*analogRead(A0)*pop>u_ust+float(h*pop1)/1000){ if(5.00/1023*analogRead(A0)*pop > u_ust*1.2){h=h-20;} h--;if(h<0){h=0;}analogWrite(9,h);} while(5.00/1023*analogRead(A0)*pop<u_ust+float(h*pop1)/1000){h++;if(h>511){h=511;}analogWrite(9,h);delayMicroseconds(100); if(h>450){h=0; tm.print_float(0,0, 0b01111001,0b01010000,0b01010000,0); analogWrite(9,h);MsTimer2::start();newPosition=0;delay(2000);reg=1;} } } if(reg==1){analogWrite(9, 0);tm.print_float(u_ust,1, 0b01010000,0,0,0); if (newPosition != oldPosition) { oldPosition = newPosition; u_ust=u_ust+float(newPosition)/10; if(u_ust<0){u_ust=0;}if(u_ust>25){u_ust=25;} newPosition=0;myEnc.write(0);} } }// loop void to_Timer(){newPosition = myEnc.read()/4;}
Тестирование
Установленное напряжение | Без нагрузки | Ток нагрузки | С нагрузкой |