From e73d2a81aae6e81fd1c78a30507e26e15be431d8 Mon Sep 17 00:00:00 2001 From: Matt Harlum Date: Wed, 28 Dec 2022 15:29:50 +0100 Subject: [PATCH] Add Kibot automation --- Kicad/.gitignore | 4 + Kicad/Makefile | 30 ++++++ Kicad/kibot/release.kibot.yaml | 176 +++++++++++++++++++++++++++++++++ 3 files changed, 210 insertions(+) create mode 100644 Kicad/Makefile create mode 100644 Kicad/kibot/release.kibot.yaml diff --git a/Kicad/.gitignore b/Kicad/.gitignore index fec07da..955dd25 100644 --- a/Kicad/.gitignore +++ b/Kicad/.gitignore @@ -4,6 +4,7 @@ # Temporary files *.000 *.bak +*-bak *.bck *.kicad_pcb-bak *.kicad_sch-bak @@ -15,6 +16,9 @@ _autosave-* *-save.pro *-save.kicad_pcb fp-info-cache +*-erc.txt +*-drc.txt +kibot_errors.filter # Netlist files (exported from Eeschema) *.net diff --git a/Kicad/Makefile b/Kicad/Makefile new file mode 100644 index 0000000..c5ddf98 --- /dev/null +++ b/Kicad/Makefile @@ -0,0 +1,30 @@ +PROJECT=GottaGoFaSDZ3 +KIBOT_CONF=./kibot/release.kibot.yaml +GERBER_OUTPUT=../Gerbers + +DRILLS=$(GERBER_OUTPUT)/$(PROJECT)-NPTH.drl $(GERBER_OUTPUT)/$(PROJECT)-PTH.drl + +GERBERS=$(GERBER_OUTPUT)/$(PROJECT)-B_Cu.gbr $(GERBER_OUTPUT)/$(PROJECT)-B_Mask.gbr $(GERBER_OUTPUT)/$(PROJECT)-B_Silkscreen.gbr $(GERBER_OUTPUT)/$(PROJECT)-Edge_Cuts.gbr $(GERBER_OUTPUT)/$(PROJECT)-F_Cu.gbr $(GERBER_OUTPUT)/$(PROJECT)-F_Mask.gbr $(GERBER_OUTPUT)/$(PROJECT)-F_Silkscreen.gbr $(GERBER_OUTPUT)/$(PROJECT)-F_Paste.gbr $(GERBER_OUTPUT)/$(PROJECT)-B_Paste.gbr $(DRILLS) + +JLCPCB=$(GERBER_OUTPUT)/$(PROJECT)_bom_jlc.csv $(GERBER_OUTPUT)/$(PROJECT)_cpl_jlc.csv +.PHONY: release + + +all: $(GERBERS) $(JLCPCB) ../Docs/Schematic.pdf ../ibom/$(PROJECT)-ibom.html + +schematic: ../Docs/Schematic.pdf +gerbers: $(GERBERS) +jlcpcb: $(JLCPCB) +ibom: ../ibom/$(PROJECT)-ibom.html + +$(GERBERS) ../Docs/PCB.png: $(PROJECT).kicad_pcb + kibot -c $(KIBOT_CONF) Gerbers Drills Image + +$(JLCPCB): $(PROJECT).kicad_pcb $(PROJECT).kicad_sch + kibot -c $(KIBOT_CONF) JLCPCB_position JLCPCB_bom + +../Docs/Schematic.pdf: $(PROJECT).kicad_sch + kibot -s all -c $(KIBOT_CONF) Schematic + +../ibom/$(PROJECT)-ibom.html: $(PROJECT).kicad_pcb + kibot -s all -c $(KIBOT_CONF) IBOM diff --git a/Kicad/kibot/release.kibot.yaml b/Kicad/kibot/release.kibot.yaml new file mode 100644 index 0000000..6247d8f --- /dev/null +++ b/Kicad/kibot/release.kibot.yaml @@ -0,0 +1,176 @@ +kibot: + version: 1 + +filters: + - name: 'exclude_tht' + type: 'generic' + comment: 'Exclude thru-hole parts' + exclude_tht: true + - name: 'fix_rotation' + comment: 'Adjust rotation for JLC' + type: rot_footprint + rotations: + - ["^TSOP-II", 270.0] + - ["^SOT-89", 180.0] + + +variants: + - name: rotated + comment: 'Just a place holder for the rotation filter' + type: kibom + variant: rotated + pre_transform: 'fix_rotation' + +preflight: + check_zone_fills: true + fill_zones: false + run_drc: true + run_erc: true + update_xml: true + ignore_unconnected: true + filters: + - error: 'pin_not_connected' + filter: 'Pin not connected' + - error: 'silk_overlap' + filter: 'Silkscreen overlap' + - error: 'pin_not_driven' + filter: 'Input pin not driven by output' + regex: 'Input pin not driven by any Output pins' + +outputs: + - name: Gerbers + comment: "Generate gerber files" + type: gerber + dir: '../Gerbers' + options: + exclude_edge_layer: true + exclude_pads_from_silkscreen: true + plot_sheet_reference: false + plot_footprint_refs: true + plot_footprint_values: false + force_plot_invisible_refs_vals: false + tent_vias: true + use_protel_extensions: false + create_gerber_job_file: false + disable_aperture_macros: true + gerber_precision: 4.6 + use_gerber_x2_attributes: false + use_gerber_net_attributes: false + line_width: 0.1 + subtract_mask_from_silk: true + inner_extension_pattern: '.gbr' + use_aux_axis_as_origin: true + + layers: + - F.Cu + - B.Cu + - In1.Cu + - In2.Cu + - F.SilkS + - B.SilkS + - F.Paste + - B.Paste + - F.Mask + - B.Mask + - Edge.Cuts + + - name: Drills + comment: Drill files + type: excellon + dir: '../Gerbers' + options: + pth_id: '-PTH' + npth_id: '-NPTH' + metric_units: true + route_mode_for_oval_holes: false + pth_and_npth_single_file: false + use_aux_axis_as_origin: true + output: "%f%i.%x" + + - name: Schematic + comment: "Output PDF Schematic" + type: pdf_sch_print + options: + frame: true + output: "../Docs/Schematic.pdf" + + - name: IBOM + type: ibom + comment: "Generate HTML Interactive BOM" + dir: ../ibom + options: + output: 'ibom.html' + include_tracks: true + layer_view: FB + blacklist: 'CN1,J1' + highlight_pin1: true + include_nets: true + dark_mode: true + + - name: 3dImage + type: render_3d + comment: "3D Render" + run_by_default: true + options: + ray_tracing: false + output: ../Docs/PCB.png + zoom: 8 + view: top + no_tht: true + orthographic: true + download: false + width: 1300 + height: 530 + + - name: Image + type: pcbdraw + comment: "Draw PCB" + options: + output: ../Docs/PCB.png + format: png + show_components: none + + - name: 'JLCPCB_position' + comment: "Pick and place file, JLCPCB style" + type: position + options: + variant: rotated + output: '../Gerbers/%f_cpl_jlc.%x' + format: CSV + units: millimeters + separate_files_for_front_and_back: false + use_aux_axis_as_origin: true + only_smd: true + columns: + - id: Ref + name: Designator + - Val + - Package + - id: PosX + name: "Mid X" + - id: PosY + name: "Mid Y" + - id: Rot + name: Rotation + - id: Side + name: Layer + + - name: 'JLCPCB_bom' + comment: "BoM for JLCPCB" + type: bom + options: + output: '../Gerbers/%f_%i_jlc.%x' + exclude_filter: 'exclude_tht' + ref_separator: ',' + columns: + - field: Value + name: Comment + - field: References + name: Designator + - Footprint + - field: 'LCSC #' + name: 'LCSC Part #' + csv: + hide_pcb_info: true + hide_stats_info: true + quote_all: true