КОНСТРУКТОРСКО-ТЕХНОЛОГИЧЕСКАЯ ЧАСТЬ




4.1 Общие технические требования к печатной плате

 

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

В нашей стране печатный монтаж применяется с 1956 года. Опыт показывает, что печатный монтаж имеет значительные преимущества перед объемным монтажом.

К печатным платам предъявляются следующие требования:

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

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

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

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

В целях повышения механической жесткости платы (печатная плата, состоящая из материалов с различными коэффициентами температурного расширения, а также имеющая отверстия, естественно, подвержена короблению) необходимо, чтобы отношение ее длины к ширине не превышало 4:1.

Каждая плата должна иметь маркировку с указанием индекса или чертежного номера платы, а также дату изготовления.

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

 

4.2 Основные принципы конструирования печатных плат

 

Исходным параметром при конструировании печатных плат является шаг координатной сетки. С помощью координатной сетки регламентируются основные геометрические размеры печатных плат. Как правило, центры всех видов отверстий на печатных платах располагаются в узлах координатной сетки. Ее основной шаг 2.5 мм, дополнительный - 0.635 мм.

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

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

Толщина платы, как правило, соответствует толщине фольгированного диэлектрика и выбирается в зависимости от требований, предъявляемых к конструкции изделия, метода изготовления платы, веса и габаритов устанавливаемых элементов и не превышает 3 мм.

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

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

 

Номинальный диаметр отверстия, мм 0.6 0.8 1.0 1.3 1.6 2.0
Минимальный диаметр контактной площадки, мм 1.8 2.3 2.5 2.8 3.1 3.5

 

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

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

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

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

В случае необходимости подпайки к одному контакту нескольких элементов на печатную плату предварительно устанавливают контактные штыри, лепестки или трубчатые заклепки-пистоны. Все контакты устанавливают в местах, указанных на чертеже. Буртики контактных штырей со стороны печатных проводников паяют. Пистоны также заливают припоем. Пайку контактных штырей и заливку припоем пистонов производят не позднее 48 ч после их установки на плату.

После лужения и установки контактных штырей печатную плату отмывают от остатков флюса.

Установка элементов на печатные платы. Для повышения производительности труда при пайке все элементы должны быть заранее установлены своими выводами в монтажные отверстия печатных плат и закреплены в них.

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

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

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

Выводы элементов, поступающих на сборку и монтаж, рихтуют, зачищают и, если требуется, лудят, а затем формуют в соответствии с требованиями ТУ и конструкторской документации.

Требования к формовке выводов элементов, устанавливаемых на печатные платы, такие же, как при объемном монтаже: в местах ввода в корпус не должно возникать механических напряжений. Если специальные указания в ТУ или чертежах отсутствуют, расстояние от корпуса элемента до оси изогнутого вывода принимается равным 2 мм.

Расстояние между корпусом элемента и краем печатной платы, если оно не оговорено в чертеже, должно быть не менее 1 мм, а расстояние между выводом элемента и краем платы - не менее 2 мм.

Расстояние между корпусами соседних элементов или между корпусами и выводами соседних элементов выбирают в зависимости от условий теплоотвода и допустимой разности потенциалов между ними, но не менее 0,5 мм.

Предварительное формование выводов элементов, припаиваемых к контактным площадкам внахлестку, осуществляют так, чтобы были выдержаны размеры, указанные в ТУ на элементы. Как правило, размер контактирующей поверхности должен быть 1,5-2 мм. Исключение составляют ИМС в металлостеклянных корпусах с планарными выводами, для которых этот размер должен быть не менее 0,5 мм.

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

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

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

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

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

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

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

При установке на плату элементов с диаметром выводов до 0,3 мм их подгибают к контактной площадке под углом 45°. Длина подогнутого в сторону вывода должна быть не менее 0,6 мм.

При установке элементов с диаметром выводов от 0,3 до 0,8 мм следует подгибать их вдоль печатного проводника, если в конструкторской документации нет других указаний.

Все элементы должны плотно прилегать своими корпусами к печатной плате, чтобы вывод, подпаянный к печатному проводнику, при нажатии на корпус элемента не отрывал его от платы. Этого достигают натяжением выводов перед их загибкой.

Выводы элементов диаметром свыше 0,8 мм и обжатые ленточные выводы не подгибают, также не подгибают выводы при установке многовыводных элементов и узлов РЭА на платы с металлизированными отверстиями. Высота таких выводов над поверхностью платы должна быть в пределах 0,5-2 мм. Откусывание излишков выводов производят после их пайки. Пайка элементов на печатные платы. Элементы крепят к печатной плате пайкой выводов в ее монтажные отверстия электрическим паяльником мощностью 20-60 Вт, заточенным таким образом, чтобы угол при вершине составлял 25-30°. Температура нагрева стержня паяльника 280-300° С.

Пайку производят кратковременным прикосновением на 2-3 с стержня паяльника с запасом припоя к контактной площадке и концу вывода. Паяльник отнимают сразу после расплавления припоя и заполнения им отверстия и зазоров между выводом элемента и контактной площадкой.

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

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

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

Элементы диаметром выводов 0,8 мм и менее могут распаиваться на контактные площадки внахлестку. При этом выводы резисторов, конденсаторов, диодов и микросхем не должны выходить за пределы отведенных для них контактных площадок. Если длина вывода от корпуса элемента до места пайки внахлестку превышает 7 мм, необходимо закрепить его на промежуточной колодке.

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

 

 

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:\tp\bgi');

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;

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-08-04 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: