Параллельный программатор для микроконтроллеров Atmel серии АТ89

Содержание.

Техническое Задание.

Введение.

1. Разработка схемы электрической принципиальной программатора.

1.1. Описание работы программатора.

1.2. Модернизация схемы.

1.3. Параллельный интерфейс: LPT-порт.

1.4. Детали и конструкция.

1.5. Выбор серии интегральных микросхем.

2. Разработка конструкции программатора.

2.1. Выбор конструкции печатной платы и числа слоев.

2.2. Выбор материала печатной платы.

2.3. Конструкторско-технологический расчет элементов печатного монтажа.

2.3.1. Расчет элементов печатного монтажа по постоянному току.

2.3.2. Определение номинального значения монтажных отверстий.

2.3.3. Определение диаметра контактной площадки для двухсторонних ПП изготовленных комбинированным позитивным методом.

2.3.4. Определение  ширины печатного проводника.

2.3.5. Определение минимального расстояния между элементами проводящего рисунка.

2.4. Электрический расчёт печатной платы.

2.4.1. Определение падения напряжения на печатных проводниках.

2.4.2. Определение мощности потерь.

2.4.3. Определение взаимной емкости параллельных проводников.

2.4.4. Определение взаимной индуктивности печатных проводников.

3

6

7

7

11

13

17

18

20

20

22

23

23

24

24

25

25

26

26

26

26

26

28

               

      2.5. Тепловой расчет печатной платы.

3. Проектирование печатного узла в САПР PCAD – 2001.

4. Расчёт показателей надёжности.

5. Технологические процессы при изготовлении  печатной платы.

6. Программная поддержка программатора.

6.1. Программирование микроконтроллеров серии АТ89.

6.2. Исходный текст программы.

7.  Моделирование схемы в  САПР OrCAD 9.2

Выводы.

Литература.

29

32

34

42

42

44

63

66

67

Техническое Задание.

1)  Основа для выполнения работы.

Основой для проведения расчетно-графической работы является задание, выданное преподавателем согласно приказа по кафедре и учебного плана на 8-й семестр.  

2)  Наименование и область применения.

Данное устройство предназначено для программирования микроконтроллеров серии АТ89С, выпускаемых фирмой Atmel. Также допускается возможность программирования низковольтных версий АТ89 LV.

3)  Цель и назначение разработки.

Целью данной разработки является создание платы программатора микроконтроллеров серии АТ89. Данное устройство должно иметь ряд преимуществ по сравнению с другими аналогами и не содержать в своем составе микроконтроллеров.

4)  Источник разработки.

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

5) Основные этапы разработки.

     Разработка конструкции имеет следующие основные этапы:

-    изучение технического задания на изделие;

-    выбор или обоснование типа печатной платы;

-    выбор или обоснование класса точности;

-    выбор габаритных размеров и конфигурации печатной платы;

-    выбор материала основания печатной платы;

-    размещение навесных элементов на печатной плате;

-   трассировка проводников, размещение элементов проводящего рисунка на печатной плате, проверочные расчеты;

-    разработка конструкторской документации.

6)  Состав устройства.

Устройство состоит из печатного узла.

7) Технические требования.

7.1) Функциональные возможности устройства.

Данное устройство должно обеспечивать:

-    программирование микроконтроллеров серий AT89C, AT89LV и AT89S;

-    процесс программирования продолжительностью не более двух минут ;

-    загрузка FLASH-памяти пордолжительностью 10…15 с.

Питание устройства осуществляется от автономных источников питания напряжением  +12 В.                                                                                 

7.2) Требования к надежности устройства.

Среднее время наработки устройства на отказ составляет порядка 10000 часов.

7.3) Требования к уровню унификации и стандартизации.

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

7.4) Требования к безопасности эксплуатации и обслуживания.

Руководствоваться общими требованиями к аппаратуре низкого напряжения по ГОСТ 12.2.007-75. Также производителем обеспечивается гарантийный ремонт изделия в случае выхода его из строя по вине производителя.                                                                   

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

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

7.6) Условия эксплуатации.

Климатическое исполнение  и категория эксплуатации  У2.0 по ГОСТ 15150-69.

7.7) Требования к транспортированию и хранению.

Группа условии хранения Л1 по ГОСТ 15150-69. Хранить в закрытых,     отапливаемых и вентилируемых помещениях, в которых обеспечивается:

-    Температура воздуха +1...+40°C.

-    Относительная влажность воздуха 65% при температуре +20°С.

-    Атмосферное давление 84... 106 кПа.

Транспортировать автомобильным и железнодорожным транспортом в транспортной таре.                                                                                       

8) Экономические показатели.                                                                      

Экономические параметры не рассматриваются.                                      

9) Этапы разработки:

Наименование этапа

Сроки выполнения

Результат

Разработка технического задания

Техническое задание

Выполнение расчетов конструкции

Расчет параметров. Выводы по функциональности платы

Выполнение чертежа схемы электрической принципиальной

Схема электрическая принципиальная

Выполнение сборочного чертежа платы

Сборочный чертеж печатной платы

Выполнение чертежа печатной платы

Чертеж печатной платы

Разработка пояснительной записки

Пояснительная записка

Введение.

За последние годы в микроэлектронике бурное развитие получило направление, связанное с выпуском однокристальных микроконтроллеров, которые предназначены для «интеллектуализации» оборудования различного назначения. Однокристальные (однокорпусные) микроконтроллеры представляют собой приборы, конструктивно выполнен­ные в виде БИС и включающие в себя все составные части «голой» микро-ЭВМ: микропроцессор, память программ и память данных, а также программируемые интерфейсные схемы для связи с внешней средой.

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

Широкими возможностями при сравнительной дешевизне внимание радиолюбителей привлекают микроконтроллеры фирмы Atmel серии АТ89 с параллельным интерфейсом программирования. Микроконтроллеры серии АТ89 имеют полный набор команд (CISC) и полностью совместимы по ним с микроконтроллерами Intel 8051. К сожалению, многие распро­страненные сегодня программаторы для них непригодны. Нужен специализированный. В данном проекте описывается такой программатор, разработанный по рекомендациям фирмы Atmel, но на элемент­ной базе, выпускаемой предприятиями СНГ.

1. Разработка схемы электрической принципиальной программатора.

1.1. Описание работы программатора.

Запись в регистры DD2–DD5 ин­формации, поступающей от компьюте­ра по линиям DATA1–DATA8, происхо­дит по спадам импульсов отрицатель­ной полярности на входах С, поступаю­щих от дешифратора DD1. В регистре DD3 и части регистра DD4 хранят 13-разрядный адрес ячейки внутренней памяти микроконтроллера, в DD5 – байт данных, предназначенных для за­писи в эту ячейку, в DD2 и свободных от адреса разрядах DD4 – код управле­ния. В таблице 1[1] приведены режимы работы контроллера и соответствующие напряжения на выводах, временные диаграммы на рис. 1, а значения временных параметров указаны в таблице 2[1].

Таблица 1.

 

Режим

RST

ALE/

PP

Р2.6

Р2.7

Р3.6

Р3.7

 

Запись программы

1

0

5 и 12В

0

1

1

1

 

Чтение программы

1

0

1

1

0

0

1

1

 

Стирание программы

1

0

*

5 и 12В

1

0

0

0

 

Считывание кодов идентификации

1

0

1

1

0

0

0

0

*Для стирания программы длительность импульса  должна быть не менее 10 мс

 

Цепь R13-C1 при включении пита­ния приводит регистр DD2 в исходное состояние, предотвращая случайное искажение содержимого памяти про­граммируемого микроконтроллера.

Шинный формирователь DD6 служит для передачи данных с выходов микро­контроллера на линии DATA1–DATA8. Выходы микросхемы DD6 не должны быть активными, когда LPT-порт рабо­тает "на вывод". Это учтено в

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

 

Таблица 2.

Значение

Параметр

минимальное

максимальное

Fcl,MГц

3

12

tcl, НС

80

330

tAVGL

48*tcl

tGHAX

48*tcl

tDVGL

48*tcl

tGHDX

48*tcl

tehsh

48*tcl

tSHGL, мкс

10

tGHSL, мкс

10

tGLGH, мкс

1

110

t

48*tcl

tELQV

48*tc

tehqz

48*tcl

tGHBL, мкс

1

twc, мс

2

 Резисторы R1–R12 уменьшают "звон", сопровождающий перепады сигналов на линиях LPT-порта и защи­щают его от перегрузок. Когда выходы элементов компьютера, подключенные к линиям порта, и выходы некоторых элементов программатора, в том числе самой программируемой микросхемы, находятся в высокоимпедансном со­стоянии, резисторы наборов DR1–DR3 поддерживают в соответствующих це­пях высокий логический уровень.

Программируемые микросхемы ус­танавливают в одну из двух панелей; АТ89С1051, АТ89С2051, АТ89С4051 в корпусе DIP-20 – в XS1; АТ89С51 и другие в корпусе DIP-40 – в XS2. Кварцевый резонатор 201 частотой 6 МГц с конденсаторами С4 и С5 необ­ходим, чтобы во время программирова­ния работал внутренний тактовый гене­ратор микроконтроллера, установлен­ного в панель XS2. Тем, которые уста­навливают в панель XS1, резонатор не требуется. На контакт 5 этой панели по­ступают тактовые импульсы, сформи­рованные программно.

 Питающее напряжение на разъем Х1 программатора подают от внешнего ис­точника. Им может быть, например, се­тевой адаптер видеоприставки "SEGA Mega Drive-II". Хотя при номинальной нагрузке (1 А) его выходное напряже­ние не превышает 11В, при токе 70...90мА, потребляемом программа­тором, оно возрастает до 14...15 В.

