Added copper_thickness option
- Now we get some defaults from KiCad 6 stackup
This commit is contained in:
parent
1d1abf0ce4
commit
7a4c3468fa
|
|
@ -10,6 +10,7 @@ from .pre_filters import FiltersOptions
|
||||||
from .log import get_logger, set_filters
|
from .log import get_logger, set_filters
|
||||||
from .misc import W_MUSTBEINT
|
from .misc import W_MUSTBEINT
|
||||||
from .kicad.sexpdata import load, SExpData, sexp_iter, Symbol
|
from .kicad.sexpdata import load, SExpData, sexp_iter, Symbol
|
||||||
|
from .kicad.v6_sch import PCBLayer
|
||||||
|
|
||||||
|
|
||||||
class Globals(FiltersOptions):
|
class Globals(FiltersOptions):
|
||||||
|
|
@ -55,6 +56,7 @@ class Globals(FiltersOptions):
|
||||||
Read `solder_mask_color` help """
|
Read `solder_mask_color` help """
|
||||||
self.silk_screen_color = 'white'
|
self.silk_screen_color = 'white'
|
||||||
""" Color for the markings. Currently used for documentation and to choose default colors.
|
""" Color for the markings. Currently used for documentation and to choose default colors.
|
||||||
|
KiCad 6: you should set this in the Board Setup -> Physical Stackup.
|
||||||
Currently known are black and white """
|
Currently known are black and white """
|
||||||
self.silk_screen_color_top = ''
|
self.silk_screen_color_top = ''
|
||||||
""" Color for the top silk screen. When not defined `silk_screen_color` is used.
|
""" Color for the top silk screen. When not defined `silk_screen_color` is used.
|
||||||
|
|
@ -78,6 +80,9 @@ class Globals(FiltersOptions):
|
||||||
KiCad 6: you should set this in the Board Setup -> Board Finish -> Plated board edge """
|
KiCad 6: you should set this in the Board Setup -> Board Finish -> Plated board edge """
|
||||||
self.copper_finish = None
|
self.copper_finish = None
|
||||||
""" {pcb_finish} """
|
""" {pcb_finish} """
|
||||||
|
self.copper_thickness = 35
|
||||||
|
""" Copper thickness in micrometers (1 Oz is 35 micrometers).
|
||||||
|
KiCad 6: you should set this in the Board Setup -> Physical Stackup """
|
||||||
self.set_doc('filters', " [list(dict)] KiBot warnings to be ignored ")
|
self.set_doc('filters', " [list(dict)] KiBot warnings to be ignored ")
|
||||||
self._filter_what = 'KiBot warnings'
|
self._filter_what = 'KiBot warnings'
|
||||||
self._unkown_is_error = True
|
self._unkown_is_error = True
|
||||||
|
|
@ -111,6 +116,9 @@ class Globals(FiltersOptions):
|
||||||
if sp is None:
|
if sp is None:
|
||||||
return
|
return
|
||||||
logger.debug("- Found stack-up information")
|
logger.debug("- Found stack-up information")
|
||||||
|
stackup = []
|
||||||
|
materials = set()
|
||||||
|
thicknesses = set()
|
||||||
for e in sp[1:]:
|
for e in sp[1:]:
|
||||||
if isinstance(e, list) and isinstance(e[0], Symbol):
|
if isinstance(e, list) and isinstance(e[0], Symbol):
|
||||||
name = e[0].value()
|
name = e[0].value()
|
||||||
|
|
@ -132,6 +140,45 @@ class Globals(FiltersOptions):
|
||||||
elif name == 'edge_plating':
|
elif name == 'edge_plating':
|
||||||
self.edge_plating = value == 'yes'
|
self.edge_plating = value == 'yes'
|
||||||
logger.debug("- Edge plating: "+value)
|
logger.debug("- Edge plating: "+value)
|
||||||
|
elif name == 'layer':
|
||||||
|
ly = PCBLayer.parse(e)
|
||||||
|
stackup.append(ly)
|
||||||
|
if ly.name == "F.SilkS":
|
||||||
|
if ly.color:
|
||||||
|
self.silk_screen_color_top = ly.color.lower()
|
||||||
|
logger.debug("- F.SilkS color: "+ly.color)
|
||||||
|
elif ly.name == "B.SilkS":
|
||||||
|
if ly.color:
|
||||||
|
self.silk_screen_color_bottom = ly.color.lower()
|
||||||
|
logger.debug("- B.SilkS color: "+ly.color)
|
||||||
|
elif ly.name == "F.Mask":
|
||||||
|
if ly.color:
|
||||||
|
self.solder_mask_color_top = ly.color.lower()
|
||||||
|
logger.debug("- F.Mask color: "+ly.color)
|
||||||
|
elif ly.name == "B.Mask":
|
||||||
|
if ly.color:
|
||||||
|
self.solder_mask_color_bottom = ly.color.lower()
|
||||||
|
logger.debug("- B.Mask color: "+ly.color)
|
||||||
|
elif ly.material:
|
||||||
|
if not len(materials):
|
||||||
|
materials.add(ly.material)
|
||||||
|
self.pcb_material = ly.material
|
||||||
|
elif ly.material not in materials:
|
||||||
|
materials.add(ly.material)
|
||||||
|
self.pcb_material += ' / '+ly.material
|
||||||
|
elif ly.type == 'copper' and ly.thickness:
|
||||||
|
if not len(thicknesses):
|
||||||
|
thicknesses.add(ly.thickness)
|
||||||
|
self.copper_thickness = str(int(ly.thickness*1000))
|
||||||
|
elif ly.thickness not in thicknesses:
|
||||||
|
thicknesses.add(ly.thickness)
|
||||||
|
self.copper_thickness += ' / '+str(int(ly.thickness*1000))
|
||||||
|
if stackup:
|
||||||
|
GS.stackup = stackup
|
||||||
|
if len(materials):
|
||||||
|
logger.debug("- PCB Material/s: "+self.pcb_material)
|
||||||
|
if len(thicknesses):
|
||||||
|
logger.debug("- Copper thickness: "+self.copper_thickness)
|
||||||
|
|
||||||
def config(self, parent):
|
def config(self, parent):
|
||||||
if GS.ki6() and GS.pcb_file and os.path.isfile(GS.pcb_file):
|
if GS.ki6() and GS.pcb_file and os.path.isfile(GS.pcb_file):
|
||||||
|
|
|
||||||
|
|
@ -94,10 +94,12 @@ class GS(object):
|
||||||
global_silk_screen_color_top = None
|
global_silk_screen_color_top = None
|
||||||
global_silk_screen_color_bottom = None
|
global_silk_screen_color_bottom = None
|
||||||
global_pcb_finish = None
|
global_pcb_finish = None
|
||||||
|
global_copper_thickness = None
|
||||||
global_edge_connector = None
|
global_edge_connector = None
|
||||||
global_castellated_pads = None
|
global_castellated_pads = None
|
||||||
global_edge_plating = None
|
global_edge_plating = None
|
||||||
test_boolean = True
|
test_boolean = True
|
||||||
|
stackup = None
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def set_sch(name):
|
def set_sch(name):
|
||||||
|
|
|
||||||
|
|
@ -1386,6 +1386,43 @@ class SymbolInstance(object):
|
||||||
return _symbol('path', data)
|
return _symbol('path', data)
|
||||||
|
|
||||||
|
|
||||||
|
# Here because we have al s-expr tools here
|
||||||
|
class PCBLayer(object):
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__()
|
||||||
|
self.name = ''
|
||||||
|
self.type = ''
|
||||||
|
self.color = None
|
||||||
|
self.thickness = None
|
||||||
|
self.material = None
|
||||||
|
self.epsilon_r = None
|
||||||
|
self.loss_tangent = None
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def parse(items):
|
||||||
|
name = 'PCB stackup layer'
|
||||||
|
layer = PCBLayer()
|
||||||
|
layer.name = _check_str(items, 1, name)
|
||||||
|
for c, i in enumerate(items[2:]):
|
||||||
|
i_type = _check_is_symbol_list(i)
|
||||||
|
tname = name+' '+i_type
|
||||||
|
if i_type == 'type':
|
||||||
|
layer.type = _check_str(i, 1, tname)
|
||||||
|
elif i_type == 'color':
|
||||||
|
layer.color = _check_str(i, 1, tname)
|
||||||
|
elif i_type == 'thickness':
|
||||||
|
layer.thickness = _check_float(i, 1, tname)
|
||||||
|
elif i_type == 'material':
|
||||||
|
layer.material = _check_str(i, 1, tname)
|
||||||
|
elif i_type == 'epsilon_r':
|
||||||
|
layer.epsilon_r = _check_float(i, 1, tname)
|
||||||
|
elif i_type == 'loss_tangent':
|
||||||
|
layer.loss_tangent = _check_float(i, 1, tname)
|
||||||
|
else:
|
||||||
|
logger.warning('Unknown layer attribute `{}`'.format(i))
|
||||||
|
return layer
|
||||||
|
|
||||||
|
|
||||||
def _symbol(name, content):
|
def _symbol(name, content):
|
||||||
return [Symbol(name)] + content
|
return [Symbol(name)] + content
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -495,6 +495,7 @@ class ReportOptions(BaseOptions):
|
||||||
self.edge_connector = solve_edge_connector(GS.global_edge_connector)
|
self.edge_connector = solve_edge_connector(GS.global_edge_connector)
|
||||||
self.castellated_pads = GS.global_castellated_pads
|
self.castellated_pads = GS.global_castellated_pads
|
||||||
self.edge_plating = GS.global_edge_plating
|
self.edge_plating = GS.global_edge_plating
|
||||||
|
self.copper_thickness = GS.global_copper_thickness
|
||||||
self.collect_data(GS.board)
|
self.collect_data(GS.board)
|
||||||
self.do_template(self.template, fname)
|
self.do_template(self.template, fname)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ Board size: ${bb_w_mm}x${bb_h_mm} mm (${bb_w_in}x${bb_h_in} inches)
|
||||||
- Material: ${pcb_material}
|
- Material: ${pcb_material}
|
||||||
- Finish: ${pcb_finish}
|
- Finish: ${pcb_finish}
|
||||||
- Layers: ${layers}
|
- Layers: ${layers}
|
||||||
|
- Copper thickness: ${copper_thickness} µm
|
||||||
Solder mask: ${solder_mask}
|
Solder mask: ${solder_mask}
|
||||||
- Color: ${solder_mask_color_text}
|
- Color: ${solder_mask_color_text}
|
||||||
Silk screen: ${silk_screen}
|
Silk screen: ${silk_screen}
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ Materials:
|
||||||
- ${pcb_material}, ${thickness_mm} mm
|
- ${pcb_material}, ${thickness_mm} mm
|
||||||
- ${pcb_finish}
|
- ${pcb_finish}
|
||||||
- ${layers} layers
|
- ${layers} layers
|
||||||
- 35 µm copper thickness
|
- ${copper_thickness} µm copper thickness
|
||||||
|
|
||||||
Solder mask:
|
Solder mask:
|
||||||
- ${solder_mask}
|
- ${solder_mask}
|
||||||
|
|
|
||||||
|
|
@ -37,9 +37,9 @@
|
||||||
|
|
||||||
(setup
|
(setup
|
||||||
(stackup
|
(stackup
|
||||||
(layer "F.SilkS" (type "Top Silk Screen"))
|
(layer "F.SilkS" (type "Top Silk Screen") (color "White"))
|
||||||
(layer "F.Paste" (type "Top Solder Paste"))
|
(layer "F.Paste" (type "Top Solder Paste"))
|
||||||
(layer "F.Mask" (type "Top Solder Mask") (thickness 0.01))
|
(layer "F.Mask" (type "Top Solder Mask") (color "Blue") (thickness 0.01))
|
||||||
(layer "F.Cu" (type "copper") (thickness 0.035))
|
(layer "F.Cu" (type "copper") (thickness 0.035))
|
||||||
(layer "dielectric 1" (type "core") (thickness 0.48) (material "FR4") (epsilon_r 4.5) (loss_tangent 0.02))
|
(layer "dielectric 1" (type "core") (thickness 0.48) (material "FR4") (epsilon_r 4.5) (loss_tangent 0.02))
|
||||||
(layer "In1.Cu" (type "copper") (thickness 0.035))
|
(layer "In1.Cu" (type "copper") (thickness 0.035))
|
||||||
|
|
@ -47,9 +47,9 @@
|
||||||
(layer "In2.Cu" (type "copper") (thickness 0.035))
|
(layer "In2.Cu" (type "copper") (thickness 0.035))
|
||||||
(layer "dielectric 3" (type "core") (thickness 0.48) (material "FR4") (epsilon_r 4.5) (loss_tangent 0.02))
|
(layer "dielectric 3" (type "core") (thickness 0.48) (material "FR4") (epsilon_r 4.5) (loss_tangent 0.02))
|
||||||
(layer "B.Cu" (type "copper") (thickness 0.035))
|
(layer "B.Cu" (type "copper") (thickness 0.035))
|
||||||
(layer "B.Mask" (type "Bottom Solder Mask") (thickness 0.01))
|
(layer "B.Mask" (type "Bottom Solder Mask") (color "Red") (thickness 0.01))
|
||||||
(layer "B.Paste" (type "Bottom Solder Paste"))
|
(layer "B.Paste" (type "Bottom Solder Paste"))
|
||||||
(layer "B.SilkS" (type "Bottom Silk Screen"))
|
(layer "B.SilkS" (type "Bottom Silk Screen") (color "Black"))
|
||||||
(copper_finish "ENIG")
|
(copper_finish "ENIG")
|
||||||
(dielectric_constraints no)
|
(dielectric_constraints no)
|
||||||
(edge_connector bevelled)
|
(edge_connector bevelled)
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ Board size: 59.69x48.26 mm (2.35x1.9 inches)
|
||||||
- Material: FR4
|
- Material: FR4
|
||||||
- Finish: ENIG
|
- Finish: ENIG
|
||||||
- Layers: 4
|
- Layers: 4
|
||||||
|
- Copper thickness: 35 µm
|
||||||
Solder mask: TOP / BOTTOM
|
Solder mask: TOP / BOTTOM
|
||||||
- Color: Top: Blue / Bottom: Red
|
- Color: Top: Blue / Bottom: Red
|
||||||
Silk screen: TOP / BOTTOM
|
Silk screen: TOP / BOTTOM
|
||||||
|
|
|
||||||
|
|
@ -6,10 +6,11 @@ Board size: 59.69x48.26 mm (2.35x1.9 inches)
|
||||||
- Material: FR4
|
- Material: FR4
|
||||||
- Finish: ENIG
|
- Finish: ENIG
|
||||||
- Layers: 4
|
- Layers: 4
|
||||||
|
- Copper thickness: 35 µm
|
||||||
Solder mask: TOP / BOTTOM
|
Solder mask: TOP / BOTTOM
|
||||||
- Color: Top: Blue / Bottom: Red
|
- Color: Top: Blue / Bottom: Red
|
||||||
Silk screen: TOP / BOTTOM
|
Silk screen: TOP / BOTTOM
|
||||||
- Color: White
|
- Color: Top: White / Bottom: Black
|
||||||
|
|
||||||
Special features:
|
Special features:
|
||||||
- Edge connector: yes, bevelled
|
- Edge connector: yes, bevelled
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ Solder mask:
|
||||||
|
|
||||||
Marking:
|
Marking:
|
||||||
- TOP / BOTTOM screen printing
|
- TOP / BOTTOM screen printing
|
||||||
- Silk: White
|
- Silk: Top: White / Bottom: Black
|
||||||
|
|
||||||
Other markings:
|
Other markings:
|
||||||
- ROHS / UL / Date - Yes if available
|
- ROHS / UL / Date - Yes if available
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue