Показать сообщение отдельно
Старый 08.07.2018, 17:31   #18 (permalink)
derba
Member
 
Аватар для derba
 
Регистрация: 19.07.2017
Адрес: Украииа
Сообщений: 3,599
Сказал(а) спасибо: 50
Поблагодарили 5 раз(а) в 3 сообщениях
Репутация: 23905
По умолчанию

Еще насчет расчета подбором:
Вот пример, расчет контура методом генератора ударного возбуждения. И программа на Турбо Раскале. Тут используется модуль, который я прописал, без него программа не запустится, когда то прописал, оч удобно, и десятичный логарифм, и тригонометрические функции в градусах, и многое другое, чего нет в стандартном паскале, что упрощает написание программ. И тут несколько методов расчета добротности , самый точный - методом подбора (5 сторка снизу).
Цитата:
program udar_;
Uses crt,derba ;
label 1,2,3,4,111;
var
U1,U2,R,F,dt,C,L,Uc,Rl,i,r1,r2,U_1,U_2,U_3,t,U2_,n _,q,dK:real;
k,n,k1,nn:integer;
Procedure Kol;
Begin
t:=dt/1e11;
Uc:=10;

U_1:=1000;U_2:=999;U_1:=998;
n:=1; i:=0;
Dk:=0;
while n<=k do
begin
Dk:=dk+t;
i:=i+Uc*t/L;
Uc:=Uc-i*t/c;
Uc:=Uc-(Uc/R)*t/C;
U_3:=U_2; U_2:=U_1;U_1:=Uc;
If (U_3<U_2)and(U_1<U_2) then n:=n+1;



end;

textcolor (0);textbackground(15); clrscr;
Writeln('uc/u2=',Uc/U2:2:9,' R1=',R1:2:6,' R2=',R2:2:6);
end;

{-----}





Begin
textcolor (0);textbackground(15); clrscr;
Write(' ввести период 1 коледания мкСек=');
Readln(dt);
clrscr;
F:=1/(dt*1e-6);
3:;
Write(' ввести U1=');
Readln(U1);
clrscr;

Write(' ввести U2=');
Readln(U2_);
clrscr;

If U1<=U2_ then
begin
Writeln('Амплитуда первого должна быть дольше амплитуды посдедущего');
Writeln(' Повторим ввод ');
Goto 3;
end;

Write(' ввести число колебаний=');
111:;

Readln(k);
If K<2 then
Begin
clrscr;
Writeln(' Нужно не менее 2 колебаний, не возможно посчитать добротность');
Writeln;
Writeln(' ввести еще раз число колебаний=');
goto 111;
end;
U2:=U1/U2_;

n_:=x_Y(u2,1/k);
U2:=U1/n_;
nn:=0;

k1:=k;
K:=1;
clrscr;

Write(' ввести емкость конденсаторов мкф=');
Readln(c);
c:=C*1e-6;
L:=L_CF(c,f);
clrscr;

4:;
Rl:=2*Pi*F*l;

Write(' Число колеб=',K1,' U1=',U1:2:2,' U2=',U2_:2:2,' L=',L*1e6:2:2,' МкГн');


if (F<1000) then
Writeln(' F*=',F:2:3,'гц');
if (F>=1000) and (F<1e6) then
Writeln(' F*=',F/1000:2:3,'кгц');
if (F>=1e6) then
Writeln(' F*=',F/1e6:2:3,'мгц');
Write(' RL=',Rl:2:4);
U2:=10*U2/U1;
R:=Rl;
R2:=10*1/(1-U2/10);

r1:=0; R2:=1e6*rL;

1:;
Kol;


if (Uc/U2)<0.9999999 then
begin
R1:=r;
R:=(R2+R)/2;

goto 1;
end;


if (Uc/U2)>1.0000001 then
begin
R2:=r;
R:=(R1+R)/2;

goto 1;
end;

clrscr;
for j:=1 to 5 do

Writeln;

Writeln(' Введено');

Writeln;


q:=R/Rl;
Rl:=2*Pi*F*l;

Write(' Число колеб=',K1,' U1=',U1:2:2,' U2=',U2_:2:2);
Write(' C=',C*1e9:2:2,'нФ');
Writeln(' dT=',(1/F)*1e6:2:4,' мксек'); Write(' что соответствует ');

if (F<1000) then
Writeln(' F=',F:2:3,'гц');
if (F>=1000) and (F<1e6) then
Writeln(' F =',F/1000:2:3,'кгц');
if (F>=1e6) then
Writeln(' F=',F/1e6:2:6,'мгц');

F:=1/(dk);
for j:=1 to 5 do

Writeln;

Writeln(' Рачитано');
Writeln;

L:=L/x_y(1-1/Q,0.5);
Writeln(' Частота резонанса расчитанная с бесконечной добротностью=',1/(2*pi*x_y(L*C,0.5)):2:3,'гц' );

Writeln(' L измеренное=',L*1e6:2:6,'МкГн');



Writeln(' Сопротивление индуктивное=',Rl:2:3,' Эквивалент нагрузки=',R:2:3);
Writeln(' Q=рачитана методом подбора=',R/Rl:2:6);
Writeln(' Q=расчитана по формуле=(Pi*k1)/(ln(u1/U2_)))=',((Pi*k1)/(ln(u1/U2_))):2:4);
Writeln(' Q=расчитана по формуле=R*sqrt(c/L)=',R*sqrt(c/L):2:4);

readkey;
end.
Вложения
Тип файла: zip !.ZIP (5.9 Кб, 9 просмотров)
derba вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070