Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КП ТОЭ Илюхина КИМ весна 2008-подгон.doc
Скачиваний:
3
Добавлен:
01.03.2025
Размер:
447 Кб
Скачать
☆

7.Программа расчёта и анализ динамических характеристик системы

Основными динамическими характеристиками электромеханической системы являются переходные характеристики по току в обмотке и перемещению якоря электромагнита. Расчёт этих характеристик сводится к решению нелинейной математической модели:

U =

В математической модели используются следующие обозначения: - координата и скорость якоря, - движущая сила, - сила нагрузки, -коллекторная ЭДС, i – ток в обмотке, В – индукция в минимальном сечении магнитопровода , m – масса подвижных частей, С – жёсткость пружины, h – коэффициент вязкого трения, - вихревой ток, - сопротивление обмотки и эквивалентные сопротивления путей вихревых токов, - проводимость рассеяния, - напряжение стабилизации стабилитрона, - сопротивление открытого и закрытого транзистора. Для получения динамических характеристик необходимо, пользуясь методикой и алгоритмами, составить программу и расчитать переходные процессы по току в обмотке электромагнита, перемещение якоря, скорости перемещения якоря, индукции в минимальном сечении и движущей силе в зависимости от времени переключения транзистора выходного каскада усилителя мощности.

Используя полученные данные и при необходимости повторяя потребное число раз расчёт динамических характеристик, подобрать пружину, используя методику, изложенную выше.

Программа:

unit Unit2;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, TeEngine, Series, ExtCtrls, TeeProcs, Chart, StdCtrls, math,

ExtDlgs;

type

TForm1 = class(TForm)

Splitter1: TSplitter;

IOnChart: TChart;

IOnSeries: TFastLineSeries;

XOnChart: TChart;

XOnSeries: TFastLineSeries;

TimePanel: TPanel;

IOffChart: TChart;

IOffSeries: TFastLineSeries;

XOffChart: TChart;

XOffSeries: TFastLineSeries;

procedure FormCreate(Sender: TObject);

private

U_pitan,R,m,W,l_stal,S,dmin,dmax,C,r_tr_otkr,F_nagr,R_paraz,Uke,r_tr,U_stab,d,alfa:extended;

function G_zazor(delta:extended):extended;

function F_dvig(i,delta:extended):extended;

function dG_dd(delta:extended):extended;

function Ba(H:extended):extended;

function dH_dB(H:extended):extended;

function H(i,delta:extended):extended;

procedure ShowDynamic;

public

{ Public declarations }

end;

const m0=1.257e-6;

Hp: array [0..42] of extended =

(0, 29.4, 41.2, 58.2, 64.7, 76.4, 82.3,

88.2, 96.5, 100, 114, 129, 133,

142, 155, 170, 185, 200, 218,

235, 255, 285, 300, 400, 520,

625, 800, 1000, 1200, 1400, 1720,

2000, 2500, 5000, 8000, 10000, 11500,

19000, 25500, 29000, 31000, 35000, 45000);

var

Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.G_zazor(delta:extended):extended;

begin

G_zazor:=m0*((pi*sqr(d)/4/delta/sqr(sin(0.5*alfa)))-(0.157/sqr(sin(0.5*alfa))-0.75)*d);

end;

function TForm1.dG_dd(delta:extended):extended;

var dG:extended;

begin

dG:=m0*(pi*sqr(d)/4/sqr(delta)/sqr(sin(0.5*alfa)));

dG_dd:=dG/sqr(G_zazor(delta));

end;

function TForm1.Ba(H:Extended):extended;

var i:integer;

begin

i:=0;

while Hp[i]<H do inc(i);

if i=0 then Ba:=m0*H else

Ba:=0.05*((H-Hp[i-1])/(Hp[i]-Hp[i-1])+i-1);

end;

function TForm1.H(i,delta:extended):extended;

function Um(H:extended):extended;

begin

Um:=H*l_stal+Ba(H)*S*(1/G_zazor(delta)+R_paraz);

end;

const e=1;

var h1,h2,hm,u1,u,MDS:extended;

begin

MDS:=i*W;

h1:=0;

h2:=40000;

u1:=Um(h1)-MDS;

while h2-h1>e do

begin

hm:=(h2+h1)/2;

u:=Um(hm)-MDS;

if sign(u1)<>sign(u) then

h2:=hm

else

begin

h1:=hm;

u1:=u;

end;

end;

H:=hm;

end;

function TForm1.dH_dB(H:extended):extended;

var i:integer;

begin

i:=0;

while Hp[i]<H do inc(i);

if i=0 then dH_dB:=1/m0 else

dH_dB:=(Hp[i]-Hp[i-1])/0.05;

end;

function TForm1.F_dvig(i,delta:extended):extended;

var F:extended;

begin

F:=Ba(H(i,delta))*S;

F_dvig:=F*F/2*dG_dd(delta);

end;

procedure TForm1.ShowDynamic;

type TState=(sX,sV,sI);

TStateVector=array [TState] of extended;

