Блок питания для радиолюбителя (много DIY)

Каждый радиолюбитель должен сделать блок питания :)
Причем правильный прибор — должен быть тяжелым и горячим. А если бы сделать его не сильно греющимся?
Будет много фото, радиолюбительства, и самодельщины, или, как сейчас модно говорить, DIY.
И еще: купить готовое — намного дешевле, чем сделать самому.
Кого не пугает — добро пожаловать :)
UPD от 08/07/19: добавлена возможность перевести блок в полностью линейный режим, для снижения пульсаций.

Сложно переоценить нужность блока питания в хозяйстве. Свою поделку я «мучил» около полугода. иногда занимался целый день, иногда пару-тройку часов. Были и моменты, когда неделями руки не доходили. Плюс ко всему — конструкция менялась во время сборки.

Не смотря на высокий КПД импульсных блоков, обычный трансформаторный с линейным стабилизатором все таки лучше в плане более низких помех. Но есть и минус — большие потери на регулирующем елементе. Можно сделать трансформатор с отводами и переключать их с помощью реле. Но я очень не люблю мотать, поэтому заказал трансформатор без отводов, так дешевле. Напряжение перед регулирующим транзистором понижается с помощью импульсного преобразователя. Помехи от него, конечно же, есть, но линейный блок — с ними справляется.
На даный момент — импульсник валит около 200 мВ пульсаций. Линейник давит их до 50.
Если перевести блок в линейный режим — пульсации падают примерно до 5 мВ.
Как приедет лицендрат — сделаю новый дроссель. Надеюсь, это поможет.

Блок получился на 24 вольт 5 ампер. Большинство комплектующих — приобреталось в интернет-магазинах.

Линейный регулятор
Вдохновением послужили этот обзор и его продолжение, а также — коментарии к ним. Саму плату — покупал на али. Для жителей Украины, смею рекомендовать этот магазин. К ней же — многооборотные потенциометры (UPD на момент покупки, в этом лоте было 2 шт. ) и пакованчик ручек. При получении посылок — понял, что ось резистора меньше отверстия в ручке. Тут выручил знакомый кондиционерщик: медная трубка как раз оказалась нужных размеров. Пара движений ножовкой — и получился переходник.
Переходник

Сначала была хотелка 30 Вольт 5 Ампер. Для этого выпрямитель должен был дать 35 вольт. Был заказан трансформатор на 26 вольт 5 ампер. Больше не позволял предрегулятор на XL4016.
Трансформатор, с добавлением накальной обмотки и термопредохранителя

Потом постепенно появились разные хотелки, в виде шунта на меньшее сопротивление и возможности четырех-проводного подключения, родная плата получила довольно много изменений.
Схема блока приобрела такой вид:

Отдельное спасибо Kirich за схему в формате splan
Плата после допилинга


Импульсный пред-регулятор
Поддерживает напряжение перед линейным блоком на 2 с копейками вольта выше, чем на выходе. Силовая часть сначала была на XL4016. но у нее предел по входу 40 вольт, а в моей схеме — 35, что почти в притык. поэтому была собрана новая сила, аналогична ZXY6005, только ШИМ заменен на XL4001, потому что они у меня есть. Кстати, замечательная микросхема, рекомендую обратить внимание.
Дроссель — выдран с цепи 3,3В блока ATX. С него — смотал два витка, что бы получить 47мкГн. 5 ампер в течении часа он держит, хотя и греется. Со временем, перемотаю лицендратом.
Схема пред-регулятора:


Индикация и управление
За измерения отвечает АЦП ADS1115. точность — не супер, показания напряжения плавают ± до 5мВ, тока ± до 5 мА. в зависимости от погоды на Марсе. Опрос АЦП, датчиков температур радиатора и трансформатора, измерение падения на регулирующем транзисторе, пересчет величин, управление вентилятором и реле, общение с драйвером дисплея реализовано на Arduino pro. Индикация — вакуумный люминесцентный дисплей (куплен на радиорынке, ждал своего часа лет 5). Для него только пришлось намотать обмотку для накала с отводом от середины. Высокое отрицательное — получено с основной обмотки.
Дисплей

Схема измерительной части:


Реализовано 8 режимов индикации
1. Индикация напряжения с дискретностью до десятых Вольт и тока с дискретностью до сотых Ампер

2. Индикация выходного напряжения с дискретностью до 1мВ и заданого, до 10мВ

3. Индикация выходного и заданого тока с дискретностью, до 1мА

4. Индикация выходной мощности с дискретностью до 0,1Вт

5. Индикация сопротивления нагрузки с дискретностью до 0,1Ом

6. Счетчик Вт*час с дискретностью до 1мВт

7. Счетчик А*час с дискретностью до 1мА

8. Индикация температур трансформатора и радиатора


Управление осуществляется 5-ю кнопками
1. Отключение выходного реле
2. Нажатие: включение выходного реле.
Удержание более 2 сек: режим линейного стабилизатора (для снижения пульсаций)
3. Нажатие: режим индикации 2 или 3.
Удержание более 2 сек: реакция на превышение заданого тока (стабилизация тока или отключение)
4. Нажатие: режим индикации 1 или 4.
Удержание более 2 сек: режим работы с 4-хпроводным подключением
5. Нажатие: режим индикации 5, 6 или 7.
Удержание более 2 сек: если отображается счетчик — обнуление. Иначе — режим индикации 8

Еще есть четыре светодиода
зеленый: выход отключен
красный: стабилизация тока
желтый: стабилизация напряжения
синий: режим 4-х проводного подключения

Обороты вентилятора регулируются в зависимости от температур трансформатора и радиатора и от тока нагрузки.
В линейном режиме — нельзя включить выходное реле, если расчетная рассеиваемая мощность на регулирующем транзисторе превысит 30 Вт. Этот момент отображается мигающим символом «минус».
Код для Ардуины:

// Power source measure unit
#include <Wire.h>
#include <EEPROM.h>
// pins discr.
#define  OVER_CURRENT  2
#define  OFF_BTN  3
#define  ON_BTN  4
#define  B1_BTN  5
#define  B2_BTN  6
#define  B3_BTN  7
#define  OUT_REL  8
#define  FAN  9
#define  STB 10
#define  DAT_TX 11
#define  DAT_RX 12
#define  CLK 13
#define  SEN_REL  14
#define  LINE_MODE  16
#define  TEST  17
// pins analog
#define  U_DROP  1
#define  T_RAD  7
#define  T_TRANS  6
// display constants
#define displayMode 0b00000111 // 11 digits, 11 segments
#define dataSettings 0x40 // Data write & read mode settings
#define incrementAddress 0x00 // Increment address after data has been written mode
#define fixedAddress 0x04 // Fixed address mode
#define LEDregister 0x00000001 // LED data send
#define addressSettings 0xC0 // Address settings command
#define startAddress 0x00 // start address of ram memory
#define endAddress 0x0F // end address of ram memory
#define displayControl 0x8F // Display settings ON/OFF
// adc constants
#define  ADR_ASD1115  0b01001000   //address of ads1115
// cooperating with ADC
byte writeBuf[3];            
byte readBuf[3]; 
// SPU's ADC values
int TempTransBuf[10];
int TempTransSum;
int TempTransADC;
int TempRadBuf[10];
int TempRadSum;
int TempRadADC;
int UdropADC;
byte i,j;
// Fan speed values
byte speed1, speed2, speed3;
// output booleans
bool output, protect, extSense, line_md;
// button statuses
bool btON_tap, btON_hold;
byte btON_timer;
bool bt1_tap, bt1_hold;
byte bt1_timer;
bool bt2_tap, bt2_hold;
byte bt2_timer;
bool bt3_tap, bt3_hold;
byte bt3_timer;
// 1 sec counter
byte tick1S;
bool int1S;
// 3.6 sec counter
byte tick36S;
bool int36S;
// blinker
byte blinker_timer;
bool blinker;
// ADC cooperate values
byte ADCchannel;
int UsenADC;
int UsetADC;
int IsenADC;
int IsetADC;
int ResultADC;
bool EnblADC;
byte ADCtimer;
long OutVoltage, OutCurrent;
// current display index
byte screen;
// errors 
bool ErrOverheat, ErrReg, OverTask;
byte UdropErrTimer, UsetErrTimer, OverTaskTimer;
// setup indicate
bool setdispU, _setdispU, setdispI, _setdispI;
byte setdisptimer;
int _UsetADC, _IsetADC;
// counters
unsigned long CurrentCounter, PowerCounter;
// for EEPROM store values
byte storeTimer;
bool storeEnbl;
// display data
byte symbolReg;
const byte symbols[44] =
  {
    //xxx0xxx0    000000x0
    //cbajfge-    -----idh
    0b11101010, 0b00000010,  // 0
    0b11000000, 0b00000000,  // 1
    0b01100110, 0b00000010,  // 2
    0b11100100, 0b00000010,  // 3
    0b11001100, 0b00000000,  // 4
    0b10101100, 0b00000010,  // 5
    0b10101110, 0b00000010,  // 6
    0b11101000, 0b00000000,  // 7
    0b11101110, 0b00000010,  // 8
    0b11101100, 0b00000010,  // 9
    0b10000010, 0b00000010,  // 10, U
    0b11101110, 0b00000000,  // 11, A
    0b00101110, 0b00000010,  // 12, E
    0b00000110, 0b00000000,  // 13, r
    0b00000000, 0b00000000,  // 14, blank
    0b10001010, 0b00000010,  // 15, W 1/2
    0b11000010, 0b00000010,  // 16, W 2/2
    0b00000100, 0b00000000,  // 17, -
    0b10001110, 0b00000000,  // 18, h
    0b00100000, 0b00000000,  // 19, - on upper
    0b01101100, 0b00000000,  // 20, degree
    0b00001110, 0b00000010   // 21, t
  };

