Какое-то время назад я опубликовал статью-презентацию об инструменте под названием QEDA. Если кратко, то это утилита для облегчения процесса создания библиотеки электронных элементов.
Были сделаны полезные выводы, проведена дальнейшая работа, проект развивался. Появился интерфейс коммандной строки (CLI). На сегодняшний день можно говорить о некотором milestone: проект достиг версии 0.1.
В этот статье я рассмотрю типичный рабочий процесс по созданию платы в среде KiCad и использованием утилиты QEDA.
Предупреждение: будут картинки и, как следствие, трафик.
Вместо преамбулы
Кратко напомню, что для работы надо установить Node.js, а затем запустить в консоли (в *nix может потребоваться sudo
):
npm install -g qeda
Ну и конечно же нам потребуется KiCad EDA, который также необходимо установить.
Описанная ниже разработка ведётся в Ubuntu Linux, но в общем случае (вероятно, с некоторыми поправками) возможна в любой ОС.
В данный момент проекту катастрофически не достаёт документации, но это планируется исправить в будущем.
Об устройстве
Устройство представляет собой адаптер для подключения Wi-Fi модуля ESP-07 к автопилоту Pixhawk.
Формирование библиотеки элементов
Собственно это и есть центральная часть нашего повествования.
Если всё установилось без ошибок, то в системе должна была появиться новая утилита коммандной строки. Проверим, что это так — запустим в консоли:
qeda --version
Если вы видите что-то вроде...
QEDA v0.1.4
… значит мы можем продолжать.
Для начала выберем папку для будущего проекта. В моём случае это будет директория wifi-adapter
.
mkdir wifi-adapter
cd wifi-adapter
Шаг 1. Выбор производителя печатных плат
В моём случае я буду создавать библиотеку элементов с учетом требований конкретного производителя. Конечно, некоторые параметры можно подкрутить в процессе трассировки в EDA, но здесь я покажу, как учитывать производственные возможности на самом первом этапе.
Итак, для примера возьмём OSH Park. Из существенных для нас являются требования по:
- минимальному расстоянию между проводниками: 6 mil (0.2 mm) minimum spacing
- минимальному диаметру отверстия: 13 mil (0.4 mm) minimum drill size
- минимальной ширине ободка металлизированного отвестия: 7 mil (0.2 mm) minimum annular ring
В скобках я указал значения, преобразованные к метрической системе и округлённые в большую сторону до десятых.
Создадим папку для будущей библиотеки элементов:
mkdir lib
cd lib
Теперь используя консольную команду qeda
пропишем вышеупомянутые ограничения. Повторюсь, что пока команды не документированы, так что пока буду пояснять их по месту.
qeda config pattern.clearance.padToPad 0.2 # минимальный зазор между контактными площадками
qeda config pattern.minimum.drillDiameter 0.4 # минимальный диаметр отверстия
qeda config pattern.minimum.ringWidth 0.2 # минимальная ширина ободка металлизированного отвестия
После выполнения этих команд в текущей директории появится файл .qeda.yaml
, который хранит все указанные настройки.
Шаг 2. Прочие настройки
Мы можем выбрать предпочитаемый способ генерирования посадочных мест (pattern) микросхем: рекомендуемый производителем или по стандарту IPC-7351. По умолчанию задан рекомендуемый производителем (значения по умолчанию задавать в настройках не обязательно, но мы продублируем их для демонстрации возможностей):
qeda config pattern.preferManufacturer true
Те элементы, в чьих описаниях не содержится рекомендаций производителя, рассчитываются по стандарту IPC-7351. Стандарт предусматривает три уровня плотности компоновки (density level):
- Least (
L
) — самый плотный (рекомендуется при ограниченных габаритах печатной платы) - Nominal (
N
) — нормальный (рекомендуется в большинстве случаев) - Most (
M
) — наименее плотная компоновка (рекомендуется для плат, рассчитанных на жёсткие условия эксплуатации)
Так как мы не ограничены в габаритах, выбираем наименее плотный вариант:
qeda config pattern.densityLevel M
Так как предполагается паять плату вручную, зададим ещё один параметр: минимальное расстояние от края вывода элемента до противоположного края его контактной площадки.
qeda config pattern.minimum.spaceForIron 0.5
Также есть возможность настроить следующие параметры (в скобках указаны значения по умолчанию):
pattern.clearance.padToMask
(0.05): расстояние от края контактной площадки до края маски (раскрытие маски)pattern.minimum.maskWidth
(0.2): минимальная ширина пояска маски (имеет приоритет над предыдущим параметром)pattern.lineWidth.silkscreen
(0.12): толщина линии в слое шелкографииpattern.fontSize.refDes
(1.2): высота шрифта для позиционных обозначений (reference designator)
Мы оставим эти параметры по умолчанию.
Кроме этого, есть возможность задать кое-какие настройки будущих условных графических обозначений (УГО) элементов (schematic symbol):
symbol.style
('default'): стиль начертания УГО, альтернативный вариант: 'GOST'symbol.gridSize
(2.5): размер ячейки сетки привязкиsymbol.fontSize.refDes
(2.5): высота шрифта для позиционных обозначений (reference designator)symbol.fontSize.name
(2.5): высота шрифта для наименования элементаsymbol.fontSize.pin
(2.5): высота шрифта для обозначения выводов
Их так же трогать не будем.
Шаг 3. Добавление элементов
Так как описания использованных элементов уже содержатся в репозитории элементов, нам необходимо лишь их перечислить. Однако для заинтересованных лиц ссылки на описания использованных элементов приведены в спойлере ниже.
qeda add espressif/esp-07 # модуль Wi-Fi
qeda add capacitor/c0603 # конденсатор 0603
qeda add capacitor/c1210 # конденсатор 1210
qeda add resistor/r0603 # резистор 0603
qeda add misc/tp-th-1 # метализированное отверстие (testpoint)
qeda add ti/lm1117mpx # LDO
qeda add hirose/df13a-6p-1.25h # разъём
Если нужного элемента не оказалось в репозитории, необходимо создать поддиректорию library
и добавить туда описание элемента в формате YAML.
Добавим ещё символы питания и земли:
qeda power +5V # питание +5 В
qeda power +3V3 # питание +3.3 В
qeda ground signal/GND # сигнальная земля (допустимые префиксы: 'chassis/', 'earth/' и без префикса)
Шаг 4. Генерация библиотеки
Ну вот мы и подошли к основному и самому простому шагу. Назовём нашу библиотеку wa
.
qeda generate wa
Если процесс завершился без ошибок, то в текущей директории lib
должны появиться две поддиректории:
library
, содержащая кэшированные YAML-описания используемых элементовkicad
с библиотечными файлами, предназначенными для KiCad
Всё: самое время приступить к рисованию схемы. Инструкции по проектированию схемы и печатной платы больше напоминают известную шутку про то, как рисовать сову. Однако связано это с тем, что статья посвящена в основном процессу генерации библиотеки элементов, а подробности проектирования в KiCad сделали бы статью ещё более раздутой.
Проектирование схемы
Создадим проект KiCad в директории wifi-adapter/board
.
Так как наша библиотека элементов является самодостаточной, можно удалить все библиотеки KiCad'а по умолчанию, и добавить только нашу wa
:
Рисуем схему:
А в стиле GOST схема выглядела бы так:
QEDA избавляет от необходимости такого этапа, как ассоциирование посадочных мест условным графическим обозначениям (assign component footprint), так как каждому элементу уже ассоциировано уникальное посадочное место. Иначе говоря, Cvpcb запускать не придётся.
Генерируем netlist.
Проектирование печатной платы
Для начала так же сообщаем редактору, что надо черпать посадочные места из нашей свежеиспечённой библиотеки wa
. Для этого в директории проекта создаём файл fp-lib-table
со следующим содержимым:
(fp_lib_table
(lib (name wa)(type KiCad)(uri ${KIPRJMOD}/../lib/kicad/wa.pretty)(options "")(descr ""))
)
Импортируем netlist, делаем auto-spread.
Ну а дальше "рисуем остаток совы". Трассировщик из меня не очень, поэтому прошу не судить строго.
Realistic 3D:
Генерируем gerber'ы и можно отдавать в производство.
Заключение
На простейшем примере мы рассмотрели процесс разработки печатной платы, как говорится, с нуля. Признаюсь, плата до производства не дошла, однако предпроизводственный контроль прошла успешно.
Планы на будущее:
- Испытать утилиту на более сложном проекте многослойной платы и довести её до производства.
- Документировать все настройки и возможности.
- Запустить веб-сервис, облегчающий работу с утилитой.
- Развивать сервис в сторону поддержки новых функций и разных EDA.
Исходники:
- Утилита: https://github.com/qeda/qeda
- Описания элементов: https://github.com/qeda/library
- Проект
wifi-adapter
: https://github.com/qeda/examples/tree/master/wifi-adapter
maisvendoo
Отрадно что появляются статьи по такому замечательному проекту как KiCAD. Весьма достойная альтернатива коммерческим продуктам. Использую в
user343
А в генерации герберов что, никаких тонкостей нет, всё на автомате правильно происходит?
Вдруг придёт потом зеркальная плата и не припаяешь SMD микросхемы без переподвывертов.
argz
Там всё прозрачно.
Плюс OSHPark генерирует картинки послойно, на которых можно посмотреть, правильные ли гербера отосланы.
madf
на их превьюхе не всё видно, была у них технологическая проблема, с убогим качеством шелкографии… теперь они вроде исправились
а так да, OSH — молодцы
shamilsan
Вот здесь есть рекомендации самого производителя по генерации gerber.
SL_RU
Ещё есть замечательная программка ZofzPCB. Она позволяет просматривать герберфайлы в 3д, послойно, детально и вообще как угодно. Автоматически можно проверить на наличие ошибок и прочего. Даже не знаю, как без неё раньше жил — теперь ни одну платку теперь в релиз не пропускаю без проверки тут.
user343
Спасибо. А то их можно экспортировать хоть из sprint layout (у меня windows), но из такой простой программки потом дюймы/миллиметры китайцы не так поймут или чего-нить не просверлится на пр-ве и «плакали денежки». А gerbv (gerber viewer), которым я раньше пользовался, таких ошибок на экране не покажет.
Ещё вопрос по статье:
последняя картинка с названием «Realistic 3D» точно трёхмерная?
Может спец. очки одевать надо или анимацию и флэш в браузере включать?
ПМСМ должно быть как-то так: http://dangerousprototypes.com/docs/images/f/f8/Kerkythea_front.jpg
shamilsan
Это просто скриншот из 3D Viewer'а, который входит в состав KiCad. Ну да, согласен, трёхмерного в данном скриншоте мало :)
Просто пока утилита не поддерживает генерацию 3D-изображений самих элементов, поэтому отображается только сама плата, но зато близко к тому, как она будет выглядеть в жизни.
tvi
К Kicad'у, кстати приложили руки ребята из ЦЕРН. а они весьма толковые вещи используют.
madf
Куча сапров существует (платных/бесплатных) и неважно в чем и как делается, главная проблема — это откуда брать новые элементы схем (про модели даже не говорю) и тут всё упирается в удобство, простоту и быстроту создания новых элементов…
user343
Для популярных коммерческих CAD сами производители микросхем часто элементы выкладывают.
Любительским сапрам приходится отставать или конвертеры делать.
например
http://www.ti.com/product/LM5041/toolssoftware — для относительно новых микрух только SPICE модели
TPS65982 — есть Design Files для 2х сапров (кажется).
madf
Сколько пользуюсь «производителями микросхем», очень малая доля кто так делает. Скорее «нет» — чем «да».
А ровняться на всё новое, не удачный пример для частного использования, радиолюбительства (порой дорого и хрен достанешь). Да и не всегда стараешься брать такие корпуса, которые обычным паяльником фиг припаяешь.
shamilsan
Вот и меня не устраивают ни обрывочные библиотеки от производителей, ни генераторы типа Ultra Librarian, ни редакторы элементов во многих САПР. Именно для преодоления этого всего и был задуман проект QEDA. Сейчас использую его в связке с KiCad для проектирования более или менее серьёзной платы, лично для меня очень удобно.