Смекни!
smekni.com

Магнитоэлектрический бесконтактный генератор с импульсным регулятором напряжения (стр. 15 из 15)

Применение электронной системы подачи топлива, автоматическое управление тормозами , фрикционами машины и другие усовершенствования имеющиеся в современных легковых автомобилях находят применение и в более тяжелых транспортных машинах. Использование же современной микропроцессорной техники затруднено на существующих источниках питания. Данная разработка открывает такую возможность.


Список сокращений

АМ - асинхронная машина,

АТ - автотракторный,

БСМ - бесконтактная синхронная машина,

БЭМ - бесконтактная электрическая машина,

ВВ - вращающийся выпрямитель,

ГУ - генераторная установка,

ИС - интегральная схема,

ИНР - интегральный регулятор напряжения,

ИМ - индукторная машина,

МС - микросхема,

НИР - научно-исследовательская работа,

ПМ - постоянный магнит,

РЗМ - редкоземельные материалы,

ТЭО - технико-экономические показатели,

ФУ - функциональный узел,

ЭРЭ - элемент радиоэлектронный.


Приложение

Текст программы моделирования

Uses Graph,Crt;

{-----Программма SHIM-OC.PAS-----}

Const

numur = 1;

tochperiod:integer=100;

maxtoch=1;

graphtoch:integer=1;

Linestyle=0;

Pattern=0;

Thickness=1;

Type

perem=array[1..numur] of real;

grmas=array[0..640] of real;

CharactMas=array[1..maxtoch] of real;

var

GMaxX,GMaxY,ZP:integer;

r,L,tpil,kpil,U,Upil,Uupr,Uoc,Uzad:real; { <-- Начальныепеременнные}

Uvx,Kyc,q:integer; { <-- длярасчета. }

t,h,K,L1,per:real;

m1,t1,i,K1,n,gr,gr1,numtoch,Tn:integer;

y,d,p,s:perem;

Text,st:string;

y1g,tg,Ug,Uzadg,Upilg,Uuprg:grmas;

c,ch:char;

mode:integer;

Procedure SetGraphWindow(x1,y1,x2,y2,ZeroPos:real);

begin

GMaxX:=round(abs(x2-x1)* GetMaxX);

GMaxY:=round(abs(y2-y1)* GetMaxY);

ZP:=round(GMaxY*ZeroPos);

SetViewPort(round(x1*GetMaxX),round(y1*GetMaxY),

round(x2*GetMaxX),round(y2*GetMaxY),ClipOn);

end;

procedure ReDraw;

begin

ClearViewPort;

SetColor(GetMaxColor);

SetBkColor(Black);

Line(0,0,0,GMaxY);

Line(0,ZP,GMaxX,ZP);

Line(0,0,3,7);

Line(GMaxX,ZP,GMaxX-6,ZP-3);

Line(GMaxX,ZP,GMaxX-6,ZP+3);

OutTextXY(627,67,'t');

end;

procedure Start;

var gd,gm:integer;

begin

gd:=Detect;

InitGraph(gd,gm,'');

end;

procedure DrawGraf(var y:grmas; MaxY:real; MX,color:integer);

var i:integer;

bg:real;

begin

if ZP>=(GMaxY div 2) then bg:=MaxY/ZP else bg:=MaxY/(GMaxY-ZP);

SetColor(Color);

MoveTo(1*MX,ZP-round(y[0]/bg));

for i:=1 to numtoch div (graphtoch+1) do

LineTo(i*MX,ZP-round(y[i]/bg));

end;

procedure DrawPeriod(var y:grmas; MaxY:real; MX,color:integer);

var i,j:integer;

bg:real;

begin

if ZP>=(GMaxY div 2) then bg:=MaxY/ZP else bg:=MaxY/(GMaxY-ZP);

SetColor(Color);

MoveTo(0*MX,ZP-round(y[0]/bg));

j:=1;

for i:=1 to numtoch div (graphtoch+1) do

if j > (tochperiod div (graphtoch+1)) then

begin

MoveTo(0*MX,ZP-round(y[i]/bg));

j:=1;

end

else

begin

LineTo(j*MX,ZP-round(y[i]/bg));

j:=j+1;

end;

end;

procedure OutPer(Per:real;XX,YY:integer;st1:string);

var st:string;

Per1:Longint;

begin

Per1:=Round(Per);

str(Per1,st);

OutTextXY(XX,YY,St);

OutTextXY(XX-40,YY,St1);

end;

procedure runge(i,n:integer;h:real;var t:real;var p,s,d,y:perem);

var j:integer;

begin

case i of

1 : begin

for j:=1 to n do begin

s[j]:=y[j];

p[j]:=d[j];

y[j]:=s[j]+0.5*h*d[j];

end;

t:=t+0.5*h;

end;

2 : begin

for j:=1 to n do begin

p[j]:=p[j]+2.0*d[j];

y[j]:=s[j]+0.5*h*d[j];

end;

