Sign in with STEVE

steve/son-package

No-lead small-outline IC packages by TI outline: WSON-8/10/12/16 and VSON-8, 0.4 to 0.8 mm pitch, with exposed thermal pad.

v1.0.0 STEVE MIT 1
Isometric
part.py 54 lines · Python · STEVE runtime · checked
Download
1"""No-lead small-outline IC package (WSON, VSON, DFN) by TI package outline. Centred on the origin with the seating plane on the XY plane, pins 1 to n/2
2on the -Y side running +X, the others on +Y running back, and the exposed thermal pad in the middle. Dimensions from the TI outline named by `package`; see
3the README."""
4from steve import Model
5
6package = "DSQ0010A" # TI package outline
7detail = "full" # full: body, pin-1 mark, terminals and thermal pad; simple: the body only
8
9# outline: (kind, pins, pitch, body length along the pin rows, body width across them, height, standoff, terminal length, terminal width, thermal pad
10# across the rows, thermal pad along them, terminal thickness), ranges as (min, max), single values as drawn (thickness is the outline's reference), mm.
11# TI package outlines, https://www.ti.com/lit/pdf/<doc>: DSQ0010A mpds335 (4218906/A 04/2019), NGQ0008A mpds403 (4214922/A 03/2018), DNT0012B mpds48
12# (4214928/C 10/2021), NHR0016B mpds42 (4214932/B 08/2025), DRM0008A mpds160 (4218889/A 01/2025). Thermal pads are drawn as nominal +/-0.1.
13OUTLINES = {
14 "DSQ0010A": ("WSON", 10, 0.4, (1.9, 2.1), (1.9, 2.1), (0.7, 0.8), (0.0, 0.05), (0.2, 0.4), (0.15, 0.25), 0.9, 1.5, 0.2),
15 "NGQ0008A": ("WSON", 8, 0.5, (2.9, 3.1), (2.9, 3.1), (0.7, 0.8), (0.0, 0.05), (0.3, 0.5), (0.2, 0.3), 1.6, 2.0, 0.1),
16 "DNT0012B": ("WSON", 12, 0.5, (3.9, 4.1), (3.9, 4.1), (0.7, 0.8), (0.0, 0.05), (0.3, 0.5), (0.2, 0.3), 2.6, 3.0, 0.1),
17 "NHR0016B": ("WSON", 16, 0.5, (4.9, 5.1), (3.9, 4.1), (0.7, 0.8), (0.0, 0.05), (0.3, 0.5), (0.2, 0.3), 2.6, 4.0, 0.1),
18 "DRM0008A": ("VSON", 8, 0.8, (3.9, 4.1), (3.9, 4.1), (0.8, 1.0), (0.0, 0.05), (0.3, 0.5), (0.23, 0.38), 2.45, 3.38, 0.1),
19}
20# The pin-1 mark is a proportion, for looks.
21
22
23def mid(pair):
24 return (pair[0] + pair[1]) / 2
25
26
27kind, pins, pitch, L, W, H, standoff, term_l, term_w, pad_x, pad_y, thick = OUTLINES[package]
28length, width, top, standoff, term_l, term_w = mid(L), mid(W), mid(H), mid(standoff), mid(term_l), mid(term_w)
29per_row = pins // 2
30first = -(per_row - 1) * pitch / 2
31model = Model()
32model.plane("body_plane", on="XY", offset=standoff, name="Body")
33with model.sketch("body_sketch", on="body_plane", name="Body") as sk:
34 sk.rect("body_rect", (-length / 2, -width / 2), (length / 2, width / 2))
35model.extrude("body", "body_sketch", distance=top - standoff, name="Body")
36if detail == "full":
37 model.plane("top_plane", on="XY", offset=top, name="Top")
38 with model.sketch("mark_sketch", on="top_plane", name="Pin-1 mark") as sk:
39 sk.circle("mark_circle", (-length / 2 + 0.15 * width, -width / 2 + 0.15 * width), 0.05 * width)
40 model.extrude("mark", "mark_sketch", distance=-0.03, op="cut", name="Pin-1 mark")
41 for tag, side in (("low", -1), ("high", 1)):
42 y_out, y_in = side * width / 2, side * (width / 2 - term_l)
43 with model.sketch(f"terms_{tag}", on="XY", name="Terminals") as sk:
44 for i in range(per_row):
45 x = first + i * pitch
46 sk.rect(f"term_{tag}_{i}", (x - term_w / 2, min(y_in, y_out)), (x + term_w / 2, max(y_in, y_out)))
47 model.extrude(f"terms_{tag}_body", f"terms_{tag}", distance=thick, name="Terminals")
48 # the thermal pad's across-the-rows size runs along Y, its along-the-rows size along X
49 with model.sketch("pad_sketch", on="XY", name="Thermal pad") as sk:
50 sk.rect("pad_rect", (-pad_y / 2, -pad_x / 2), (pad_y / 2, pad_x / 2))
51 model.extrude("pad", "pad_sketch", distance=thick, name="Thermal pad")
52model.material("pla", color="#26282b")
53result = model.result()
54

No-lead small-outline IC packages for board layouts: body, pin-1 mark, terminals and exposed thermal pad, each from a named TI package outline. See the README.

No-lead small-outline package

No-lead small-outline IC packages (WSON, VSON), each modelled from a named TI package outline: the body, the terminals along two sides and the exposed thermal pad underneath. The package is centred on the origin with the seating plane on the XY plane. Pins 1 to n/2 are on the -Y side running +X, the others are on +Y running back, and the thermal pad is in the middle.

Source

TI package outlines at https://www.ti.com/lit/pdf/<document>:

Outline Package Body Pitch Document Drawing
DSQ0010A WSON-10 2 x 2 mm 0.4 mm mpds335 4218906/A 04/2019
NGQ0008A WSON-8 3 x 3 mm 0.5 mm mpds403 4214922/A 03/2018
DNT0012B WSON-12 4 x 4 mm 0.5 mm mpds48 4214928/C 10/2021
NHR0016B WSON-16 4 x 5 mm 0.5 mm mpds42 4214932/B 08/2025
DRM0008A VSON-8 4 x 4 mm 0.8 mm mpds160 4218889/A 01/2025

Each outline gives body length and width, height, standoff, terminal length and width, and the thermal pad's size. The model uses the middle of each range. The terminal thickness is the outline's reference value.

The thermal pad is the TI outline's. A footprint whose name gives a different pad size, such as DFN-8-1EP_4x4mm_P0.8mm_EP2.5x3.6mm against DRM0008A's 2.45 x 3.38 mm, isn't this part even when the body and pitch match.

Proportions, for looks only: the pin-1 mark on top. The thermal pad's chamfered pin-1 corner isn't modelled.

Other WSON, VSON and DFN sizes and the QFN packages aren't here yet; see COVERAGE.md.

  1. 1.1.0 Latest Compare with 1.0.0
  2. 1.0.0
More #ic-package
STEVEMIT

steve/so-package

Small-outline IC packages by TI outline: SOIC-14/16 and 20W, SSOP-16/20/28, TSSOP-8 and TSSOP-48/56 (6.1 mm body).

0 10 sizes 0 2 hours ago v1.0.0
STEVEMIT

steve/sot-package

Small-outline transistor packages by TI outline: SOT-23, thin SOT-23-5/6/8, SC-70-3/6, SOT-553 and SOT-563.

0 9 sizes 0 2 hours ago v1.0.0
STEVEMIT

steve/tssop-package

TSSOP package, 4.4 mm body, 0.65 mm pitch: 14, 16, 20 and 24 pins.

0 5 sizes 0 2 hours ago v1.0.0
STEVEMIT

steve/qfn-package

Quad flat no-lead IC packages by TI outline: VQFN-20 (0.65 mm pitch) and VQFN-24/32/48/64 (0.5 mm pitch), with exposed thermal pad.

0 6 sizes 0 2 hours ago v1.0.0