long PrevTime;
//-------------------------------------------------------------------------------
void setup() {
 pinMode(OVER_CURRENT, INPUT_PULLUP);
 pinMode(OFF_BTN, INPUT_PULLUP);
 pinMode(ON_BTN, INPUT_PULLUP);
 pinMode(B1_BTN, INPUT_PULLUP);
 pinMode(B2_BTN, INPUT_PULLUP);
 pinMode(B3_BTN, INPUT_PULLUP);
 pinMode(OUT_REL, OUTPUT);
 pinMode(FAN, OUTPUT);
 pinMode(STB, OUTPUT);
 pinMode(DAT_TX, OUTPUT);
 pinMode(DAT_RX, INPUT);
 pinMode(CLK, OUTPUT);
 pinMode(SEN_REL, OUTPUT);
 pinMode(LINE_MODE, OUTPUT);
 pinMode(TEST, OUTPUT);
 
 output = 0;
 protect = 0;
 extSense = 0;
 storeTimer = 0;
 storeEnbl = 0;
 line_md = 0;

 btON_tap = 0; btON_hold = 0;
 bt1_tap = 0; bt1_hold = 0;
 bt2_tap = 0; bt2_hold = 0;
 bt3_tap = 0; bt3_hold = 0;

 symbolReg = 0;

 setdispU = 0; _setdispU = 0; setdispI = 0; _setdispI = 0;
 
 ADCchannel = 0;

 screen = 0;

 TCCR2A = 0; //TMR2 normal mode
 TCCR2B = 1<<CS22 | 1<<CS21 | 1<<CS20; // prescale 1024, overflow each 1/(16000000/1024/256=61Hz) = 16.4mS
 TIMSK2 = 1<<TOIE2; // enable overflow interrupt
 TCNT2 = 0; // reset counter

 EICRA = 1<<ISC11 | 1<<ISC01; // Falling edge generate interrupt
 EIMSK = 1<<INT1 | 1<<INT0; // Enable interrupt

 CurrentCounter = EEPROM_long_read(0);
 PowerCounter = EEPROM_long_read(4);

 Serial.begin(9600); 
 Wire.begin();              // begin I2C
 // initialize vfd display
 initDisplay();
 }  
//--------------------------------------------------------------------------------
void loop() {                

 if (int1S)
   {
    // Over task timer
    if ( (OverTask)&&(OverTaskTimer<255) ) OverTaskTimer++; else OverTaskTimer = 0;
    // Udrop error timer
    int1S = 0;
    if (UdropErrTimer<255) UdropErrTimer ++;
    // Temperature measure filtering
    j++;
    if (j>9) j = 0;
    TempTransBuf[j] = analogRead(T_TRANS);
    TempRadBuf[j] = analogRead(T_RAD);
    TempTransSum = TempTransBuf[0];
    TempRadSum = TempRadBuf[0];
    for (i = 1; i <= 9; i++)
      {
        TempTransSum = TempTransSum + TempTransBuf[i];
        TempRadSum = TempRadSum + TempRadBuf[i];
      }
    TempTransADC = TempTransSum / 10;
    TempRadADC = TempRadSum / 10;
    // Linear regulator drop voltage measure
    UdropADC = analogRead(U_DROP);

    if (0) // serial U drop and temperature display
     {
      Serial.print("U drop: ");
      Serial.print(UdropADC);
      Serial.print(";  Trans_temp: ");
      Serial.print(((TempTransADC - 105)*10) / 2);
      Serial.print(";  Rad_temp: ");
      Serial.println(((TempRadADC - 105)*10) / 2);
     }
    if (0) // serial Voltage and Current display
     {
      Serial.print("Usen=");
      //Serial.print(GetOutVoltage(UsenADC));
      Serial.print(UsenADC);
      Serial.print(";  Uset=");
      //Serial.print(GetSetVoltage(UsetADC));
      Serial.print(UsetADC);
      Serial.print(";  Isen=");
      //Serial.print(GetOutCurrent(IsenADC));
      Serial.print(IsenADC);
      Serial.print(";  Iset=");
      //Serial.println(GetSetCurrent(IsetADC));
      Serial.println(IsetADC);
           }
    if (0) // serial capacity display
     {
      Serial.print("mA*h= ");
      Serial.print(CurrentCounter/1000);
      Serial.print("  mW*h= ");
      Serial.println(PowerCounter/1000);
     }
   }

 if (int36S)
   {
     int36S = 0;
     if (output)
       {
        CurrentCounter = CurrentCounter + OutCurrent;
        if (CurrentCounter > 999999999) CurrentCounter = 0;
        PowerCounter = PowerCounter + ((OutCurrent * OutVoltage)/1000);
        if (PowerCounter > 999999999) PowerCounter = 0;
       }
     //Serial.println(millis()-PrevTime); PrevTime = millis();  
   }

 if (EnblADC) {EnblADC = 0; GetADC();}

 if (storeEnbl) {storeEnbl=0; SaveData();}
 
 //buttons, output, LED
 //if ( (!(digitalRead(ON_BTN)))&&(!(ErrOverheat || ErrReg)) ) {output = 1;}
 if ( ErrOverheat || ErrReg || (OverTaskTimer>10) ) {digitalWrite(OUT_REL,LOW); output = 0;}
 if (output) digitalWrite(OUT_REL,HIGH); else digitalWrite(OUT_REL,LOW); 
 if (output) {if (!(digitalRead(OVER_CURRENT))) updateLED(0b11111101); else updateLED(0b11111011);} else updateLED(0b11111110);
 if (line_md) {if (OverTask) updateSymbol(2,blinker); else updateSymbol(2,1);} else updateSymbol(2,0);
 
 if (btON_tap) 
   {
    btON_tap = 0; 
    if (!(ErrOverheat || ErrReg || OverTask)) {output = 1;}
   }
 if (btON_hold) 
   {
    btON_hold = 0;
    if (!(output)) 
       {if (line_md) line_md = 0; else line_md = 1;}
    if (line_md) {digitalWrite(LINE_MODE,HIGH);} else {digitalWrite(LINE_MODE,LOW);}
   }
 if (bt1_tap) 
   {
    bt1_tap = 0; 
    switch (screen)
      {
        case 1: screen = 2; break;
        case 2: screen = 1; break;
        default: screen = 1; break;
      }
   }
 if (bt1_hold) 
   {
    bt1_hold = 0;
    if (protect) protect = 0; else protect = 1;
    updateSymbol(0,protect);
   }
 if (bt2_tap)    
   {
    bt2_tap = 0; 
    switch (screen)
      {
        case 0: screen = 3; break;
        case 3: screen = 0; break;
        default: screen = 0; break;
      }
   }
 if (bt2_hold) 
   {
    bt2_hold = 0;
    if (extSense) {extSense = 0; digitalWrite(SEN_REL,LOW);}
    else {extSense = 1; digitalWrite(SEN_REL,HIGH);}
   }
 if (bt3_tap)    
   {
    bt3_tap = 0; 
    switch (screen)
      {
        case 4: screen = 5; break;
        case 5: screen = 6; break;
        case 6: screen = 4; break;
        default: screen = 6; break;
      }
   }
 if (bt3_hold) 
   {
    bt3_hold = 0;
    if ( (screen == 5)||(screen == 6) ) {CurrentCounter = 0; PowerCounter = 0;}
    else screen = 7;
   }
 //Fan control
 if (TempTransADC < 215) speed1 = 0;
    else if (TempTransADC > 245) speed1 = 255;
    else speed1 = map(TempTransADC,215,245,40,255); // Ttrans (55...70)
 if (TempRadADC < 185) speed2 = 0;
    else if (TempRadADC > 245) speed2 = 255; 
    else speed2 = map(TempRadADC,185,245,40,255); // Trad (40...70)
 if (IsenADC < 15528) speed3 = 0;
    else if (IsenADC > 21739) speed3 = 255; 
    else speed3 = map(IsenADC,15528,21739,40,255); // I load (2500...3500)
 analogWrite(FAN,GetMax(speed1, speed2, speed3));
 //Setup display
 if ( abs(UsetADC - _UsetADC) > 100) 
   {
    _UsetADC = UsetADC; 
    setdisptimer = 0; 
    setdispU = 1; 
    //Serial.print("Set U "); Serial.println(UsetADC);
   }
 if (setdispU != _setdispU) {_setdispU = setdispU; updateSymbol(1,((setdispU | setdispI)&&(screen == 0)));} 
 if ( abs(IsetADC - _IsetADC) > 100) 
   {
    _IsetADC = IsetADC; 
    setdisptimer = 0; 
    setdispI = 1;
    //Serial.print("Set I "); Serial.println(IsetADC);
   }
 if (setdispI != _setdispI) {_setdispI = setdispI; updateSymbol(1,((setdispU | setdispI)&&(screen == 0)));}
 
 //Errors
 if ( (TempTransADC>185) || (TempRadADC>185) ) ErrOverheat = 1; // Trans>90, Rad>90
 if ( (TempTransADC<245) && (TempRadADC<245) ) ErrOverheat = 0; // Trans<70, Rad<70
 if ( (UdropADC > 200) && ( (UdropADC < 360)||(line_md) ) ) UdropErrTimer = 0; // Udrop>1 and (Udrop<1.8 OR line mode); 1.45 - optimal
 if ( (UdropErrTimer > 5)||(UsetErrTimer > 12) ) ErrReg = 1; else ErrReg = 0;
 if (!(line_md)) OverTask = 0;
    else {OverTask = ( ((37000-UsetADC)*IsetADC) > 187500000 );} // Udrop=(37000-U); U=Uadc; I=Iadc*0.16; Udrop*I > 30W

 // display
 if ( ErrOverheat || ErrReg ) DisplayErr();
 else
   {
    if (screen == 0) Display0(); // U + I
    if (screen == 1) Display1(); // U
    if (screen == 2) Display2(); // I
    if (screen == 3) Display3(); // W
    if (screen == 4) Display4(); // R
    if (screen == 5) Display5(); // W*h
    if (screen == 6) Display6(); // A*h
    if (screen == 7) Display7(); // T'C
   }
}

//-------------------------------------------------------------------------------
void DisplayErr()
  {
   putSymbol(12,1,0,0,0);
   putSymbol(13,2,0,0,0);
   putSymbol(13,3,0,0,0);
   for (i=4; i<=10; i++) putSymbol(14,i,0,0,0); 
  }
void Display0()
  {
   long value;
   if (setdispU) value = GetSetVoltage(UsetADC); 
     else {if (output) value = OutVoltage; else value = 0;}
   putSymbol(((value/10000)%10),1,setdispU,0,0); 
   putSymbol(((value/1000)%10),2,setdispU,1,0); 
   putSymbol(((value/100)%10),3,setdispU,0,0); 
   putSymbol(10,4,setdispU,1,1); 
   putSymbol(14,5,setdispU,0,0); 
   if (setdispI) value = GetSetCurrent(IsetADC); 
     else value = OutCurrent;
   if ( (OverTask)&&(blinker) ) for (i=6; i<=10; i++) putSymbol(14,i,0,0,0);
   else
     {
      putSymbol(((value/1000)%10),6,setdispI,1,0); 
      putSymbol(((value/100)%10),7,setdispI,0,0); 
      putSymbol(((value/10)%10),8,setdispI,0,0); 
      putSymbol(11,9,setdispI,0,0); 
      putSymbol(14,10,setdispI,0,0); 
     }
  }
void Display1()
  {
   long value;
   if (output) value = OutVoltage; else value = 0;
   putSymbol(((value/10000)%10),1,0,0,0); 
   putSymbol(((value/1000)%10),2,0,1,0); 
   putSymbol(((value/100)%10),3,0,0,0); 
   putSymbol(((value/10)%10),4,0,0,0); 
   putSymbol(((value)%10),5,0,0,0); 
   putSymbol(10,6,0,1,1); 
   value = GetSetVoltage(UsetADC);
   putSymbol(((value/10000)%10),7,0,0,0); 
   putSymbol(((value/1000)%10),8,0,1,0); 
   putSymbol(((value/100)%10),9,0,0,0); 
   putSymbol(((value/10)%10),10,0,0,0); 
  }
void Display2()
  {
   int value;
   value = OutCurrent;
   putSymbol(((value/1000)%10),1,0,1,0); 
   putSymbol(((value/100)%10),2,0,0,0); 
   putSymbol(((value/10)%10),3,0,0,0); 
   putSymbol(((value)%10),4,0,0,0); 
   putSymbol(11,5,0,1,1); 
   value = GetSetCurrent(IsetADC);
   putSymbol(((value/1000)%10),6,0,1,0); 
   putSymbol(((value/100)%10),7,0,0,0); 
   putSymbol(((value/10)%10),8,0,0,0); 
   putSymbol(((value)%10),9,0,0,0);
   putSymbol(14,10,0,0,0); 
  }
void Display3()
  {
   int value;
   value = (OutCurrent * OutVoltage)/100000;
   putSymbol(14,1,0,0,0);
   putSymbol(14,2,0,0,0);
   putSymbol(((value/1000)%10),3,0,0,0); 
   putSymbol(((value/100)%10),4,0,0,0); 
   putSymbol(((value/10)%10),5,0,1,0); 
   putSymbol(((value)%10),6,0,0,0);
   putSymbol(14,7,0,0,0);
   putSymbol(14,8,0,0,0);
   putSymbol(15,9,0,0,0);
   putSymbol(16,10,0,0,0);
  }
void Display4()
  {
   long value;
   putSymbol(14,1,0,0,0);
   if (OutCurrent > 0)
     {
      value = (OutVoltage * 10)/OutCurrent;
      if ( value > 99999 ) value = 99999;
      putSymbol(((value/10000)%10),2,0,0,0);
      putSymbol(((value/1000)%10),3,0,0,0); 
      putSymbol(((value/100)%10),4,0,0,0); 
      putSymbol(((value/10)%10),5,0,1,0); 
      putSymbol(((value)%10),6,0,0,0);
     }
   else
     {
      putSymbol(17,2,0,0,0);
      putSymbol(17,3,0,0,0); 
      putSymbol(17,4,0,0,0); 
      putSymbol(17,5,0,1,0); 
      putSymbol(17,6,0,0,0);
     }
   putSymbol(14,7,0,0,0);
   putSymbol(5,8,0,0,0);
   putSymbol(19,9,0,0,0);
   putSymbol(2,10,0,0,0);
  }
void Display5()
  {
   long value;
   value = (PowerCounter)/1000;
   putSymbol(((value/100000)%10),1,0,0,0);
   putSymbol(((value/10000)%10),2,0,0,0);
   putSymbol(((value/1000)%10),3,0,1,0); 
   putSymbol(((value/100)%10),4,0,0,0); 
   putSymbol(((value/10)%10),5,0,0,0); 
   putSymbol(((value)%10),6,0,0,0);
   putSymbol(14,7,0,0,0);
   putSymbol(15,8,0,0,0);
   putSymbol(16,9,0,0,0);
   putSymbol(18,10,1,0,0);
  }
void Display6()
  {
   long value;
   value = (CurrentCounter)/1000;
   putSymbol(((value/100000)%10),1,0,0,0);
   putSymbol(((value/10000)%10),2,0,0,0);
   putSymbol(((value/1000)%10),3,0,1,0); 
   putSymbol(((value/100)%10),4,0,0,0); 
   putSymbol(((value/10)%10),5,0,0,0); 
   putSymbol(((value)%10),6,0,0,0);
   putSymbol(14,7,0,0,0);
   putSymbol(14,8,0,0,0);
   putSymbol(11,9,0,0,0);
   putSymbol(18,10,1,0,0);
  }  
void Display7()
  {
   int value;
   value = (((TempTransADC - 105)*10) / 2);
   putSymbol(21,1,0,0,0);
   putSymbol(((value/100)%10),2,0,0,0);
   putSymbol(((value/10)%10),3,0,1,0); 
   putSymbol(((value)%10),4,0,0,0); 
   putSymbol(20,5,0,0,0); 
   value = (((TempRadADC - 105)*10) / 2);
   putSymbol(13,6,1,0,0);
   putSymbol(((value/100)%10),7,0,0,0);
   putSymbol(((value/10)%10),8,0,1,0); 
   putSymbol(((value)%10),9,0,0,0); 
   putSymbol(20,10,0,0,0); 
  }  
//-------------------------------------------------------------------------------
// read
long EEPROM_long_read(int addr) {    
  byte raw[4];
  for(byte i = 0; i < 4; i++) raw[i] = EEPROM.read(addr+i);
  long &num = (long&)raw;
  return num;
}
// store
void EEPROM_long_write(int addr, long num) {
  byte raw[4];
  (long&)raw = num;
  for(byte i = 0; i < 4; i++) EEPROM.write(addr+i, raw[i]);
}
// save
void SaveData()
  {
   updateLED(0b11111000); 
   EEPROM_long_write(0,CurrentCounter);
   EEPROM_long_write(4,PowerCounter);
  }
//-------------------------------------------------------------------------------
ISR(TIMER2_OVF_vect) //timer 2 interrupt
 {
  //  ADC read run
  ADCtimer++;
  if (ADCtimer>6) {EnblADC = 1; ADCtimer = 0;}
  //  1 sec. intervals
  tick1S++;
  if (tick1S>60) {tick1S = 0; int1S = 1;}
  //  3,6 sec. intervals
  tick36S++;
  if (tick36S>219) {tick36S = 0; int36S = 1;}
  // blinker
  blinker_timer++;
  if (blinker_timer>18) {blinker_timer = 0; if (blinker) blinker=0; else blinker=1;} // >300mS
  //  store interval, AC off
  if (!(digitalRead(OFF_BTN))) storeTimer++; else storeTimer = 0;
  if (storeTimer == 122) {storeEnbl = 1;}// 2000mS
  // button ON manage
  if (digitalRead(ON_BTN)) if ( (btON_timer>6) && (btON_timer<122) ) {btON_tap = 1; btON_hold = 0;}// >100mS, <2000mS
  if (btON_timer==122) {btON_tap = 0; btON_hold = 1;}// =2000mS  
  if (!(digitalRead(ON_BTN))) {if (btON_timer<255) btON_timer++;} else btON_timer = 0;
  // button 1 manage
  if (digitalRead(B1_BTN)) if ( (bt1_timer>6) && (bt1_timer<122) ) {bt1_tap = 1; bt1_hold = 0;}// >100mS, <2000mS
  if (bt1_timer==122) {bt1_tap = 0; bt1_hold = 1;}// =2000mS  
  if (!(digitalRead(B1_BTN))) {if (bt1_timer<255) bt1_timer++;} else bt1_timer = 0;
  // button 2 manage
  if (digitalRead(B2_BTN)) if ( (bt2_timer>6) && (bt2_timer<122) ) {bt2_tap = 1; bt2_hold = 0;}// >100mS, <2000mS
  if (bt2_timer==122) {bt2_tap = 0; bt2_hold = 1;}// =2000mS  
  if (!(digitalRead(B2_BTN))) {if (bt2_timer<255) bt2_timer++;} else bt2_timer = 0;
  // button 3 manage
  if (digitalRead(B3_BTN)) if ( (bt3_timer>6) && (bt3_timer<122) ) {bt3_tap = 1; bt3_hold = 0;}// >100mS, <2000mS
  if (bt3_timer==122) {bt3_tap = 0; bt3_hold = 1;}// =2000mS  
  if (!(digitalRead(B3_BTN))) {if (bt3_timer<255) bt3_timer++;} else bt3_timer = 0;
  //setup value display
  if (setdisptimer<255) setdisptimer++;
  if (setdisptimer==183) {setdispU=0; setdispI=0;} // =3000mS
 }

ISR(INT1_vect) //INT1 interrupt, OFF button, AC off
 {
  digitalWrite(OUT_REL,LOW);
  output = 0;
 }

ISR(INT0_vect) //INT0 interrupt, overcurrent input
 {
  if ( (digitalRead(ON_BTN)) && protect ) {digitalWrite(OUT_REL,LOW); output = 0;}
 }

byte GetMax(byte val1, byte val2, byte val3)
  {
    byte result = val1;
    if (val2 > result) result = val2;
    if (val3 > result) result = val3;
    return result;
  }

