Автор Тема: Программа для расчёта элементов DC/DC преобразователя.  (Прочитано 166 раз)

decoder2000

  • приватная
  • Старожил
  • *****
  • Сообщений: 366
  • Саша
Расчёт элементов DC/DC преобразователя.
Не путаем с расчётами для LDO.
У LDO напряжение Vref приложено к выводам Vout и Adj,
а у DC/DC напряжение Vfb между этим же выводом и GND.

R1,R2 делитель , напряжение снимается с выхода DC/DC и подаётся на Vfb.
R1 подключён между выходом и Vfb, R2 между Vfb и GND.

Расчёты производятся по формулам:
VFB = VOUT * R2 / (R1 + R2)
VOUT = VFB * (R1 + R2) / R2
R1 = R2*(Vout/Vfb-1)
R2 = R1/(Vout/Vfb-1)
Водим значения R1, R2, Vout, Vfb, вместо неизвестного значения вводим 0.

Исходник на PascalABC:

program dc_dc;
//расчёт элементов DC/DC преобразователя
//  Vfb,Vout
//  R1,R2 делитель , напряжение снимается с выхода dc/dc и подаётся на Vfb
//  R1 подключён на выход, R2 - на GND
//  VFB = VOUT * R2 / (R1 + R2)
//  VOUT = VFB * (R1 + R2) / R2
//  R1 = R2*(Vout/Vfb-1)
//  R2 = R1/(Vout/Vfb-1)

var
  r1, r2, vfb, vout: real;
procedure find_r1 (const r2,vout,vfb:real);
begin
  writeln('R1 = R2*(Vout/Vfb-1) = ',vout*r2/vfb-r2:3:2, ' Om');
end;
procedure find_r2(const r1,vout,vfb:real);
begin
writelnformat('R2 = R1/(Vout/Vfb-1) = {0} / ( {1} / {2}) - 1 ) = {3} Om', R1, vout, vfb, r1/(vout/vfb-1));
end;
procedure find_vout(const r1,r2,vfb:real);
begin
writeln('Vout = Vfb*(R1+R2)/R2 = ',vfb * (r1 + r2) / r2:3:2, ' V');
end;
procedure find_vfb(const r1,r2,vout:real);
begin
writeln('Vfb = Vout*R2/(R1+R2) = ', vout*r2/(r1+r2):3:2, ' V');
end;
// основная программа
begin
  while true do
  begin
    //  vfb:=1.25;
    //  r2:=12.76;
    writeln('Расчёт элементов DC/DC преобразователя.');
    writeln('R1,R2 делитель , напряжение снимается с выхода dc/dc и подаётся на Vfb.');
    writeln('R1 подключён к выходу, R2 - на GND.');
    writeln('Введите значения R1,R2,Vout,Vfb.');
    writeln('Вместо неизвестного значения введите 0.');
    read(r1, r2, Vout, Vfb);
    writeln('R1=', r1, ', R2=', r2, ', VOUT=', vout, ', Vfb=', vfb);
   
    if r1 = 0 then find_r1(r2,vout,vfb )
    else if r2 = 0 then find_r2(r1,vout,vfb)
    else if vout = 0 then find_vout(r1,r2,vfb)
    else if vfb = 0 then find_vfb(r1,r2,vout)
    else begin writeln('Введены все значения, проверка:');writeln('VOUT =  vfb * (r1 + r2) / r2 = ', vfb, ' * (', R1, ' + ', R2, ') / ', R2, ') = ', vfb * (r1 + r2) / r2:3:2, 'V');end;
    writeln();writeln();
  end;
end.
« Последнее редактирование: 14 Ноября 2017, 14:12:06 от decoder2000 »