Применение электронной системы подачи топлива, автоматическое управление тормозами , фрикционами машины и другие усовершенствования имеющиеся в современных легковых автомобилях находят применение и в более тяжелых транспортных машинах. Использование же современной микропроцессорной техники затруднено на существующих источниках питания. Данная разработка открывает такую возможность.
Список сокращений
АМ - асинхронная машина,
АТ - автотракторный,
БСМ - бесконтактная синхронная машина,
БЭМ - бесконтактная электрическая машина,
ВВ - вращающийся выпрямитель,
ГУ - генераторная установка,
ИС - интегральная схема,
ИНР - интегральный регулятор напряжения,
ИМ - индукторная машина,
МС - микросхема,
НИР - научно-исследовательская работа,
ПМ - постоянный магнит,
РЗМ - редкоземельные материалы,
ТЭО - технико-экономические показатели,
ФУ - функциональный узел,
ЭРЭ - элемент радиоэлектронный.
Приложение
Текст программы моделирования
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.