void GetADC()//
 {
  readBuf[0] = 0; // ask for conversion register
  Wire.beginTransmission(ADR_ASD1115);  // ask for ADC 
  Wire.write(readBuf[0]);              // pointer to register
  Wire.endTransmission();
  Wire.requestFrom(ADR_ASD1115, 2);    // repeat start
  readBuf[1] = Wire.read();  // 
  readBuf[2] = Wire.read();  // 
  Wire.endTransmission();  
  ResultADC = readBuf[1] << 8 | readBuf[2];  // get result
  switch(ADCchannel)
    {
      case 0: UsenADC = ResultADC; OutVoltage = GetOutVoltage(UsenADC); break;
      case 1: UsetADC = ResultADC; break;
      case 2: IsenADC = ResultADC; OutCurrent = GetOutCurrent(IsenADC); break;
      case 3: IsetADC = ResultADC; break;
    }
  if ( ((UsenADC-UsetADC)>1000)||((IsenADC-IsetADC)>1000) ) {if (UsetErrTimer < 255) UsetErrTimer++;} else UsetErrTimer = 0;  
  ADCchannel = ADCchannel + 1;
  if (ADCchannel>3) ADCchannel = 0;
  writeBuf[0] = 1; // ask for config register
  writeBuf[1] = ( 0b11000010 | (ADCchannel << 4) ); // start convertion at ±4.096V
  writeBuf[2] = 0b01000011; // 32 SPS, disable comparator
  Wire.beginTransmission(ADR_ASD1115);  // ask for ADC 
  Wire.write(writeBuf[0]);     // register
  Wire.write(writeBuf[1]);     // bit's 15:8
  Wire.write(writeBuf[2]);     // bit's 7:0
  Wire.endTransmission();  
 }
//-------------------------------------------------------------------------------
long GetOutVoltage(long data)
  {
  int mult;  
  data = (data - 93);                 
  if ((data > 32000)||(data < 0)) {data = 0; return data;}
  if (data < 500) mult = 10549; 
    else mult = map(data,500,30500,10500,10484);
  data = data * mult;
  data = data / 10000;
  return data;    
  }
//-------------------------------------------------------------------------------
long GetSetVoltage(long data)
  {
  int mult;  
  data = (data - 107);                 
  if ((data > 32000)||(data < 0)) {data = 0; return data;}
  if (data < 500) mult = 10549; 
    else mult = map(data,500,30500,10542,10532);
  data = data * mult;
  data = data / 10000;
  return data;    
  }
//-------------------------------------------------------------------------------
long GetOutCurrent(long data)
  {
  int mult;  
  data = (data - 121);                 
  if ((data > 32000)||(data < 0)) {data = 0; return data;}
  if (data < 600) mult = 16367; 
    else mult = map(data,600,31000,16311,16175);
  data = data * mult;
  data = data / 100000;
  return data;
  }    
//-------------------------------------------------------------------------------
long GetSetCurrent(long data)
  {
  int mult;  
  data = (data - 143);                 
  if ((data > 32000)||(data < 0)) {data = 0; return data;}
  if (data < 600) mult = 25719;//16367; 
    else mult = map(data,600,31000,16220,15940);
  data = data * mult;
  data = data / 100000;
  return data;    
  }

// sending commands to display
void sendCommand(unsigned int command, boolean data)
{
 digitalWrite(CLK, HIGH);
 digitalWrite(STB, LOW);

 for(int i = 0; i < 8; i++)
 {
 if(bitRead(command, i) & 0x01)
 {
 digitalWrite(DAT_TX, HIGH);
 }else{
 digitalWrite(DAT_TX, LOW);
 }
 digitalWrite(CLK, LOW);
 digitalWrite(CLK, HIGH);
 }

 if(data) digitalWrite(STB, HIGH);
}

// sending data to display
void sendData(byte data, boolean last)
{
 for(byte index = 0; index < 8; index++)
 {
 if(bitRead(data, index) & 0x01)
   { digitalWrite(DAT_TX, HIGH); }
 else
   { digitalWrite(DAT_TX, LOW); }
 digitalWrite(CLK, LOW);
 digitalWrite(CLK, HIGH);
 }
 if(last) digitalWrite(STB, HIGH);
}

// set ram address
void setAddress(unsigned int address, boolean data)
{
 sendCommand(addressSettings | (address & 0x1F), data);
}

// cleaning of display memory
void clearDisplay()
{
 sendCommand((dataSettings | incrementAddress), true);
 setAddress(startAddress, false);
 for(int i = 0; i <= endAddress; i++)
 {
 sendData(0x00, false);
 }
 digitalWrite(STB, HIGH);
}

// routines for initialize display
void initDisplay()
{
 delay (200);
 // clear display ram memory
 clearDisplay();
 // set display mode to 5 digits, 16 segments
 sendCommand(displayMode, true);
 // set display on and minimum dimming
 sendCommand(displayControl, true);
}

// update fixed memory addresses
void updateFixedAddres(int address, int data)
{
 sendCommand((dataSettings | fixedAddress), true);
 setAddress(address, false);
 sendData(data, true);
}

// write symbol data to memory
void putSymbol(byte symIndex, byte posit, bool upcom, bool dot, bool dncom)
{
 byte symbol;
 sendCommand((dataSettings | incrementAddress), true);
 setAddress(posit * 2, false);
 symbol = symbols[(symIndex*2)];
 if (upcom) symbol |= 1<<4;
 sendData(symbol, false);
 symbol = symbols[(symIndex*2)+1];
 if (dot) symbol |= 1;
 if (dncom) symbol |= 1<<2;
 sendData(symbol, true);
}

// update LED status
void updateLED(int data)
{
 sendCommand((dataSettings | LEDregister), false);
 sendData(data, true);
}

// additional symbol of VFD updating
void updateSymbol(byte posit, bool value)
{
 if (value) symbolReg |= (1<<posit+2); else symbolReg &= ~(1<<posit+2);
 updateFixedAddres(0, symbolReg);
}
//-------------------------------------------------------------------------------


со временем — переделаю общение по I2C, что бы без библиотеки, и связь с дисплеем на SPI, а не ногодрыг.


Корпус и сборка
Корпус Z2A был куплен в Украинском интернет — магазине.
Сверление и порезка плат и корпуса делались на ЧПУ. Примеры как раз для этого блока — в обзоре на этот ЧПУ.
Фрезы — использовал из этого набора. Еще про запас прикупил таких, абсолютно идентичные. Кстати, такая фреза в паре с маленькой дрелькой дает инструмент, которым очень легко и удобно резать дорожки на печатных платах.
Сверла — эти.
Переднюю панель резал первой. По неопытности — дал много мощности и малую подачу.
Получилось не очень

Сверху — распечатанная на бумаге передняя панель и пленка для скоросшивателя.
Мощные полупроводниковые компоненты разместились на радиаторе от компьютерного процессора, его пришлось немного посверлить и порезать резьбу. На нем же примостились платы пред-регулятора, АЦП с ОУ слежения за падением напряжения и шунты измерения тока.
Радиатор

В обработке радиатора очень помогал автоматический кернер.
Термопаста — GD900.
Радиатор и трансформатор в корпусе

и с двумя платами

Сверху трансформатора — плата стабилизаторов и основная.
Плата стабилизаторов

На передней панели — закреплены платы индикатора и измерений
Передняя панель

и уже с платами




Плата индикатора

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

Разъемы
Выходные клеммники — вот эти. Для обратной связи по напряжению — заказал такие, но не понравились, гайка полностью пластмассовая, поэтому купил эти. Кстати, если нужны цветные, вот нормальные, с гайкой из металла.
На задней панели — вентилятор, разьем сети питания, держатель предохранителя и разьем uart Arduino
Добавить в избранное +112 +189
+
avatar
  • bdos
  • 03 июля 2019, 16:17
+1
Пульсации наверно небольшие получились?
+
avatar
+2
Под нагрузкой — шум порядка 50мВ. Пока не поборол.
+
avatar
+2
Это весьма много. У меня самодельный БП с предрегулятором на 100 Гц (отключаю выпрямитель от конденсатора как только тот зарядится до нужного мне напряжения) и пульсации на выходе от него — меньше 2 мВ. И то я считаю это немало, поэтому есть возможность предрегулятор отключать.
+
avatar
  • Z2K
  • 03 июля 2019, 21:23
+2
А какая у Вас необходимость иметь такие низкие шумы на питании. В каких использованиях это критично?
+
avatar
+1
Питание какой-либо специфической аудиоаппаратуры, например. Конкретно сейчас такой потребности нет, но я ставил цель построить наиболее универсальный лабораторный блок питания радиолюбителя, который сможет и для таких случаев пригодиться.
+
avatar
  • Z2K
  • 04 июля 2019, 03:28
+6
Понятно, планируете в ближайшем будущем разрабатывать хайфай аудио. Класса А надеюсь. Посколько классу Д пульсации к тому самому месту. А по сути «конкретно сейчас такой потребности нет».
«Построить наиболее универсальный лабораторный блок» — БП и стартерные батареи заряжать и предусилители питать мягко говоря не лучший вариант. Плохая идея и плохое решение.
Я не со зла — просто удивляет с каким упорством обсуждаестя начие вч шумов. Времена изменились — теперь в основном цифровая техника и цифровая обработка сигнала. И допустимый уровень этих шумов никак не влияет на работу эл техники. А радиэфир так засорен спектральными помехами так, что общий уровень э/м шумов в сравнении с 30тыми годами прошлого века возрос на 2 порядка. И ничего с этим не поделать, надо только принять.
+
avatar
+1
Ну, конечно, каждому свое. Для питания D-класса у меня есть импульсный лабораторный БП из китая, купленный много лет назад и справляющийся со своей функцией на отлично. Но мы же тут не готовые решения обсуждаем, а говорим о DIY, так почему я не могу к DIY выдвигать такие требования, которые мне интересны? Для меня в этом и смысл DIY — получать удовольствие делая устройства, обладающие весьма высокими характеристиками, потому что ширпотреб проще и дешевле купить.

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

Кстати, по поводу ВЧ пульсаций — если вам интересна тема КВ-приемников (особенно регенеративных), вряд ли вы их сможете питать от такого БП.
+
avatar
  • Z2K
  • 03 июля 2019, 21:24
