Как расчитать тороидальный трансформатор
Использована методика Николаенко М.Н., опубликованная в книге "Секреты радиолюбителя-конструктора" в 2006г.
Программа на C++
Заголовочный файл tr-trans.h
#ifndef TORTRANS
#define TORTRANS
//// Расчет тороидального трансформатора
class TorTrans
{
public:
TorTrans ();
virtual ~TorTrans();
int raschet();
int print_data();
static const float pi=3.14;
float nu; //// КПД трансформатора
float U1; //// напряжение питания, В
float U2; //// напряжение нагрузки, В
float U3; //// напряжение нагрузки, В
float U4; //// напряжение нагрузки, В
float U5; //// напряжение нагрузки, В
float U6; //// напряжение нагрузки, В
float r1; //// активное сопротивление первичной обмотки, Ом
float r2; //// активное сопротивление вторичной обмотки, Ом
float r3; //// активное сопротивление вторичной обмотки, Ом
float r4; //// активное сопротивление вторичной обмотки, Ом
float r5; //// активное сопротивление вторичной обмотки, Ом
float r6; //// активное сопротивление вторичной обмотки, Ом
float I1; //// ток первичной обмотки , А
float I2; //// ток вторичной обмотки , А
float I3; //// ток вторичной обмотки , А
float I4; //// ток вторичной обмотки , А
float I5; //// ток вторичной обмотки , А
float I6; //// ток вторичной обмотки , А
float A; //// плотность тока в обмотках,А/мм2
//*размеры сердечника трансформатора*//
float Pgb;////габаритная мощность тр-ра, Вт
float D; //// наружный диаметр сердечника, см
float d; ////внутренний диаметр сердечника, см
float h; //// высота сердечника, см
float lc; //// средняя длина магнитной силовой линии
float lo; //// расчетная средняя длина витка
bool is_hot_steel; //// горячекатанная сталь
float Ks; //// коэф.заполнения сердечника железом
float Kok;//// коэф.заполнения окна медью
//* выходные данные *//
//* условия пpuмeHuмocти даНН020 железа есть выполнение соотношения
* tau_el <= tau_ konstr
* ***********************************//
float tau_el; //* электрическая постоянная времени транса *//
float tau_konstr;
int N1; //// число витков первичной обмотки
int N2,N3,N4,N5,N6; //// число витков вторичной обмотки
float d1,d2,d3,d4,d5,d6; //// диаметры проводов первичной и вторичной обмоток,мм
float Sc; //* площадь сечения керна сердечника, см2 *//
float S; //*расчетная площадь сечения керна сердечника, см2 *//
float So; //* площадь сечения окна сердечника, см2 *//
float n2; //* квадрат коэффициента трансформации *//
float ww1; //* число витков на вольт горячекатанной стали *//
float ww2; //* число витков на вольт холоднокатанной стали *//
//* эквивалентное сопротивление выходноса каскада на трансе *//
float R_equiv;
float L1; //* требуемая индуктивность nерв. обмотки *//
private:
int raschet0(); //// начальные присвоения
};
#endif
Файл tr-trans.cpp
#include 'stdio.h'
#include 'math.h'
#include 'tortrans.h'
TorTrans::TorTrans() {
nu=0.92; // КПД трансформатора
U1=220.0; // напряжение питания, В
U2=12.6; // напряжение нагрузки, В
U3=0; // напряжение нагрузки, В
U4=0; // напряжение нагрузки, В
U5=0; // напряжение нагрузки, В
U6=0; // напряжение нагрузки, В
r1; // активное сопротивление первичной обмотки, Ом
r2; // активное сопротивление вторичной обмотки, Ом
I1; // ток первичной обмотки , А
I2=1.0; // ток вторичной обмотки , А
A=4; // плотность тока в обмотках,А/мм2
/*еры сердечника трансформатора*/
D=8.0; // наружный диаметр сердечника, см
d=5.0; //внутренний диаметр сердечника, см
h=2.0; // высота сердечника, см
is_hot_steel=true; // горячекатанная сталь
Ks=0.9; // коэф.заполнения сердечника железом
Kok=0.3;// коэф.заполнения окна медью
//mu=250;
raschet0();
}
TorTrans::~TorTrans() { }
int TorTrans::raschet() {
printf("nНачало расчета...n");
raschet0();
float w;//число виктов на вольт
if(is_hot_steel) w=ww1;
else w=ww2;
N1=U1*w;
N2=U2*w*1.03;
N3=U3*w*1.03;
N4=U4*w*1.03;
N5=U5*w*1.03;
N6=U6*w*1.03;
/* расчитываем диаметры проводов */
d1=1.13*sqrt(I1/A);
d2=1.13*sqrt(I2/A);
d3=1.13*sqrt(I3/A);
d4=1.13*sqrt(I4/A);
d5=1.13*sqrt(I5/A);
d6=1.13*sqrt(I6/A);
r1=0.0175/((d1*d1*pi)/4)*N1*lo/100;
r2=0.0175/((d2*d2*pi)/4)*N2*lo/100;
r3=0.0175/((d3*d3*pi)/4)*N3*lo/100;
r4=0.0175/((d4*d4*pi)/4)*N4*lo/100;
r5=0.0175/((d5*d5*pi)/4)*N5*lo/100;
r6=0.0175/((d6*d6*pi)/4)*N6*lo/100;
//r2=r1*n2*(1.0-A)/A;
printf("nПараметры обмоток:n");
Kok=(d1*d1/4*pi*N1+d2*d2/4*pi*N2+d3*d3/4*pi*N3+d4*d4/4*pi*N4
+d5*d5/4*pi*N5+d6*d6/4*pi*N6)*(1e-2)/So;
printf("tКоэффициент заполнения окна медью : %.3fn",Kok);
printf("tCредняя длина витка : %.1f смn", lo);
printf("ntr1 = %.2f Ом,tr2 = %.2f Омn",r1,r2);
if(U3>0 || U4>0) {
printf("tr3 = %.2f Ом,tr4 = %.2f Омn",r3,r4);
}
if(U5>0 || U6>0) {
printf("tr5 = %.2f Ом,tr6 = %.2f Омn",r5,r6);
}
printf("ntN1 = %d ,tN2 = %d n",N1,N2);
if(N3>0 || N4>0) {
printf("tN3 = %d ,tN4 = %d n",N3,N4);
}
if(N5>0 || N6>0) {
printf("tN5 = %d ,tN6 = %d n",N5,N6);
}
printf("ntd1 = %.2f мм,td2 = %.2f ммn",d1,d2);
if(N3>0 || N4>0) {
printf("td3 = %.2f мм,td4 = %.2f ммn",d3,d4);
}
if(N5>0 || N6>0) {
printf("td5 = %.2f мм,td6 = %.2f ммn",d5,d6);
}
//delta=9.0e-4*N1*I0;
//printf("tЗазор при сборке сердечника : %.2f ммn",delta);
/* рассчитываем заполнение окна */
float l1=lo*N1/100;
float l2=lo*N2/100;
float l3=lo*N3/100;
float l4=lo*N4/100;
float l5=lo*N5/100;
float l6=lo*N6/100;
printf("nРасход провода:n");
printf("t%.2f = %.2f м t%.2f = %.2f мn",d1,l1,d2,l2);
if(N3>0 || N4>0) {
printf("t%.2f = %.2f м t%.2f = %.2f мn",d3,l3,d4,l4);
}
if(N5>0 || N6>0) {
printf("t%.2f = %.2f м t%.2f = %.2f мn",d5,l5,d6,l6);
}
printf("n");
return 0;
}
int TorTrans::raschet0() {
Pgb=(U2*I2+U3*I3+U4*I4+U5*I5+U6*I6)/nu;
I1=1.1*(Pgb/U1);
//r1=(1-nu)*Ra;
lc=((D-d)/4+d)*pi;;
Sc=h*(D-d)/2;//*Ks;
So=pi*d*d/4;
lo=((D-d)+h*2+d); // todo расчетная средняя длина витка
if(Pgb<=10) {
ww1=41/Sc;
ww2=38/Sc;
S=sqrt(Pgb);
A=4.5;
nu=0.8;
}
if(Pgb<=30 && Pgb>10) {
ww1=36/Sc;
ww2=32/Sc;
S=sqrt(Pgb)/1.1;
A=4.0;
nu=0.9;
}
if(Pgb>30 && Pgb<=50) {
ww1=33.3/Sc;
ww2=29/Sc;
S=sqrt(Pgb)/1.2;
A=3.5;
nu=0.92;
}
if(Pgb>50 && Pgb<=120) {
ww1=32/Sc;
ww2=28/Sc;
S=sqrt(Pgb)/12;
A=3.0;
nu=0.95;
}
if(Pgb>120) {
printf("n Мощность трансформатора = %.1f ватт ",Pgb);
printf("n Это вне компетенции данной программыn");
return 1;
}
if(S>Sc) {
printf("n Сердечник д.б. не менее %.2f см2",S);
return 1;
}
if(d
int TorTrans::print_data() {
printf("nИсходные данные: n");
printf("tНапряжение первичной обмотки = %.1f Вn",U1);
printf("tToк первичной обмотки = %.3f А n", I1);
printf("tНапряжение вторичной обмотки = %.1f Вn",U2);
printf("tToк вторичной обмотки = %.3f А n", I2);
if(U3>0) {
printf("tНапряжение обмотки №3 = %.1f Вn",U3);
printf("tToк обмотки №3 = %.3f А n", I3);
}
if(U4>0) {
printf("tНапряжение обмотки №4 = %.1f Вn",U4);
printf("tToк обмотки №4 = %.3f А n", I4);
}
if(U5>0) {
printf("tНапряжение обмотки №5 = %.1f Вn",U5);
printf("tToк вторичной обмотки №5 = %.3f А n", I5);
}
if(U6>0) {
printf("tНапряжение обмотки №6 = %.1f Вn",U6);
printf("tToк обмотки №6 = %.3f А n", I6);
}
printf("nПараметры сердечника трансформатора: n");
printf("tis_hot_steel = %sn",((is_hot_steel)?"true (Сталь горячекатанная)":"false (Сталь холоднокатанная)"));
printf("tСердечник : К%dX%dX%d n", (int)(D*10),(int)(d*10),(int)(h*10));
printf("tСечение окна = %.2f(см) и железа = %.2f(см)n",So, Sc);
printf("tСредняя длина магнитной силовой лuнuu : %.1f смn", lc);
return 0;
}
Файл main.c
#include 'stdio.h'
#include 'math.h'
#include 'tortrans.h'
#include 'iostream'
#include 'charint.h'
#include 'string.h'
int main(int argc, char *argv[]) {
printf("\nИспользование : w -значение параметр...");
printf("\n\tпример : w -Un 12.6 -In 3.5 -h 5.0\n");
if (argc>0) {
if (argc%2==0) {
printf("\nневерное количество параметров : %d\n",argc);
return 1;
}
}
TorTrans tr;
for (int i=(argc-1)/2;i>0;i-=1) {
printf("\n i=%d agr=%s",i,argv[i*2-1]);
if (strcmp(argv[i*2-1],"-is_hot_steel")==0) {
tr.is_hot_steel=false;
continue;
}
CharInt chi(argv[i*2]);
if (strcmp(argv[i*2-1],"-U1")==0) {
;tr.U1=(float)chi.dfloat;
;continue;
}
if (strcmp(argv[i*2-1],"-U2")==0) {
;tr.U2=(float)chi.dfloat;
;continue;
}
if (strcmp(argv[i*2-1],"-I2")==0) {
;tr.I2=(float)chi.dfloat;
;continue;
}
if (strcmp(argv[i*2-1],"-U3")==0) {
tr.U3=(float)chi.dfloat;
continue;
}
if (strcmp(argv[i*2-1],"-I3")==0) {
tr.I3=(float)chi.dfloat;
continue;
}
if (strcmp(argv[i*2-1],"-U4")==0) {
tr.U4=(float)chi.dfloat;
continue;
}
if (strcmp(argv[i*2-1],"-I4")==0) {
tr.I4=(float)chi.dfloat;
continue;
}
if (strcmp(argv[i*2-1],"-U5")==0) {
tr.U5=(float)chi.dfloat;
continue;
}
if (strcmp(argv[i*2-1],"-I5")==0) {
tr.I5=(float)chi.dfloat;
continue;
}
if (strcmp(argv[i*2-1],"-U6")==0) {
tr.U6=(float)chi.dfloat;
continue;
}
if (strcmp(argv[i*2-1],"-I6")==0) {
tr.I6=(float)chi.dfloat;
continue;
}
if (strcmp(argv[i*2-1],"-D")==0) {
tr.D=(float)chi.dfloat;
continue;
}
if (strcmp(argv[i*2-1],"-d")==0) {
tr.d=(float)chi.dfloat;
continue;
}
if (strcmp(argv[i*2-1],"-h")==0) {
tr.h=(float)chi.dfloat;
continue;
}
}
tr.raschet();
return 0;
}
Makefile
TARGET = calc-tor120transf
CHILD = tortrans
LIB = charint
CC = g++
$(TARGET): $(LIB).h $(LIB).cpp $(CHILD).h $(CHILD).cpp main.cpp
$(CC) -o $(TARGET) $(LIB).h $(LIB).cpp $(CHILD).h $(CHILD).cpp main.cpp
install: $(TARGET)
mv $(TARGET) /usr/local/bin/
uninstall: $(TARGET)
rm lampout1trans /usr/local/bin/$(TARGET)
clear:
rm *.o
Эпилог
Функции программы документированы, переменные имеют доступные имена.
Но если понадобится помощь -- обращайтесь