Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Add a CAD heatsink

The fan delivered air to the right place, but the 203.154 °C junction showed that the exposed package had too little area to use it. On this page, we will add a pinned STEP heatsink, check its mesh, and test whether spreading the same 6 W load into that airflow reaches the 80 °C goal.

This page is part of Design a complete electronics cooling solution.

Choose how to start:

  • Start with annular-fan.json from the previous tutorial. Copy it and rename the copy cad-heatsink.json.
  • Skip the edit on this page and download the completed cad-heatsink.json, then continue with Check the CAD mesh. It contains the STEP data, so it can be submitted by itself.

1. Add the heatsink

The STEP model has a 30 × 30 × 1 mm base and 64 pins, each 2 mm square and 19 mm tall. Its base covers the complete 16 × 16 mm chip and overhangs it evenly:

PCB and chip with an annular fan and pinned heatsink The same 120 by 70 by 25 millimeter duct, green PCB and orange chip, drawn at the same scale and angle in tutorials 1.2.3 to 1.2.5. A 25 millimeter annular ceiling inlet directs air downward; both ends are outlets. A square 30 millimeter base rests on the chip and carries 64 opaque pins, with 1.2 millimeters of clearance below the ceiling. Outlet Outlet 25 mm annular inlet 64-pin heatsink Chip beneath heatsink PCB x y z

Download pinned-heatsink.step into the directory containing cad-heatsink.json. From that directory, encode the STEP file as a single-line base64 value:

# Encode the STEP file and remove line breaks for the JSON string.
base64 < pinned-heatsink.step | tr -d '\n'

Copy the command’s output. Open cad-heatsink.json, add this top-level array, and paste the output in place of PASTE_BASE64_CONTENTS_HERE:

"cad_components": [
  {
    "tag": "pinned_heatsink",
    "contents_base64": "PASTE_BASE64_CONTENTS_HERE",
    "units": "mm",
    "translation": [0.0485, 0.02, 0.0038],
    "rotation": [0.0, 0.0, 0.0],
    "preserve_cad_vertices": true,
    "max_cell_size": 0.003,
    "thermal_model": {
      "conducting": {
        "conductivity": 205.0,
        "density": 2700.0,
        "specific_heat_capacity": 900.0,
        "power": 0.0
      }
    }
  }
]

The units value converts the STEP coordinates from millimeters, and translation centers its base on the chip at z = 0.0038 m. The annular fan, k–ω SST model, PCB, and chip remain unchanged from the preceding case.

Add a CAD component covers the same encoding workflow, along with units, transforms, and thermal representations for another STEP or STL model.

2. Check the CAD mesh

CAD voxelization explains how the STEP surface becomes solid cells and why preserving vertices matters.

First, change:

"preserve_cad_vertices": false

Keep dry_run set to true and submit the request. The left side of the comparison below shows the resulting heatsink mesh: without the STEP vertex planes, the pins have uneven widths and some do not properly align on the base.

Now, restore:

"preserve_cad_vertices": true

Submit another dry run. From the image below, we can see that preserving the CAD vertices results in a cleaner representation, with all the pins having uniform size and correct placement.

Equal-scale close views of the dry-run heatsink mesh. Without preserved CAD vertices, the pins have uneven widths. With preserved vertices, the regular eight-by-eight array is retained.
Without vertex preservation, the pins have uneven widths. With it enabled, the regular 8×8 array is retained.

Vertex preservation adds mesh planes at the important STEP vertices. If the pin gaps are still poorly represented, reduce the CAD component’s max_cell_size and repeat the dry run.

3. Run the cooled-chip simulation

Set dry_run to false, submit the request, and download the result. The validated 113,296-cell case stops with monitor_converged after 106 iterations.

Open iteration_info.csv and inspect the final rows of junction_temperature_chip:

This preview shows a subset of the rows and columns in iteration_info.csv.

iterationjunction_temperature_chip
10442.186806
10542.192635
10642.19766

The heatsink reduces the converged junction temperature from 203.154 °C in the fan-only result to 42.198 °C, comfortably below the 80 °C target for this exercise.

Line chart of chip junction temperature over 106 thermal iterations. The temperature rises before settling at 42.198 degrees Celsius; its maximum deviation over the final 20 iterations is 0.039 degrees Celsius.
The chip junction temperature settles at 42.198 °C.

Convergence only means the result has settled. Compare it with the chip manufacturer’s maximum junction temperature before accepting the thermal strategy.

Inspect fluid.vtu and solid.vtu together with a VTU viewer. Look for:

  • heat spreading from the chip into the base and pins;
  • the annular fan jet entering the gaps between the pins; and
  • air leaving toward both ends of the duct.

The interactive result keeps the complete PCB, chip, and heatsink while displaying only the back half of the fluid field. The front half is cut away at the duct center plane; the white box marks the complete solved domain. Blue arrowed streamlines begin at the annular inlet and follow the air through the pin field toward the outlets. Open Display and uncheck Fluid to inspect the complete solid assembly, or Streamlines to hide the airflow paths. Follow the optional ParaView workflow to reproduce that view from the downloaded files.

Half-fluid-domain cutaway around the complete pinned heatsink, with blue streamlines from the annular fan.
Switch between speed and temperature on the back-half fluid cutaway, then hide it to inspect the complete chip → base → 64 pins heat path.

Design goal reached

We:

  • added and positioned an embedded STEP component;
  • checked narrow CAD features with a dry run;
  • preserved the pin boundaries in the solver mesh; and
  • measured the heatsink’s effect on chip junction temperature.

Use Conducting and insulating domains to understand the material behavior and Add a CAD component to adapt another heatsink.

The reward is a defensible design comparison: fan-only cooling settled at 203.154 °C, while the same fan and chip with a meshed heatsink settled at 42.198 °C. We used the result to identify a missing heat-transfer path, added one physical intervention, and passed the 80 °C goal by 37.802 °C.

Next, test a Raspberry Pi 5 at its maximum operating point and transfer the same reasoning to a complete electronics assembly: assess the bare board first, then add active cooling while holding the operating point fixed.