Проектируем плату в KiCad с помощью QEDA: от идеи до опытного образца
Какое-то время назад я опубликовал статью-презентацию об инструменте под названием 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.
Исходники: