[Stack-up][Fixed] Problems when using more than one dielectric

Fixes #328
This commit is contained in:
Salvador E. Tropea 2022-11-10 18:09:00 -03:00
parent e42ab5e6be
commit 5e3404949d
10 changed files with 47 additions and 27 deletions

View File

@ -40,6 +40,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
- Diff:
- Now the default is to compare all the schematic pages. (#319)
- Report:
- loss tangent decimals, added one more.
### Fixed
- QR lib update: Problems when moving the footprint to the bottom for
@ -51,6 +53,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Report: Problems when using NPTH holes with sizes that doesn't correspond to
real drill tools. It generated bogus reports about wrong OARs. (#326)
- BoM: Digi-key link in the HTML output.
- Problems when using more than one dielectric in the stack-up. (#328)
## [1.4.0] - 2022-10-12
### Added

View File

@ -332,9 +332,10 @@ class Globals(FiltersOptions):
self.impedance_controlled = value == 'yes'
logger.debug("- Impedance controlled: "+value)
elif name == 'layer':
ly = PCBLayer.parse(e)
stackup.append(ly)
self.get_data_from_layer(ly, materials, thicknesses)
lys = PCBLayer.parse(e)
for ly in lys:
stackup.append(ly)
self.get_data_from_layer(ly, materials, thicknesses)
if stackup:
GS.stackup = stackup
if len(materials):

View File

@ -1509,9 +1509,11 @@ class PCBLayer(object):
def parse(items):
name = 'PCB stackup layer'
layer = PCBLayer()
layers = [layer]
n_layers = 1
layer.name = _check_str(items, 1, name)
for i in items[2:]:
i_type = _check_is_symbol_list(i)
i_type = _check_is_symbol_list(i, allow_orphan_symbol=('addsublayer'))
tname = name+' '+i_type
if i_type == 'type':
layer.type = _check_str(i, 1, tname)
@ -1525,9 +1527,19 @@ class PCBLayer(object):
layer.epsilon_r = _check_float(i, 1, tname)
elif i_type == 'loss_tangent':
layer.loss_tangent = _check_float(i, 1, tname)
elif i_type == 'addsublayer':
new_layer = PCBLayer()
new_layer.name = layer.name
new_layer.type = layer.type
layers.append(new_layer)
layer = new_layer
n_layers += 1
else:
logger.warning('Unknown layer attribute `{}`'.format(i))
return layer
if n_layers > 1:
for n, layer in enumerate(layers):
layer.name += ' ({}/{})'.format(n+1, n_layers)
return layers
def _symbol(name, content=None):

View File

@ -41,7 +41,7 @@ Impedance controlled: YES
#?stackup
|----------------------|----------------------|----------|-----------|-----------------|-----------|--------------|
#?stackup
#stackup:| ${%-20s,name} | ${%-20s,type} | ${%-8s,color} | ${%9d,thickness} | ${%-15s,material} | ${%9.1f,epsilon_r} | ${%12.2f,loss_tangent} |
#stackup:| ${%-20s,name} | ${%-20s,type} | ${%-8s,color} | ${%9d,thickness} | ${%-15s,material} | ${%9.1f,epsilon_r} | ${%12.3f,loss_tangent} |
#?stackup
# Important sizes

View File

@ -41,7 +41,7 @@ Impedance controlled: YES
#?stackup
|----------------------|----------------------|----------|-----------|-----------------|-----------|--------------|
#?stackup
#stackup:| ${%-20s,name} | ${%-20s,type} | ${%-8s,color} | ${%9d,thickness} | ${%-15s,material} | ${%9.1f,epsilon_r} | ${%12.2f,loss_tangent} |
#stackup:| ${%-20s,name} | ${%-20s,type} | ${%-8s,color} | ${%9d,thickness} | ${%-15s,material} | ${%9.1f,epsilon_r} | ${%12.3f,loss_tangent} |
#?stackup
# Important sizes

View File

@ -39,7 +39,7 @@ Impedance controlled: YES
#?stackup
|----------------------|----------------------|----------|-----------|-----------------|-----------|--------------|
#?stackup
#stackup:| ${%-20s,name} | ${%-20s,type} | ${%-8s,color} | ${%9d,thickness} | ${%-15s,material} | ${%9.1f,epsilon_r} | ${%12.2f,loss_tangent} |
#stackup:| ${%-20s,name} | ${%-20s,type} | ${%-8s,color} | ${%9d,thickness} | ${%-15s,material} | ${%9.1f,epsilon_r} | ${%12.3f,loss_tangent} |
#?stackup
Materials:

View File

@ -46,7 +46,8 @@
(layer "In1.Cu" (type "copper") (thickness 0.035))
(layer "dielectric 2" (type "core") (thickness 0.48) (material "FR4") (epsilon_r 4.5) (loss_tangent 0.02))
(layer "In2.Cu" (type "copper") (thickness 0.035))
(layer "dielectric 3" (type "prepreg") (thickness 0.48) (material "FR4") (epsilon_r 4.5) (loss_tangent 0.02))
(layer "dielectric 3" (type "prepreg") (thickness 0.24) (material "Kapton") (epsilon_r 3.2) (loss_tangent 0.004)
addsublayer (thickness 0.24) (material "Kapton") (epsilon_r 3.2) (loss_tangent 0.004))
(layer "B.Cu" (type "copper") (thickness 0.035))
(layer "B.Mask" (type "Bottom Solder Mask") (color "Red") (thickness 0.01) (material "Dry Film") (epsilon_r 3.3) (loss_tangent 0))
(layer "B.Paste" (type "Bottom Solder Paste"))

View File

@ -4,7 +4,7 @@ Board size: 59.69x48.26 mm (2.35x1.9 inches)
- This is the size of the rectangle that contains the board
- Thickness: 1.6 mm (63 mils)
- Material: FR4
- Material: FR4 / Kapton
- Finish: ENIG
- Layers: 4
- Copper thickness: 35 µm
@ -31,15 +31,16 @@ Impedance controlled: YES
|----------------------|----------------------|----------|-----------|-----------------|-----------|--------------|
| F.SilkS | Top Silk Screen | White | | Liquid Photo | | |
| F.Paste | Top Solder Paste | | | | | |
| F.Mask | Top Solder Mask | Blue | 10 | Liquid Ink | 3.3 | 0.00 |
| F.Mask | Top Solder Mask | Blue | 10 | Liquid Ink | 3.3 | 0.000 |
| F.Cu | copper | | 35 | | | |
| dielectric 1 | prepreg | | 480 | FR4 | 4.5 | 0.02 |
| dielectric 1 | prepreg | | 480 | FR4 | 4.5 | 0.020 |
| In1.Cu | copper | | 35 | | | |
| dielectric 2 | core | | 480 | FR4 | 4.5 | 0.02 |
| dielectric 2 | core | | 480 | FR4 | 4.5 | 0.020 |
| In2.Cu | copper | | 35 | | | |
| dielectric 3 | prepreg | | 480 | FR4 | 4.5 | 0.02 |
| dielectric 3 (1/2) | prepreg | | 240 | Kapton | 3.2 | 0.004 |
| dielectric 3 (2/2) | prepreg | | 240 | Kapton | 3.2 | 0.004 |
| B.Cu | copper | | 35 | | | |
| B.Mask | Bottom Solder Mask | Red | 10 | Dry Film | 3.3 | 0.00 |
| B.Mask | Bottom Solder Mask | Red | 10 | Dry Film | 3.3 | 0.000 |
| B.Paste | Bottom Solder Paste | | | | | |
| B.SilkS | Bottom Silk Screen | Black | | Direct Printing | | |

View File

@ -4,7 +4,7 @@ Board size: 59.69x48.26 mm (2.35x1.9 inches)
- This is the size of the rectangle that contains the board
- Thickness: 1.6 mm (63 mils)
- Material: FR4
- Material: FR4 / Kapton
- Finish: ENIG
- Layers: 4
- Copper thickness: 35 µm
@ -31,15 +31,16 @@ Impedance controlled: YES
|----------------------|----------------------|----------|-----------|-----------------|-----------|--------------|
| F.SilkS | Top Silk Screen | White | | Liquid Photo | | |
| F.Paste | Top Solder Paste | | | | | |
| F.Mask | Top Solder Mask | Blue | 10 | Liquid Ink | 3.3 | 0.00 |
| F.Mask | Top Solder Mask | Blue | 10 | Liquid Ink | 3.3 | 0.000 |
| F.Cu | copper | | 35 | | | |
| dielectric 1 | prepreg | | 480 | FR4 | 4.5 | 0.02 |
| dielectric 1 | prepreg | | 480 | FR4 | 4.5 | 0.020 |
| In1.Cu | copper | | 35 | | | |
| dielectric 2 | core | | 480 | FR4 | 4.5 | 0.02 |
| dielectric 2 | core | | 480 | FR4 | 4.5 | 0.020 |
| In2.Cu | copper | | 35 | | | |
| dielectric 3 | prepreg | | 480 | FR4 | 4.5 | 0.02 |
| dielectric 3 (1/2) | prepreg | | 240 | Kapton | 3.2 | 0.004 |
| dielectric 3 (2/2) | prepreg | | 240 | Kapton | 3.2 | 0.004 |
| B.Cu | copper | | 35 | | | |
| B.Mask | Bottom Solder Mask | Red | 10 | Dry Film | 3.3 | 0.00 |
| B.Mask | Bottom Solder Mask | Red | 10 | Dry Film | 3.3 | 0.000 |
| B.Paste | Bottom Solder Paste | | | | | |
| B.SilkS | Bottom Silk Screen | Black | | Direct Printing | | |

View File

@ -29,21 +29,22 @@ Impedance controlled: YES
|----------------------|----------------------|----------|-----------|-----------------|-----------|--------------|
| F.SilkS | Top Silk Screen | White | | Liquid Photo | | |
| F.Paste | Top Solder Paste | | | | | |
| F.Mask | Top Solder Mask | Blue | 10 | Liquid Ink | 3.3 | 0.00 |
| F.Mask | Top Solder Mask | Blue | 10 | Liquid Ink | 3.3 | 0.000 |
| F.Cu | copper | | 35 | | | |
| dielectric 1 | prepreg | | 480 | FR4 | 4.5 | 0.02 |
| dielectric 1 | prepreg | | 480 | FR4 | 4.5 | 0.020 |
| In1.Cu | copper | | 35 | | | |
| dielectric 2 | core | | 480 | FR4 | 4.5 | 0.02 |
| dielectric 2 | core | | 480 | FR4 | 4.5 | 0.020 |
| In2.Cu | copper | | 35 | | | |
| dielectric 3 | prepreg | | 480 | FR4 | 4.5 | 0.02 |
| dielectric 3 (1/2) | prepreg | | 240 | Kapton | 3.2 | 0.004 |
| dielectric 3 (2/2) | prepreg | | 240 | Kapton | 3.2 | 0.004 |
| B.Cu | copper | | 35 | | | |
| B.Mask | Bottom Solder Mask | Red | 10 | Dry Film | 3.3 | 0.00 |
| B.Mask | Bottom Solder Mask | Red | 10 | Dry Film | 3.3 | 0.000 |
| B.Paste | Bottom Solder Paste | | | | | |
| B.SilkS | Bottom Silk Screen | Black | | Direct Printing | | |
Materials:
- FR4, 1.6 mm
- FR4 / Kapton, 1.6 mm
- ENIG
- 4 layers
- 35 µm copper thickness