Напряжение 5 В для питания микро­схем (в том числе программируемой) получают с помощью интегрального стабилизатора DA1. Напряжение на вы­ходе стабилизатора DA2 при низком ло­гическом уровне на выводе 18 шинного формирователя DD7 – 12 В. Точное значение устанавливают подстроечным резистором R21. При высоком логичес­ком уровне на выводе 18 открывшийся транзистор VT2 подключает параллель­но R21 еще один подстроечный резис­тор R19, что уменьшает выходное на­пряжение стабилизатора DA2 до 5 В.

Скорость нарастания напряжения на выходе стабилизатора после смены вы­сокого уровня на выводе 18 DD7 на низкий зависит от емкости конденсатора С14. При слишком большой его емкости и высокой скорости работы управляю­щего компьютера несколько младших ячеек FLASH-памяти микроконтроллера могут оказаться запрограммированны­ми с ошибками.

Выходное напряжение стабилизато­ра DA2 поступает на вывод 31 (EA/VPP) панели XS2 непосредственно, а на вы­вод 1 панели XS1 (RST/VPP) – через ключ на транзисторе VT1. При напряже­нии 12 В ключ открыт независимо от ло­гического уровня на выводе 16 регист­ра DD2. а при 5 В – только в случае, ес­ли этот уровень низкий.

Пониженная яркость свечения све­тодиода HL2 свидетельствует о напря­жении 5 В на выходе DA2 и о том, что программируемая микросхема нахо-

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

Вилку Х2 программатора соединяют с розеткой LPT-порта IBM-совместимо­го компьютера кабелем длиной до 2 м. В компьютере должен быть включен расширенный режим работы LPT-порта (ЕСР/ЕРР). В современных системных блоках он действует по умолчанию. Ес­ли это не так, режим порта можно изме­нить, запустив при начальной загрузке компьютера программу BIOS SETUP (пункты меню "Integrated Peripherals"– "Parallel Port Mode").

1.2. Модернизация схемы.

При питании от маломощного сете­вого адаптера и пониженном сетевом напряжении на программатор может поступать всего 12...13 В. Для стабили­затора DA1 такая ситуация благоприят­на (на нем рассеивается меньшая мощ­ность). А вот стабилизатор DA2 может выйти из рабочего режима, в результа­те чего напряжение, подаваемое на программируемый микроконтроллер, упадет ниже допустимых 11,5 В. Опыт показывает, что микросхемы фирмы Atmel успешно программируются и при 10,5 В. Однако гарантировать этого нельзя.

Если применить в стабилизаторе микросхему КР1184ЕН2 или ее прото­тип LP2951CL фирмы National Semiconductor (имеется на многих ма­теринских платах компьютеров), можно добиться надежной работы программа­тора при уменьшении напряжения пита­ния до 11,8 В.

Стабилизатор собирают по схеме, изображенной на рис. 2, и подключа­ют к показанным на рис. 1 точкам А, Б и В. Микросхема DA2, транзистор VT2, резисторы R18–R21 и конденсатор С14 из программатора должны быть исключены.

Диод VD1 (см. рис. 2) при высоком логическом уровне в точке А закрыт, и выходное напряжение 5±0,03 В задает прецизионный делитель напряжения, находящийся внутри микросхемы DA1. При низком уровне в точке А диод открыт, резисторы R1 и R2 шунтируют од­но из плеч внутреннего делителя. Вы­ходное напряжение возрастает до 12 В (его регулируют подстроечным резистором R2). Конденсатор С1 подавля­ет выбросы напряжения при переход­ных процессах. Его емкость (аналогично конденсатору С14 на рис. 1) не должна быть слишком большой.

Микросхема КР1184ЕН2 имеет вну­тренний детектор понижения выходно­го напряжения, который срабатывает при его уменьшении более чем на 5 % от установленного значения. В резуль­тате открывается транзистор VT1 и включается светодиод HL1. Нагру­зочная способность выхода невелика, поэтому номинал резистора R4 умень­шать нельзя.

1.3. Параллельный интерфейс: LPT-порт.

Порт параллельного интерфейса был введен в PC для подключения принтера –LPT-порт (Line PrinTer – построчный принтер).

Адаптер параллельного интерфейса представляет собой набор регистров, расположенных в пространстве ввода/вывода. Регистры порта адресуются от­носительно базового адреса порта, стандартными значениями которого являются 3BCh, 378h и 278h. Порт имеет внешнюю 8-битную шину данных, 5-битную шину сигналов состояния и 4-битную шину управляющих сигналов. BIOS поддерживает до четырех LPT-портов (LPT1-LPT4) своим сервисом – прерыванием INT 17h, обеспечивающим через них связь с принтерами по интерфейсу Centronics. Этим сервисом BIOS осуществляет вывод символа, инициализацию интерфейса и принтера, а также опрос состояния принтера.

Традиционный порт SPP (Standard Parallel Port) является однонаправленным портом, на базе которого программно реализуется протокол обмена Centronics. Порт обеспечивает возможность вырабатывания запроса ап­паратного прерывания по импульсу на входе Аск#. Сигналы порта выводятся на разъем DB-25S (розетка), установленный непосредственно на плате адаптера (или системной плате) или соединяемый с ней плоским шлейфом.

Стандартный порт имеет три 8-битных регистра, расположенных по сосед­ним адресам в пространстве ввода/вывода, начиная с базового адреса порта (BASE).

Data Register (DR) – регистр данных, адрес = BASE. Данные, записанные в этот порт, выводятся на выходные линии интерфейса (контакты разъема: 2 – 9). Данные, считанные из этого регистра, в зависимости от схемотехники адаптера соответствуют либо ранее записанным данным, либо сигналам на тех же линиях.

Status Register (SR) – регистр состояния, представляющий собой 5-битный порт ввода сигналов состояния принтера (биты SR.4-SR.7), адрес = BASE+1. Бит SR.7 инвертируется – низкому уровню сигнала соответствует единичное значение бита в регистре, и наоборот.

Назначение бит регистра состояния (в скобках даны номера контактов разъема):

SR.7 – Busy – инверсные отображения состояния линии Busy (11);

SR.6 – АСК (Acknowledge) – отображения состояния линии Аск# (10);

SR.5 – РЕ (Paper End) – отображения состояния линии Paper End (12);

SR.4 – Select – отображения состояния линии Select (13). Единичное зна­чение соответствует сигналу о включении принтера;

SR.3–Error – отображения состояния линии Error (15);

SR.2 – PIRQ – флаг прерывания по сигналу Аск# (только для порта PS/2). Бит обнуляется, если сигнал Аск# вызвал аппаратное прерывание. Единичное значение устанавливается по аппаратному сбросу и после чтения регистра состояния.

SR[1-0] – зарезервированы.

Control Register (CR) – регистр управления, адрес = ВА5Е+2. Как и регистр данных, этот 4-битный порт вывода допускает запись  и чтение (биты 0-3), но  его  выходной  буфер  обычно  имеет  тип  открытый  коллектор.   Это позволяет   более   корректно   использовать   линии   данного   регистра   как входные  при  программировании  их  в  высокий уровень.  Биты 0, 1, 3 инвертируются – единичному значению в регистре соответствует низкий уровень сигнала, и наоборот.

Назначение бит регистра управления: CR[7-6] – зарезервированы.

CR.5 – Direction – бит управления направлением передачи (только для портов PS/2). Запись единицы переводит порт данных в режим ввода.

CR.4 – ACKINTEN (Ack Interrupt Enable) – единичное значение разрешает прерывание по спаду сигнала на линии Ackff – сигнал запроса следующего байта.

CR.3 – Select In – единичное значение бита соответствует низкому уровню на выходе Selecting (17) – сигналу, разрешающему работу принтера по интерфейсу Centronics.

CR.2 – Init – нулевое значение бита соответствует низкому уровню на выходе Imt# (16) – сигнал аппаратного сброса принтера.

CR.1 – Auto LF – единичное значение бита соответствует низкому уровню на выходе Auto LF# (14) – сигналу на автоматический перевод строки (LF – Line Feed) по приему байта возврата каретки (CR – Carriage Return).

