make: add kicad scripts

This commit is contained in:
King Kévin 2022-08-11 11:41:11 +02:00
parent 853e962b98
commit cf80f5126a
6 changed files with 205 additions and 43 deletions

46
.gitignore vendored
View File

@ -1,31 +1,35 @@
# schematic lepton-EDA
*.sch
# board layout pcb-rnd
*.lht
*.lht.* *.lht.*
*.versioned.lht
# KiCAD
*.kicad_prl
*.kicad_pro-bak
*.xml
fp-info-cache
# temporary files
*~ *~
*.versioned.sch \#*\#
# outputs
*.svg *.svg
*.png
*.pdf *.pdf
*.ps *.ps
*.zip *.zip
*.brd.*
*.ast
*.g2l
*.g3l
*.gbl
*.gbo
*.gbp
*.gbs
*.gko
*.gtl
*.gto
*.gtp
*.gts
*.xln
*.tdx
\#*\#
*.notes.txt
*.bom.csv *.bom.csv
*.cost.csv
*.cpl.csv *.cpl.csv
*.versioned.*
fabrication
# scripts and utilities
*.json *.json
*.rb *.rb
geda/footprints/
# panel files
panel.*
panel

View File

@ -1,19 +1,22 @@
this will describe how to generate the output file form the sources. this will describe how to generate the output files form the sources.
requirements requirements
============ ============
to be able to generate the outputs you need following software: to be able to generate the outputs, you need following software:
- rake: the central script taking care of generating the output files (Makefile is too cumbersome to parse files)
- [QEDA](http://qeda.org/): to generate footprints for the parts - [QEDA](http://qeda.org/): to generate footprints for the parts
- [Lepton EDA](https://github.com/lepton-eda/lepton-eda): for the schematic capture - [KiCad](https://www.kicad.org/): EDA software used for schematic capture and board layout
- [pcb-rnd](http://repo.hu/projects/pcb-rnd/): for the board layout - [PcbDraw](https://github.com/yaqwsx/PcbDraw): to generate board layout rendering
the output generation is automatized. - [KiKit](https://github.com/yaqwsx/KiKit): to generate fabrications files (Gerber, Excellon)
- [KiAuto](https://github.com/INTI-CMNB/KiAuto): to generate schematic printout (PDF)
- [KiBoM](https://github.com/SchrodingersGat/KiBoM): to generate Bill of Material (CSV)
compiling compiling
========= =========
to generate schematic, BoM, board render, and fabrication output, run `make`.
library library
------- -------
@ -21,11 +24,13 @@ almost all of the symbols and footprints used in the schematic and board layout
the `library` folder contains the QEDA parts definitions. the `library` folder contains the QEDA parts definitions.
to install QEDA using NPM from the official repository: to install QEDA using NPM from the official repository:
~~~ ~~~
sudo npm install -g qeda sudo npm install -g qeda
~~~ ~~~
to install QEDA from the sources: to install QEDA from the sources:
~~~ ~~~
git clone https://github.com/qeda/qeda git clone https://github.com/qeda/qeda
cd qeda cd qeda
@ -34,49 +39,59 @@ sudo npm install --global
~~~ ~~~
to generate the parts: to generate the parts:
~~~ ~~~
rake library make lib
~~~ ~~~
this will use the parts definition (.yaml files) in the `library` to generate [gEDA gschem](http://wiki.geda-project.org/geda:gaf)/[Lepton EDA](https://github.com/lepton-eda/lepton-eda) symbols (.sym files) in the `geda/symbols` folder, and [coralEDA pcb-rnd](http://repo.hu/projects/pcb-rnd/) footprints (.lht files) in the `coraleda/subc` folder. this will use the parts definition (.yaml files) in the `library` to generate the symbols (.sym files) and footprints used by KiCAD in the `kicad` folder.
only the QEDA parts in subfolders within `library` come from the [QEDA library](https://doc.qeda.org/library/), but the files are included in this project for simplicity and archiving purposes.
all other parts are custom and written for this project.
schematic schematic
--------- ---------
the `.sch` file is the schematic source file. the `.kicad_sch` file is the schematic source file.
it has been drawn using [Lepton EDA](https://github.com/lepton-eda/lepton-eda). it has been drawn using the [KiCAD eeschema](https://www.kicad.org/) schematic editor.
it uses standard symbols, and the ones in the `geda/symbols/` folder. it uses standard symbols, and the ones in the `kicad/` folder.
most symbols are generated by QEDA as described above. most symbols are generated by QEDA as described above.
to export as pdf: to export as pdf:
~~~ ~~~
rake print make print
~~~ ~~~
BOM BOM
--- ---
to export the bill of material (as CSV): to export the bill of material (as CSV):
~~~ ~~~
rake bom make bom
~~~ ~~~
board board
----- -----
the `.lht` file is the board layout source file. the `.kicad_brd` file is the board layout source file.
it has been drawn using [coralEDA pcb-rnd](http://repo.hu/projects/pcb-rnd/). it has been drawn using the [KiCAD pcbnew](https://docs.kicad.org/6.0/en/pcbnew/pcbnew.html) PCB editor.
it uses the symbols from the `coraleda/subc/` folder. it uses the footprints from the `kicad/` folder.
most symbols are generated by QEDA as described above. most symbols are generated by QEDA as described above.
`oshw_logo.lht` is just the Open Source Hardware Logo.
it been generated from https://oshwlogo.cuvoodoo.info/.
to export gerber files for PCB manufacturer (and photo preview + overview document): to export gerber files for PCB manufacturer (and photo preview + overview document):
~~~ ~~~
rake fabrication make fabrication
~~~ ~~~
versioning
----------
the source schematic and board layout do not include version information.
when generating schematic or board fabrication output, a copy of the source files with date and version information is done as `.versioned.` files.
the date corresponds to the last changes (i.e. commit).
the version is formatted as `v.r`:
- `v` corresponds to the major version information defined in `version`
- `r` corresponds to the total number of changes done to the source files

12
JLCPCB_CORRECTION.csv Normal file
View File

@ -0,0 +1,12 @@
package;x;y;rot
LEDC2012X80N;0;0;-90
LEDC1608X90N;0;0;-90
UC1608X55N;0;0;-90
CAPC1608X92N;0;0;-90
SOT95P237X112-3N;0;0;180
CONNECTOR_MY-1220-03;0;-1.1;0
CONNECTOR_XKB_U262-24XN-4BV64;0;-1.3;0
CONNECTOR_U231-09XN-4BLRA00;0;-3.0;0
SOP254P976X355-14N;0;0;-90
SOP65P640X120-20N;0;0;-90
CONNECTOR_HDMI-001S;0;1.1;0
1 package x y rot
2 LEDC2012X80N 0 0 -90
3 LEDC1608X90N 0 0 -90
4 UC1608X55N 0 0 -90
5 CAPC1608X92N 0 0 -90
6 SOT95P237X112-3N 0 0 180
7 CONNECTOR_MY-1220-03 0 -1.1 0
8 CONNECTOR_XKB_U262-24XN-4BV64 0 -1.3 0
9 CONNECTOR_U231-09XN-4BLRA00 0 -3.0 0
10 SOP254P976X355-14N 0 0 -90
11 SOP65P640X120-20N 0 0 -90
12 CONNECTOR_HDMI-001S 0 1.1 0

80
Makefile Normal file
View File

@ -0,0 +1,80 @@
# project file name (use for schematic and board layout)
NAME ?= pd_blocker
# path to qeda
QEDA := qeda
# path to InteractiveHtmlBom
IBOMGEN := /usr/share/kicad/scripting/plugins/InteractiveHtmlBom/generate_interactive_bom.py
# read project version
VERSION := $(shell cat version)
# current date for stamping output
DATE = $(shell date +%Y-%m-%d)
# revision based on number of changes on schematic or board layout
REVISION := $(shell git log --pretty=oneline "${NAME}.kicad_sch" "${NAME}.kicad_pcb" | wc -l)
# generate file with version information
VERSIONED_EXT = kicad_sch kicad_pcb kicad_pro json
define version_rule
%.versioned.$1: %.$1
cp $$< $$@
sed --in-place 's/\$$$$version\$$$$/${VERSION}/g' $$@
sed --in-place 's/\$$$$date\$$$$/${DATE}/g' $$@
sed --in-place 's/\$$$$revision\$$$$/${REVISION}/g' $$@
endef
$(foreach EXT,$(VERSIONED_EXT),$(eval $(call version_rule,$(EXT))))
FABRICATION_DIR := fabrication
IBOM := ${FABRICATION_DIR}/ibom.html
all: ${NAME}.sch.pdf ${NAME}.brd-top.png ${NAME}.brd-bot.png ${NAME}.bom.csv fab
fab: ${FABRICATION_DIR} ${IBOM}
# generate fabrication files (gerbers/drill/BoM/PnP)
${FABRICATION_DIR}: ${NAME}.versioned.kicad_sch ${NAME}.versioned.kicad_pcb
kikit fab jlcpcb --drc --assembly --schematic $^ $@
# generate interactive BoM
${IBOM}: ${NAME}.versioned.kicad_pcb
$(IBOMGEN) --no-browser --dest-dir `dirname $@` --name-format `basename $@ ".html"` --show-fields "Value" $< &>/dev/null
# generate symbols and footprints from parts
lib:
$(QEDA) generate qeda
# generate printable version (PDF) of schematic
%.sch.pdf: %.versioned.kicad_sch %.versioned.kicad_pro
eeschema_do export $< .
mv $*.versioned.pdf $@
# generate render from layout (top side)
%.brd-top.png: %.versioned.kicad_pcb
pcbdraw --silent $< --dpi 600 $@
# generate render from layout (bottom side)
%.brd-bot.png: %.versioned.kicad_pcb
pcbdraw --silent $< --dpi 600 --back $@
# export Bill of Material (as CSV)
%.bom.csv: %.versioned.kicad_sch %.versioned.kicad_pro
eeschema_do bom_xml $< .
kibom $*.versioned.xml $@
# generate panel
PANEL_DIR := panel
panel: panel.kicad_pcb
panel.kicad_pcb: ${NAME}.versioned.kicad_pcb ${NAME}.versioned.kicad_pro ${NAME}.versioned.kicad_sch ${NAME}.versioned.json
kikit panelize -p ${NAME}.versioned.json ${NAME}.versioned.kicad_pcb $@
sed --in-place 's/\"missing_courtyard\": \"warning\"/\"missing_courtyard\": \"ignore\"/g' $(patsubst %.kicad_pcb,%.kicad_pro,$@) # the mouse bites don't have a courtyard
kikit fab jlcpcb --drc --assembly --missingError --schematic ${NAME}.versioned.kicad_sch $@ ${PANEL_DIR}
pcbdraw --silent $@ --dpi 600 panel.brd-top.png
pcbdraw --silent $@ --dpi 600 --back panel.brd-bot.png
clean:
rm -f $(foreach EXT,$(VERSIONED_EXT),${NAME}.versioned.$(EXT))
rm -f ${NAME}.sch.pdf ${NAME}.brd-top.png ${NAME}.brd-bot.png ${NAME}.versioned.xml ${NAME}.bom.csv
rm -f ${NAME}.versioned.kicad_prl ${NAME}.versioned.kicad_pro-bak ${NAME}.versioned.xml ${NAME}.versioned.csv
rm -f ${IBOM}
rm -rf ${FABRICATION_DIR}
rm -f panel.kicad_pcb panel.kicad_pro
rm -rf ${PANEL_DIR}

42
bom.ini Normal file
View File

@ -0,0 +1,42 @@
[BOM_OPTIONS]
ignore_dnf = 0
number_rows = 0
group_connectors = 1
test_regex = 0
merge_blank_fields = 1
output_file_name = %O%V
[IGNORE_COLUMNS]
; Any column heading that appears here will be excluded from the Generated BoM
; Titles are case-insensitive
Part
Part Lib
Footprint
Footprint Lib
Build Quantity
sheetpath
[COLUMN_ORDER]
; Columns will apear in the order they are listed here
; Titles are case-insensitive
References
Value
Quantity Per PCB
Description
Part
Part Lib
Footprint
Footprint Lib
Build Quantity
LCSC
Datasheet
[GROUP_FIELDS]
; List of fields used for sorting individual components into groups
; Components which match (comparing *all* fields) will be grouped together
; Field names are case-insensitive
Part
Part Lib
Value
Footprint
Footprint Lib

9
refdes2fab.py Normal file
View File

@ -0,0 +1,9 @@
import pcbnew
import sys
board = pcbnew.LoadBoard(sys.argv[1])
for fp in board.GetFootprints():
fp.Value().SetVisible(False)
fp.Reference().SetLayer(board.GetLayerID('F.Fab'))
board.Save(sys.argv[1])