+1
У меня БП, когда нужны мин пульсации, (что бывает крайне редко, и то не совсем что б очень нужно — лишь что б проверить есть ли разница в работе от питания) — есть сборка 4S2P — 12В-10А отлично держит. Никаких шумов. Проще и дешевле.
+
avatar
  • ksiman
  • 04 июля 2019, 09:44
0
есть сборка 4S2P — 12В-10А отлично держит. Никаких шумов.
Шумы есть всегда, но в данном случае они очень низкие.
+
avatar
+2
попробуй на выход синфазный 2-обмоточный дроссель + мелкий кондер
+
avatar
0
Спасибо за совет.
На общий выход, или между импульсником и линейником?
+
avatar
  • ksiman
  • 04 июля 2019, 09:45
0
Под нагрузкой — шум порядка 50мВ. Пока не поборол.
Очевидно, неправильная разводка общего проводника.
Надо внимательно проверять монтаж и схему.
Сразу бросается в глаза питание модуля индикации от основной обмотки трансформатора. Выход моста данного источника подключается на общий проводник и сразу образуется один из источников проблемы
+
avatar
0
Очевидно, неправильная разводка общего проводника.
Почему? Линейный стабилизатор просто не обладает необходимым быстродействием, чтобы гасить такие пульсации изменением сопротивления транзистора, они проходят через него, как через резистор. Поднять быстродействие тоже не получится, будет возбуждаться. Тут просто ФНЧ хороший нужен на выходе предрегулятора.

p.s. возможно, земляной контур и действительно неправильно разведен, в дополнение к вышесказанному.
+
avatar
  • ksiman
  • 04 июля 2019, 15:47
0
Пульсации на частоте работы входного преобразователя линейник легко отфильтрует. Тут проблема скорее всего глубже…
+
avatar
0
Пульсации от работы импульсного преобразователя имеют спектр, начинающийся с рабочей частоты и уходящий в мегагерцы. Никакой линейник просто не обладает таким быстродействием, чтобы фильтровать мегагерцы.
+
avatar
  • ksiman
  • 04 июля 2019, 18:30
+1
Убедили, сдаюсь…
+
avatar
0
Резонансник в помощь. У него меньше уровень помех.
+
avatar
0
Масштабно! +за DIY.
А как у прибора со стабильностью В и А?
+
avatar
+1
За 3 часа — не поплыл
+
avatar
  • Xylene
  • 03 июля 2019, 16:24
+2
10 оборотов на регулятор? Долго менять с 3.3 вольт на 12 к примеру? Вариант Грубо-точно не рассматривали?
+
avatar
+1
Места на передней панели не хватило бы. Один оборот — около 3,5 вольт
+
avatar
  • Dfcz22
  • 03 июля 2019, 16:28
+2
Причем правильный прибор — должен быть тяжелым и горячим. А если бы сделать его не сильно греющимся?
Когда-то на подготовке диплома (по БП для цифровых устройств) мне препод сказал: у вас максимальная температура трансформатора ниже 100 градусов — плохо: не эффективно работает. ))
+
avatar
  • Z2K
  • 03 июля 2019, 20:38
+1
«мне препод сказал: » — ну не все же преподы могут быть умными.
+
avatar
  • Jet
  • 04 июля 2019, 00:37
+2
скорее это был сарказм)
+
avatar
  • mzr910
  • 03 июля 2019, 16:29
+1
вид очень эклектичный
+
avatar
  • Xylene
  • 03 июля 2019, 16:30
+2
да ладно, просто теплый ламповый
+
avatar
0
А зачем этот вариант? Собрал БП по варианту Леонид Иваныча, огонь схема, с синхронным выпрямителем, очень низкие пульсации, нет помех.
+
avatar
  • Xylene
  • 03 июля 2019, 17:20
0
а зачем Леонид Иваныча? Keysight, огонь схема. 6 штук евро и он ваш.
Ну что за люди «зачем делать, возьми да скопируй»
+
avatar
0
Keysight, огонь схема. 6 штук евро и он ваш
нафиг он нужен для diy)
+
avatar
0
Можно ссылку?
+
avatar
+9
Вот автор.
+
avatar
0
Крутая вещь! спасибо
+
avatar
  • ploop
  • 03 июля 2019, 19:55
+1
Я помню этапы его рождения. Действительно крутая вещь.
+
avatar
  • Bako
  • 04 июля 2019, 15:01
0
Я его ещё по радиокоту помню, пока «национальный вопрос» его не испортил и он со скандалом не ушёл с форума. Одно время думал что Леонид Иваныч и kirich один и тот же человек — внимание к мелочам и один и тоже город наводили на эту мысль.
+
avatar
  • ploop
  • 04 июля 2019, 15:22
+3
Ну и я его оттуда же знаю. И помню, как задолбало меня этот «национальный» срач вычищать, да чтобы никого не обидеть :)
+
avatar
  • Z2K
  • 06 июля 2019, 06:54
0
«и один и тоже город» — зато у Вас внимания к мелочам нет. :))
+
avatar
  • Leoniv
  • 08 июля 2019, 14:02
+5
Поскольку я и являюсь лично «Леонидом Ивановичем», могу ответить — не «национальный вопрос» меня испортил. Время постепенно расставляет все по своим местам, теперь у нас cтало намного больше тех, кто со мной согласен. Для любителей большой империи это плохие новости. Хотя империи сегодня — это не современно и не молодежно. Но здесь речь не об этом. В моем БП наибольший источник помех — это динамическая индикация. Были планы отказаться от нее и сделать настоящий малошумящий источник. Но сдержал тот факт, что такой источник фактически никому не нужен. Наверное, самый оптимальный путь — это импульсный пре-регулятор и линейный пост-регулятор. Импульсный можно сделать на частоте сети, как в Agilent U8002A.
+
avatar
0
У меня сын на диплом делал лабораторный БП с импульсным следящим (полумост) как первый каскад, вначале хотел резонансник, но он сложен в отлаживании оказался. И да, динамическая индикация шумит заметно. Разводка была не с первой попытки сделана, которая бы удовлетворила. Платы были односторонние с земляным полигоном.
+
avatar
0
А если просто питать динамическую индикацию (и сам МК) от отдельной обмотки трансформатора?

Я как раз делал предрегулятор на частоте сети (точнее, на 100 Гц), основной его недостаток — это большие токи через обмотку, выпрямитель и конденсатор на небольших напряжениях. То есть, трансформатор надо брать с большим запасом, чтобы не нагревался (или применять активное охлаждение). Также, очень желательно использовать дроссель приличной индуктивности, чтобы спектр помех свести в более низкочастотную область, где линейный стабилизатор с ними хорошо справится. Ну и трансформатор «трещит» от него :)
+
avatar
  • Leoniv
  • 10 июля 2019, 09:43
+1
Полностью от отдельной обмотки питать не пробовал, хотя в PSL-2401 индикация питается от собственного стабилизатора и приняты все меры, чтобы импульсные токи не текли по общим проводникам в аналоговой части БП. Это снизило помехи, но они по-прежнему видны над шумами. Когда включается бипер, это тоже хорошо видно на выходе. Когда речь идет о единицах мВ на фоне десятков В, бороться с такими помехами трудно. С другой стороны, на практике они ни разу не помешали.

Низкочастотный пререгулятор имеет недостатки, это так. Наверное, есть смысл первую ступень делать полноценной импульсной. Сетевой импульсник не очень нравится, так как такой БП будет иметь сильную связь с сетью через Y-конденсатор. А поскольку в домашней сети заземления нет, то все устройства с импульсниками больше или меньше бьются током, что для лабораторного БП не очень хорошо. Поэтому я бы взял обычный транс, затем низковольтный импульный пререгулятор, затем линейный каскад. Что-то подобное было сделано в ранней версии этого БП, с автором проекта я долгое время переписывался, пост-регулятор сделан по мотивам PSL-3604 (EEVblog).
+
avatar
+1
Ваш 3604 я знаю :) Долго рассматривал его схему, когда делал свой БП. Интересное решение, на мой взгляд ему не хватает только внешнего АЦП/ЦАП и что-нибудь вроде REF195, чтобы уж совсем хорошо было. И еще, как помню, вы там транзисторы в полностью пластиковом корпусе использовали и говорили, что теплопроводность у них так себе — сейчас на алиэкспрессе (или ebay) достаточно просто купить керамические прокладки как из обычного оксида алюминия, так и из нитрида алюминия, поэтому вопрос с использованием обычных корпусов можно считать решенным.

А если все же делать предрегулятор импульсным, я бы рассмотрел вариант использования аналога корректора мощности, у него в некотором смысле схожая задача — поддерживать на выходе определенное напряжение. Только напряжение это теперь будет изменяемым, а не постоянным, как в сетевых БП (ну и надо подумать, как правильно все сделать, т.к. напряжение на входе может быть как меньше, так и больше выходного, возможно, понадобится SEPIC). Также корректор имитирует активную нагрузку, что снизит нагрев обмотки трансформатора и диодного моста. А с пульсациями на частоте 100 Гц уже сможет и линейный преобразователь справиться.

И если вдруг решитесь на разработку такого (или не такого) БП, рассмотрите вариант с двуполярным выходом — понятно, что можно взять два отдельных блока и их соединить, но один блок с двуполярным выходом будет попроще, а потребность в двуполярном питании сейчас возникает часто.
+
avatar
  • Leoniv
  • 10 июля 2019, 13:37
+2
Внутренние ЦАП и АЦП STM32F100 оказались на удивление хорошими. Для повышения разрешающей способности до 16 бит для ЦАП я использовал дельта-сигма добавку, а для АЦП — оверсемплинг с последующей фильтрацией. Конечно, нелинейность при этом никуда не девается, но она на удивление невысокая. Как-то даже выкладывал видео — перестраивал БП по всему диапазону, контролируя внешним вольтметром. Отклонение было совсем небольшим, для любительской практики хватает с головой.

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

Ставить хороший опорный источник можно лишь из соображений низкого ТКН, так как абсолютная точность не интересует, она калибруется. Но это тянет за собой целую цепочку изменений: нужны термостабильные резисторы и ОУ с малым дрейфом. А так тут все довольно хорошо сбалансировано: LP2951 имеет типовой ТКН 20 ppm/градус (против 5 ppm у REF19x), резисторы я ставил 25 ppm 0.1%, ОУ тоже в комнатных условиях дает похожий вклад.

ККМ выполняет несколько иную функцию — он имеет в своем составе перемножитель, с помощью которого модулируется потребляемый ток пропорционально мгновенному значению входного напряжения. Для пререглятора эта функция не сильно нужна. Тут лучше подойдет обычный регулируемый step-down.

Про двухполярный БП думал. Проще всего, конечно, сделать link между двумя PSL-3604, там ведь есть изолированный USB, вместо него можно просто соединить UART-ы. Но пока не добрался, так как у меня всего один БП, второй экземпляр уже второй год дособрать не могу за ненужностью. На скорую руку сделал вот такой, после чего энтузиазм угас — проблема ведь как-то решена. Планировал сделать еще прецизионный БП, что-то похожее на Keithley 2450, но работы много, а толку в любительских условиях мало. Электронную нагрузку тоже начинал проектировать, но забросил. Чем дальше, тем меньше что-то надо. Старость. Из заброшенных проектов можно целую аллею памяти построить :)
+
avatar
0
Для пререглятора эта функция не сильно нужна.
Почему? Не важно, где стоит выпрямитель и конденсатор — сразу на «горячей стороне» или после трансформатора, на коэффициент мощности это влияет практически одинаково. Только в обычном импульсном БП от этого страдает электросеть, входные провода и диоды, а тут еще будет страдать трансформатор, т.к. через него будет идти больший среднеквадратический ток. А вот это уже весьма немаловажно, и применив корректор можно снизить нагрев трансформатора и снимать с него больший ток без увеличения габаритов.

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

На скорую руку сделал вот такой, после чего энтузиазм угас — проблема ведь как-то решена.
Понимаю =) И, по большому счету, для многих задач такого будет действительно достаточно. Но я вот себе собрал двуполярный 0… 35 В и уже несколько раз пользовался обеими половинками — то надо было 60 В снять, то усилитель запитать.

Из заброшенных проектов можно целую аллею памяти построить :)
И тем не менее, у вас весьма много и полноценно проработанных проектов)
+
avatar
  • Leoniv
  • 10 июля 2019, 22:55
0
Можно, конечно, сделать и корректор мощности. Хотя это актуально при мощности в сотни ватт, а там обычно рулят чисто импульсные БП. С работой трансформатора на выпрямитель с фильтром мы же как-то миримся в обычных БП. Другое дело, если поставить пререгулятор, работающий на 100 Гц. Тогда условия работы трансформатора действительно становятся нехорошими. Но с высокочастотным импульсным пререгулятором будет все вполне терпимо и без ККМ.
+
avatar
0
Можно совет профессионала?
Сейчас мой предрегулятор без нагрузки дает на выходе «пилу», резкий подъем и плавный спад. под нагрузкий — то же, но с меньшим периодом.
Может это быть из-за малой индуктивности?
+
avatar
  • Leoniv
  • 11 июля 2019, 16:23
+1
Вполне может быть. Для лабораторного БП трудно выполнить критерий неразрывности тока дросселя, так как нагрузка может меняться в широких пределах. При снижении нагрузки ниже критической будут наблюдаться повышенные пульсации.
+
avatar
0
Спасибо, буду переделывать дроссель
+
avatar
0
На радиокоте когдато видел в продаже платы и комплектовку к нему.
+
avatar
+4
да leoniv крутой мужик самоучка с прямыми руками и дотошный в мелочах. продумывает все вплоть до наклейки. сам из деревни. старше меня лет на 10, но какая пропасть в знаниях. мне еще расти и расти. раньше вроде работал в белорусской академии наук.
+
avatar
0
Скопировал «БП по варианту Леонид Иваныча» и вставил в Google, заняло ~ 3-4 сек. Сложно? :)
+
avatar
+5
Не сложно.
Но если у человека есть 100% точный источник, почему бы и не поделится?
А послать в гугол — может каждый :)
+
avatar
+1
Странно, что вы про него не слышали — обычно все, кто конструируют БП с линейным стабилизатором знакомы с его схемами =)

Решение с автоматическим подключением нужной обмотки весьма интересное.
+
avatar
0
знакомы с его схемами
первый раз слышу
решение с автоматическим подключением нужной обмотки весьма интересное
этому решению лет 50
+
avatar
0
Лет то 50, но реализация — интересна.
Мог бы и не заморачиватся, а коммутировать отводы симисторами и упростить выпрямитель, а так — уважение за труд
+
avatar
+1
Ээ, нет. Основное преимущество его решения (ну, или не его, но я с таким решением познакомился именно на его схеме) — это очень быстрая коммутация. Надо вам выходное напряжение за миллисекунду поднять с 5 В до 30 В — пожалуйста, открывается другой ключ и напряжение поднято. Если же коммутировать обмотки перед выпрямителем, то поднять напряжение вы сможете только через 1 полупериод.

Это бывает надо, например, для быстрого перехода из СС в CV.
+
avatar
0
Дайте ссылку, пожалуйста! Уже увидел ниже. Спасибо!
+
avatar
  • Z2K
  • 03 июля 2019, 21:05
0
А зачем Вам сверхнизкие пульсации. Занимаетесь гидролокацией?
+
avatar
  • wwest
  • 04 июля 2019, 21:10
0
От 20 до 80 килогерц вся гидролокация.Ну ещё поиск АПЛ на сверхнизких частотах вплоть до инфразвука.
Ну и чем при такой частоте пульсации могут помешать? Всё тоже что и в звуковом усилителе.А в цифровой форме анализ Фурье сигнала все ваши пульсации на постоянной частоте отсекает на раз-два.
При чём тут гидролокация.Это скорее для радио или в измерительной технике.
+
avatar
  • prohuk
  • 03 июля 2019, 22:48
0
Собрал БП по варианту Леонид Иваныча,
Кто такой Леонид Иваныч?
+
avatar
  • Xylene
  • 03 июля 2019, 22:53
0
известный писатель и параход www.litmir.me/br/?b=186939&p=1
+
avatar
0
известный писатель и
Спасибо за ссылку — я её потерял когда-то, теперь сохраню надежнее!
+
avatar
  • X3Shim
  • 03 июля 2019, 17:11
+1
Транс — импульсник — линейный стаб. Я правильно понял идею?
+
avatar
+1
Точно. Есть еще схемы «следящего» импульсника, который поддерживает +3В относительно выхода линейного преобразователя. У кого-то получалось собрать и получить низкие шумы. Но тема на радиокоте, если память не изменяет, так и не переросла в нечто законченное-рекомендованное. Но люди делились тем, что получилось.
+
avatar
  • u3712
  • 03 июля 2019, 18:53
0
2.4 достаточно, меньше 2 мало, для тока порядка 3-5А. Если меньше, то можно снизить до 2В.
+
avatar
0
Смотря на чем линейник. В теме на коте было 2.7В вроде, задавали стабилитроном.
+
avatar
+4
Да. Транс — лучшая гальваническая развязка. Импульсник — снижает напряжение перед линейником. Линейник — высокая точность и уменьшение помех.
Но все же шумы есть, пока борюсь
+
avatar
-1
линейник — высокая точность и уменьшение помех
у многих стабилизаторов линейных PSRR на высоких частотах плохой. Поэтому пульсации от импусника давятся плохо. Конечно, есть разные решения проблемы
+
avatar
0
К сожалению, линейный стабилизатор не справится с помехами, генерируемыми импульсным — их спектр начинается с сотни килогерц и уходит в мегагерцы, линейники просто не обладают таким быстродействием, иначе они будут возбуждаться на емкостной нагрузке. Во всех схемах всегда есть корректирующая цепочка, снижающая усиление тракта на частоте, где сдвиг фазы приближается к 360 градусам до уровня меньше единицы.

В вашем случае после предрегулятора нужен хороший пассивный ФНЧ 3-го или 5-го порядка (то есть, 2 или 3 конденсатора плюс 1 или 2 дросселя) и правильное разведение земли.
+
avatar
  • xcom
  • 08 июля 2019, 15:05
0
Можно применить мультиприкатор емкости. Полоса среза легко считается, но добавляется еще один транзистор.

>В вашем случае после предрегулятора нужен хороший пассивный ФНЧ

Для проектирования которого надо бы какой-никакой опыт (или оборудование для экспериментов), иначе влететь в резонанс на какой нибудь гармонике раз плюнуть.
+
avatar
  • kven
  • 03 июля 2019, 17:38
+1
зачот! особенно за ВЛИ.
+
avatar
+2
Корпус тесноват, а интикатор похоже от калькулятора серии Sharp — Compet.
+
avatar
  • kven
  • 03 июля 2019, 18:18
0
индикатор может быть от чего угодно, но точно не от калькулятора на фото
+
avatar
0
как раз нормальный индикатор
у меня вмультиметре вли большой и корпус там тоже большой
+
avatar
  • kven
  • 03 июля 2019, 20:16
0
кстати, на ибее можно купить vfd индикатор от мультиметра с кучей символов всяких, правда от популярных, типа 34401, будет дорого стоить, от дешёвых флюков настольных должно быть недорого
+
avatar
  • Xylene
  • 03 июля 2019, 20:28
-3
Да вообще копейки, 140 баксов


Ссылки на дешевые флюки тоже приветствуются, у них вообще бывает что либо дешевое?
+
avatar
  • kven
  • 03 июля 2019, 22:26
0
вам удалось найти самый дорогой лот.
а вообще, полурабочие Fluke 8840A или 45 стоят от $30 плюс доставка, но надо мониторить, как и все на ибее.
+
avatar
  • Xylene
  • 03 июля 2019, 22:28
+1
ну вы везучий. Сколько не вижу лотов с приборами — доставка меньше 50 не бывает. Если прогнать посредником — столько же и выйдет. Правда еще есть и ненулевая вероятность, что это барахло завернет таможня
+
avatar
  • kven
  • 03 июля 2019, 22:52
0
вы про индикатор или мультиметр?
и то и другое нужно мониторить, покупал себе год назад мультиметр настольный, по асашай free, в москву посредником $55 вышло.
vfd индикаторы б/у для мультиметров видел от $20.
ссылок не будет, потому что все дешевое надо искать, сходу только втридорога можно купить.
+
avatar
0
вли сам по себе дешев не бывает
разве только просто 7 сегментная трубка как у автора

у меня валяется несколько штук от музцентров и подобного, врят ли под блок питания покатит
зато при помощи чпу фрезера и лазера можно сделать крутые панели со светящимися символами и даже самими сегментами
вчера в ютубе увидел, мужик делает панели для полетного симулятора
выглядят вообще нереально круто, надписи подсвечены, линии там всякие от ручек управления, даже стрелки приборные у самопальных приборов и шкалы подсвечены
+
avatar
  • kven
  • 03 июля 2019, 22:54
0
да, от МЦ самые красивые индикаторы, еще от видиков и ресиверов норм.
+
avatar
-1
и настолько же бесполезные
+
avatar
0
Тоже возникла такая мысль…
+
avatar
0
почему на схеме индикации выводы драйвера 5 и 6 соединены и на меге тоже?
+
avatar
0
PT6312, кроме управления дисплеем, умеет опрашывать 4 переключателя и 24 кнопки. Эти даные — она выдает на 5-ю ногу. Там — открытый сток.
Я соединил их вместе, что бы тянуть меньше проводов. Так делает большинство :)
Я думал, что когда переделаю обмен на SPI, мега будет слать инфу на дисплей через 11-ю ногу, а читать — через 12.
Изначально задумывалось больше органов управления, с задействованием PT6312, но потом — захотелось меньшый корпус, и пришлось оптимизировать.
+
avatar
  • Gruffy
  • 03 июля 2019, 18:51
+1
Сделано красиво, это плюс.
Боюсь, что 2 В запаса для стабилизатора — маловато, надо чуть больше.
Полагаю, надежда на то, что стабилизатор подавит все пульсации от ИИП — заблуждение, скорее всего они легко проходят через него. Надо поставить после ИИП фильтр с катушками (на схеме их не увидел). Всё-таки 50 мВ — многовато для такой сложной схемы.
На мой взгляд, компьютерный радиатор с вентилятором должен торчать наружу — будет гораздо эффективное охлаждение (если тепловая мощность выделяется в десятки Ватт).
В целом, поздравляю, мало кто сегодня способен сотворить такой прибор.
+
avatar
  • Z2K
  • 03 июля 2019, 21:29
0
«Полагаю, надежда на то, что стабилизатор подавит все пульсации от ИИП — заблуждение, скорее всего они легко проходят через него.»
Обычный параметрический стабилизатор отлично снимет низкочастотные 100Гц, — но ВЧ будут пролезать легко. Для борьбы с ними путем электронной фильтрации нужно городить ВЧ схемы с вч транзисторами.
+
avatar
  • KiV
  • 03 июля 2019, 21:49
+2
Дроссели между импульсной и линейной схемой могут частично решить проблему. Но еще влияет и расположение схем друг относительно друга, расположение и ориентация дросселя импульсного источника. Даже разводка платы импульсника будет влиять.
Кардинальное решение для данного источника — полное отключение импульсника на малых токах. Микроконтроллер в схеме есть — программно выключаем импульсник, открываем полностью его транзистор. Если используемый стабилизатор позволяет сделать 100% ШИМ на входе, то это реализуется просто «врезкой» сигнала в цепь обратной связи. При этом надо будет следить за рассеиваемой мощностью на линейнике и переключаться на импульсник при превышении какого-то порога.
+
avatar
  • Z2K
  • 03 июля 2019, 21:56
0
Зачем все эти сложности — если Вам действительно важны отсутствие вч шумов не проще ли при сегодняшней доступности и цене литиевих аку сделать батарею с линейным регулятором и питать лабораторные поделия от нее. И решить проблему вкорне, а не изголяться в борьбе с ней ища оптимальное расположение блоков. Вам же не нужен такой БП для 24/7.
+
avatar
  • KiV
  • 03 июля 2019, 22:09
+3
Я предложил вариант конкретно для этого блока. Обычно низкий уровень шумов нужен именно для слаботочных устройств. Поэтому отключение предрегулятора на низких токах считаю хорошей идеей.
А «расположение» это больше мои рассуждения, чем реальный совет — у автора источник уже сделан и он вряд-ли будет его так кардинально перелопачивать. Разве что фильтрующий дроссель после импульсника поставить.
+
avatar
  • Xylene
  • 03 июля 2019, 22:56
+1
идея действительно хорошая. На сильный токах уже на шумы плевать. Этакий универсал выйдет, бесшумный где надо, и мощный
+
avatar
  • u3712
  • 03 июля 2019, 19:14
+5
Делал подобный тип БП, на базе обычного китайского 1503DD. Вполне вменяемые характеристики, при миниуме затрат. Доработка очень простая — между питанием и коллектором силового транзистора ставится DC/DC преобразователь, настроенный на отслеживание 2.4В между КЭ транзистора.
Забавно, но потом у проекта было расширение — к корпусу припаян АТХ БП, отмодденый в тот-же фром-фактор. В нем реализован инвертер ±30В 10А. Потом была эпопея по прикручиванию регулятора 1503 на этот гибридный БП. В итоге, «переключатель типа» на 1503 выбирает режим работы устройства — полностью линейный 30В 1А, гибридный 30В 3А (с разрешением работы DC/DC) и третий, с запуском импульсного источника. Потом было начал расширять его на добавление регулируемого изолированного +300В 1.5А, да «наигрался».
Итак, замечания по конструкции.
Основное — очень захламлена face. Крутилками напряжения и тока пользоваться невозможно. Да-да, невозможно. Как первая мера, можно поставить тонкие-высокие ручки, но это все-равно полумера. Нет места для пальцев.
Второе — количество кнопок зашкаливает. Не спорю, они нужны, но «не так».
Третье — для работы с БП удобно иметь индикацию 3х величин — напряжения, тока и мощности. Для работы с аккумуляторами — напряжения, тока и емкости. Всё остальное лишь утяжеляет интерфейс.
Четвертое — выходные соединители. Купите что дорогое, а? Или, на крайний случай, поставьте «советские». Весь этот китацкий пластик — зря выброшенные деньги. Себе же делаете, сделайте нормально. У вас ток большой, «пластик» раздолбается очень быстро.
И вообще, доступ к крутилкам через провода?… короче, face надо переделывать. Начните проектировку со стандартного — разъемы внизу, крутилки по правой стороне, индикатор слева.
+
avatar
+1
Доработка очень простая — между питанием и коллектором силового транзистора ставится DC/DC преобразователь, настроенный на отслеживание 2.4В между КЭ транзистора.
В таком случае переход из CC в CV с повышением напряжения на выходе будет затянут на время реакции импульсника.

Основное — очень захламлена face
Это называется «лицевая панель» :)
+
avatar
  • kven
  • 03 июля 2019, 20:19
0
думаете, автор кинется переделывать уже законченный девайс?
+
avatar
  • KiV
  • 03 июля 2019, 21:36
0
И вообще, доступ к крутилкам через провода?
А если автор левша? Или просто источник стоит слева? Даже у фирменных приборов бывает такое расположение.
+
avatar
0
Спасибо за советы.
По передней панели: очень хотелось ВЛИ, поэтому потенциометры сбоку никак. Там еще внутри есть стойки, скрепляющие верх и низ корпуса, поэтому по краях — только светодиоды. да и им пришлось повыгибать ноги.
Крутилки — очень легко оперируются одним пальцем. А высокие тонкие ручки — не умею искать на али.
ВЛИ, конечно, красив, но полезная площадь индикации относительно габаритов корпуса — очень мала. Отобразить еще одно значение — будет сложно. Разве что — раз в 1..2 секунды переключать изображение
+
avatar
+1
Это корпуса такие, расслаиваются при обработке. Не важно сколько мощности и подачи
+
avatar
+2
Какие у вашего источника получились переходные характеристики при переходе из CV в CC и обратно? Например, ставим 30 В 10 мА, подключаем к выходу светодиод — перегорит?

По поводу точности АЦП — используете ли вы усреднение нескольких измеренных значений? Если нет, и скорость АЦП позволяет — используйте. У меня в БП тоже 16-битный АЦП из серии ADS, я усредняю 32 или 64 сэмпла по каждому каналу. В итоге показания «прыгают» на 1 мВ при максимуме в 35 В.
+
avatar
0
Спасибо, с АЦП проработаю.
По переходу на СС — попробую еще, чуть попозже
+
avatar
+2
Для чпу станочка и 3D принтера, года два назад за 270 грн. приобрел блок питания ELTEK 1000 на Вт Они использовались в базовых станциях мобильной связи Киевстар. После реорганизации разошлись по сайтам бесплатных обьявлений. Сосед радиолюбитель после взятия на тестирование уже не вернул. :-) Доволен был как слон. Пришлось покупать второй. На выходе 10-30В Думаю со стабилизацией там все отлично.
+
avatar
  • Xylene
  • 03 июля 2019, 20:09
0
стабилизация это вообще ерунда. 99 % современных схем оно особо и не нужно, выше мин. предела и хорошо. А вот тот факт, что ИБП излучают широченный спектр всевозможных гармоник своей частоты переключения — большое зло для измериловки, аудио и подобных приложений.
+
avatar
  • Xylene
  • 03 июля 2019, 21:14
0
о, у кого то и флюки дешевые под ногами, и ибп не излучают, ну чисто цирк
+
avatar
+2
может свои поделки покажете? а то кроме кривого корпуса напечатанного на 3D принтере мы от вас нечего увидели.

есть у вас что то вот такого уровня исполнения? вот с таким мануалом?
+
avatar
  • Z2K
  • 04 июля 2019, 04:57
0
эргономика на высоте. Только кнопку он/офф перенести во вторую вертикаль — правее. Странно что так не сделано.
+
avatar
  • Leoniv
  • 10 июля 2019, 10:06
0
Такой вариант тоже был, но был отвергнут. При взгляде чуть сверху (когда БП стоит на столе), часть панели под энкодером затеняется его большой ручной. Самая открытая часть панели — как раз где сейчас расположена кнопка ON/OFF. Впрочем, вариант с кнопкой во второй вертикали тоже не так уж плох, при желании можно сделать и так. Вообще, версий панели было много.
+
avatar
  • Z2K
  • 04 июля 2019, 05:11
