main
John Lauer Add datasheet-derived PowerDI5 assets, native libraries, provenance and integration guidance ff4f30d 10d ago
"""Nominal PowerDI5 reconstruction from Diodes DS31371 rev12-2 p5; not vendor CAD."""
from pathlib import Path
import json,hashlib
import cadquery as cq
out=Path(__file__).resolve().parent
# Footprint axes: cathode to -X, two anodes to +X; Z above seating plane.
a=cq.Assembly(name='SBR10U45SP5_Nominal_Drawing_Reconstruction')
black=cq.Color(.08,.085,.09);metal=cq.Color(.72,.74,.76)
# The drawing gives typical external bounds, but not a complete mold surface.
body=cq.Workplane('XY').box(5.37,3.966,1.075,centered=(True,True,False)).translate((0,0,.025))
a.add(body,name='MoldedBody_NominalEnvelope',color=black)
for y,name in [(-.92,'Anode_2_Lower'),(.92,'Anode_2_Upper')]:
 lead=cq.Workplane('XY').box(.85,.89,.381,centered=(False,True,False)).translate((2.405,y,0))
 a.add(lead,name=name,color=metal)
plate=cq.Workplane('XY').box(3.549,3.054,.381,centered=(False,True,False)).translate((-2.685,0,0))
tab=cq.Workplane('XY').box(.57,1.78,.381,centered=(False,True,False)).translate((-3.255,0,0))
cathode=plate.union(tab);a.add(cathode,name='Cathode_1_ExposedPlate',color=metal)
# Exposed metal occupies the same mold envelope; cut it out rather than overlap solids.
cut=body.cut(cathode)
for y in [-.92,.92]:cut=cut.cut(cq.Workplane('XY').box(.85,.89,.381,centered=(False,True,False)).translate((2.405,y,0)))
a.objects['MoldedBody_NominalEnvelope'].obj=cut
step=out/'SBR10U45SP5-nominal.step';a.save(str(step))
bb=a.toCompound().BoundingBox()
metadata={'source':'https://www.diodes.com/datasheet/download/SBR10U45SP5.pdf','drawing':'DS31371 Rev 12-2, January 2024, page 5','provenance':'Original nominal package reconstruction; not manufacturer CAD','units':'mm','axes':'KiCad footprint X/Y; Z above seating plane; cathode -X','boundsMm':[bb.xmin,bb.ymin,bb.zmin,bb.xmax,bb.ymax,bb.zmax],'nominalDimensions':{'E':6.51,'E1':5.37,'D':3.966,'A':1.10,'A1Assumed':.025,'A2':.381,'e':1.84,'b1':.89,'b2':1.78,'E2':3.549,'D2':3.054,'L':.85,'L1':.57},'limitations':['Mold taper and small edge radii omitted; body is conservative nominal envelope','No internal die/bond geometry','No as-built dimensional or marking validation','Two external anodes share logical pin 2 and must both be connected'],'stepSha256':hashlib.sha256(step.read_bytes()).hexdigest()}
(out/'model-provenance.json').write_text(json.dumps(metadata,indent=2)+'\n');print(json.dumps(metadata))