Хабрахабр

Altium Designer: что делать если проект стал сложным?

Приветствую! Думаю, любой инженер или просто радиолюбитель/DIYщик/мейкер, занимающийся разработкой электроники, старается развивать свои навыки, которые растут вместе со сложностью выполняемых проектов. В какой-то момент человек достигает уровня, когда ему кажется, что проекты стали очень сложными, займут много времени на разработку и надо что-то с этим делать — нужно оптимизировать свою работу. Сегодня я расскажу как в Altium Designer 18 (далее AD или AD18) повысить производительность своего интеллектуального труда и сэкономить время, нервы и деньги.

Введение

Теперь немного информации для тех, кто не знает что такое Altium Designer. Это один из трех популярных профессиональных САПР, которые позволяют разрабатывать электронику практически любой сложности. Два оставшихся пакета — это Mentor Expedition (и PADS наверное) и Allegro Cadence. У каждого из этих 3-х пакетов есть свои плюсы и минусы, а так же условная специализация. Сегодня сравнений не будет, поэтому я лишь скажу почему выбрал Altium для себя:

  • Отличный дизайн и продуманный интерфейс данной программы просто вне конкуренции. Достаточно посмотреть на конкурентов и все становится ясно. Да, дизайн и удобство это важно, когда ты проводишь за работой по несколько часов ежедневно. Так же это облегчает процесс обучения новичков, ведь учиться в понятном и логичном САПРе намного проще;
  • Возможность напрямую работать с таким механическим «титаном» как SolidWorks. Мы можем просто открыть плату из AD в солиде и добавить ее как часть сборке без потери качества. Прощай конвертация через STEP. Для меня, да и наверняка для вас, это важно, т.к. электронное устройство — это не просто плата с компонентами, это почти всегда еще и корпус. Данная возможность позволяет легко сделать сборочную модель всего устройства и не допустить ошибок при проектирование и производстве пресс-форм по 3-5 тыс.$ каждая;
  • Наличие достаточно большого количества информации на русском языке, что обеспечивает достаточно низкий порог вхождения. Это основная причина, почему в СНГ главенствует именно Altium, а не что-то другое. Попробуйте найти что-то на русском по Mentor или Cadence, сразу расхотите учиться работать в них;
  • В СНГ и Азии большинство компаний работают в Altium, да и в Штатах у них большая доля рынка. В Европе очень любят SolidWorks PCB, который является как раз таки встроенным AD. Что это дает? Вы легко сможете найти работу, если надумаете работать в сфере разработки электроники.

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

Я хочу научиться работать в Altium, но он меня пугает

Когда-то, году так в 2011-2012, мне довелось впервые поработать в AD, он мне показался крутым, но страшным, т.к. в тот момент английский для меня был преградой и вообще было не понятно как в нем работать. Преодолеть свой страх перед огромным количеством инструментов и функционала мне помогли видео-ролики от тов. Сабунина (спасибо ему), которые есть на youtube на русском языке и описывают базовые простые вещи, позволившие сделать первые шаги в освоение. За прошедшие 6 лет информации по AD на русском стало еще больше, поэтому порог вхождения стал еще ниже, так что не бойтесь и учитесь.

Чтобы вам было легче осваивать Altium Designer предлагаю парочку «пряников» от себя:

  • Цикл обучающих видео-уроков — тут. Ролики имеют большую длительность, но содержат в себе исчерпывающую информацию по базовым функция (так говорят по крайней мере) и позволят любому школьнику без проблем спроектировать свое первое устройство;
  • Библиотеки для Altium Designer — тут. Тут вы найдете все пассивные компоненты (резисторы, конденсаторы и прочее), а так же большое количество популярных транзисторов, диодов и микросхем, включая МК и FPGA. Создание библиотек на старте занимает очень много времени, поэтому надеюсь, что сэкономлю вам не мало времени.

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

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

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

Из выше написанного можно сделать следующий вывод:

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

До какого-то момента вы можете конечно забить на все и «рисовать» на схеме что угодно и как угодно, например, как тут:

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

Давайте посмотрим еще на один шедевр — схема arduino, выполненная в AD:

Мне вот больно… Смотрю я на R2 и R3, вроде понятно что это подтяжки для I2C, но где этот I2C и около какого разъема они должны быть для меня загадка и тут приходится уже искать долго и нудно, при чем это схема с малым количеством компонентов и простая, а уже хаос. Как вам?

Теперь как альтернатива — пример из своих произведений (кликабельно):

Функция у модуля одна — трехфазный синфазный фильтр и ничего лишнего. Смотрите на схему и я думаю вам сразу понятно как минимум где вход, а где выход — «стрелки» вам на это намекают, да и мы не арабы, читаем (в том числе и схемы) слева направо. 1 лист — 1 функция. Схема сделана аккуратно и занимаете 1 лист в документации.

Хотя я надеюсь общую идеологию вы уловили, давайте теперь подведем итог как же «надо» делать: На самом деле то о чем я написал выше — мелочи, важные и облегчающие жизнь, но все таки мелочи.

  • Принцип инкапсуляции применителен и в схемотехнике: каждый модуль выполняет единственную простую задачу. Модуль обычно это один лист в документации, например, А3 какой-нибудь;
  • Принципиальная схема должна выполняться в одном стиле и очень аккуратно. Аккуратность при работе в будущем окупится вам сполна. Да и когда вы на собеседовании покажите понятную, аккуратно выполненную схему о вас сразу же сложится хорошее впечатление. Рукожопов видят сразу и обычно не любят;
  • Не используйте листы больше А2, даже если у вас пару тысяч компонентов. Если хочется влепить А1, то что-то вы делаете не так. Вероятно вам на схеме нужно выделить какие-то модули и перенести на отдельный лист.

Критикуешь? Предлагай!

Теперь раскритиковав других необходимо предложить альтернативу «как надо делать». Стоит понимать, что описанное в статье лишь субъективное мнение автора, основанное на опыте работы и собственном взгляде на мир.

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

В нем для примера я изображу 6-ти фазный buck преобразователь DC/DC. Создаем проект в Altium Designer. Каждый силовой канал будет выглядеть следующим образом (кликабельно): У меня будет 6 силовых каналов и 1 МК для управления всеми фазами.

Если посмотрите внимательно, то у меня на схеме есть входы сигнало — 2 ШИМа слева + VCCIN с GND, есть выход — VCC5V и GND. Сам канал силовой я изначально начертил правильно. Дальше делаем плохо… Сам модуль выполняет одну задачу — преобразует VCCIN в 5В.

Можно увеличить лист до А1 — отлично, пока что мы рукожопы неопытные разработчики и идем по такому пути и наблюдаем следующую картину (кликабельно): Тут мы натыкаемся на первое ограничение — один канал занимает практически весь лист А3, у нас их 6, следовательно если я увеличу лист до А2 все равно не уместится.

Вот только это 30% схемы, что еще нужно? Вроде как пока понятно — есть 6 каких то кусков схемы, есть МК внизу. Конечно! Обвязка МК + обратные связи? Конечно, добавим RS485. Устройство должно общаться с внешним миром? Еще же МК… ему надо еще 1 DC/DC и теперь добавив все это — смотрим (кликабельно): Аааа, еще нужно питание для драйверов, то есть из VCCIN необходимо получить +12В и для этого добавим DC/DC!

А если бы я не сказал изначально о функционале устройства? Понятно что тут? А если УГО компонентов в библиотеках нарисованы изначально криво? А если вдобавок к этому еще и отдельные куски схемы рисовал коряво? То-то же… Напугал?

Что же делать?

Теперь давайте поразмышляем… В данном устройстве всего компонентов 150, в моих средних проектах связанных с силовой электроникой, их обычно от 1500 до 4000, то есть масштаб бедствия вы представляете, когда таких листов А1 как выше будет 10 штук и все они захламлены и забиты. Ошибки неизбежны!

Первое что стоит сделать — сформировать модули. Смотрим и думаем дальше. я их просто копировал с одной домашней поделки, но один модуль разбил — EEPROM память по I2C работающую. У меня они все сформированы, т.к. Я совершил ошибку такую же как в схеме ардуины, как стоит сделать:

3В. Как видите я собрал в одну «кучку» микросхему памяти, блокирующий конденсатор по питанию, который будет стоять около нее и подтяжки к +3. Кстати не обязательно выделять отдельный лист под каждую мелкую микросхему, все таки EEPROM это не отдельный модуль, а скорее часть обвязки микроконтроллера. Теперь мне не придется искать по схеме все компоненты, которые нужны для обвязки микросхемы памяти, они все уже в одном месте. МК с обвязкой — вот это уже модуль достойный отдельного листа.

Это можно оптимизировать тоже. Идем дальше… У нас есть повторяющиеся части схемы, например, 2 абсолютно одинаковых канала для обратной связи на операционном усилителе (ОУ), еще 6 абсолютно одинаковых силовых каналов.

Этим надо воспользоваться. Еще одна светлая мысль — если все 6 каналов buck одинаковые, то и трассировка у них наверняка будет одинаковая. Оказывается можно, AD позволяет нам очень сильно облегчить себе жизнь. Может можно развести дороги для одного модуля, а потом оставшимся 5-ти сказать «а ну повтори»?

Давайте делать красиво!

С чего начинается любое электронное устройство? С идеи разумеется. Как эту идею превратить во что-то материальное? Например, можно нарисовать блок-схему, где будет отображаться макро-функционал. Сильно мудрить не надо, достаточно картинки на доске или листке бумаги:

Во-первых, данная схема дает нам понять как устройство в принципе работает: есть силовая часть (Buck) 6-ти канальная, которой управляет МК (MCU), который для управления получается 2 сигнала обратной связи через ОУ (Amp.), а так же имеется парочка dc/dc для самопитания и интерфейс Modbus для связи с миром. На листке уместился весь функционал нашего устройства. Во-вторых, по схеме сразу видно готовые функциональные блоки.

Теперь нам необходимо создать в AD 5 листов А3 и в каждый перенести соответствующую часть схемы, но перед этим необходимо рассмотреть типы соединений и цепей, которые мы будем использовать в AD:

  • Power port

    Данный тип является глобальным по всему проекту. То есть если мы поставили такой порт на одном листе и на другом, то они объединятся в единую цепь с именем «VCC3V3». Соответственно дополнительно цепи питания на разных листах соединять не надо. Данным типом порта задают только цепи питания и землю (GND);
  • Net Lable

    Инструмент для присвоения имени конкретной цепи на схеме. Цепи с одинаковым именем (NetLable) объединяются как внутри одного листа, так и за его пределами. Мы будем использовать данный инструмент кошерно, то есть только для задания имен и соединения внутри одного листа;
  • Place Port

    Инструмент для межмодульных соединений. В противоположность NetLable, который служит для соединения внутри модуля/листа, данный порт применяется для общения с «внешним миром». Им мы соединяем между собой модули, все цепи кроме питания и земли (GND).

Например, для модуля с операционным усилителем это будет выглядеть так: Теперь нам необходимо задать с помощью Place Port сигналы, которые будут выходить за пределы модуля.

Ничего лишнего. Теперь наш модуль превратился во вполне логичную часть схемы: у него есть вход (INPUT), есть выход (ADC-OUT) и есть 2 глобальных подключения (Power Port) — GND и VCC3V3. Проделаем тоже самое для других модулей и сделаем автоматическое присвоение номеров условным обозначениям (designator), перейдя в Tools -> Annotations -> Annotate Schematics и нажав Update Changes List:

Далее жмем Accept Changes и в открывшемся окне жмем Execute Changes:

и т.п.) получили уникальные номера. Закрываем лишние окна и видим, что нашим обозначения (D?, R?, C? После проделанных действий мы получаем вот такой проект — PDF.

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

В данном листе у нас будет располагаться блок схема, которую я ранее рисовал от руки. Для этого создадим новый лист, у меня он будет называться просто Main design, но имя может быть любое. Теперь зададим нашему элементу стилистику всего проекта, то есть шрифт (у меня ISOCPEUR), ширину и цвет рамки, обозначение (designator) и прочее, а так же пропишем имя листа с нашим модулем: Для создания модуля идем Place -> Sheet Symbol.

Теперь правой кнопкой мыши нажимает на наш модуль (оранжевый квадрат) и идем Sheet Symbol Actions -> Synchronize Sheet Entries and Port и откроется окно:

Выбираем все и жмем Add Sheet Entries, устанавливаем в наш модуль и задаем общий тип шрифта, получаем такой модуль: В нем мы видим список наших Place Port.

Теперь повторяем тоже самое для остальных 4-х модулей и на выходе получаем вот такую структуру:

Тут стоит обратить внимание на 2 момента:

  • 5-й лист (Page 5) с dc/dc при попытки синхронизации не обнаружит Place Port и если посмотрите на схему модуля, то их там действительно нет, только Power Port. НО! Вынести модуль для Page 5 нужно обязательно, иначе компоненты с данного листа просто не появятся на плате;
  • Обратите внимание, что у инструмента Place Port есть параметр направленности: input, output и bidirectional. Вам стоит правильно определять тип порта для вашего сигнала, например, порты PWM-H являются исходящими (output) для модуля MCU и входящими (input) для модуля Buck.

Клонируем

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

  • Копирование в рукопашную
    Тут все просто — обычный копипаст. Выделяем наш модуль, Ctrl+C и Ctrl+V — получаем новый модуль. Остается просто сменить ему номер обозначения (designator) с M3 на M6. Дальше все соединяем и получаем промежуточный вариант схемы:

    Тащить им отдельно Place Port в данном случае смысла нет. Я скопировал модуль ОУ, добавил пару разъем и шины GND и VCCIN, они теперь глобальные и подключаются сразу во всех модулях где встречаются. Так же я соединил все внешние цепи кроме модуля Buck, на нем продемонстрирую 2-й, более компактный, способ.

  • Копирование по-джедайски
    В противоположность предыдущему варианту тут все сложно для понимая, но проще в реализации и главное более грамотно. Создание нескольких каналов будет осуществляться с помощью директивы REPEAT. Для этого вместо обозначения (designator) M1 пишем команду REPEAT(BUCK, 1, 6). Данная команда создаст каналы с обозначениями (designator) от BUCK1 до BUCK6, то есть наши 6 штук. Жмем Enter и видим как AD создал необходимое число каналов:

    Начну с простого — наши выходы OUT-5V у всех каналов должны объединяться, т.к. Теперь необходимо соединить цепи. Для этого мы просто из Place Port выводит обычную цепь и подключаем ее на выходной разъем: все наши фазы работают как один преобразователь на общий выход.

    Для это кликаем по Place Port с именем PWM-H и в графу с именем пишем REPEAT(PWM-H), это создаст 6 разных цепей: Теперь необходимо сказать AD, что наши порты PWM-H это не один порт/цепь, а 6 раздельных каналов.

    Затем из цепи необходимо вывести шину (Bus) и дать ей имя PWM-H[1.. Теперь необходимо вывести обычную цепь (Ctrl+W) из Place Port с именем REPEAT(PWM-H) и дать этой цепи имя PWM-H с помощью инструмента NetLable. Таким образом из одного порта мы вывели 6 разных цепей у которых будут имена PWM-H1, PWM-H2 и так далее: 6].

    6] мы подключаем к выходу шины на модуле MCU для верхних транзисторов полумоста. Далее шину PWM-H[1.. Аналогичные процедуры так же необходимо провести для нижний транзисторов и так же прокинуть шину, в итоге мы будем иметь схему следующего вида:

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

Как видите схема вышла простейшая, всего пару полу-пустых листов А3, разобраться в ней сможет любой радиолюбитель с минимальными затратами времени и нервов. На этому мы с принципиальной схемой закончим, финальный результат вот — PDF.

Экономим десятки человеко-часов на трассировке

В современных реалиях, когда степень интеграции компонентов (микросхем) достаточно высокая, разработка принципиальной схемы занимает все меньше и меньше времени. Уже не так часто встретишь на 90% аналоговых монстров и это хорошо. «Слабым местом» в процессе разработки устройства остается проектирование печатной платы (PCB). Современные САПР предоставляют множество различных инструментов для сокращения трудозатрат на разработку платы и именно это было основной целью данной статьи.

Если вы посмотрите на современные устройства, то во многих будет множество таких повторений, например, 4-х канальный осциллограф у которого все каналы идентичны. Как я ранее указывал, в нашем устройстве есть несколько повторяющихся модулей: buck и ОУ. Мы можем конечно трассировать каждый канал руками, а можем и упростить себе жизнь.

Именно такую принципиальную схему мы создали и теперь она нам позволит сделать следующее — развести цепи для одного канала buck, а затем просто скопировать в оставшиеся 5 и расположение компонентов (компоновку) и все проводники. Все, что ранее было описано в статье называется просто — многоканальная схема, звучит просто и со вкусом. Для начала переносим все наши компоненты с принципиальной схемы в файл с печатной платой, жмем Design -> Update PCB Document:

Теперь жмем Execute Changes и в результате получаем вот такую печатную плату:

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

Правда что-то мне тут не нравится… Ага! Так будут распологаться компоненты каждого канала и именно такую площадь занимать. Я хочу чтобы не было приставки "_BUCK1" и у каждого компонента был свой номер. Обозначения компонентов в слое шелкографии (белый надписи) имеют не сквозную нумерацию, а нумерацию в формате «Обозначение_Название комнаты», то есть у нас есть резисторы R6_BUCK1, R6_BUCK2 и так далее. Нажимаем Ctrl+L и затем идем в меню Annotate Options, где видим такое меню:

Нажимает Reset All чтобы все значения скинуть и затем нажимаем Anotate Designated. Теперь необходимо выбрать вариант нумерации $ComponentPrefix$GlobalIndex и нажать ОК. Как видим в канале BUCK2 компоненты сменили свои обозначения с R6_BUCK2 на более привычные нам обозначения R6, R7 и т.д.:

Переносим изменения из схемы на печатную плату Design -> Update PCB Documet как мы уже делали. Осталось согласиться с изменениями, нажав Accept Changes и в открывшемся окне подтвердить все кликом по Execute Changes. В результате наблюдаем «человеческие» обозначения, которые не занимают всю плату и гадят в ней:

Имея адекватную компоновку и обозначения переходим к трассировке — выполним трассировку цепей внутри одной комнаты «BUCK6» и получим вот такую картину:

это обычно единым полигоном заливается. Я не стал разводить все, GND оставил не тронутой, т.к. Теперь делаем следующее: Для демонстрации достаточно.

  • Идем Design -> Rooms -> Cope Room Format
  • Altium нам внизу подсказывает Choose source room, то есть предлагает тыкнуть в комнату с которой нужно все скопировать, в моем случае в BUCK6
  • Теперь altium подсказывает ChooseDestination Room, то есть просит ткнуть в комнату в которую нужно скопировать нашу разводку. Выбираем любую из BUCK-ов.
  • Откроется меню в котором можно поставить галочку Apply To Specified Channel, которая говорит, что надо скопировать не просто в выбранную комнату, а во все аналогичные.
  • Жмем ОК и радуемся!

бывают ситуации, когда, например, не все каналы идентичны. Я не поставил галку и выбрал кликами 2 канала, т.к. Применительно к моему случаю это могут быть 3 фазы с одной разводкой и еще 3 фазы с другой. Вспомни VRM на материнке у CPU, там часто 3-4 фазы с одной стороны, а еще 3-4 с другой. Теперь давайте посмотрим на результат: Думаю обща идеология понятна.

В данном абстрактном случае экономия времени в 6 раз, но и в реальных задачах порядок уменьшения трудозатрат примерно такой же. Наблюдаем 3 идентичных канала и самое главное — времени я потратил на все каналы как на 1. Да и не маловажный фактор — если делать 6 каналов руками, то «глаз замыливается» из-за однотипной работы и велика вероятность допустить ошибку или сделать компоновку кривую.

Итог

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

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»