+2
Перфекционист он конченный. Документ слов нету — информация воспринимается без прочтения. :). Смотрите дизайнера хреновы и учить наизусть!
+
avatar
  • Xylene
  • 04 июля 2019, 08:12
0
Я где то писал, что у меня крутые поделки? Крутые корпуса? Вы это как заключили из фразы, говорящей о дороговизне Fluke? Или уровень ЭМС от ИБП навел вас на эты мысль? Логика есть?
+
avatar
  • Z2K
  • 03 июля 2019, 22:00
0
Было такое. Бежит река, плывут года.
+
avatar
+1
Квт за 480 грн — это не дорого. Спасибо за наводку
+
avatar
+1
мой вариант. регулируемый с ножками и встроенной нагрузкой. так и не рискнул проверить на ток КЗ. побоялся :)

+
avatar
0
А Вы случаем не нашли как регулировать ток? На каком-то форуме приводилась схема с указанием подстроечника. Сейчас найти не могу. Как Вы реализовали задн… часть с контактными группами. Долго придумывал и перебирал варианты. В итоге стянул пластик и поообкусывал контакты. Очень хотелось бы добавить регулировку по току…
+
avatar
0
По току не нашел. Да мне и не надо.
А сзади у меня так:

+
avatar
+1
Регулировка превышения по I — pot241 ( max current adjust).
forum.cxem.net/index.php?/topic/158963-переделка-блока-питания-eltek-smps-1000-si-24v/page/5/&tab=comments#comment-2345034

там же и схемы есть
+
avatar
0
СПешки на передней панели. Одна регулирует напряжение вторая ток.
+
avatar
+1
а так ли надо было дроссель сматывать? я всегда думал что если индуктивность чуть больше, то и ладно. главно что не меньше чем надо.
+
avatar
0
В принципе, да. Но чем больше витков, тем больше магнитное поле при том же самом токе — можно материал сердечника дросселя загнать в насыщение. Не знаю, как это применимо в данному БП (наверное, никак, т.к. тут дроссель от БП с током больше), просто факт, который надо учитывать.
+
avatar
0
Возможно скорость нарастания тока не устраивала.
+
avatar
  • KiV
  • 03 июля 2019, 20:48
0
Отличный обзор! И источник питания хорошо сделан.
Я бы вот только в затвор полевика предрегулятора стабилитрон поставил, на 12-15 Вольт параллельно R105. А то там напряжение до -35 В может быть, а транзистор только до +-20 В обычно на затворе допускает.
+
avatar
+1
D11 для этого и применен. Эмитерный повторитель на Т4 не выдаст больше напряжения, чем на базе
+
avatar
  • KiV
  • 04 июля 2019, 11:22
0
О! А слона-то я (D11) и не заметил )
+
avatar
  • Grobik
  • 03 июля 2019, 22:00
+3
DIY Отличный!
перемотаю лидцентратом
Странно, что никто не заметил этой грубейшей ошибки;)
ЛиТценДрат (нем. Litzen + Draht — пряди и провод)
+
avatar
  • Z2K
  • 03 июля 2019, 22:06
+1
В накладних правильно писали, Но никогда не знал что значит. Драт = дріт — догадывался. :)
+
avatar
+1
Благодаря Вашему исправлению — наконец то нашел этот обзор. Давно искал, спасибо
+
avatar
  • tuz_83
  • 03 июля 2019, 22:13
+2
Хорошие тороидальные трансформаторы для линейников у торэл ))
+
avatar
  • Leoniv
  • 10 июля 2019, 13:43
0
В Беларуси это Юджэн.
+
avatar
0
Вопрос не по теме к автору топика
В спойлере «Реализовано 8 режимов индикации» на фотках на заднем плане виден монитор ресурсов, не подскажете, что за проект?
+
avatar
+1
Это Arduino с дисплеем. подруженная с LCD smartie. Как настроить и собрать — смотрите здесь. Но у меня заработал только код отсюда
+
avatar
+4
Спасибо за интереснй обзор.
Отдельное спасибо за «Блок живлення»!
+
avatar
  • KiV
  • 03 июля 2019, 22:36
+3
А я вот в старой книжке видел схему «Джерело живлення».
По-моему даже более круто.
+
avatar
  • vovand
  • 04 июля 2019, 08:18
0
Это на каком языке?
«Блок живлення»!
+
avatar
+2
Украинский
+
avatar
  • vovand
  • 04 июля 2019, 13:59
+1
Да я знаю, просто в первый раз вижу надпись на украинском и русском в одном предложении на приборе, хотя тут, наверно, половина народа с Украины.
Ведь правильно «Джерело живлення», так?
А вообще на Украине есть такого же типа сайт, только на украинском?
+
avatar
+1
в украинском языке — есть слово «блок»
+
avatar
  • KiV
  • 04 июля 2019, 17:49
0
Блок — это блок и на украинском.
Джерело — это по-русски «источник».
Так что оба варианта правильны.
+
avatar
  • vovand
  • 04 июля 2019, 20:48
0
Спасибо за пояснение. А про сайт что скажите?
+
avatar
  • KiV
  • 04 июля 2019, 22:19
0
Я из Беларуси, поэтому украинских сайтов увы, не знаю.
+
avatar
  • Leoniv
  • 10 июля 2019, 13:45
0
Тогда «Крынiца сiлкавання».
+
avatar
  • ksiman
  • 03 июля 2019, 22:56
0
И получился а итоге гибридный источник питания :)
+
avatar
  • vovand
  • 04 июля 2019, 05:34
+2
Не могу понять, для чего эта вся эпопея с
Импульсный пред-регулятор
, от фона которого нельзя избавиться? Есть тороид, у которого вся вторичка на виду, не надо ничего мотать, ищи тестером нужное напряжение и делай отвод на тумблер или на реле. Какой смысл в бочке меда с ложкой дегтя?
За самодельщину плюсую, но передняя панель не фонтан, не эргономичная.
ИМХО. Я для себя всегда делаю БП вертикальные, меньше места на столе занимают.
+
avatar
0
За измерения отвечает АЦП ADS1115. точность — не супер, показания напряжения плавают ± до 5мВ, тока ± до 5 мА. в зависимости от погоды на Марсе
c 16-bit такая точность?
+
avatar
0
Да, типа 65535
+
avatar
0
Хотелось бы попросить присутствующих. Дайте ссылку на изготовление регулируемого, с защитой по току блока питания, самого простого и дешевого из компьютерного блока питания. Наверняка кто то сделал. Хотелось бы иметь дома такой для простых задач, уровень помех тут не важен, важно чтобы не сгорело подключаемое устройство и сам блок питания. И простота изготовления.
+
avatar
  • ksiman
  • 04 июля 2019, 10:07
0
Сильно зависит от используемого БП. Некоторые из них переделать очень сложно, другие — проще.
+
avatar
0
Самый простой, мне это нужно время от времени. Для простых задач, блок питания есть и старого образца и нового с разъемами сата.
+
avatar
0
Самый простой, мне это нужно время от времени. Для простых задач, блок питания есть и старого образца и нового с разъемами сата.
Это зависит от используемого контроллера в конкретном БП, а не от версий и/или ревизий стандарта АТХ и иже. Имею сказать, что переделать нормально и недорого, без знаний, хотя бы теоретических, и вложений минимальных, а также траты времени — не выйдет. Чаще всего, БП доведенный до ума, будет «золотым». Купите gophert в новой версии, который 30/5.
+
avatar
0
хочется подешевле и из того что есть на работе, списанное.
+
avatar
+1
хочется подешевле и из того что есть на работе, списанное.
Я не буду описывать весь цикл переделки, хотя бы потому что не знаю какой у вас контроллер в БП. Вскройте БП хотя бы, для начала. Смотрите/считайте: нужен ампервольтметр, замена всех конденсаторов в низковольтной части, пара энкодеров и разъемы под бананы. Это то, что будет нужно 100% (читайте минимально). Давайте подсчитаем, бюджетненько так: ампервольтметр 6-7 баксов (средне-паршивый, а более или менее нормальный все десять, а то и дороже), замена конденсаторов еще баксов 8-10, даже если менять на джамиконы какие-нибудь, энкодеры и разъемы — это еще баксов 5. Итого (возможно у вас что-то есть, плюс/минус округлил): 6 + 9 + 5 = 20 баксов. При этом нужны еще знания и БП получившийся, все равно, будет не очень таким. Нормальные комплектующие — это баксов 25-30, с учетом, что есть знания, радио «хлам» какой-никакой у вас в загашнике и иже. Типа паяльник, флюс, припой и прочее.

Не подумайте, что я «умничаю», упаси бог, да и отговорить вас не пытаюсь. Вскройте имеющиеся у вас блоки, выпишите названия контроллеров и погуглите, написав примерно следующее: «переделка компьютерного блока питания в лабораторный tl494». Без кавычек, а вместо tl494 пишите, что там у вас есть/стоит в БП. Также, вместо лабораторный можно попробовать написать регулируемый. И вот уже потом можно оценивать, а стоит ли вообще — это делать… Примерно так.
+
avatar
  • Ezheg
  • 11 июля 2019, 09:27
0
Вы ведь в курсе, что самостоятельно «Иже» это буква? А при использовании как слова, получается бред.

dic.academic.ru/searchall.php?SWord=ИЖЕ
+
avatar
0
Проще наверно некуда — www.youtube.com/watch?v=oGM5CUr5J44&t=696s
+
avatar
+1
Сам нашел куплю и пристрою к блоку питания, может еще переменный резик пристрою для плавной регулировки напряжения.

aliexpress.com/item/32891103974.html

И еще:
sdelaysam-svoimirukami.ru/3871-laboratornyy-istochnik-pitaniya-iz-bp-kompyutera.html
+
avatar
0
У выше указанного лота, не удобно ставит ограничение пот току, вот лучше поищите по названию B3603 в нём ограничение по току выставляется кнопками
Есть ещё вариант дорогие блоки DPS серии…