Моя открытая библиотека компонентов Altium содержит сотни схематических символов, предоставляя более 100 000 компонентов для использования. Люди часто удивляются, когда я говорю им, что создание схематического символа в Altium занимает всего несколько минут, даже если у детали много выводов. В этой статье я хочу показать вам, как вы можете использовать некоторые инструменты в Altium для быстрого создания своих символов.
Прежде чем мы начнем, вам понадобится пара вещей:
Чтобы найти компонент для использования в этой статье, я зашел на сайт Digi-Key и посмотрел в категории Встроенные - Микроконтроллеры на наличие микроконтроллера серии ARM Cortex M с встроенной FLASH-памятью и более чем 100 выводами GPIO. Затем я отсортировал по количеству доступных компонентов, и победителем оказался NXP MK64FN1M0VLQ12. Похоже, что это отличный микроконтроллер в корпусе LQFP-144. Копирование и вставка описаний выводов для каждого вывода на этом корпусе было бы времязатратным, скучным и подверженным ошибкам, так что давайте не будем этого делать!
Посмотрев на техническое описание этого компонента, таблица распиновки (5.1, Страница 68) не идеальна для этого процесса, но это нормально — технические описания редко бывают идеальными для создания символов.
Прежде чем подробно описать, как создать этот компонент, я сам прошёл через этот процесс, чтобы убедиться, что не пропущу ни одного шага при написании статьи. Мне потребовалось чуть более 7 минут, чтобы создать этот компонент на 144 вывода, что немного медленнее, чем обычно для меня. Если бы данные в техническом описании не требовали такой тщательной очистки, это заняло бы около 4-5 минут. Тем не менее, я создал почти 500 подобных символов, так что у меня есть некоторый опыт, который помогает мне быстро выполнять работу!
Первое, что мы сделаем в Altium, это создадим новую библиотеку схем, перейдя в Файл -> Создать -> Библиотека -> Библиотека схем.
Затем, в новом компоненте, мы размещаем прямоугольник. Размещая сначала прямоугольник для корпуса компонента, мы избавляем себя от необходимости перемещать его за выводы позже, это просто экономит немного времени. Размер прямоугольника не имеет значения. Тот, который я создал, будет слишком мал для конечного компонента!
После прямоугольника мы создадим наш первый вывод, который станет основой для всех остальных.
Желательно настроить свойства выводов так, чтобы их было удобно использовать позже, поэтому я просто установил номер вывода (обозначение) равным 1, а имя – «P1». Числовая часть имени может быть автоматически увеличена, а буква P просто позволяет мне знать на более позднем этапе, что это имя вывода.
Теперь у вас должно получиться что-то вроде этого:
Но нам не хватает 143 выводов, так что давайте исправим это. Сначала скопируйте вывод.
Затем мы собираемся использовать мощную функцию Вставить массив из меню Редактирование.
Нам нужно еще 143 вывода, поэтому вы можете ввести 143 для количества элементов и убедиться, что вертикаль установлена на -100mil. Это позволит генерировать выводы, начиная с места, куда вы кликнете, вниз (а не вверх).
Так как здесь много выводов, я бы предложил отдалить изображение и кликнуть где-то на высоте 7000mil на символе схемы!
Я расположил выводы в колонки, но теперь у нас есть 144 вывода для использования!
Наличие всех этих контактов не имеет большого значения для символа, поскольку нам все еще нужно добавить имена к контактам. Для этого мы обратимся к техническому описанию.
Выберем таблицу контактов и скопируем всю информацию в документ notepad++. Это будет выглядеть ужасно, не волнуйтесь!
Как я упоминал ранее, это не самое идеальное техническое описание, поэтому прежде чем мы сможем сделать что-либо еще, я хочу немного очистить вставленные данные. В первую очередь, многие функции были разделены на несколько строк, в которых в названии есть символы / или _. Наличие качественных данных для нашей отправной точки облегчит жизнь позже.
Я собираюсь использовать Найти и Заменить, чтобы искать _\r\n
и заменять его на _
. Расширенный режим поиска найдет имена, где _
разделяет функцию на две строки, а затем заменит его просто на _
. Нажмите Заменить Все, чтобы сделать все изменения за один раз.
Сделайте то же самое для /\r\n
, заменив это на /
.
Техническое описание также содержит множество столбцов со словом «DISABLED», поэтому я собираюсь найти и заменить «DISABLED» с пробелом в конце на пустое место.
Теперь мы переходим к регулярным выражениям, чтобы упорядочить этот беспорядок из букв и цифр в аккуратную таблицу номеров выводов и описаний. К счастью, у нас есть упаковка интересующего нас компонента в первом столбце таблицы выводов, это делает регулярное выражение немного проще.
Я собираюсь использовать страницу тестирования регулярных выражений на RegexStorm для обработки списка выводов. Вы также можете проверить их Справочник по регулярным выражениям, если вам нужно освежить в памяти синтаксис.
Прежде чем мы начнем сопоставление данных, было бы неплохо иметь все элементы описания выводов в одной строке, а не разделённые на несколько строк, как это есть сейчас. Мы можем использовать простой шаблон на RegexStorm, чтобы исправить текст, с которым мы работаем.
Я буду использовать шаблон \r\n(\D)
, чтобы найти все новые строки, которые не начинаются с цифры (\D
- это регулярное выражение для "не цифры"). "Не цифра", которая найдена, должна быть помещена в группу, что делается с помощью скобок, чтобы мы могли заменить найденное на этот символ. Тогда наша замена будет просто $1
, так как $1
указывает на первую найденную группу.
После нажатия на замену вкладка контекста содержит исправленные входные данные, так что мы можем скопировать их из вкладки контекста во входные данные для дальнейшей работы.
Но мы ещё не закончили, есть множество (127) мест, где Имя пина, Функция по умолчанию и Функция ALT0 совпадают. Мы же не хотим создавать пин 5 VDD VDD VDD, верно? Достаточно, чтобы пин 5 назывался VDD.
Мы можем использовать регулярное выражение, чтобы также очистить эти дублирующиеся имена, используя шаблон:
\b([A-Z\d/_]{3,})\s*\1\s*\1? *
Это найдет границу слова с помощью \b, а затем сопоставит группу из трех или более заглавных букв, цифр (\d
), символов слэша или подчеркивания с ([A-Z\d/_]
). Затем ищется необязательное количество пробельных символов с \s*, за которым следует то же самое, что и первая группа (\1
), еще один необязательный пробел и, наконец, необязательно (знак ?) первая группа снова, за которой следует любое количество пробелов. Таким образом, это не будет соответствовать повторяющимся контактам, например EE EE, но будет соответствовать 2-3 одинаковым элементам подряд, например VDD VDD VDD.
Затем мы можем заменить это на ‘$1
‘, то же самое, что и в прошлый раз, но с пробелом после $1
. Наконец, мы можем скопировать это обратно в поле ввода.
Искомый шаблон
Мы ищем шаблон, который найдет это:
115 C7 C6 82 PTC10 ADC1_SE6b
ADC1_SE6b
PTC10 I2C1_SCL FTM3_CH6 I2S0_RX_FS
FB_AD5
Или
89 F10 D11 — PTB8 PTB8 UART3_RTS_b
FB_AD21
Основное отличие между двумя, насколько это нас касается, это наличие символа ‘—’ там, где у пакета нет контакта.
Моё выражение для поиска:
(?:(?<Pin>\d{1,3})\s+(?:[A-Z\d—]{1,2}\s+){2}(?:[\d—]{1,3}\s+)
)
Это хорошо работает в табличном представлении. Теперь у меня есть таблица для контактов, и я сопоставил весь раздел номеров контактов из технического описания. Это означает, что все остальное будет описанием.
Я использую регулярные выражения с тех пор, как начал программировать на PERL примерно 20 лет назад, будучи подростком, так что я достаточно уверен в них! Давайте разберем это первое совпадение и объясним его, на случай, если вы новичок в регулярных выражениях или вам нужно освежить знания.
(?:\b(?<Pin>\d{1,3})\s+(?:[A-Z\d—]{1,3}\s+){2}(?:[\d—]{1,3}\s+))
(?:)
означает незахватывающую группу. Это позволяет мне группировать все вместе, не добавляя это в таблицу просмотра на RegexStorm. Группировка элементов довольно важна для достижения желаемого!
\b
является границей слова, например: новая строка, пробел, табуляция и т.д. Это предотвращает что-то вроде:
LPTMR0_ALT1
74 L12 J11 52
совпадение с 1 в конце ALT1, предотвращая совпадение первых трех дизайнаторов.
(?<Pin>\d{1,3})
захватывает группу с именем Pin через ?<Pin>. Не все движки регулярных выражений поддерживают именованные группы, что является одной из причин, по которой я использую RegexStorm. Эта группа будет совпадать с 1 до 3 ({1,3})
цифрами (\d). Наш номер пина всегда будет иметь от 1 до 3 цифр (от 1 до 144), так что это все, что нам нужно искать.
\s+
Соответствует любой группе из одного или более подряд идущих пробельных символов. Таким образом, если скопированные нами данные из технического описания содержат пробел, табуляцию или перенос строки между контактами, все это будет найдено, даже если пробелов или табуляций несколько.
Далее, мы хотим найти обозначения контактов двух BGA пакетов. (?:[A-Z\d—]{1,3}\s+){2}
делает именно это, квантификатор в конце ({2})
говорит, что нам нужны две группы без захвата. Эта группа находит от одного до трех символов в квадратных скобках. Квадратные скобки в регулярных выражениях означают соответствие «любому символу здесь». В нашем случае у нас есть все заглавные буквы (A-Z), все цифры (\d), и тире, используемое в техническом описании для обозначения отсутствия функции в данной опции пакета. Наконец, у нас есть один или более пробелов, так же как и после соответствия с Pin.
(?:[\d—]{1,3}\s+)
соответствует нашему последнему номеру контакта. По сути, это то же самое, что и наше совпадение по контакту, но нам нужно также учитывать тире, на случай, если такая функциональность отсутствует в пакете.
Если вы не имеете опыта с регулярными выражениями, не волнуйтесь, они перестанут плавить ваш мозг, когда вы начнете их читать после всего лишь нескольких лет!
Поиск описания контакта
Чтобы найти соответствие описанию, мы можем добавить к текущему синтаксису, так что все будет в одной группе, теперь это мой шаблон:
(?:\b(?<Pin>\d{1,3})\s+(?:[A-Z\d—]{1,3}\s+){2}(?:[\d—]{1,3}\s+)(?<Desc>[\w\d_/\s]+?\b(?=\d{1,3}\b)))
Добавленный шаблон для соответствия только части описания:
(?<Desc>[\w\d_/\s]+?\b(?=\d{1,3}\b))
В конце концов, у нас есть таблица, содержащая 144 совпадения с относительно чистыми данными. Теперь я могу скопировать и вставить это в мою таблицу Google.
Вернувшись в Altium Designer, теперь мы можем загрузить некоторые данные в созданный нами массив контактов. Выделите все контакты (но не прямоугольник) в окне символов схемы.
Откройте панель SCHLIB List, нажав на кнопку панелей в нижнем правом углу окна Altium.
Теперь вы увидите все выбранные контакты в символе схемы.
Если вы щелкнете правой кнопкой мыши в любом месте сетки, вы можете выбрать переключение в режим редактирования.
Теперь вы можете щелкнуть по сетке и нажать Ctrl-A или щелкнуть правой кнопкой мыши и выбрать Выделить все.
После этого скопируйте и вставьте все в вашу таблицу чуть ниже, чем таблица, которую вы вставили из RegexStorm.
Теперь, когда у нас есть две таблицы в электронной таблице, вы можете скопировать столбец с номерами контактов из данных, скопированных из RegexStorm, поверх номеров контактов из Altium Designer, а затем сделать то же самое для столбца с описанием. Этот символ случайно имеет все контакты для пакета, над которым мы работаем, в порядке, но это часто не так. Проще всего заменить оба столбца, чтобы у вас не возникло несоответствий между описанием и именами контактов.
Прежде чем вернуть эти данные обратно в Altium Designer®, я хочу быстро исправить столбец с именами, заменив все пробелы на /, чтобы следовать стандарту моей библиотеки. Для этого выделите весь столбец в таблице Altium Designer, затем вы можете открыть инструмент поиска и замены, чтобы найти пробел и заменить его на косую черту. Нажмите «заменить все» после проверки, что поиск установлен на конкретный диапазон выбранных вами ячеек.
Теперь у нас есть таблица со всеми именами выводов и обозначениями, готовая для возвращения в Altium Designer. Просто выделите всю таблицу, а затем вставьте ее обратно в вашу таблицу SCHLIB List. Это перезапишет все в таблице, оставив вам огромный беспорядок в редакторе символов схемы!
Самое важное, что у нас есть данные в Altium Designer, и это было гораздо менее трудоемко и менее подвержено ошибкам, чем попытка скопировать все детали с выводов по данным технического описания по одному.
Мне нравится группировать все контакты вокруг листа схематического символа, чтобы я мог решить, хочу ли я оставить символ одной частью, или мне нужно сделать его многочастным символом. Для этой детали на 144 контакта, мне придется сделать ее многочастным символом, но я все равно аккуратно сгруппирую все вместе, чтобы получить группы контактов для копирования и вставки в каждую новую часть.
Мы можем использовать панель фильтра SCHLIB, чтобы выбирать группы контактов за раз. Нет инструмента для быстрой организации контактов вместе, но при выборе всех контактов их достаточно легко вытащить на свободную область листа схемы и упорядочить вручную.
Чтобы найти все контакты, такие как VSS или VSSA, я могу использовать фильтр: Name LIKE ‘VS*’, который выполнит поиск по шаблону, чтобы выбрать все эти контакты.
Вы можете повторить это с фильтрами вроде Name LIKE ‘VD*’, чтобы захватить другие контакты питания. Контакты портов на этом компоненте начинаются с PTA/PTB/PTC и т.д., так что вы можете использовать тот же стиль фильтра, чтобы найти все контакты Порта А и так далее.
После небольшой быстрой организации, теперь у меня все контакты сгруппированы.
Я хочу, чтобы все выводы АЦП, ЦАП, напряжения, земли, USB и кристалла находились на основной части компонента, поэтому я переместил их в прямоугольник, который создал как первый шаг этого процесса, а затем изменил размер прямоугольника так, чтобы он вместил все выводы. Я всегда размещаю мои выводы VDD в верхнем левом углу, а выводы VSS/GND - в нижнем левом и группирую выводы по функции, а не их положению на символе. Мне кажется, это делает символ более удобным для использования в схеме, чем попытка копировать физическую раскладку.
Теперь, когда основная часть готова, нам нужно добавить подчасти к символу схемы. Вы можете добавить новую часть к символу схемы, перейдя в Инструменты -> Новая часть.
Новая часть появится на панели SCH Library, вложенной в ваш основной компонент.
После того как у вас появятся подчасти, остается только создать прямоугольник в каждой подчасти, а затем вырезать и вставить в него выводы из основной части. Разделение огромного микроконтроллера на логические части позволит инженеру, использующему символ, создать более чистую и аккуратную схему, чем если бы его или ее весь лист доминировал один огромный символ схемы.
Созданный выше символ может быть идеальным для вашей библиотеки, но я предпочитаю делать вещи с избытком. Я собрал еще несколько регулярных выражений, к которым вы можете обратиться, если захотите дополнительно очистить имена или добавить активные нижние черты к функциям, которые начинаются с n_ или заканчиваются на _b, как в части, над которой мы работали.
Имея эти шаблоны под рукой, вы можете получить имена символов более высокого качества, потратив всего минуту или две на дополнительную работу. Кроме того, вы можете использовать их в качестве основы для своих собственных шаблонов очистки.
Я вручную удалил дубликаты функций на контактах на снимках экрана выше, но вы можете сделать это автоматически, если обнаружите, что у вас слишком много дубликатов, чтобы эффективно удалять их вручную.
Сначала удалите дубликаты исходной функции, такие как ‘PTA12’
. Используйте регулярное выражение:
^([A-Z\d/_]{3,})/(?<inbetween>(?:(?:[^/])+/){1,5})\1/?
С опцией Options -> Multiline. Это позволит рассматривать каждую строку в поле ввода как отдельную сущность для соответствия символу ^ началу строки.
Замените совпадения на:
$1/${inbetween}
Затем замените все функции после первой функции регулярным выражением:
/([A-Z\d/_]{3,})/(?<inbetween>(?:(?:[^/])+/){1,5})\1/?
Вы можете отключить многострочный режим снова, но его включение не помешает работе выражения. Заменяйте найденные совпадения на:
/$1/${inbetween}
Продолжайте заменять совпадения, пока они не закончатся. Для этой части мне пришлось выполнить замену 3 раза, чтобы удалить все дубликаты.
Существует два выражения для замены дубликатов, поскольку выражению необходимо знать, с какого места начинать поиск совпадения. Вы не хотите заменять /RMII0_RXER/MII0_RXER/ просто на /RMII0_RXER/, так как вторая функция такая же, как первая, за исключением R. Имея две функции, мы можем использовать / как начальный символ или начало строки.
Добавление активных низких полос к имени функции более соответствует стандартам Altium Designer, чем наличие n_ или _b в имени функции. Вы можете сделать это, добавив \ после каждого символа, и регулярное выражение может найти их для вас с помощью предварительных групп.
Для функций, оканчивающихся на _b, используйте выражение:
([^/](?=[A-Z\d_]*_b[/\r]))
И замените все совпадения на: $1\
Затем используйте выражение:
\_b
И замените все совпадения на: \
Для функций, начинающихся с n_, можно использовать выражение:
((?<=/n_[A-Z\d_]*)[^/])
И замените все совпадения на: $1\
После этого вам нужно будет искать, используя выражение:
n_(\w)
И заменить на: $1
Чтобы удалить n_ из начала имени функции.
Регулярные выражения являются очень мощным инструментом, если вы создаете символы в Altium Designer из технических описаний. Вы можете довольно быстро превратить непонятные копии и вставки из PDF в используемую таблицу, используя всего лишь несколько выражений. Мне говорили новые пользователи, что синтаксис выглядит чрезвычайно пугающим, так как на первый взгляд это может показаться просто нагромождением символов и чисел, но на самом деле это очень хорошо определенный синтаксис, который довольно легко изучить. После всего лишь нескольких часов очистки текста, скопированного из технического описания, в таблицы выводов, вы обнаружите, что вам становится комфортно с синтаксисом.
Эта конкретная часть была выбрана случайным образом для создания этой статьи. Хотя данные действительно требовали большой очистки — и это может занять больше времени, чем фактическая передача данных в Altium Designer — я надеюсь, это показало вам некоторые новые способы работы с символами схем.
Если у вас есть предложения по созданию символов схем быстрее, оставьте комментарий ниже со своими предложениями, чтобы другие могли воспользоваться вашим опытом.
Узнайте больше в руководствах Altium или прочтите больше от эксперта отрасли Марка Харриса. Хотели бы вы узнать больше о том, как Altium может помочь вам с вашим следующим проектом печатной платы? Поговорите с экспертом в Altium.