var prev,cur:TStateVector;

tmax,t,dt,delta,xmax,Ek,Bc,Hc,t_srab,t_otp,E,U_tr:extended;

n,i:integer;

st:TState;

f1,f2:textfile;

begin

assignfile(f1,'Dinamica_srab.res');

assignfile(f2,'Dinamica_otpusk.res');

rewrite(f1);

rewrite(f2);

Ek:=U_pitan;

n:=10000;

tmax:=0.2;

dt:=tmax/n;

xmax:=dmax-dmin;

IOnSeries.Clear;

XOnSeries.Clear;

IOnChart.LeftAxis.Maximum:=U_pitan/R*1.1;

IOnChart.LeftAxis.Minimum:=-U_pitan/R/10;

//Н.У.

prev[sX]:=0;

prev[sV]:=0;

prev[sI]:=0;

t:=0;

t_srab:=0;

writeln(f1,t:3:5,' ',prev[sI]:3:7,' ',prev[sX]:3:7);

for i:=0 to n do

begin

cur[sX]:=prev[sX]+dt*prev[sV];

delta:=dmax-prev[sX];

cur[sV]:=prev[sV]+dt*(F_dvig(prev[sI],delta)-prev[sX]*C-F_nagr)/m;

if cur[sX]<=0 then

begin

cur[sX]:=0;

cur[sV]:=max(0,cur[sV]);

end

else if cur[sX]>=xmax then

begin

cur[sX]:=xmax;

cur[sV]:=min(0,cur[sV]);

if t_srab=0 then t_srab:=t;

end;

Hc:=H(prev[sI],delta);

Bc:=Ba(Hc);

cur[sI]:=prev[sI]+dt*((Ek-prev[sI]*R-Uke)*(dH_dB(Hc)*l_stal+S*(1/G_zazor(delta)+R_paraz))-Bc*W*S*S*prev[sV]*dG_dd(delta))/W/W/S;

IOnSeries.AddXY(t,cur[sI],'');

XOnSeries.AddXY(t,cur[sX],'');

writeln(f1,t:3:5,' ',cur[sI]:3:7,' ',cur[sX]:3:7);

for st:=sX to sI do prev[st]:=cur[st];

t:=t+dt;

end;

IOffSeries.Clear;

XOffSeries.Clear;

IOffChart.LeftAxis.Maximum:=U_pitan/R*1.1;

IOffChart.LeftAxis.Minimum:=-U_pitan/R/10;

//Н.У.

prev[sX]:=xmax;

prev[sV]:=0;

prev[sI]:=U_pitan/R;

t:=0;

t_otp:=0;

writeln(f2,t:3:5,' ',prev[sI]:3:7,' ',prev[sX]:3:7);

for i:=0 to n do

begin

cur[sX]:=prev[sX]+dt*prev[sV];

delta:=dmax-prev[sX];

cur[sV]:=prev[sV]+dt*(F_dvig(prev[sI],delta)-prev[sX]*C-F_nagr)/m;

if cur[sX]<=0 then

begin

cur[sX]:=0;

cur[sV]:=max(0,cur[sV]);

if t_otp=0 then t_otp:=t;

end

else if cur[sX]>=xmax then

begin

cur[sX]:=xmax;

cur[sV]:=min(0,cur[sV]);

end;

Hc:=H(prev[sI],delta);

Bc:=Ba(Hc);

if abs(prev[sI]*r_tr-Ek)<U_stab then

begin

E:=U_pitan;

U_tr:=prev[sI]*r_tr;

end

else

begin

E:=-U_stab;

U_tr:=0;

end;

cur[sI]:=prev[sI]+dt*((E-prev[sI]*R-U_tr)*(dH_dB(Hc)*l_stal+S*(1/G_zazor(delta)+R_paraz))-Bc*W*S*S*prev[sV]*dG_dd(delta))/W/W/S;

IOffSeries.AddXY(t,cur[sI],'');

XOffSeries.AddXY(t,cur[sX],'');

writeln(f2,t:3:5,' ',cur[sI]:3:7,' ',cur[sX]:3:7);

for st:=sX to sI do prev[st]:=cur[st];

t:=t+dt;

end;

TimePanel.Caption:='Время срабатывания '+FormatFloat('0.000',t_srab)+' с.; время отпускания '+FormatFloat('0.000',t_otp)+' с.';

closefile(f1);

closefile(f2);

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

W:=2171;

l_stal:=0.071;

d:=0.04;

alfa:=45*pi/180;

S:=1.655e-3;

U_pitan:=24;

dmin:=0.006;

dmax:=0.01;

C:=12500;

r_tr_otkr:=0;

F_nagr:=75;

m:=0.001;

R:=52.473;

r_tr:=125000;

R_paraz:=0.0005/(m0*pi*d*c);

Uke:=1;

U_stab:=270;

ShowDynamic;

end;

end.

График срабатывания электромагнита и возврата электромагнита в исходное состояние:

Время срабатывания = 0,15 с ; время отпускания = 0,075 с.