end;

3 : begin

for j:=1 to n do begin

p[j]:=p[j]+2.0*d[j];

y[j]:=s[j]+h*d[j];

end;

t:=t+0.5*h;

end;

4 : for j:=1 to n do

y[j]:=s[j]+(p[j]+d[j])*h/6.0;

end; {case}

end;

function Uimp(t1,tpil,kpil,Uupr:real;Uvx,tochperiod:integer):integer;

begin

tpil:=(t1-(tochperiod*trunc(t1/tochperiod)));

Upil:=kpil*tpil;

if Uupr>Upil then Uimp:=Uvx else Uimp:=0;

end;

{-------------------Телопрограммы--------------------------}

begin

Repeat

K:=0; K1:=1;

Writeln('Ввод q ?');

Readln(q);

Writeln('Ввод Uzad ?');

Readln(Uzad);

Writeln('Ввод Uvx ?');

Readln(Uvx);

Writeln('Ввод Kyc ?');

Readln(Kyc);

Writeln('Ввод количества периодов Tn ?');

Readln(Tn);

Repeat

per:=0.00005;t:=0;y[1]:=0;numtoch:=Tn*100;r:=1;

{---Ввод изменяемых начальных параметров ШИМ-II---}

Upil:=0;Uupr:=0;Uoc:=0;kpil:=q/tochperiod;L1:=0.0002;

repeat

tg[0]:=t;

y1g[0]:=y[1];

Ug[0]:=U;

Upilg[0]:=Upil;

Uuprg[0]:=Uupr;

Uzadg[0]:=Uzad;

h:=per/tochperiod;

graphtoch:=numtoch div 640;

gr:=1;

gr1:=graphtoch;

TextMode(co80);

for t1:=1 to numtoch do begin

U:=Uimp(t1,tpil,kpil,Uupr,Uvx,tochperiod);

for i:=1 to 4 do begin

d[1]:=(U-(y[1]*r))/L1;

runge(i,numur,h,t,p,s,d,y);

end;

Uoc:=(y[1]*r);

Uupr:=(Uzad-Uoc)*Kyc;

if gr1>0 then gr1:=gr1-1

else

begin

tg[gr]:=t;

y1g[gr]:=y[1];

Ug[gr]:=U;

Uzadg[gr]:=Uzad;

Upilg[gr]:=Upil;

Uuprg[gr]:=Uupr;

gr1:=graphtoch;

gr:=gr+1;

end;

writeln(t:4:3);

end;

{----- Постpоение гpафиков ----}

start;

SetGraphWindow(0,0,1,1/3,0.5);

ReDraw;

DrawGraf(Ug,110,1,White);

OutPer(Tn,530,90,'N=');

OutPer(Uvx,530,110,'Uвх=');

OutPer(Kyc,530,130,'Kyc=');

OutTextXY(5,1,'Uиэ');

SetGraphWindow(0,1/3,1,2/3,0.5);

ReDraw;

DrawGraf(y1g,50,1,White);

OutTextXY(5,1,'Iвых');

SetGraphWindow(0,2/3,1,1,0.5);

ReDraw;

DrawGraf(Uuprg,35,1,White);

DrawGraf(Upilg,35,1,LightGray);

DrawGraf(Uzadg,35,1,White);

OutTextXY(5,1,'Uпил,Uзад,Uупр');

repeat

c:=readkey;

case c of

' ':ReDraw;

't','T': begin

mode:=GetGraphMode;

RestoreCRTmode;

Repeat

Writeln('Step ?');

Readln(m1);

Until m1>0;

t1:=0;

n:=0;

repeat

if (t1 mod m1)=0 then

begin

writeln('t=',tg[t1]:7:5,' Iвых=',y1g[t1]:7:5,' Uвх=',Ug[t1]:7:5,' Uzad=',Uzadg[t1]:7:5,'

Uuprg=',Uuprg[t1]:7:5,' r=',r:7:5);

n:=n+1;

if (n mod 24)=0 then begin readln; n:=0; end;

end;

t1:=t1+1;

until t1=numtoch div (graphtoch+1);

ReadLn;

SetGraphMode(mode);

SetGraphWindow(0,0,1,1/3,0.5);

ReDraw;

DrawGraf(Ug,35,1,LightGreen);

SetGraphWindow(0,1/3,1,2/3,0.5);

ReDraw;

DrawGraf(y1g,30,1,LightRed);

SetGraphWindow(0,2/3,1,1,0.5);

ReDraw;

DrawGraf(Uuprg,35,1,White);

DrawGraf(Upilg,35,1,LightGray);

DrawGraf(Uzadg,35,1,White);

end;

end;

Until (c=#13)or(c='=');

CloseGraph;

Until (c=#13);

K1:=K1+1;

Until K1=maxtoch+1;

CloseGraph;

ch:=readkey;

Writeln('Выход ?- "Y" ');

Readln(ch);

Until (ch='Y')or(ch='y');

end.