Compare commits

...

6 Commits

5 changed files with 343 additions and 121 deletions

View File

@ -6,7 +6,7 @@ requirements
to be able to generate the outputs, you need following software: to be able to generate the outputs, you need following software:
- [QEDA](http://qeda.org/): to generate footprints for the parts - [QEDA](http://qeda.org/): to generate footprints for the parts
- [KiCad v7](https://www.kicad.org/): EDA software used for schematic capture and board layout - [KiCad v8](https://www.kicad.org/): EDA software used for schematic capture and board layout
- [PcbDraw](https://github.com/yaqwsx/PcbDraw): to generate board layout rendering - [PcbDraw](https://github.com/yaqwsx/PcbDraw): to generate board layout rendering
- [KiKit](https://github.com/yaqwsx/KiKit): to generate fabrications files (Gerber, Excellon) - [KiKit](https://github.com/yaqwsx/KiKit): to generate fabrications files (Gerber, Excellon)
- [KiBoM](https://github.com/SchrodingersGat/KiBoM): to generate Bill of Material (CSV) - [KiBoM](https://github.com/SchrodingersGat/KiBoM): to generate Bill of Material (CSV)

View File

@ -8,7 +8,7 @@ QEDA := qeda
# path to KiBOM # path to KiBOM
KIBOM := kibom KIBOM := kibom
# path to InteractiveHtmlBom # path to InteractiveHtmlBom
IBOMGEN := ~/.local/share/kicad/7.0/3rdparty/plugins/org_openscopeproject_InteractiveHtmlBom/generate_interactive_bom.py IBOMGEN := ~/.local/share/kicad/8.0/3rdparty/plugins/org_openscopeproject_InteractiveHtmlBom/generate_interactive_bom.py
# read project version # read project version
VERSION := $(shell cat version) VERSION := $(shell cat version)
@ -33,10 +33,12 @@ VERSIONED_SHEET = $(foreach SHEET,$(NAME) $(SUBSHEET),$(SHEET).versioned.kicad_s
FABRICATION_DIR := fabrication FABRICATION_DIR := fabrication
IBOM := ${FABRICATION_DIR}/ibom.html IBOM := ${FABRICATION_DIR}/ibom.html
all: $(VERSIONED_SHEET) ${NAME}.sch.pdf ${NAME}.brd-top.png ${NAME}.brd-bot.png ${NAME}.bom.csv ${NAME}.3d.step fab all: $(VERSIONED_SHEET) ${NAME}.sch.pdf ${NAME}.bom.csv render fab
fab: ${FABRICATION_DIR} ${IBOM} fab: ${FABRICATION_DIR} ${IBOM}
render: ${NAME}.brd-top.png ${NAME}.brd-bot.png ${NAME}.brd-top.svg ${NAME}.brd-bot.svg ${NAME}.3d.step
# generate fabrication files (gerbers/drill/BoM/PnP) # generate fabrication files (gerbers/drill/BoM/PnP)
${FABRICATION_DIR}: ${NAME}.versioned.kicad_sch ${NAME}.versioned.kicad_pcb ${FABRICATION_DIR}: ${NAME}.versioned.kicad_sch ${NAME}.versioned.kicad_pcb
kikit fab jlcpcb --no-drc --assembly --field JLCPCB,LCSC --schematic $^ $@ kikit fab jlcpcb --no-drc --assembly --field JLCPCB,LCSC --schematic $^ $@
@ -68,6 +70,14 @@ lib:
%.brd-bot.png: %.versioned.kicad_pcb %.brd-bot.png: %.versioned.kicad_pcb
pcbdraw plot --silent --no-components --dpi 600 --side back $< $@ pcbdraw plot --silent --no-components --dpi 600 --side back $< $@
# generate render from layout (top side)
%.brd-top.svg: %.versioned.kicad_pcb
$(KICAD) pcb export svg --layers F.Cu,F.Paste,F.Silkscreen,Edge.Cuts --page-size-mode 2 --exclude-drawing-sheet --output $@ $<
# generate render from layout (bottom side)
%.brd-bot.svg: %.versioned.kicad_pcb
$(KICAD) pcb export svg --layers B.Cu,B.Paste,B.Silkscreen,Edge.Cuts --mirror --page-size-mode 2 --exclude-drawing-sheet --output $@ $<
# export Bill of Material (as CSV) # export Bill of Material (as CSV)
%.bom.xml: %.versioned.kicad_sch %.versioned.kicad_pro %.bom.xml: %.versioned.kicad_sch %.versioned.kicad_pro
$(KICAD) sch export python-bom --output $@ $< $(KICAD) sch export python-bom --output $@ $<
@ -92,7 +102,7 @@ panel.kicad_pcb: ${NAME}.versioned.kicad_pcb ${NAME}.versioned.kicad_pro ${NAME}
clean: clean:
rm -f $(foreach EXT,$(VERSIONED_EXT),${NAME}.versioned.$(EXT)) 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}.sch.pdf ${NAME}.brd-top.png ${NAME}.brd-bot.png ${NAME}.brd-top.svg ${NAME}.brd-bot.svg ${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 ${NAME}.versioned.kicad_prl ${NAME}.versioned.kicad_pro-bak ${NAME}.versioned.xml ${NAME}.versioned.csv
rm -f ${IBOM} rm -f ${IBOM}
rm -rf ${FABRICATION_DIR} rm -rf ${FABRICATION_DIR}

View File

@ -1,9 +1,11 @@
(kicad_pcb (version 20221018) (generator pcbnew) (kicad_pcb
(version 20240108)
(generator "pcbnew")
(generator_version "8.0")
(general (general
(thickness 1.6) (thickness 1.6)
(legacy_teardrops no)
) )
(paper "A4") (paper "A4")
(title_block (title_block
(date "$date$") (date "$date$")
@ -12,7 +14,6 @@
(comment 1 "King Kévin") (comment 1 "King Kévin")
(comment 2 "CERN-OHL-S") (comment 2 "CERN-OHL-S")
) )
(layers (layers
(0 "F.Cu" signal) (0 "F.Cu" signal)
(31 "B.Cu" signal) (31 "B.Cu" signal)
@ -28,56 +29,85 @@
(48 "B.Fab" user) (48 "B.Fab" user)
(49 "F.Fab" user) (49 "F.Fab" user)
) )
(setup (setup
(stackup (stackup
(layer "F.SilkS" (type "Top Silk Screen") (color "White")) (layer "F.SilkS"
(layer "F.Mask" (type "Top Solder Mask") (color "Green") (thickness 0.01)) (type "Top Silk Screen")
(layer "F.Cu" (type "copper") (thickness 0.035)) (color "White")
(layer "dielectric 1" (type "core") (thickness 1.51) (material "FR4") (epsilon_r 4.5) (loss_tangent 0.02)) )
(layer "B.Cu" (type "copper") (thickness 0.035)) (layer "F.Mask"
(layer "B.Mask" (type "Bottom Solder Mask") (color "Green") (thickness 0.01)) (type "Top Solder Mask")
(layer "B.SilkS" (type "Bottom Silk Screen") (color "White")) (color "Green")
(copper_finish "None") (thickness 0.01)
)
(layer "F.Cu"
(type "copper")
(thickness 0.035)
)
(layer "dielectric 1"
(type "core")
(color "Polyimide")
(thickness 1.51)
(material "FR4")
(epsilon_r 4.5)
(loss_tangent 0.02)
)
(layer "B.Cu"
(type "copper")
(thickness 0.035)
)
(layer "B.Mask"
(type "Bottom Solder Mask")
(color "Green")
(thickness 0.01)
)
(layer "B.SilkS"
(type "Bottom Silk Screen")
(color "White")
)
(copper_finish "HAL SnPb")
(dielectric_constraints no) (dielectric_constraints no)
) )
(pad_to_mask_clearance 0) (pad_to_mask_clearance 0.038)
(solder_mask_min_width 0.1)
(allow_soldermask_bridges_in_footprints no)
(pcbplotparams (pcbplotparams
(layerselection 0x00010fc_ffffffff) (layerselection 0x00010fc_ffffffff)
(plot_on_all_layers_selection 0x0000000_00000000) (plot_on_all_layers_selection 0x0000000_00000000)
(disableapertmacros false) (disableapertmacros no)
(usegerberextensions false) (usegerberextensions no)
(usegerberattributes true) (usegerberattributes yes)
(usegerberadvancedattributes true) (usegerberadvancedattributes yes)
(creategerberjobfile true) (creategerberjobfile yes)
(dashed_line_dash_ratio 12.000000) (dashed_line_dash_ratio 12.000000)
(dashed_line_gap_ratio 3.000000) (dashed_line_gap_ratio 3.000000)
(svgprecision 6) (svgprecision 6)
(plotframeref false) (plotframeref no)
(viasonmask false) (viasonmask no)
(mode 1) (mode 1)
(useauxorigin false) (useauxorigin no)
(hpglpennumber 1) (hpglpennumber 1)
(hpglpenspeed 20) (hpglpenspeed 20)
(hpglpendiameter 15.000000) (hpglpendiameter 15.000000)
(dxfpolygonmode true) (pdf_front_fp_property_popups yes)
(dxfimperialunits true) (pdf_back_fp_property_popups yes)
(dxfusepcbnewfont true) (dxfpolygonmode yes)
(psnegative false) (dxfimperialunits yes)
(psa4output false) (dxfusepcbnewfont yes)
(plotreference true) (psnegative no)
(plotvalue true) (psa4output no)
(plotinvisibletext false) (plotreference yes)
(sketchpadsonfab false) (plotvalue yes)
(subtractmaskfromsilk false) (plotfptext yes)
(plotinvisibletext no)
(sketchpadsonfab no)
(subtractmaskfromsilk no)
(outputformat 1) (outputformat 1)
(mirror false) (mirror no)
(drillshape 1) (drillshape 1)
(scaleselection 1) (scaleselection 1)
(outputdirectory "") (outputdirectory "")
) )
) )
(net 0 "") (net 0 "")
) )

View File

@ -3,14 +3,17 @@
"3dviewports": [], "3dviewports": [],
"design_settings": { "design_settings": {
"defaults": { "defaults": {
"board_outline_line_width": 0.049999999999999996, "apply_defaults_to_fp_fields": false,
"copper_line_width": 0.19999999999999998, "apply_defaults_to_fp_shapes": false,
"apply_defaults_to_fp_text": false,
"board_outline_line_width": 0.05,
"copper_line_width": 0.2,
"copper_text_italic": false, "copper_text_italic": false,
"copper_text_size_h": 1.5, "copper_text_size_h": 1.5,
"copper_text_size_v": 1.5, "copper_text_size_v": 1.5,
"copper_text_thickness": 0.3, "copper_text_thickness": 0.3,
"copper_text_upright": false, "copper_text_upright": false,
"courtyard_line_width": 0.049999999999999996, "courtyard_line_width": 0.05,
"dimension_precision": 4, "dimension_precision": 4,
"dimension_units": 3, "dimension_units": 3,
"dimensions": { "dimensions": {
@ -21,7 +24,7 @@
"text_position": 0, "text_position": 0,
"units_format": 1 "units_format": 1
}, },
"fab_line_width": 0.09999999999999999, "fab_line_width": 0.1,
"fab_text_italic": false, "fab_text_italic": false,
"fab_text_size_h": 1.0, "fab_text_size_h": 1.0,
"fab_text_size_v": 1.0, "fab_text_size_v": 1.0,
@ -54,6 +57,11 @@
"gap": 0.0, "gap": 0.0,
"via_gap": 0.0, "via_gap": 0.0,
"width": 0.0 "width": 0.0
},
{
"gap": 0.43,
"via_gap": 0.0,
"width": 0.2
} }
], ],
"drc_exclusions": [], "drc_exclusions": [],
@ -63,20 +71,27 @@
"rule_severities": { "rule_severities": {
"annular_width": "error", "annular_width": "error",
"clearance": "error", "clearance": "error",
"connection_width": "warning",
"copper_edge_clearance": "error", "copper_edge_clearance": "error",
"copper_sliver": "warning",
"courtyards_overlap": "error", "courtyards_overlap": "error",
"diff_pair_gap_out_of_range": "error", "diff_pair_gap_out_of_range": "error",
"diff_pair_uncoupled_length_too_long": "error", "diff_pair_uncoupled_length_too_long": "error",
"drill_out_of_range": "error", "drill_out_of_range": "error",
"duplicate_footprints": "warning", "duplicate_footprints": "warning",
"extra_footprint": "warning", "extra_footprint": "warning",
"footprint_type_mismatch": "error", "footprint": "error",
"footprint_symbol_mismatch": "warning",
"footprint_type_mismatch": "warning",
"hole_clearance": "error", "hole_clearance": "error",
"hole_near_hole": "error", "hole_near_hole": "error",
"invalid_outline": "error", "invalid_outline": "error",
"isolated_copper": "warning",
"item_on_disabled_layer": "error", "item_on_disabled_layer": "error",
"items_not_allowed": "error", "items_not_allowed": "error",
"length_out_of_range": "error", "length_out_of_range": "error",
"lib_footprint_issues": "ignore",
"lib_footprint_mismatch": "ignore",
"malformed_courtyard": "error", "malformed_courtyard": "error",
"microvia_drill_out_of_range": "error", "microvia_drill_out_of_range": "error",
"missing_courtyard": "warning", "missing_courtyard": "warning",
@ -86,9 +101,14 @@
"padstack": "error", "padstack": "error",
"pth_inside_courtyard": "ignore", "pth_inside_courtyard": "ignore",
"shorting_items": "error", "shorting_items": "error",
"silk_edge_clearance": "ignore",
"silk_over_copper": "warning", "silk_over_copper": "warning",
"silk_overlap": "warning", "silk_overlap": "warning",
"skew_out_of_range": "error", "skew_out_of_range": "error",
"solder_mask_bridge": "error",
"starved_thermal": "error",
"text_height": "warning",
"text_thickness": "warning",
"through_hole_pad_without_hole": "error", "through_hole_pad_without_hole": "error",
"too_many_vias": "error", "too_many_vias": "error",
"track_dangling": "warning", "track_dangling": "warning",
@ -105,32 +125,129 @@
"allow_microvias": false, "allow_microvias": false,
"max_error": 0.005, "max_error": 0.005,
"min_clearance": 0.127, "min_clearance": 0.127,
"min_copper_edge_clearance": 0.19999999999999998, "min_connection": 0.127,
"min_copper_edge_clearance": 0.3,
"min_hole_clearance": 0.254, "min_hole_clearance": 0.254,
"min_hole_to_hole": 0.254, "min_hole_to_hole": 0.254,
"min_microvia_diameter": 0.19999999999999998, "min_microvia_diameter": 0.2,
"min_microvia_drill": 0.09999999999999999, "min_microvia_drill": 0.1,
"min_silk_clearance": 0.0, "min_resolved_spokes": 2,
"min_silk_clearance": 0.15,
"min_text_height": 1.0,
"min_text_thickness": 0.153,
"min_through_hole_diameter": 0.3, "min_through_hole_diameter": 0.3,
"min_track_width": 0.127, "min_track_width": 0.127,
"min_via_annular_width": 0.13, "min_via_annular_width": 0.13,
"min_via_diameter": 0.5, "min_via_diameter": 0.5,
"solder_mask_clearance": 0.0, "solder_mask_clearance": 0.0,
"solder_mask_min_width": 0.0, "solder_mask_min_width": 0.0,
"solder_mask_to_copper_clearance": 0.05,
"use_height_for_length_calcs": true "use_height_for_length_calcs": true
}, },
"track_widths": [ "teardrop_options": [
0.0 {
"td_onpadsmd": true,
"td_onroundshapesonly": false,
"td_ontrackend": false,
"td_onviapad": true
}
], ],
"teardrop_parameters": [
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_round_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_rect_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_track_end",
"td_width_to_size_filter_ratio": 0.9
}
],
"track_widths": [
0.0,
0.127,
0.2,
0.3,
0.5
],
"tuning_pattern_settings": {
"diff_pair_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 1.0
},
"diff_pair_skew_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
},
"single_track_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
}
},
"via_dimensions": [ "via_dimensions": [
{ {
"diameter": 0.0, "diameter": 0.0,
"drill": 0.0 "drill": 0.0
},
{
"diameter": 0.6,
"drill": 0.3
},
{
"diameter": 0.8,
"drill": 0.4
},
{
"diameter": 1.0,
"drill": 0.5
} }
], ],
"zones_allow_external_fillets": false, "zones_allow_external_fillets": false,
"zones_use_no_outline": true "zones_use_no_outline": true
}, },
"ipc2581": {
"dist": "",
"distpn": "",
"internal_id": "",
"mfg": "",
"mpn": ""
},
"layer_presets": [], "layer_presets": [],
"viewports": [] "viewports": []
}, },
@ -423,14 +540,75 @@
"gencad": "", "gencad": "",
"idf": "", "idf": "",
"netlist": "", "netlist": "",
"plot": "",
"pos_files": "",
"specctra_dsn": "", "specctra_dsn": "",
"step": "", "step": "",
"svg": "",
"vrml": "" "vrml": ""
}, },
"page_layout_descr_file": "" "page_layout_descr_file": ""
}, },
"schematic": { "schematic": {
"annotate_start_num": 0, "annotate_start_num": 0,
"bom_fmt_presets": [],
"bom_fmt_settings": {
"field_delimiter": ",",
"keep_line_breaks": false,
"keep_tabs": false,
"name": "CSV",
"ref_delimiter": ",",
"ref_range_delimiter": "",
"string_delimiter": "\""
},
"bom_presets": [],
"bom_settings": {
"exclude_dnp": false,
"fields_ordered": [
{
"group_by": false,
"label": "Reference",
"name": "Reference",
"show": true
},
{
"group_by": true,
"label": "Value",
"name": "Value",
"show": true
},
{
"group_by": false,
"label": "Datasheet",
"name": "Datasheet",
"show": true
},
{
"group_by": false,
"label": "Footprint",
"name": "Footprint",
"show": true
},
{
"group_by": false,
"label": "Qty",
"name": "${QUANTITY}",
"show": true
},
{
"group_by": true,
"label": "DNP",
"name": "${DNP}",
"show": true
}
],
"filter_string": "",
"group_symbols": true,
"name": "Grouped By Value",
"sort_asc": true,
"sort_field": "Reference"
},
"connection_grid_size": 50.0,
"drawing": { "drawing": {
"dashed_lines_dash_length_ratio": 12.0, "dashed_lines_dash_length_ratio": 12.0,
"dashed_lines_gap_length_ratio": 3.0, "dashed_lines_gap_length_ratio": 3.0,
@ -444,6 +622,11 @@
"intersheets_ref_suffix": "", "intersheets_ref_suffix": "",
"junction_size_choice": 3, "junction_size_choice": 3,
"label_size_ratio": 0.375, "label_size_ratio": 0.375,
"operating_point_overlay_i_precision": 3,
"operating_point_overlay_i_range": "~A",
"operating_point_overlay_v_precision": 3,
"operating_point_overlay_v_range": "~V",
"overbar_offset_ratio": 1.23,
"pin_symbol_size": 25.0, "pin_symbol_size": 25.0,
"text_offset_ratio": 0.15 "text_offset_ratio": 0.15
}, },
@ -469,6 +652,7 @@
"spice_external_command": "spice \"%I\"", "spice_external_command": "spice \"%I\"",
"spice_model_current_sheet_as_root": true, "spice_model_current_sheet_as_root": true,
"spice_save_all_currents": false, "spice_save_all_currents": false,
"spice_save_all_dissipations": false,
"spice_save_all_voltages": false, "spice_save_all_voltages": false,
"subpart_first_id": 65, "subpart_first_id": 65,
"subpart_id_separator": 0 "subpart_id_separator": 0
@ -476,7 +660,7 @@
"sheets": [ "sheets": [
[ [
"43fc3289-82a7-492c-a423-3030e10115dc", "43fc3289-82a7-492c-a423-3030e10115dc",
"" "Root"
] ]
], ],
"text_variables": {} "text_variables": {}

View File

@ -1,9 +1,9 @@
(kicad_sch (version 20230121) (generator eeschema) (kicad_sch
(version 20231120)
(uuid 43fc3289-82a7-492c-a423-3030e10115dc) (generator "eeschema")
(generator_version "8.0")
(uuid "43fc3289-82a7-492c-a423-3030e10115dc")
(paper "A4") (paper "A4")
(title_block (title_block
(date "$date$") (date "$date$")
(rev "$version$.$revision$") (rev "$version$.$revision$")
@ -11,12 +11,10 @@
(comment 1 "King Kévin") (comment 1 "King Kévin")
(comment 2 "CERN-OHL-S") (comment 2 "CERN-OHL-S")
) )
(lib_symbols)
(lib_symbols
)
(sheet_instances (sheet_instances
(path "/" (page "1")) (path "/"
(page "1")
)
) )
) )