make: add kicad scripts
This commit is contained in:
parent
853e962b98
commit
cf80f5126a
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
|
|
@ -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}
|
|
@ -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
|
|
@ -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])
|
Loading…
Reference in New Issue