CR.0 –Strobe – единичное значение бита соответствует низкому уровню на выходе Strobeff (1) – сигналу стробирования выходных данных. Запрос аппаратного прерывания (обычно IRQ7 или IRQ5) вырабатывается по отрицательному перепаду сигнала на выводе 10 разъема интерфейса (Аск#) при установке CR.4 = 1. Прерывание вырабатывается, когда принтер подтвер­ждает прием предыдущего байта.

Стандартный порт сильно асимметричен – при наличии 12 линий (и бит), нормально работающих на вывод, на ввод работает только 5 линий состояния. Если необходима симметричная двунаправленная связь, на всех стандартных портах работоспособен режим полубайтного обмена – Nibble Mode. В этом режиме, называемым также и Hewlett Packard Bitronics, одновременно передаются 4 бита данных, пятая линия используется для квитирования.

В процессе начального тестирования BIOS проверяет наличие парал­лельных портов по адресам 3BCh, 378h и 278h и помещает базовые адреса обнаруженных портов в ячейки BIOS DATA AREA 0:0408h, 040Ah, 040Сh, 040Еh. Эти ячейки хранят адреса портов с логическими именами LPT1-LPT4. В ячейки 0:0478h, 0479h, 047Аh, 047Вh заносятся константы, задающие выдержку тайм-аута для этих портов.

Поиск портов обычно ведется по базовому адресу. Если считанный байт совпал с записанным, считается, что найден LPT-порт, и его адрес помещают в ячейку BIOS DATA AREA. Адрес порта LPT4 BIOS самостоятельно установить не может, поскольку в списке стандартных адресов поиска имеются только три вышеуказанных.

Обнаруженные порты инициализируются – записью в регистр управления формируется и снимается сигнал Initff, после чего записывается значение 00h, соответствующее исходному состоянию сигналов интерфейса. Программное прерывание BIOS INT 17h обеспечивает следующие функции поддержки LPT-порта:

00h – вывод символа из регистра AL по протоколу Centronics. Данные помещаются в выходной регистр и после готовности принтера формируется строб.

01h – инициализация интерфейса и принтера.

02h – опрос состояния принтера.

При вызове INT 17h номер функции задается в регистре АН, номер порта – в регистре DX (0 – LPT1, 1 – LPT2...). При возврате после любой функции регистр АН содержит код состояния – биты регистра состояния SR[7:3] (биты 6 и 3 инвертированы) и флаг тайм-аута в бите 0. Флаг тайм-аута устанавливается при неудачной попытке вывода символа. Недостатки стандартного порта частично устраняют новые типы портов, поя­вившихся в компьютерах семейства PS/2.

Двунаправленный порт (Type 1 parallel port) – интерфейс, введенный с PS/2. Такой порт кроме стандартного режима может работать в режиме ввода или двунаправленном. Протокол обмена формируется программно, а для указания направления передачи в регистр управления порта введен специальный бит: при CR.5=0 буфер данных работает на вывод, при CR.5=1 – на ввод.

Порт с прямым доступом к памяти (Туре 3 DMA parallel port) применялся в PS/2 моделей 57, 90, 95. Этот тип был введен для повышения пропускной способности и разгрузки процессора при выводе на принтер. Программе, работающей с данным портом, требовалось только задать блок данных в памяти, подлежащих выводу, и вывод по протоколу Centronics производился без участия процессора.

1.4. Детали и конструкция.

Программатор собран на двусторон­ней печатной плате размерами 140x140 мм. Можно собрать программа­тор и на макетной плате навесным мон­тажом. Учтите, что конденсаторы С4, С5 и кварцевый резонатор ZQ1 должны быть расположены как можно ближе к контактам 18, 19 панели XS2. Свобод­ные входы микросхем DD1 (выводы 13–15), DD2 (вывод 8) и DD7 (выводы 15, 17) необходимо соединить с их об­щим выводом или выводом питания. Это повысит помехоустойчивость прибора.

Все цифровые микросхемы можно заменять их функциональными анало­гами серий К555, КР1533 или импорт­ными. Транзисторы VT1, VT2 – любые маломощные соответст­вующей структуры, желательно с мини­мальным падением напряжения на уча­стке коллектор–эмиттер открытого транзистора.

Подстроечные резисторы R19, R21 – СПЗ-19А. Наборы резисторов DR1–DR3 – НР1-4-9М могут быть за­менены на НР1-4-8М, на зарубежные серии 9А или на соответствующее чис­ло обычных малогабаритных резисто­ров указанных на схеме номиналов. Ре­зисторы R1–R12 можно разместить внутри корпуса вилки Х2.

Панели XS1 и ХS2 должны выдержи­вать многократную установку и изъятие микросхем. Лучше всего применить ZIF-панели (с нулевым усилием уста­новки), предназначенные для микро­схем с расстоянием между рядами кон­тактов 7,5 мм (XS1) и 15 мм (XS2). Годят­ся и универсальные панели, допускаю­щие установку как "узких", так и "широ­ких" микросхем.

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

1.5. Выбор серии интегральных микросхем.

Выбор серии ИС для селектора выбора программ будем производить по матрице параметров. Выделим 3 наиболее подходящие серии: К155, К531 и К555. Качество серий будем оценивать по следующим параметрам: время задержки, потребляемый ток, коэффициент разветвления, коэффициент помехоустойчивости, условия эксплуатации (диапазон температур, вибрации, многократные удары) и стоимости. Определим коэффициенты значимости параметров и сведем все данные в таблицу 3.

Таблица 3.

 

Серия

Тип логики

Параметры

 

tзад

Iпотр

Кразв.

Кпом

Условия эксплуатации

Стои­мость

 

DT

Вибрации

Удары

 

К155

ТТЛ

30

60

10

0.3

80

10

20

1.2

 

К531

ТТЛШ

9

70

10

0.4

80

5

15

1.5

 

К555

ДТЛШ

20

14

20

0.5

100

5

15

2.1

S

Весовой коэф.

0.05

0.3

0.05

0.05

0.05

0.15

0.2

0.15

1.00

Составим матрицу параметров X:

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

Нормируем параметры матрицы Y по формуле  (1.2) и запишем новую матрицу нормированных параметров А:

Определим значение оценочной функции для каждой серии ИС.

QK155=0.32;  QK531=0.44; QK555=0.217

Лучшей серии интегральных микросхем соответствует меньшее значение оценочной функции Qi. Из данных расчетов следует, что стоит выбрать серию К555. Это объясняется в первую очередь малым током потребления, широким  диапазоном температур и высокой прочностью, что очень важно для нашего программатора.

2. Разработка конструкции программатора.

2.1. Выбор конструкции печатной платы и числа слоев.

Выбор конструкции печатной платы (ПП) мы будем осуществлять по таким критериям:

ü   габаритный;

ü   критерий плотности рисунка печатных проводников;

ü   материал основания;

ü   число слоев;

ü   технологичность конструкции.

Размеры ПП выбираются исходя из плотности компоновки размещения N (ИС/см2), которая зависит от размеров печатной платы, и исходя из требований к температурным диапазонам работы печатной платы, механической прочности, разрешающей способности фотолитографии, и др.

Геометрические размеры печатных проводников (ширина, расстояние между проводниками и др.) определяются классом плотности печатного монтажа. По этому критерию печатные платы делят на 5 классов. Исходя из всех основных требований к печатному узлу (быстродействие, минимальная стоимость и габариты, надежность) выбираем 3-ий класс плотности печатного монтажа:

ü    плотность монтажа – средняя;

ü    минимальная ширина проводника b, мм – 0,25;

ü    расстояние между краями проводников S, мм – 0,25;

ü    разрешающая способность RС, пр/мм – 2;

ü    предельный размер печатной платы, мм –  200х200.

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

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

2.2. Выбор материала печатной платы.

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

Для изготовления ПП широкое распространение получили слоистые диэлектрики, состоящие из наполнителя и связующего вещества – гетинакс и стеклотекстолит.

В качестве материала основания был выбран двухсторонний фольгированный стеклотекстолит (СФ-2-35-1,5 ГОСТ 10316–78) толщина фольги – 35 мкм, толщина основы – 1,5 мм. Этот материал был выбран благодаря его высоким характеристикам: широкий диапазон рабочих температур (-60…+1500С), низкое водопоглощение (0,2%...0,8%), высоким объемным и поверхностным сопротивлением.

2.3. Конструкторско-технологический расчет элементов печатного монтажа.

2.3.1. Расчет элементов печатного монтажа по постоянному току.

1). Определение минимальной ширины печатного проводника по постоянному току:

bmin =    (2.1)

jдоп = 48 A/мм2 – допустимая плотность тока с hф  = 35 мкм, изготовленных комбинированным позитивным методом;

t – толщина проводника: t =hф + hхм + hгм   (2.2)

hхм – (0,005мм  толщина химически осаждённой меди;

hгм – (0,05мм  толщина гальванически осаждённой меди;

t = 0,035 +0,0065 + 0,055 = 0,0965 мм

Imax – максимальный постоянный ток в проводнике определяем из анализа схемы:

Таблица 4.

К555ИР35

К555ИР23

К555ИД14

К555АП3

К555АП5

кол-во

1

3

1

1

1

I,mA

13.5

13.5

13

15

15

×13,6 + 13 + 15 + 15 = 193,5 mA.

bmin = = 0,042 мм

2). Определение минимальной ширины печатного проводника исходя из допустимого падения напряжения на нём:

bmin =     (2.3)

l – длина самого длинного проводника;

Епит;  r = 0,0175 Ом×мм2

bmin = = 0,063 мм

2.3.2. Определение номинального значения монтажных отверстий.

d =       (2.4)

;

;

r – разность между минимальным диаметром монтажного отверстия и максимальный диаметром вывода

Для ИС:                                    d = 0,6+0,1+0,5 = 0,8

2.3.3. Определение диаметра контактной площадки для двухсторонних ПП изготовленных комбинированным позитивным методом.

Dmin = D1 min + 1.5hф + 0.03              (2.5)

D1 min – минимально эффективный диаметр площадки

D1 min = 2(bно + dmax/2 + dq + dp)         (2.6)

dmax = d + Dd + (0.1 ¸  0.15)  – максимальный диаметр просверленного отверстия (1.4.4.3);

 Dd = +0,05 для d  1 мм – допуск на отверстия;

dq, dp – допуски на расположение отверстий и контактных площадок;

dmax = 0,8 + 0,05 +0,15 = 1

D1 min = 2(0,1 + 1/2  + 0,015 +0,005) » 1,2

Dmin = 1,2 + 1,5×1,5 + 0,03 = 1 » 1,3

Dmax = Dmin + (0.02 ¸ 0.06) = 1.32

2.3.4. Определение  ширины печатного проводника.

Минимальная ширина печатного проводника для ДПП изготовленных комбинированным позитивным методом:

bmin = ф +0.03 = 0,25 + 1,5×0,035 + 0,03 = 0,33

максимальная ширина:

bmax = bmin  + (0.02 ¸ 0.06) = 0.33 + 0.02 = 0.35

2.3.5. Определение минимального расстояния между элементами проводящего рисунка.

     а) минимальное расстояние между проводником и КП:

