4.3 Технология изготовления платы

Плата модуля ввода аналоговых сигналов изготовлена из стеклотекстолита на фенольной основе (ФС-2-35-1.5). Медная фольга, используемая для плакирования диэлектрика, изготовлена (произведена) гальваническим способом и имеет чистоту не менее 99.5%. Толщина фольги 35 мкм. Качество фольгированных диэлектриков устанавливается специальными техническими условиями или государственными стандартами.

Для получения высокой механической прочности и повышенной техностойкости в качестве наполнителя для диэлектрика применена стеклоткань марки Э толщиной 0.1 мкм. Для максимального использования ее положительных свойств (прочность, теплостойкость, диэлектрические показатели) в качестве связующего применяют эпоксидную смолу ЭД-6, имеющую хорошую адгезию к стекловолокну, обладающую достаточно высокой механической прочностью, хорошими диэлектрическими характеристиками.

Для отвердевания смолы ЭД-6, применяется фенолформальдегидная смола. Стеклоткань пропитывается спиртотолуольным раствором, состоящим из эпоксидной и фенолформальдегидной смол в соотношении 70:30 из расчета сухой основы.

Для склеивания фольги с основанием используется фенолполивинилбутиральный клей марки БФ-4.

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

Технологическая схема процесса изготовления печатной платы комбинированным позитивным методом состоит из следующих операций:

обезжиривание поверхности заготовки платы;

нанесение светочувствительной эмульсии (фоторезиста);

экспонирование рисунка схемы (фотопечать);

проявление рисунка;

задубливание фоторезиста;

нанесение защитной пленки лака;

сверление отверстий в плате;

электрохимическая металлизация отверстий;

гальваническое наращивание защитного металла;

удаление защитного слоя фоторезиста;

травление рисунка схемы;

осветление защитного слоя металла.

Технологический процесс изготовления печатной платы комбинированным методом в значительной мере оснащен специальным инструментом и необходимым оборудованием. Ниже приведено более подробное описание некоторых основных операций.

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

Химический способ заключается в обезжиривании поверхности в растворе тринатрийфосфата и кальцинированной соды.

Нанесение фоторезиста осуществляется методом окунания заготовки с последующим центрифугированием на стандартной центрифуге типа ЦОМ.

Разработан метод медленного вытягивания заготовки из раствора фоторезиста с последующей сушкой в сушильном шкафу.

Экспонирование рисунка схемы (фотопечать) производится групповым методом в специальных вакуумных рамах с подвижным источником света в установке типа "Сканер" германской фирмы “Видерхольд". В ней применяют мощные лампы со специально подобранной длиной световой волны, к которой наиболее чувствителен фоторезист.

Время экспонирования в такой установке составляет 4-5 минут за счет подбора рациональных источников света и эффективного распределения светового потока на площади экспонируемой платы.

Проявляется изображение рисунка схемы вручную с помощью хлопчатобумажного тампона под струей теплой воды. Установкой для проявления является лабораторный стол с рядом ванн и кюветов.

Фоторезистивный слой проявляется при температуре воды 40-45°С. Контролируется проявление окрашиванием эмульсии в растворе метилфиолета. Дубление проявленного слоя производится в растворе хромового ангидрида.

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

Для сверления и зенкования отверстий применяется одношпиндельный станок с программным управлением типа КП-7511.

После сверления выполняется операция металлизации отверстий. Качество печатных плат во многом зависит от качества металлизации отверстий. Вначале проводится сенсибилизация и активация поверхности отверстий, подлежащих металлизации, а затем химическая металлизация.

Химическая металлизация проводится в специальных установках, где предусмотрены следующие операции :

химическое обезжиривание заготовок с последующей промывкой и сушкой воздухом;

сенсибилизация заготовок в растворе двухлористого олова с последующей промывкой и сушкой теплым воздухом;

активизация заготовок в растворе хлористого палладия с последующей промывкой в ванне и сушкой теплым воздухом.

После химической металлизации выполняется операция гальванической металлизации. В качестве электролитического раствора используется борфтористоводородный электролит.

Режим металлизации выбирается таким, чтобы обеспечить толщину слоя осажденной меди в отверстиях 25-40 мк.

После операции гальванической металлизации (меднения), необходимо весь рисунок схемы защитить от травления. Для этого используют покрытие гальваническим сплавом ПОС-61.

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

Для травления используется раствор хлорного железа с удельным весом 1.36-1.40 г/мл, температура травления 25-50°C, время травления 10-15 мин.

После тщательной промывки от остатков травящего раствора и сушки выполняется операция осветления серебра (5-10 мин).

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

Для хранения и транспортировки платы упаковывают в полиэтиленовые и полихлорвиниловые мешки, а затем картонные коробки или специальную тару.

{ИСХОДНЫЙ ТЕКСТ ПРОГРАММЫ IM_Main.PAS}

{$IFDEF CPU87} {$N+} {$ELSE} {$N-} {$ENDIF}

{ Программа расчета векторной диаграммы асинхронного двигателя }

program lw(lw);

uses crt,dos,graph,im_tpu;

const {Параметры "Г-образной схемы замещения}

p=2; {Число полюсов}

P2n=75; {Номинальная мощность, кВт}

U1n=220; {Номинальное фазное напряжение, В}

KPDn=0.925; {Номинальный КПД}

Cosn=0.89; {Номинальный Cos(f)}

Sn=0.016; {Номинальное относительное скольжение, о.е.}

Smax=0.1; {Критическое относительное скольжение, о.е.}

J=0.6; {Момент инерции ротора, кг*м^2}

X0=4.6; {Сопротивление взаимоиндукции, о.е.}

R1=0.037; {Активное сопротивление статора, о.е.}

X1=0.1; {Индуктивное сопротивление статора, о.е.}

R2=0.017; {Активное сопротивление ротора, о.е.}

X2=0.16; {Индуктивное сопротивление ротора, о.е.}

R2p=0.036; {Пусковое сопротивление ротора, о.е.}

Mn=9550*P2n/(3e3/p*(1-Sn));{Номинальный момент, н*м}

Mmin=1*Mn; {Значение минимального момента, н*м}

Mmax=2.5*Mn; {Значение критического момента, н*м}

type StringSwitche=(ST11,ST12,ST13,ST14,ST15,ST16,ST17,DATA1,DATA2,

ST21,ST22,ST23,ST24,ST25,ENDT1,ENDT2);

var t,dt,U1a,U1b,M,A1,A2,K1,K2,L11,L21,L1,L2,L0,W1,EndT,SpeedScale,

I0a,I0b,I1a,I1b,I21a,I21b,KPD,CosF,I1,I21,W0,Psi1,Psi2,Psi0,s,I0,

I1n,X1t,R1t,X0t,R2t,X2t,R2pt,Smin:real;

RepeatNumber,CurrentNumber,CurrentRepeat,i,k,Ms,Uss,PsiAlpha,IsAlpha,

IsPsirAlpha,PsisRAngle,UssAbsoluteAngle,PsirRAngle,IsRAngle,IrsRAngle,

PsioRAngle,Fs:integer;

x,f,h,f1,f2,f3,f4:array[1..5] of real;

StringKPD,StringPsiAlpha,StringIsAlpha,StringIsPsirAlpha,StringCurrW,

StringAlphaRasch,StringIs,StringCosF, VectorString,VectorString0:string;

color:word;

Result:text;

{Пересчет паспортных данных в абсолютные единицы "Т"-образной схемы}

procedure ReCalculation;

var b:real;

begin

I1n:=P2n*1e3/(3*U1n*Cosn*KPDn); {Номинальный фазный ток}

X1t:=2*X1*X0/(X0+Sqrt(Sqr(X0)+4*X1*X0))*U1n/I1n;

R1t:=R1*X1t/X1; {Сопротивления статора, Ом}

X0t:=X0*U1n/I1n;{Сопротивление взаимоиндукции, Ом}

R2t:=R2*U1n/I1n;

X2t:=X2*U1n/I1n;{Сопротивления ротора, Ом}

R2pt:=R2p*U1n/I1n;

b:=R1/R2*Smax;

Smin:=Smax/Mmin*((1+b)*Mmax-b*Mmin+SqRt((1+b)*(Mmax-Mmin)*((1-b)*Mmin+(1+b)*Mmax)));

end;

{ Дифференциальные уравнения АД в двухфазной системе

координат (a,b), неподвижной относительно статора }

procedure Right_Part;

begin

if s>smin then A2:=(R2t+(R2pt-R2t)*(S-Smin)/(1-Smin))/L21

else A2:=R2t/L21;

U1a:=Uss*cos(W1*t);

U1b:=Uss*sin(W1*t);

f[1]:=U1a-A1*x[1]+A1*K2*x[3];

f[2]:=U1b-A1*x[2]+A1*K2*x[4];

f[3]:=A2*(K1*x[1]-x[3])-x[5]*x[4];

f[4]:=A2*(K1*x[2]-x[4])+x[5]*x[3];

M:=3/2*p*L0/(L1*L11)*(x[2]*x[3]-x[1]*x[4]);

f[5]:=p/J*(M-Ms);

S:=(W1-x[5])/W1;

end;

{ Модифицированный метод Рунге-Кутта 4-го порядка }

procedure Runge;

begin

for k:=1 to 5 do h[k]:=x[k];

Right_Part;

for k:=1 to 5 do

begin

f1[k]:=f[k];

x[k]:=h[k]+f1[k]*dt/2;

end;

Right_Part;

for k:=1 to 5 do

begin

f2[k]:=f[k];

x[k]:=h[k]+f2[k]*dt/2;

end;

Right_Part;

for k:=1 to 5 do

begin

f3[k]:=f[k];

x[k]:=h[k]+f3[k]*dt;

end;

Right_Part;

for k:=1 to 5 do

begin

f4[k]:=f[k];

x[k]:=h[k]+(f1[k]+2*f2[k]+2*f3[k]+f4[k])/6*dt;

end;

end;

{ Инициализация графики }

procedure Init_Graph;

var GraphDriver,GraphMode:integer;

i:integer;

color:word;

begin

GraphDriver:=0;

DetectGraph(GraphDriver,GraphMode);

if GraphMode>1 then GraphMode:=1;

InitGraph(GraphDriver,GraphMode,'e:tpbgi');

color:=GetMaxColor;

TextMode(1);

Writeln;

Writeln(' Graph Initialisate And ',GraphErrorMsg(GraphResult));

Writeln;

Writeln(' Use: GraphMode - ',GetModeName(GraphMode));

Writeln(' GraphDriver - ',GetDriverName);

Writeln;

Writeln(' The Number Of Using Colors :',GetMaxColor);

for i:=1 to 4 do Writeln;

Writeln(' Параметры АД:');

Writeln;

Writeln(' As =',A1:6,' Ar =',A2:6);

Writeln(' Ks =',K1:6,' Kr =',K2:6);

Writeln(' Ls`=',L11:6,' Lr`=',L21:6);

for i:=1 to 7 do Writeln;

Writeln(' Press Any Key To Continue');

pausa;

SetGraphMode(GraphMode);

end;

{ Процедура подготовки к цифровому моделированию

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

procedure Prepeare;

var HelpVariable:integer;

begin

W1:=2*Pi*Fs;W0:=W1/p;

L0:=1.5*X0t/W1;L1:=X1t/W1;L2:=X2t/W1;

L1:=L1+L0;L2:=L2+L0;

K2:=L0/L2;K1:=L0/L1;

L11:=L1-sqr(L0)/L2;L21:=L2-sqr(L0)/L1;

A1:=R1t/L11;A2:=R2t/L21;

for HelpVariable:=1 to 5 do

begin

f[HelpVariable]:=0;

x[HelpVariable]:=0;

end;

end;

{ Процедура расчета угов векторов }

procedure AngleDefinition;

begin

UssAbsoluteAngle:=AbsoluteAngle(U1a,U1b);

PsisRAngle:=AbsoluteAngle(x[1],x[2])-UssAbsoluteAngle;

if PsisRAngle<0 then PsisRAngle:=360+PsisRAngle;

PsirRAngle:=AbsoluteAngle(x[3],x[4])-UssAbsoluteAngle;

if PsirRAngle<0 then PsirRAngle:=360+PsirRAngle;

IsRAngle:=AbsoluteAngle(I1a,I1b)-UssAbsoluteAngle;

if IsRAngle<0 then IsRAngle:=360+IsRAngle;

IrsRAngle:=AbsoluteAngle(I21a,I21b)-UssAbsoluteAngle;

if IrsRAngle<0 then IrsRAngle:=360+IrsRAngle;

PsioRAngle:=AbsoluteAngle(I0a,I0b)-UssAbsoluteAngle;

if PsioRAngle<0 then PsioRAngle:=360+PsioRAngle;

end;

procedure OutStringSum;

begin

VectorString:=VectorString+VectorString0+'¦';

end;

{ Функция, выдающая строку таблицы out - данных }

function GetVectorString(Number:StringSwitche):string;

begin

Case Number of

ST11 :GetVectorString:='+----------------------------------------------------------------------------+';

ST12 :GetVectorString:='¦ ¦ ¦ ¦ ¦ ¦ ¦ Uss ¦ Psis ¦';

ST13 :GetVectorString:='¦ ¦ ¦ ¦ ¦ ¦ +--------------------+-------------¦';

ST14 :GetVectorString:='¦ Fs ¦ Ms ¦ Wv ¦ S ¦ Effi-¦cos(F)¦ ¦ Angle ¦ ¦ ¦';

ST15 :GetVectorString:='¦ ¦ ¦ ¦ ¦ciency¦ ¦Module+-------------¦Module¦RAngle¦';

ST16 :GetVectorString:='¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦absol.¦relat.¦ ¦ ¦';

ST17 :GetVectorString:='+------+------+------+------+------+------+------+------+------+------+------¦';

DATA1:begin

VectorString:='¦';Str(Fs:6,VectorString0);OutStringSum;

Str(Ms:6,VectorString0);OutStringSum;

Str(x[5]/p:6:2,VectorString0);OutStringSum;

Str(s:6:3,VectorString0);OutStringSum;

Str(KPD:6:3,VectorString0);OutStringSum;

Str(CosF:6:3,VectorString0);OutStringSum;

Str(Uss:6,VectorString0);OutStringSum;

Str(UssAbsoluteAngle:6,VectorString0);OutStringSum;

VectorString0:=' 0 ';OutStringSum;

Psi1:=sqrt(sqr(x[1])+sqr(x[2]));

Str(Psi1:6:4,VectorString0);OutStringSum; Str(PsisRAngle:6,VectorString0);OutStringSum;

GetVectorString:=VectorString;

end;

ENDT1:GetVectorString:='+----------------------------------------------------------------------------+';

ST21 :GetVectorString:='+----------------------------------------------------------------------------+';

ST22 :GetVectorString:='¦ Psir ¦ Is ¦ Irs ¦ Psio ¦ Power ¦ ¦';

ST23 :GetVectorString:='+-------------+-------------+-------------+-------------+-------------¦ M ¦';

ST24 :GetVectorString:='¦Module¦RAngle¦Module¦RAngle¦Module¦RAngle¦Module¦RAngle¦ Full ¦Utilit¦ ¦';

ST25 :GetVectorString:='+------+------+------+------+------+------+------+------+------+------+------¦';

DATA2:begin

Psi2:=sqrt(sqr(x[3])+sqr(x[4]));Psi0:=I0*L0;

Str(Psi2:6:4,VectorString0);VectorString:='¦';OutStringSum;

Str(PsirRAngle:6,VectorString0);OutStringSum;

Str(I1:6:2,VectorString0);OutStringSum;

Str(IsRAngle:6,VectorString0);OutStringSum;

Str(I21:6:2,VectorString0);OutStringSum;

Str(IrsRAngle:6,VectorString0);OutStringSum;

Str(Psi0:6:4,VectorString0);OutStringSum;

Str(PsioRAngle:6,VectorString0);OutStringSum;

Str(0.003*Uss/sqrt(2)*I1:6:2,VectorString0);OutStringSum;

Str(0.003*Uss/sqrt(2)*I1*CosF:6:2,VectorString0);OutStringSum;

Str(M:6:2,VectorString0);OutStringSum;

GetVectorString:=VectorString;

end;

ENDT2:GetVectorString:='+----------------------------------------------------------------------------+'

end

end;

{ Процедура, рисующая векторную диаграмму }

procedure DrawVectorDiagram;

var CenterX,CenterY,Max,Kx:real;

Xk,Yk:word;

begin

GetAspectRatio(Xk,Yk);Kx:=Yk/Xk;

CenterY:=GetMaxY/2;Max:=(GetMaxY-150)/2;CenterX:=2/3*GetMaxX-10;

PutVector(CenterX,CenterY,Max,90,GetMaxColor,'Uss');

PutVector(CenterX,CenterY,Max,90+IsRAngle,GetMaxColor*0.9,'Is');

PutVector(CenterX,CenterY,Max*I21/I1,90+IrsRAngle,GetMaxColor*0.88,'Irs');

PutVector(CenterX,CenterY,Max,90+PsisRAngle,GetMaxColor*0.8,'Psis');

PutVector(CenterX,CenterY,Max*Psi2/Psi1,90+PsirRAngle,GetMaxColor*0.75,'Psir');

PutVector(CenterX,CenterY,Max*Psi0/Psi1,90+PsioRAngle,GetMaxColor*0.65,'Psio');

end;

procedure SolveDiagram;Forward;

{ Процедура выхода из программы }

procedure quit;

begin

Write(Result,GetVectorString(ENDT1));Writeln(Result,GetVectorString(ENDT2));

Close(Result);GraphDefaults;CloseGraph;Halt;

end;

{ Процедура анализа скэн - кода }

procedure PressKeyAnalysis;

var p:char;

begin

p:=chr(0);

if KeyPressed=True then

Case ReadKey of

'V','v':SolveDiagram;

'M','m':begin

Ms:=NumberInput('Момент');

SolveDiagram;

end;

'U','u':begin

Uss:=round(NumberInput('Напряжение')*sqrt(2));

SolveDiagram;

end;

'W','w':begin

Write(Result,GetVectorString(DATA1));

Writeln(Result,GetVectorString(DATA2));

SolveDiagram;

end;

'P','p':begin

SetActivePage(1);SetVisualPage(0);

SetViewPort(0,100,300,204,True);ClearViewPort;

SetViewPort(0,0,GetMaxX,GetMaxY,True);

TextOut(80,148,0.9,'Печать:');

TextOut(0,164,0.75,'1 - печать графика скорости');

TextOut(0,180,0.87,'2 - печать векторной диаграммы');

SetVisualPage(1);

Repeat p:=ReadKey;

Until (p='1') or (p='2');

Case p of

'1':begin

SetActivePage(0);SetVisualPage(0);

CopyToPRN;

end;

'2':begin

SetActivePage(1);SetVisualPage(1);

CopyToPRN;

end

end;

SolveDiagram;

end;

'Q','q':quit

else

SetColor(GetMaxColor);

SetVisualPage(0);

end

end;

{ Процедура расчета векторной диаграммы }

procedure SolveDiagram;

begin

SetVisualPage(0);SetActivePage(1);

SetViewPort(0,0,GetMaxX,GetMaxY,True);SetBkColor(Black);ClearViewPort;SetColor(GetMaxColor);

AngleDefinition;

{формирование} OutTextXY(0,0,GetVectorString(ST11));OutTextXY(0,8,GetVectorString(ST12));

{ заголовка } OutTextXY(0,16,GetVectorString(ST13));OutTextXY(0,24,GetVectorString(ST14));

{ первой } OutTextXY(0,32,GetVectorString(ST15));OutTextXY(0,40,GetVectorString(ST16));

{ таблицы } OutTextXY(0,48,GetVectorString(ST17));

{вывод данных} OutTextXY(0,56,GetVectorString(DATA1));

{конец табл.1} OutTextXY(0,64,GetVectorString(ENDT1));

{конец табл.2} OutTextXY(0,GetMaxY-8,GetVectorString(ENDT2));

{вывод данных} OutTextXY(0,GetMaxY-16,GetVectorString(DATA2));

{формирование} OutTextXY(0,GetMaxY-24,GetVectorString(ST25));OutTextXY(0,GetMaxY-32,GetVectorString(ST24));

{ заголовка } OutTextXY(0,GetMaxY-40,GetVectorString(ST23));OutTextXY(0,GetMaxY-48,GetVectorString(ST22));

{ таблицы2 } OutTextXY(0,GetMaxY-56,GetVectorString(ST21));

DrawVectorDiagram;

TextOut(56,100,0.9,'КЛАВИАТУРА:');TextOut(0,116,0.75,'V - векторная диаграмма');

TextOut(0,132,0.87,'W - запись результатов в файл');TextOut(0,148,0.65,'M - изменить момент на валу');

TextOut(0,164,0.6,'U - изменить напряжение');TextOut(0,180,0.4,'P - печать результатов моделирования');

TextOut(0,196,0.8,'Q - выход в систему');

SetVisualPage(1);SetActivePage(0);

end;

{Процедура моделирования пуска асинхронного двигателя}

procedure Model;

begin

RepeatNumber:=round(EndT/(dt*640));

SpeedScale:=GetMaxY/(3*W0);

for CurrentNumber:=0 to 640 do

begin

for CurrentRepeat:=1 to RepeatNumber do

begin

Runge;

I1a:=x[1]/L11-K2/L11*x[3];

I1b:=x[2]/L11-K2/L11*x[4];

I1:=sqrt(sqr(I1a)+sqr(I1b));

I21a:=x[3]/L21-K1/L21*x[1];

I21b:=x[4]/L21-K1/L21*x[2];

I21:=Sqrt(sqr(I21a)+sqr(I21b));

I0a:=I1a+I21a;I0b:=I1b+I21b;

I0:=sqrt(sqr(I0a)+sqr(I0b));

t:=t+dt;

PutPixel(CurrentNumber,round(GetMaxY/2-SpeedScale*x[5]/p),color);

end;

PutPixel(CurrentNumber,round(GetMaxY/2-SpeedScale*x[5]/p),color);

SetActivePage(0);

PsiAlpha:=AbsoluteAngle(I0a,I0b)-AbsoluteAngle(x[3],x[4]);

IsPsirAlpha:=AbsoluteAngle(I1a,I1b)-AbsoluteAngle(x[3],x[4]);

IsAlpha:=AbsoluteAngle(U1a,U1b)-AbsoluteAngle(I1a,I1b);

CosF:=cos(IsAlpha*Pi/180);

if (Uss*I1)<>0 then KPD:=abs(M*Fs*4*Pi/(3*p*Uss*I1));

Str(Uss:5,StringPsiAlpha);Str(IsAlpha,StringIsAlpha);

Str(KPD:5:3,StringKPD);Str(IsPsirAlpha,StringIsPsirAlpha);

Str(s:6:4,StringAlphaRasch);Str(x[5]/p:5:1,StringCurrW);

Str(I1:6:2,StringIs);Str(CosF:4:2,StringCosF);

SetViewPort(184,20,240,30,False);ClearViewPort;SetViewPort(304,20,368,30,False);ClearViewPort;

SetViewPort(400,20,472,30,False);ClearViewPort;SetViewPort(576,20,638,30,False);ClearViewPort;

SetViewPort(184,40,248,50,False);ClearViewPort;SetViewPort(296,40,368,50,False);ClearViewPort;

SetViewPort(400,40,472,50,False);ClearViewPort;SetViewPort(576,40,638,50,False);ClearViewPort;

SetViewPort(0,0,GetMaxX,GetMaxY,True);

OutTextXY(192,20,StringPsiAlpha);OutTextXY(312,20,StringIsAlpha);

OutTextXY(408,20,StringKPD);OutTextXY(584,20,StringIsPsirAlpha);

OutTextXY(192,40,StringAlphaRasch);OutTextXY(312,40,StringCurrW);

OutTextXY(408,40,StringIs);OutTextXY(584,40,StringCosF);

PressKeyAnalysis;

end;

end;

{ Процедура формирования заголовка файла }

procedure FileHead;

begin

Assign(Result,'lw.res');

Rewrite(Result);

Writeln(Result,GetVectorString(ST11));Writeln(Result,GetVectorString(ST12));

Write(Result,GetVectorString(ST13));Writeln(Result,GetVectorString(ST21));

Write(Result,GetVectorString(ST14));Writeln(Result,GetVectorString(ST22));

Write(Result,GetVectorString(ST15));Writeln(Result,GetVectorString(ST23));

Write(Result,GetVectorString(ST16));Writeln(Result,GetVectorString(ST24));

Write(Result,GetVectorString(ST17));Writeln(Result,GetVectorString(ST25));

end;

{ Основная программа }

begin

ReCalculation;

ClrScr;Writeln;

TextColor(10);WriteLn(' Программа расчета и вывода векторной диаграммы А.Д.');

TextColor(12);Writeln(' Для IBM PC/XT/AT/PS-2 с ОЗУ экрана 256/512 Кб');

for i:=0 to 4 do Writeln;TextColor(15);

Write('Введите время окончания работы двигателя: ');Readln(EndT);

Write('Введите частоту питающей сети (Гц): ');Readln(Fs);

t:=0;dt:=1e-4;Ms:=0;Uss:=round(310*Fs/50);

FileHead;Prepeare;Init_Graph;TextMode(2);

SetActivePage(0);SetVisualPage(0);

Scale(1.5*W0,-1.5*W0,EndT,'t,c','W,рад/с');

SetColor(round(GetMaxColor*0.7));

OutTextXY(66,8,'Программа расчета векторной диаграммы и некоторых параметров А.Д.');

SetColor(round(GetMaxColor*0.9));

OutTextXY(112,20,'PsiAlpha:');OutTextXY(240,20,'IsAlpha:');

OutTextXY(368,20,'KPD:');OutTextXY(496,20,'IsPrAlpha:');

OutTextXY(96,40,'RelSkRasch:');OutTextXY(256,40,'CurrW:');

OutTextXY(376,40,'Is:');OutTextXY(536,40,'CosF:');

SetViewPort(0,0,GetMaxX,GetMaxY,True);

color:=GetMaxColor;SetColor(color);

Model;

Quit;

end.

{ ИСХОДНЫЙ ТЕКСТ МОДУЛЯ СЕРВИСНЫХ ПРОЦЕДУР И ФУНКЦИЙ }

Unit Im_tpu;

Interface

uses graph,dos,crt,printer;

type string4=string[4];

procedure pausa;

procedure Scale(Ymax,Ymin,Tmax:real;XText,YText:string);

function AbsoluteAngle(AComponent,BComponent:real):integer;

procedure PutVector(Xb,Yb,MVector,AVector,Col:real;Name:string4);

function NumberInput(What:string):integer;

procedure TextOut(X,Y:integer;Col:real;TextString:string);

procedure CopyToPRN;

function Sgn(v:real):integer;

function DefTime:string;

procedure TimeOut;

procedure PrintPausa;

Implementation

{ Пауза до первой нажатой клавиши }

procedure pausa;

begin

Repeat Until ReadKey<>#0

end;

{ Вывод на экран системы координат }

procedure Scale(Ymax,Ymin,Tmax:real;XText,YText:string);

var Ybeg,Ystep,Tstep,t1:real;

ScaleGrad:string;

Col:word;

SDrawX,SDrawY,HelpVar,GDriver,GMode:integer;

begin

DetectGraph(GDriver,GMode);GMode:=1;

InitGraph(Gdriver,GMode,'');

SetBkColor(0);SetColor(GetMaxColor);

Col:=GetMaxColor;PutPixel(0,0,Col);

LineTo(GetMaxX,0);LineTo(GetMaxX,GetMaxY);

LineTo(0,GetMaxY);LineTo(0,0);

for SDrawX:=1 to 19 do

for SdrawY:=1 to 19 do

PutPixel(SdrawX*GetMaxX div 20,SdrawY*GetMaxY div 20,col);

SetTextStyle(0,0,1);

if Ymin<0 then Ystep:=(Ymax-Ymin)/10

else

Ystep:=Ymax/10;

for HelpVar:=0 to 10 do

begin

Str(Ymax:9,ScaleGrad);

OutTextXY(0,HelpVar*GetMaxY div 10,ScaleGrad);

Ymax:=Ymax-Ystep;

end;

Tstep:=Tmax/5;t1:=0;

for HelpVar:=0 to 4 do

begin

Str(t1:9,ScaleGrad);

OutTextXY(HelpVar*GetMaxX div 5,GetMaxY-10,ScaleGrad);

t1:=t1+Tstep;

end;

SetColor(round(GetMaxColor/1.25));

OutTextXY(GetMaxX-48,GetMaxY-11,XText);OutTextXY(8,20,YText);

SetColor(GetMaxColor);

end;

{ Функция геометрического анализа и расчета абсолютного угла вектора }

function AbsoluteAngle(AComponent,BComponent:real):integer;

var IntAngle:integer;

begin

if AComponent<>0 then IntAngle:=round(180/Pi*ArcTan(BComponent/AComponent));

if AComponent=0 then

begin

if BComponent>0 then IntAngle:=90

else IntAngle:=-90;

end

else

if BComponent=0 then

begin

if AComponent>0 then IntAngle:=0

else IntAngle:=180;

end

else

if ((AComponent>0) and (BComponent>0)) or (AComponent>0) and (BComponent<0) then

{первый и второй квадранты}

IntAngle:=IntAngle

else

IntAngle:=180+IntAngle;{второй и третий квадранты};

if IntAngle<0 then IntAngle:=360+IntAngle;

AbsoluteAngle:=IntAngle;

end;

{ Процедура вывода вектора по заданным координатам }

procedure PutVector(Xb,Yb,MVector,AVector,Col:real;Name:string4);

const LengthPoint=8;

var Xbh,Ybh,Xeh,Yeh,Xp,Yp,AVAngle:integer;

Xk,Yk,Colh:word;

Kx:real;

begin

GetAspectRatio(Xk,Yk);Kx:=Yk/Xk;

Xbh:=round(Xb);Ybh:=Round(Yb);

Xeh:=Round(Xb+Kx*MVector*cos(Pi/180*AVector));

Yeh:=round(Yb-MVector*sin(Pi/180*AVector));

Colh:=round(Col);SetColor(Colh);

Line(Xbh,Ybh,Xeh,Yeh);

AVAngle:=AbsoluteAngle((Xeh-Xbh),(Ybh-Yeh));

Xp:=round(LengthPoint*Kx*Cos(Pi/180*(AVAngle+10)));

Yp:=round(LengthPoint*Sin(Pi/180*(AVAngle+10)));

Xp:=Xeh-Xp;Yp:=Yeh+Yp;

Line(Xeh,Yeh,Xp,Yp);

Xp:=round(LengthPoint*Kx*Cos(Pi/180*(AVAngle-10)));

Yp:=round(LengthPoint*Sin(Pi/180*(AVAngle-10)));

Xp:=Xeh-Xp;Yp:=Yeh+Yp;

Line(Xeh,Yeh,Xp,Yp);

OutTextXY(Xeh+4,Yeh,Name);

end;

{ Функция ввода числа с клавиатуры в графическом режиме }

function NumberInput(What:string):integer;

var InputChar:char;

number:integer;

begin

SetActivePage(1);SetVisualPage(1);

SetColor(round(GetMaxColor*0.8));What:=What+' :';

OutTextXY(0,GetMaxY-80,What);Number:=0;MoveTo(120,GetMaxY-80);

Repeat

InputChar:=ReadKey;

if (InputChar>'/') and (InputChar<':') then

begin

Number:=Number*10-48+ord(InputChar);

OutText(InputChar);

end;

Until ord(InputChar)=13;

SetColor(GetMaxColor);SetBkColor(0);

SetViewPort(0,GetMaxY-80,300,GetMaxY-72,True);

ClearViewPort;NumberInput:=Number;

SetViewPort(0,0,GetMaxX,GetMaxY,True);

SetActivePage(0);

end;

{ Процедура вывода на экран в заданную позицию (X,Y)

заданного текста (TextString) заданным цветом (Col) }

procedure TextOut(X,Y:integer;Col:real;TextString:string);

begin

SetColor(round(Col*GetMaxColor));

OutTextXY(X,Y,TextString);

end;

{ Процедура графической копии экрана }

procedure CopyToPRN;

var x1,x2,y1,y2:integer;

Bk1,Bk2,Mode:Byte;

Inverse:Boolean;

procedure SetPoints;

begin

x1:=0;x2:=GetMaxX;

y1:=0;y2:=GetMaxY;

Bk1:=0;Bk2:=0;

Inverse:=False;

Mode:=1;

end;

{ X1,Y1,X2,Y2 - the size of output screen }

{ Bk1,Bk2 - the colours of the both backgrounds }

{ Inverse - normal (false) or invert (true) colour of the printing copy }

{ Mode: 1 - double density 120 points/inch }

{ 2 - high speed 120 points/inch }

{ 3 - high density 240 points/inch }

{ 0, 4, 5 - 80 points/inch }

{ 6 - 90 points/inch }

{ For nonFX EPSON - printers Mode = 1 }

var ScanLine:integer;{ current printing string }

n1,n2 :Byte; { special data for printer }

{ The construction of the byte for the printing graphics }

function ConstructByte(x,y:integer):byte;

const bits:array[0..7] of byte=(128,64,32,16,8,4,2,1);

var p :word; { the colour of the pixel }

CByte,Bit:byte; { byte and the bites number }

YY :integer; { the state of the current pixel }

begin

CByte:=0;

for Bit:=0 to 7 do

begin

YY:=Y+Bit;

P:=GetPixel(X,YY);

if (YY<=Y2) and (P<>bk1) and (P<>bk2) then Inc(CByte,Bits[Bit]);

end;

ConstructByte:=CByte;

end;

{ The graphics string output }

procedure DoLine;

var XPixel :integer; { the current X - position }

PrintByte:byte; { the byte, which code 8 pixels }

begin

if Mode=1 then Write(Lst,#27'L')

else Write(Lst,#27'*',chr(mode));

Write(Lst,chr(n1),chr(n2));

for XPixel:=X1 to X2 do

begin

PrintByte:=ConstructByte(XPixel,ScanLine);

if Inverse then PrintByte:=not PrintByte;

Write(Lst,chr(PrintByte));

end;

Write(Lst,#10);

end;

label quit;

begin

SetPoints;

mode:=mode mod 7;

if mode in [0,5] then mode:=4;

Write(Lst,#27'3'#24);

n1:=Lo(succ(X2-X1));n2:=Hi(succ(X2-X1));

ScanLine:=Y1;

while ScanLine<Y2 do

begin

if KeyPressed and (ReadKey=#27) then Goto Quit;

DoLine;

Inc(ScanLine,8);

end;

quit:Write(Lst,#27#2);

end;

{ Определение знака выражения }

function Sgn(v:real):integer;

begin

if v<0 then Sgn:=-1

else

Sgn:=1;

if v=0 then Sgn:=0;

end;

{ Функция расчета времени счета }

function DefTime:string;

var cw,mw,sw,sdw:word;

cs,ms,ss,sds:string;

begin

GetTime(cw,mw,sw,sdw);

str(cw,cs);str(mw,ms);str(sw,ss);str(sdw,sds);

DefTime:=cs+':'+ms+':'+ss+'.'+sds;

end;

{ Процедура вывода на экран времени счета }

procedure TimeOut;

var ST:string;

begin

ST:=' Время счета : '+DefTime;

GoToXY(10,10);

Write(ST);

end;

procedure PrintPausa;

var c:char;

begin

Repeat c:=ReadKey

Until ((c='P') or (c='p') or (c<>''));

Case c of

'P','p':CopyToPRN

else

end

end;

end.

Протокол работы программы IM-MAIN.EXE

Параметры АД:

Время моделирования: 1 с

Частота питающей сети: 50 Гц

As = 4.5E+0001 Ar = 2.1E+0001

Ks = 9.9E-0001 Kr = 9.8E-0001

Ls`= 1.3E-0003 Lr`= 1.3E-0003

Управление асинхронным двигателем

Рис.1(а)

Управление асинхронным двигателем

Рис. 1(б)

Управление асинхронным двигателем

Рис. 1(в)

Управление асинхронным двигателем

Рис.2(а)

Управление асинхронным двигателем

Рис. 2(б)

Управление асинхронным двигателем

Рис. 3(а)

Управление асинхронным двигателем

Рис. 3(


Информация о работе «Управление асинхронным двигателем»
Раздел: Наука и техника
Количество знаков с пробелами: 102925
Количество таблиц: 0
Количество изображений: 29

Похожие работы

Скачать
140823
20
31

... . Целью дипломного проекта является разработка и исследование автоматической системы регулирования (АСР) асинхронного высоковольтного электропривода на базе автономного инвертора тока с трехфазным однообмоточным двигателем с детальной разработкой программы высокого уровня при различных законах управления. В ходе конкретизации из поставленной цели выделены следующие задачи. Провести анализ ...

Скачать
41757
0
0

... тем достоинством, что в самом регуляторе выделяется значительно меньшая мощность, чем в нагрузке.   ОСНОВНАЯ ЧАСТЬ   1 Регулирование скорости вращения асинхронных двигателей   Большинство двигателей переменного тока вращается с угловой скоростью, которая определяется в первую очередь частотой питающего напряжения. Угловая скорость синхронных двигателей зависит только от частоты питания, а ...

Скачать
27592
3
7

... двигателя; кратковременный; повторно-кратковременный; ударный (момент статистической нагрузки резко увеличивается по различным законам, а затем снижается до момента холостого хода). 1 Асинхронные двигатели в системах электропривода   1.1 Параметры задания и выбор варианта задания Вариант задания выбирается по двузначному шифру, присвоенному студенту преподавателем; для студентов заочной ...

Скачать
52086
0
0

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

0 комментариев


Наверх