- •Аннотация
- •Содержание
- •1.Введение.
- •2.Выбор конструктивного типа и формы стопа.
- •3.Проектный расчет
- •1. Определение основных размеров электромагнита:
- •2. Остальные размеры магнитопровода:
- •3. Определение параметров катушки:
- •5.Расчёт винтовой пружины.
- •1. Подсчитаем величины, необходимые для пользования номограммой:
- •4.Поверочный расчет.
- •6.Программа расчёта и анализ статических характеристик системы
- •7.Программа расчёта и анализ динамических характеристик системы
- •8. Выбор схемы и расчет усилителя мощности
- •8.1 Расчет усилителя мощности
- •8.2 Расчет источника питания
- •9.Разработка конструкции электромеханической системы
- •Список литературы
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 с.