S1 min = L0 – (Dmax/2 + dp + bmax/2 + dсп)      (2.7)

L0  = 1,25 мм – расстояние между линиями координатной сетки, на которых расположены проводники и центры контактных площадок

S1 min = 1,25 – (1,32/2 +0,05 +0,35/2 + 0,05) = 0,315

      б) минимальное расстояние между КП:

S2 min = L1 – (Dmax + 2dp)           (2.8)

L1 = 2,5 мм – расстояние между центрами контактных площадок, кратное шагу координатной сетки

S2 min = 2,5 – (1,32 +2×0,05) = 1,08

    в)  минимальное расстояние между проводниками:

S3 min = L0 – ( bmax + 2dсп) = 1,25 – (0,35 + 2×0,05) = 0,8

При максимальном диаметре контактной площадки и координатной сетке 1,25 мм между выводами ИС можно провести печатный проводник.

2.4. Электрический расчёт печатной платы.

2.4.1. Определение падения напряжения на печатных проводниках.

 

r = 0,0175 Ом×мм2/м – удельное сопротивление меди;  

lпрмах – самый длинный проводник.

2.4.2. Определение мощности потерь.

×3,14××10-6×52×0,002=0,045 мВт

f =1(для шины питания); 

Еп – напряжение питания;  F – суммарная площадь металлизации; 

hпп – толщина печатной платы.

2.4.3. Определение взаимной емкости параллельных проводников.

   (2.9)

 (S=0,8 мм – зазор между краями проводников, lп –  длинна взаимного перекрытия проводников).    

2.4.4. Определение взаимной индуктивности печатных проводников.

(lшп – суммарная длина ШП и ШЗ)

Lшп = 2×880(2.3×lg+ 0.2235×10-3 = 0,137 мкГн

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

2.5. Тепловой расчет ПП

Компонентом с максимальной выделяющейся тепловой мощностью является микросхемный стабилизатор КР142ЕН5А.

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

РТЕПЛ = РСТАБ + РПОТР = UAK×ICTAБ + (UAKK - UПИТ)  IИНД         (2.11)

РТЕПЛ = 12×0,01 + 7×0,1935 = 1,4745 Вт.

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

3. Проектирование печатного узла в САПР PCAD – 2001.

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

В одном из вариантов использования модулей системы P-CAD 2001 при выполнении процедур проектирования узлов печатных плат порядок выполнения следующий.

1).  Создание условных графических обозначений (УГО) отдельных эле­ментов электрических схем с помощью редактора символов Р-CAD Symbol Editor.

Графический редактор P-CAD Symbol Editor содержит набор команд, позволяющих создавать символы элек­трорадиоэлементов (ЭРЭ). Symbol Editor ра­ботает с файлами отдельных символов (.sym) и библиотек (.lib).

2). Разработка посадочных мест для всех конструктивных элек­трорадиоэлементов электрической принципиальной схемы с помощью редактора корпусов P-CAD Pattern Editor.

Графический редактор P-CAD Pattern Editor имеет набор команд, позволяющих создавать и редактировать посадочные мес­та для установки ЭРЭ на печатных платах. Программа работает с файлами отдельных посадочных мест (.pat) и библиотек (.lib).

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

3).  Упаковка выводов конструктивных элементов (перенос схе­мы на ПП) средствами программы P-CAD Library Executive.

При проектировании печатных плат необходимы сведения о схемных образах ЭРЭ и посадочных местах для них. Программы размещения и трассировки должны иметь информацию о соответствии каждого конкретного вывода условного графического обозначения выводу в корпусе элемента. В версии P-CAD 2001 эта работа выполняется автоматически программой Library Executive (Администратор библиотек). Для этого соответствующие данные заносятся в так называемые упаковочные таблицы, указывающие основные характеристики используемых ЭРЭ. В программе предусмотрены эффективные приемы работы, аналогичные приемам программных продуктов Microsoft Office. Эта программа не является графическим редактором. Она лишь сводит введенную ранее графическую информацию в единую систему — библиотечный элемент, в котором сочетаются несколько образов представления элемента: образ на схеме, посадочное место и упаковочная информация.

4).  Разработка схемы электрической принципиальной с помо­щью графического редактора P-CAD Schematic.

Графический редактор P-CAD Schematic предназначен для разработки электрических принципиальных схем с использовани­ем условных графических обозначений элементов. При этом УГО ЭРЭ могут извлекаться из соответствующей библиотеки или со­здаваться средствами самой программы.

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

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

5).  Формирование контура печатной платы и размещение конст­руктивных элементов на ней с помощью графического редактора печатных плат P-CAD PCB.

Графический редактор P-CAD РСВ предназначен для выполне­ния работ, связанных с технологией разработки и конструирова­ния узлов печатных плат. Он позволяет упаковывать схемы на плату, задавать размеры ПП, ширину проводников и величину ин­дивидуальных зазоров для разных проводников, задавать размеры контактных площадок и диаметры переходных отверстий, экран­ные слои. Редактор позволяет выполнять маркировку ЭРЭ, их раз­мещения, неавтоматическую трассировку проводников и формиро­вать управляющие файлы для технологического оборудования.

Запуск программы осуществляется через кнопку «Пуск» с по­следующим выполнением в выпадающем меню команд программы P-CAD 2001 и P-CAD РСВ. В том случае, если на компьютере за­пущена одна из программ P-CAD 2001, необходимо щелкнуть ЛК по команде Utils. Откроется выпадающее меню, в котором неско­лько пунктов начинаются с аббревиатуры P-CAD. Щелчок мыши по P-CAD РСВ запустит программу. При этом действующая про­грамма не закроется, а только свернется, и к ней всегда можно бу­дет вернуться.

6).  Трассировка проводников печатных плат:

-  в ручном и интерактивном режимах средствами графиче­ского редактора печатных плат P-CAD PCB;

-  в автоматическом режиме программами модуля P-CAD Autorouters, вызываемым из управляющей оболочки Р-CAD РСВ.

4. Расчёт показателей надёжности.

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

Таблица 5. Параметры надежности элементов схемы

 

Наименование элементов

Ni

λоэ, ч-1

КН

at

aЭ

0KнataB

 

Микросхемы К555

8

0,02·10-6

0,6

3

10

2,88·10-6

 

Микросхемы КР142 ЕН

1

0,02·10-6

0,6

3

10

0,36·10-6

 

Резисторы С2-23

3

0,002·10-6

0,5

3

10

0,09·10-6

 

Конденсаторы керамические

1

0,03·10-6

0,25

3

10

0,225·10-6

 

Двухсторонняя печатная плата

1

0,2·10-6

1

3

10

6·10-6

 

Пайка выводов ЭРЭ

208

0,01·10-6

1

3

10

62,4·10-6

 

Контакт разъема

36

0,02·10-6

1

3

10

21,6·10-6

 

 

Ni – количество элементов;

λоэ – интенсивность отказов в нормальном режиме работы;

КН – коэффициент нагрузки; at – температурный коэффициент;

аЭ – коэффициент, учитывающий условия эксплуатации;

Коэффициенты нагрузки электрорадиоэлементов находятся по формулам:

ü для микросхем   (4.1), где Iвыхmax – максимальный выходной ток; Iвхi – входной ток микросхем; n – число нагруженных входов;

ü для конденсаторов    (4.2), где U – напряжение на обкладках;

ü для резисторов    (4.3), где P – рассеиваемая мощность.

1)         Среднее время наработки на отказ:

2)         Вероятность безотказной работы устройства в течение 1 года  работы:

3)         Вероятность безотказной работы устройства в течение 5 лет работы:

5. Технологические процессы при изготовлении печатной платы.

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

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

1). Механическая обработка.

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

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

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

2). Производство покрытий.

Производство ПП известными методами (субтрактивным, адди­тивным, послойного наращивания), так же как и производство ИМ, не обходится без нанесения различных металлических и неметаллических покрытий. Видом покрытий, необходимой точностью, размерами основа­ния и покрываемой поверхности определяется большое разнообразие существующих методов нанесения покрытий. Для производ­ства ПП значение имеют только те из них, которые обеспечивают при массовом производстве нанесение покрытий толщиной от 1 до 70 мкм. Важнейшими методами получения металлических и неметаллических покрытий являются трафаретная печать и термовакуумное испарение. Для получения только металлических покрытий применяют химическую и гальваническую металлизацию, а для получения только неметалличес­ких покрытий — метод фотопечати (с нанесением фоторезиста погру­жением, вальцеванием и центрифугированием) и офсетную печать.

Рассмотрим более подробно субтрактивную технологию изготовления ПП.

Рис.1

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

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

Анализ замеров ширины линий после травления медной фольги по защитному изображению в пленочном фоторезисте показывает, что интервал разброса значений замеров увеличивается с увеличением толщины фольги. Например, при травлении фольги толщиной 5 мкм интервал разброса ширины порядка 7 мкм, при травлении фольги толщиной 20 мкм разброс составляет 30 мкм , а при травлении фольги толщиной 35 мкм разброс составляет около 50 мкм. Искажения ширины медных проводников по отношению к размерам ширины изображений последних в фоторезисте и на фотошаблоне - негативе смещаются в сторону заужения.

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

Для получения изображений используется пленочный фоторезист толщиной 15-50 мкм. Толщина фоторезиста в случае метода "тентинг" диктуется требованиями целостности защитных завесок над отверстиями на операциях проявления и травления, проводимых разбрызгиванием растворов под давлением 1,6- 2 атм и более. Фоторезисты толщиной менее 45 - 50 мкм на этих операциях над отверстиями разрушаются. Для обеспечения надежного "тентинга", диаметр контактной площадки должен быть в 1,4 раза больше диаметра отверстия.

Минимальный поясок изображения контактной площадки (ширина между краем контактной площадки и отверстием) должен быть не менее 0,1 мм.

Рис. 3

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

Из вышеизложенного следует, что субтрактивная технология имеет ограничения по разрешению, т.е. минимально воспроизводимая ширина проводников и зазоров порядка 50 мкм при толщине проводников 5-9 мкм , 100-125 мкм при толщине проводников 20 -35 мкм или 150 - 200 мкм при толщине проводников 50 мкм. Для получения логических слоев с металлизированными переходами с более плотным печатным рисунком, с шириной проводников 125 мкм и менее, например, 100 мкм, при их толщине 50 мкм, используется технологический процесс по субтрактивной технологии травлением по металлорезисту (3-й вариант субтрактивной технологии) с использованием диэлектрика с тонкомерной фольгой, толщиной 5 - 9 мкм. В этом случае предварительная металлизация стенок отверстий и поверхности фольги заготовок диэлектрика производится на минимально возможную толщину 8 - 10 мкм. Условия получения изображения в пленочном фоторезисте отличны от условий процесса "тентинга". А именно, для получения изображений используются тонкие пленочные фоторезисты с более высоким разрешением и гальваностойкостью. Подготовка поверхности подложки под наслаивание пленочного фоторезиста из-за небольшой толщины фольги и металлизированного слоя и во избежание их повреждения, проводится химическим способом.

Фоторезист наслаивается по специально подобранному режиму: при низкой скорости наслаивания 0,5 м/мин, при температуре нагрева валков 115 град.С +-5 град.С, на подогретые до температуры 60 - 80 град.С заготовки. При экспонировании изображения используются установки с точечным источником света, обеспечивющие высококоллимированный интенсивный световой поток на рабочую поверхность копировальной рамы с автоматическим дозированием и контролем световой энергии.

Фотошаблоны -позитивы должны иметь резкость края изображения 3 - 4 мкм вместо 7 - 8 мкм у фотошаблонов, применяемых при получении изображений с разрешением 200 - 250 мкм. Проявление изображений проводится в установках проявления - процессорах в стабилизированном трихлорэтане.

Для удаления следов органики с медной поверхности подложки в каналах освобождений в рельефе пленочного фоторезиста проводится обработка в окислителе - в 20% растворе серной кислоты в течение 2-х минут с последующей промывкой в воде и калориферной сушкой в конвейерной струйной установке , после чего для повышения гальваностойкости защитного изображения проводится световое дубление в светокопировальных рамах по режимам экспонирования. Проводящий рисунок формируется в рельефе пленочного фоторезиста последовательным гальваническим осаждением меди на толщину 20-40 мкм и олово/свинца(ПОС-61 ) на толщину 9 -12 мкм или никеля на толщину 3-5 мкм.

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

Из изложенного выше можно сделать вывод: изготовление слоев по субтрактивной технологии с применением диэлектриков с тонкой медной фольгой толщиной 5 - 9 мкм обеспечивается получение проводящего рисунка с минимальной шириной проводников и зазоров между ними порядка 50 мкм при толщине проводников 5-9 мкм и 100 - 125 мкм при толщине проводников 40-50 мкм.

3). Травление.

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

- создания определенного рисунка металлических слоев, расположен­ных на нетравящем диэлектрике (например, для получения рисунка ПП при субтрактивном методе);

- создания мельчайших отверстий микрометрового диапазона в ме­таллической фольге при изготовлении сетчатых трафаретов, масок и фильтров;

- изготовления сложных профильных деталей из тонкой жести и ме­таллической фольги (профильное травление);

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

- создания определенного рельефа поверхности;

- удаления изоляционных слоев для частичного обнажения металли­ческих слоев (подтравливание в МПП).

Наиболее часто техника травления применяется для создания ри­сунка ПП при субтрактивном методе. При этом до 90% металлической фольги, нанесенной на диэлектрик фольгированием или напылением, удаляется, а нужные участки защищаются металлическими или лако­выми слоями, устойчивыми при травлении. В основном подвергают травлению металлы, особенно Сu и ее сплавы, Ni, сплавы Ni и Cr, Al, Au, Ag, Pt, Pd, Та, Ti, Mo, а также сталь. Кроме того, в производстве электронных элементов необходимо травить полупроводниковые мате­риалы (Si, Ge) и диэлектрические слои (как правило, SiO2). Удаления неметаллов стремятся избежать, так как они очень устойчивы при травлении. Имеется всего несколько исключений, например травление стекла и эпоксидной смолы в отверстиях МПП.

4). Прессование.

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

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

Прокладочная стеклоткань обеспечивает:

- прочное сцепление с поверхностью диэлектрических материалов;

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

- ликвидацию воздушных включений между слоями за счет растека­ния смолы;

- необходимые зазоры между слоями;

- заданную толщину МПП.

5). Очистка.

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

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

6. Программная поддержка программатора.

6.1. Программирование микроконтроллеров серии АТ89.

Таблица 6.

Байты сигнатуры

Микросхема

(Hex)

1

2

3

АТ89С1051

11

Нет

AT89C1051U

12

Нет

АТ89С2051

21

Нет

AT89C2051x2

22

Нет

АТ89С4051

41

Нет

АТ89С51

51

FF

АТ89С51-ХХХХ-5

51

05

AT89LV51

61

FF

АТ89С52

52

FF

АТ89С52-хххх-5

52

05

AT89LV52

62

FF

AT89S53

53

Нет

AT89LS53

63

Нет

АТ89С55

1E

55

FF

АТ89С55-ХХХХ-5

1E

55

05

AT89LV55

65

FF

AT89S8252

72

Нет

AT89LS8252

82

Нет

Программа автоматически опреде­ляет тип установленного в одну из па­нелей микроконтроллера, анализируя для этого его сигнатуру – два или три байта, специально записанные в по­стоянной памяти. Перечень сигнатур микроконтроллеров семейства АТ89 приведен в таблице 6. Если все байты сигнатуры равны 0FFH, отсутствует в панели или неисправен микроконт­роллер, а возможно – не включено пи­тание программатора.

Рекомендуемая операционная среда – MS DOS. Пользователям Windows следует запускать программу, предварительно перезагрузив компью­тер в режиме MS DOS или установить такой режим в свойствах файла. Иначе программирование микросхем придет­ся повторять по три-четыре раза под­ряд, пока не прекратятся сообщения об ошибках верификации.

Весь процесс программирования за­нимает не более одной-двух минут, а собственно загрузка FLASH-памяти –  максимум 10...15 с. Команды, список которых выведен на экран монитора, подают, нажимая клавиши с буквами ла­тинского алфавита. Регистр (верхний или нижний) не имеет значения.

Имя двоичного файла, данные из ко­торого должны быть загружены в память микроконтроллера, вводят после пода­чи команды "Чтение файла". Содержи­мое этой памяти можно предваритель­но прочитать и сохранить в аналогичном файле (команда "Запись в файл"). При сверке содержимого памяти с дан­ными из файла (команда "Сверка с фай­лом") возможно появление на экране сообщений, подобных такому:

В  ячейке   FLASH  039A  =  FF   ?!   6В

Это означает, что а ячейке FLASH-па­мяти (памяти программ) микроконтрол­лера по адресу 39АН записан код 0FFH вместо 6ВН, указанного в файле.

6.2. Исходный текст программы.

Программа написана на языке программирования Borland C++

// Программа для AT89C51/C52/C1051/C1052 программатора.

#include <stdio.h>

#include <string.h>

#include <graph.h>

#include <dos.h>

#define FALSE     0

#define TRUE      -1

//#define PBASE  0x378                            // LPT1 базовый адрес

//#define PBASE  0x278                            // LPT2 базовый адрес

//#define PDATA (PBASE+0)

//#define PSTAT  (PBASE+1)

//#define PCTRL  (PBASE+2)

#define CHIPSIZE         2048           // AT89C1052 размер FLASH-памяти

#define TCVT      (1.19318)             // постоянная преобразования времни

                                                // частота порядка 1E6

// Коды четырехбитных функций  (передача в P3.6; P3.5; P3.4; P3.3).

#define        WRITE_DATA    0xe

#define        READ_DATA     0xc

#define        WRITE_LOCK_1          0xf

#define        WRITE_LOCK_2          0x3

#define        CHIP_ERASE      0x1

#define        READ_SIGNATURE    0x0

typedef unsigned char     BYTE;

typedef unsigned int      WORD;

typedef unsigned int      BOOLEAN;

typedef unsigned long int BIGINT;

BOOLEAN load_data( char *, BYTE *, int * );

BOOLEAN save_data( char *, BYTE *, int );

void erase( BYTE * );

void program( BYTE *, BYTE *, int );

void xread( BYTE *, BYTE *, int );

BOOLEAN verify( BYTE *, BYTE *, int );

BOOLEAN blank( BYTE * );

void signature( BYTE * );

void lock( BYTE *, int );

void reset( BYTE * );

void set_function( BYTE );

void set_data( BYTE );

BYTE get_data( void );

void enable_address( BYTE * );

void disable_address( BYTE * );

void enable_data( BYTE * );

void disable_data( BYTE * );

void enable_RST( BYTE * );

void disable_RST( BYTE * );

void pulse_RST( BYTE*, int );

void pulse_XTAL1( BYTE*, int );

void pulse( BYTE *, int );

void delay( BIGINT );

extern void tinit( void );

extern void tend( void );

extern void tread( void );

extern void disable_traps( void );

extern void enable_traps( void );

WORD pctrl, pdata;   // Адреса регистра данных и регистра управления                //LPT-порта

BIGINT tcount = 0L;               // счет таймера

main(argc, argv)

int argc;

char *argv[];

{

          FILE *fptr;

          int fsize;

          BYTE pgmdata[CHIPSIZE], control = 0;

          char *pch, fname[20];

          WORD far *p_lpt1 = (WORD far *)0x00400008;

          WORD far *p_lpt2 = (WORD far *)0x0040000a;

          if ((argc > 1) && ((pch = strpbrk( argv[1], "12" )) != NULL)) {

                   switch (*pch) {

                   case '1':                          // LPT1

                             pdata = *p_lpt1;

                             pctrl = *p_lpt1 + 2;

                             break;

                   case '2':                          // LPT2

                             pdata = *p_lpt2;

                             pctrl = *p_lpt2 + 2;

                             break;

                   }

                   if (pdata == 0) {             // порт неопределен

                             puts( "SPP параллельный порт не установлен." );

                             exit( 255 );

                   }

          } else {

                   puts( "Параллельный порт 1 или 2 должен быть определен в командной строке." );

                   puts( " Использование: <fname> <LPT1 | LPT2>" );

                   exit( 255 );

          }

          tinit();                             // запускаем таймер

          disable_traps();              // запрещаем ctl-C и ctl-break

          while (TRUE) {

                   _clearscreen( _GCLEARSCREEN );

                   puts( "Стирание чипа\t\tD\n" );

                   puts( "Программа из файла \tF" );

                   puts( "Сравнение данных на чипе с файлом\tG" );

                   puts( "Запись в файл\t\tH\n" );

                   puts( "Проверка: чистый чип или нет\t\tI\n" );

                   puts( "Чтение сигнатуры\t\tJ\n" );

                   puts( "Запись Lock Bit 1\tL" );

                   puts( "Запись Lock Bit 2\tN\n" );

                   puts( "Выход\t\t\tX\n\n" );

                   printf( "Ваш выбор: " );

                   gets( pch );

                   *pch |= 0x20;     //конвертируем первый символ в нижний регистр

                   switch (*pch) {

                             case 'd':       // стирание чипа

                                      erase( &control );

                                      break;

                             case 'f':        // запись чипа из файла

                                      printf( "Введите имя файла: " );

                                      gets( fname );

                                      fsize = CHIPSIZE;

                                      if (load_data( fname, pgmdata, &fsize ))

                                                program( &control, pgmdata, fsize );

                                      else {

                                                _clearscreen( _GCLEARSCREEN );

                             puts( "Ошибка открытия или чтения входного файла данных." );

                                                puts( "\nНажмите Enter для продолжения..." );

                                                gets( pch );

                                      }

                                      break;

                             case 'g':       // сравнивание содержимого чипа с файлом

                                      printf( " Введите имя файла: " );

                                      gets( fname );

                                      fsize = CHIPSIZE;

                                      if (load_data( fname, pgmdata, &fsize )) {

                                                if (!verify( &control, pgmdata, fsize )) {

                                                          puts( "\nНажмите Enter для продолжения..." );

                                                          gets( pch );

                                                }

                                      } else {

                                                _clearscreen( _GCLEARSCREEN );

                             puts( " Ошибка открытия или чтения входного файла данных." );

                                                puts( "\nНажмите Enter для продолжения..." );

                                                gets( pch );

                                      }

                                      break;

                             case 'h':       // запись содержимого чипа в файл

                                      printf( " Введите имя файла: " );

                                      gets( fname );

                                      xread( &control, pgmdata, CHIPSIZE );

                                      if (!save_data( fname, pgmdata, CHIPSIZE )) {

                                                _clearscreen( _GCLEARSCREEN );

                             puts("Ошибка открытия или чтения выходного файла данных.");

                                                puts( "\Нажмите Enter для продолжения..." );

                                                gets( pch );

                                      }

                                      break;

                             case 'i':        // проверка: пустой чип или нет

                                      _clearscreen( _GCLEARSCREEN );

                                       if (blank( &control ))

                                                puts( "Устройство чистое" );

                                      else

                                                puts( " Устройство не чистое " );

                                      puts( "\nНажмите Enter для продолжения..." );

                                      gets( pch );

                                      break;

                             case 'j':        // чтение байтов сигнатуры

                                      _clearscreen( _GCLEARSCREEN );

                                      signature( &control );

                                      puts( "\nНажмите Enter для продолжения..." );

                                      gets( pch );

                                      break;

                             case 'l':        // запись Lock Bit 1

                                      lock( &control, 1 );

                                      break;

                             case 'n':       // запись Lock Bit 2

                                      lock( &control, 2 );

                                      break;

                             case 'x':       // выход из программы

                             default:

                                      _clearscreen( _GCLEARSCREEN );

                                      tend();                            // выключаем таймер

                                      enable_traps();              

                                      exit( 0 );

                   }

          }

}

//        Чтение данных из введенного файла в указанный массив. Если

//        файл меньше чем указанное количество байт, читаем полный файл

//        и изменяем количество байт, чтобы отразить меньший размер файла.

//        Сталкиваясь с концом файла раньше, чем удовлетворено количество

//        байт – не ошибка. Если файл больше чем указанное количество байт

//        читаем только указанное количество байт.

BOOLEAN load_data( fname, store, sptr )

char fname[];

BYTE store[];

int *sptr;

{

          FILE *fptr;

          int nbytes;

          if ((fptr = fopen( fname, "rb" )) == NULL)

                   return( FALSE );            // не удается открыть файл

          nbytes = fread( store, 1, *sptr, fptr );

          if (ferror( fptr ))

                   return( FALSE );            // не удается прочитать файл

          if (feof( fptr ))                          // проверка на конец файла

                   *sptr = nbytes;                        // уменьшаем количество байт

          fclose( fptr );

          return( TRUE );

}

//        Запись данных из указанного массива в обозначенный файл.

//        Возвращает булево значение, обозначающее успех или неудачу.

BOOLEAN save_data( fname, store, bcount )

char fname[];

BYTE store[];

int bcount;

{

          FILE *fptr;

          if ((fptr = fopen( fname, "wb" )) == NULL)

                   return( FALSE );            // не удается открыть файл

          if (fwrite( store, 1, bcount, fptr ) != bcount)

                   return( FALSE );            // не удается записать в файл

          fclose( fptr );

          return( TRUE );

}

//        Полная очистка памяти предложенная перед программированием.

void erase( cptr )

BYTE *cptr;

{

          reset( cptr );                                      // сброс по умолчанию

          set_function( CHIP_ERASE );                   // выбор функции

          enable_address( cptr );                      // разрешение func, PROG*

          delay( (BIGINT)(10 * TCVT) );                  // задержка 10мкс

          enable_RST( cptr );                           // RST=12v

          delay( (BIGINT)(15000 * TCVT) );  // задержка 15 мс фронт RST ->PROG*

          pulse( cptr, 10000 );                         // применение 10 мс импульса PROG*

          delay( (BIGINT)(10 * TCVT) );                  // задержка PROG*->adr/data

          reset( cptr );                                      // сброс по умолчанию

          delay( (BIGINT)(15000 * TCVT) );  // задержка 15 мс для спада RST

}

//        Программируем чип содержанием указанного массива данных.

//        Указанное количество байт может быть меньше чем количество

//        байт в массиве или чипе. Программирование всегда начинается с

//        нулевого адреса.

void program( cptr, data, count )

BYTE *cptr, data[];

int count;

{

          WORD addr;

          reset( cptr );                                      // сброс по умолчанию

          pulse_RST( cptr, 10 );                      // сброс счетчика адресов

          set_function( WRITE_DATA );                 // выбор функции

          enable_address( cptr );                      // разрешение function, PROG*

          enable_data( cptr );                           // разрешение шины перед записью

          delay( (BIGINT)(10 * TCVT) );                  // задержка function->RST

          enable_RST( cptr );                           // RST=12v

          delay( (BIGINT)(15000 * TCVT) );  // задержка 15 мс фронт RST ->PROG*

          for (addr=0; addr<count; addr++) {

                   set_data( data[addr] );             // применение data

                   delay( (BIGINT)(10 * TCVT) );        // задержка data->PROG*

                   pulse( cptr, 100 );          // применение 100 мкс импульса PROG*

                   delay( (BIGINT)(1500 * TCVT) );    // задержка 1.5 мс для записи

                   pulse_XTAL1( cptr, 10 );        // увеличиваем счетчик адресов

          }

          reset( cptr );                                      // сброс по умолчанию

          delay( (BIGINT)(15000 * TCVT) );  // задержка 15 мс для спада RST

}                                                                                                                      

//        Чтение содержимого чипа в указанный массив данных

//        Указанное количество байт может быть меньше чем количество

//        байтов в чипе. Чтение всегда начинается с нулевого адреса.

void xread( cptr, data, count )

BYTE *cptr, data[];

int count;

{

          BYTE tmp;

          WORD addr;

          reset( cptr );                                      // сброс по умолчанию

          pulse_RST( cptr, 10 );                      // сброс счетчика адресов

          set_function( READ_DATA );                   // выбор функции

          enable_address( cptr );                      // разрешение function, PROG*

          for (addr=0; addr<count; addr++) {

                   delay( (BIGINT)(10 * TCVT) );        // задержка address->data

                   data[addr] = get_data();

                   pulse_XTAL1( cptr, 10 );        // увеличиваем счетчик адресов

          }

          reset( cptr );                                      // сброс по умолчанию

}

//        Сравнение содержания чипа с указанным массивом данных.

//        Указанное количество байт может быть меньше количества

//        байт в чипе. Сравнение всегда начинается с нулевого адреса.

//        Различия отображаются адресом несовпадающих значений и

//        два байта: один – из памяти микроконтроллера, другой – тем,

//        что ожидали. Возвращенное булево значение показывает

//        было ли успешным сравнение.

BOOLEAN verify( cptr, data, count )

BYTE *cptr, data[];

int count;

{

          BYTE tmp;

          BOOLEAN flag=TRUE;

          WORD addr;

          reset( cptr );                                      // сброс по умолчанию

          pulse_RST( cptr, 10 );                      // сброс счетчика адресов

          set_function( READ_DATA );                   // выбор функции

          enable_address( cptr );                      // разрешение function, PROG*

          for (addr=0; addr<count; addr++) {

                   delay( (BIGINT)(10 * TCVT) );        // задержка address->data

                   if ((tmp = get_data()) != data[addr]) {

                             if (flag) {              

                                      _clearscreen( _GCLEARSCREEN );

                             }

              printf("Несовпадение в %.4X  is %.2X sb %.2X\n", addr, tmp, data[addr] );

                             flag = FALSE;

                   }

                   pulse_XTAL1( cptr, 10 );        // увеличиваем счетчик адресов

          }

          reset( cptr );                                      // сброс по умолчанию

          return( flag );

}

//        Определяем, стерт ли чип. Расположение отказов не определяется.

//        Возвращенное булево значение указывает чистый чип или нет.

BOOLEAN blank( cptr )

BYTE *cptr;

{

          BYTE tmp;

          BOOLEAN flag = TRUE;                           // значение по умолчанию – чистый

          WORD addr;

          reset( cptr );                                      // сброс по умолчанию

          pulse_RST( cptr, 10 );                      // сброс счетчика адресов

          set_function( READ_DATA );                   // выбор функции

          enable_address( cptr );                      // разрешаем function, PROG*

          for (addr=0; addr<CHIPSIZE; addr++) {

                   delay( (BIGINT)(10 * TCVT) );        // задержка address->data

                   if (get_data() != 0xff)               // сравнение со стертым значением

                             flag = FALSE;                // не чистый

                   pulse_XTAL1( cptr, 10 );        // увеличиваем счетчик адресов

          }

          reset( cptr );                                      // сброс по умолчанию

          return( flag );

}

//        Читаем байты сигнатуры.

//        Первый байт в нулевом адресе, второй в первом. Когда установлены в

//        1Еh и 11h соответственно они идентифицируют АТ89С1051 контроллер.

//        Третий байт во втором адресе указывает программирование 12 вольтами,

//        когда установлен в FFh.

void signature( cptr )

BYTE *cptr;

{

          BYTE tmp1, tmp2, tmp3;

          reset( cptr );                                      // сброс по умолчанию

          pulse_RST( cptr, 10 );                      // сброс счетчика адресов

          set_function( READ_SIGNATURE );                 // выбор функции

          enable_address( cptr );                      // разрешаем func, PROG*

          delay( (BIGINT)(10 * TCVT) );                  // задержка address->data

          tmp1 = get_data();                            // чтение первого байта

          pulse_XTAL1( cptr, 10 );                 // увеличиваем счетчик адресов

          delay( (BIGINT)(10 * TCVT) );                  // задержка address->data

          tmp2 = get_data();                            // чтение второго байта

          pulse_XTAL1( cptr, 10 );                 // увеличиваем счетчик адресов

          delay( (BIGINT)(10 * TCVT) );                  // задержка address->data

          tmp3 = get_data();                            // чтение третьего байта

          printf( "signature byte 1:  %.2X\n", tmp1 );

          printf( "signature byte 2:  %.2X\n", tmp2 );

          printf( "signature byte 3:  %.2X\n", tmp3 );

          reset( cptr );                                      // сброс по умолчанию

}

//        Запись указанных Lock Bits.

void lock( cptr, lbit )

BYTE *cptr;

int lbit;

{

          reset( cptr );                                      // сброс по умолчанию

          switch (lbit) {                                    // выбор функции

                   case 1:

                             set_function( WRITE_LOCK_1 );

                             break;

                   case 2:

                             set_function( WRITE_LOCK_2 );

                             break;

          }

          enable_address( cptr );                      // разрешение function, PROG*

          enable_RST( cptr );                           // RST=12В

          delay( (BIGINT)(15000 * TCVT) );  // задержка 15 мс фронт RST ->PROG*

          pulse( cptr, 100 );                    // применение 100 мкс импульса PROG*

          delay( (BIGINT)(10 * TCVT) );                  // задержка PROG*->adr/data

          reset( cptr );                                      // сброс по умолчанию

          delay( (BIGINT)(15000 * TCVT) );  // задержка 15 мс для спада RST

}

//        Возвращение программатора в пассивное состояние.

void reset( cptr )

BYTE *cptr;

{

          outp( pdata, 0 );             // установка данных

          outp( pctrl, 0x08 );                  // выбираем control latch

          outp( pctrl, 0x09 );                  // latch data

          outp( pctrl, 0x08 );

          outp( pctrl, 0x0c );                  // выбираем нижний адрес latch

          outp( pctrl, 0x0d );                  // latch data

          outp( pctrl, 0x0c );

          outp( pctrl, 0x00 );                  // выбираем верхний адрес latch

          outp( pctrl, 0x01 );                  // latch data

          outp( pctrl, 0x00 );

          outp( pdata, 0xff );                  // установка данных

          outp( pctrl, 0x04 );                  // выбираем data latch

          outp( pctrl, 0x05 );                  // latch data

          outp( pctrl, 0x04 );                  // сигналы управления неактивны

          outp( pdata, 0 );             // очистка данных

          *cptr = 0;                       // запись значения control latch

}

//        Подпрограмма выбора функции.

//        Записывается только 3 младших значащих бита

void set_function( func )

BYTE func;

{

          outp( pdata, ((func << 5) | 0x1f) );

                                                // Установка 3-х младших бит функции

          outp( pctrl, 0x00 );                  // выбираем старший адрес latch

          outp( pctrl, 0x01 );                  // latch data

          outp( pctrl, 0x00 );

          outp( pctrl, 0x04 );                  // сигналы управления неактивны

          outp( pdata, 0 );             // очистка данных

}

//        Запись указанного значения в программатор.

void set_data( outdata )

BYTE outdata;

{

          outp( pdata, outdata );            // установка выходных данных

          outp( pctrl, 0x04 );                  // выбор data latch

          outp( pctrl, 0x05 );                  // latch data

          outp( pctrl, 0x04 );

//        outp( pctrl, 0x04 );                  // сигналы управления неактивны

          outp( pdata, 0 );             // очистка данных

}

//        Данные возврата подают на линии данных программатора.

//        Сначала нельзя запретить latch выходных данных программатора.

//        Некоторые платы параллельного интерфейса позволяют заблокировать

//        буфер выходных данных устанавливая 5-й бит в регистре управления.

BYTE get_data( void )

{

          BYTE tmp;

          outp( pdata, 0xff );              // установка данных LPT порта в высокое состояние

          outp( pctrl, 0x24 );                  // запрещение передачи данных LPT порта

          outp( pctrl, 0x26 );                  // разрешение чтения буфера данных

          delay( (BIGINT)(10 * TCVT) );        // задержка 10 мкс

          tmp = inp( pdata );                  // получение данных

          outp( pctrl, 0x04 );                  // сигналы управления неактивны

          outp( pdata, 0 );             // очистка данных

          return( tmp );

}

//        Разрешение выводов программатора: address and function latches.

//        PROG* (P3.2) также разрешен.

void enable_address( cptr )

BYTE *cptr;

{

          outp( pdata, (*cptr |= 0x10) ); // установка данных

          outp( pctrl, 0x08 );                  // выбор control latch

          outp( pctrl, 0x09 );                  // latch data

          outp( pctrl, 0x08 );

          outp( pctrl, 0x04 );                  // сигналы управления неактивны

          outp( pdata, 0 );             // очистка данных

}

//        Запрещение выводов программатора: address and function latches.

//        PROG* (P3.2) также запрещен.

void disable_address( cptr )

BYTE *cptr;

{

          outp( pdata, (*cptr &= ~0x10) );      // установка данных

          outp( pctrl, 0x08 );                  // выбор control latch

          outp( pctrl, 0x09 );                  // latch data

          outp( pctrl, 0x08 );

          outp( pctrl, 0x04 );                  // сигналы управления неактивны

          outp( pdata, 0 );             // очистка данных

}

//        Разрешение вывода данных программатора.

void enable_data( cptr )

BYTE *cptr;

{

          outp( pdata, (*cptr |= 0x20) ); // set up data

          outp( pctrl, 0x08 );                  // выбор control latch

          outp( pctrl, 0x09 );                  // latch data

          outp( pctrl, 0x08 );

          outp( pctrl, 0x04 );                  // сигналы управления неактивны

          outp( pdata, 0 );             // очистка данных

}

//        Запрещение вывода данных программатора.

void disable_data( cptr )

BYTE *cptr;

{

          outp( pdata, (*cptr &= ~0x20) );      // set up data

          outp( pctrl, 0x08 );                  // выбор control latch

          outp( pctrl, 0x09 );                  // latch data

          outp( pctrl, 0x08 );

          outp( pctrl, 0x04 );                  // сигналы управления неактивны

          outp( pdata, 0 );             // очистка данных

}

//        Разрешение 12 вольт на RST.

//        Обратите внимание, что RST не сможет мгновенно достигнуть

//        указанного значения.

void enable_RST( cptr )

BYTE *cptr;

{

          outp( pdata, (*cptr |= 0x80) ); // установка данных

          outp( pctrl, 0x08 );                  // выбор control latch

          outp( pctrl, 0x09 );                  // latch data

          outp( pctrl, 0x08 );

          outp( pctrl, 0x04 );                  // сигналы управления неактивны

          outp( pdata, 0 );             // очистка данных

}

//        Возвращение RST к 5 вольтам.

//        Обратите внимание, что RST не сможет мгновенно достигнуть

//        указанного значения.

void disable_RST( cptr )

BYTE *cptr;

{

          outp( pdata, (*cptr &= ~0x80) );      // установка данных

          outp( pctrl, 0x08 );                  // выбор control latch

          outp( pctrl, 0x09 );                  // latch data

          outp( pctrl, 0x08 );

          outp( pctrl, 0x04 );                  // сигналы управления неактивны

          outp( pdata, 0 );             // очистка данных

}

//        Генерируем низко идущий импульс на RST указанной продолжительности. //          Время должно быть определено в микросекундах.

void pulse_RST( cptr, time )

BYTE *cptr;

int time;

{

          outp( pdata, (*cptr |= 0x40) );          // установка данных

          outp( pctrl, 0x08 );                  // выбор control latch

          outp( pctrl, 0x09 );                  // latch data

          outp( pctrl, 0x08 );

          delay( (BIGINT)(time * TCVT) );     // ждем указанное количество

          outp( pdata, (*cptr &= ~0x40) );      // установка данных

          outp( pctrl, 0x08 );                  // выбор control latch

          outp( pctrl, 0x09 );                  // latch data

          outp( pctrl, 0x08 );

          outp( pctrl, 0x04 );                  // сигналы управления неактивны

          outp( pdata, 0 );             // очистка данных

}

//        Генерируем высоко идущий импульс на XTAL1 указанной

//        продолжительности. Время должно быть определено в микросекундах.

void pulse_XTAL1( cptr, time )

BYTE *cptr;

int time;

{

          outp( pdata, (*cptr |= 0x02) );          // установка данных

          outp( pctrl, 0x08 );                  // выбор control latch

          outp( pctrl, 0x09 );                  // latch data

          outp( pctrl, 0x08 );

          delay( (BIGINT)(time * TCVT) );     // ждем указанное количество

          outp( pdata, (*cptr &= ~0x02) );      // установка данных

          outp( pctrl, 0x08 );                  // выбор control latch

          outp( pctrl, 0x09 );                  // latch data

          outp( pctrl, 0x08 );

          outp( pctrl, 0x04 );                  // сигналы управления неактивны

          outp( pdata, 0 );             // очистка данных

}

//        Генерируем низко идущий импульс на PROG* указанной

//        продолжительности. Время должно быть определено в микросекундах.

void pulse( cptr, time )

BYTE *cptr;

int time;

{

          outp( pdata, (*cptr |= 0x04) );          // установка данных

          outp( pctrl, 0x08 );                  // выбор control latch

          outp( pctrl, 0x09 );                  // latch data

          outp( pctrl, 0x08 );

          delay( (BIGINT)(time * TCVT) );     // ждем указанное количество

          outp( pdata, (*cptr &= ~0x04) );      // установка данных

          outp( pctrl, 0x08 );                  // выбор control latch

          outp( pctrl, 0x09 );                  // latch data

          outp( pctrl, 0x08 );

          outp( pctrl, 0x04 );                  // сигналы управления неактивны

          outp( pdata, 0 );             // очистка данных

}

//        Задержка на указанную продолжительность. Каждый тик равен

//        1/1193180 секунды (0,838мкс)

void delay( xcount )

BIGINT xcount;

{

          BIGINT count0;

//        printf( "Счет таймера= %lu\n", xcount );

          tread();                           // чтение счета таймера

          count0 = tcount;            // установка начального значения

          do                                  // повторение пока дельта >= указанного значения

                   tread();                 // чтение значения таймера

          while (tcount - count0 < xcount);

}

7. Моделирование схемы в системе автоматизированного проектирования OrCAD

Для проведения моделирования части схемы использовался САПР OrCAD версии 9.2. Моделировался ключ на транзисторе КТ815А. Так как в библиотеки OrCAD-а не содержат отечественных элементов, то для моделирования был взят аналогичный западный транзистор. На рисунке 4.1 изображена схема электрическая принципиальная, подготовленная в схемном редакторе OrCAD Capture.

Рис 7.1. Схема электрическая принципиальная

Все элементы схемы были выбраны командой Place/Part. Для симуляции сигналов нужно создать правило с помощью команды Pspice/New Simulation Profile, далее настроив его можно приступать к симуляции процесса. Также нужно поставить маркеры напряжения, тока в том месте в котором хотелось бы видеть процесс. В данном случае на базу транзистора должен подаваться логический сигнал с микроконтроллера, который мы создали в редакторе сигналов Stimulus Editor. Для перехода в него нужно выделить элемент DigStim, нажать на правую кнопку и выбрать Edit Pspice Stimulus. При

выполнении этого действия мы переходим в Stimulus Editor в котором создаем логический сигнал, например как показано на рисунке 4.1

Рис 7.2. Главное окно Stimulus Editor`а с сигналам sig

Рис 7.3. Главное окно Pspice A/D

Создав этот сигнал можно переходить к симуляции нашего процесса, при нажатии Pspice/Run мы переходим в Pspice A/D (рис 4.3)

В данном окне видно изменение напряжения в том месте нашей схемы в которой мы поставили маркер. Для общей видимости зависимости сигнала на коллекторе транзистора от сигнала с микроконтроллера можно вывести сигнал последнего, нажатием на Trace/Add Trace… мы увидим цифровой сигнал который попадает на базу транзистора.

Выводы.

В работе рассмотрено создание программатора микроконтроллеров Atmel серии АТ89 с подключением к LPT-порту компьютера. Была разработана электрическая схема, печатная плата и сборочный чертеж, показывающие, что программатор микроконтроллеров Atmel серии АТ89 может быть спроектирован и после изготовлен на элемент­ной базе, выпускаемой предприятиями СНГ.

Требования технического задания выполнены полностью.

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

Графическая часть и приведенные в настоящем проекте результаты расчетов подтверждают, что задание на курсовое проектирование выполнено в полном объеме.

Литература.

1.            Голубков А. Программатор МК Atmel серии АТ89. – Радио, 2003, №9, с. 24 – 25.

2.            Рюмик С.  “Параллельный” программатор для АТ89. – Радио, 2004, №2, с. 28 – 31.

3.            Мактас М. Я. Восемь уроков по P-CAD - М.: солон-Пресс, 2003.-224с.:ил.

4.            AT89 Series Programmer Interface <http://www.atmel.com/dyn/resources/ prod_documents/APCPGM.EXE >.

5.            Ханке Х.-И., Фабиан Х. Технология производства радиоэлектронной аппаратуры: Пер. с нем./ Под ред. В. Н. Черняева. – М.: Энергия. 1980. – 464 с., ил.

6.            Ванін В. В., Бліок А. В., Гнітецька Г. О. Оформлення конструкторської документації. Навчальний посібник. – К.: “Каравела”, 2003. – 160 с.

7.            Партала О. Н.  Радиокомпоненты и материалы: Справочник. – К.: Радіоаматор, М.: КУбК-а, 1998. – 720с.: ил.

ГОСТ 23751-86. Платы печатные. Основные параметры и размеры.