← All Use Cases
🔌
Fractional Factorial Design

PCB Solder Reflow Profile

Fractional factorial screening of 5 reflow profile parameters for joint strength and void percentage, designed for later augmentation with star points

Summary

This experiment investigates pcb solder reflow profile. Fractional factorial screening of 5 reflow profile parameters for joint strength and void percentage, designed for later augmentation with star points.

The design varies 5 factors: preheat temp (C), ranging from 150 to 200, soak time (s), ranging from 60 to 120, peak temp (C), ranging from 230 to 260, time above liquidus (s), ranging from 30 to 90, and cooling rate (C/s), ranging from 1 to 4. The goal is to optimize 2 responses: joint strength (N) (maximize) and void percentage (%) (minimize). Fixed conditions held constant across all runs include solder paste = SAC305, board layers = 4.

A fractional factorial design reduces the number of runs from 32 to 8 by deliberately confounding higher-order interactions. This is ideal for screening — identifying which of the 5 factors matter most before investing in a full study.

Key Findings

For joint strength, the most influential factors were cooling rate (38.3%), preheat temp (37.2%), time above liquidus (13.8%). The best observed value was 54.3 (at preheat temp = 200, soak time = 120, peak temp = 230).

For void percentage, the most influential factors were time above liquidus (34.5%), cooling rate (26.3%), peak temp (23.3%). The best observed value was 2.16 (at preheat temp = 150, soak time = 60, peak temp = 230).

Recommended Next Steps

Experimental Setup

Factors

FactorLowHighUnit
preheat_temp150200C
soak_time60120s
peak_temp230260C
time_above_liquidus3090s
cooling_rate14C/s

Fixed: solder_paste = SAC305, board_layers = 4

Responses

ResponseDirectionUnit
joint_strength↑ maximizeN
void_percentage↓ minimize%

Configuration

use_cases/308_pcb_solder_reflow/config.json
{ "metadata": { "name": "PCB Solder Reflow Profile", "description": "Fractional factorial screening of 5 reflow profile parameters for joint strength and void percentage, designed for later augmentation with star points" }, "factors": [ { "name": "preheat_temp", "levels": [ "150", "200" ], "type": "continuous", "unit": "C" }, { "name": "soak_time", "levels": [ "60", "120" ], "type": "continuous", "unit": "s" }, { "name": "peak_temp", "levels": [ "230", "260" ], "type": "continuous", "unit": "C" }, { "name": "time_above_liquidus", "levels": [ "30", "90" ], "type": "continuous", "unit": "s" }, { "name": "cooling_rate", "levels": [ "1", "4" ], "type": "continuous", "unit": "C/s" } ], "fixed_factors": { "solder_paste": "SAC305", "board_layers": "4" }, "responses": [ { "name": "joint_strength", "optimize": "maximize", "unit": "N" }, { "name": "void_percentage", "optimize": "minimize", "unit": "%" } ], "settings": { "operation": "fractional_factorial", "test_script": "use_cases/308_pcb_solder_reflow/sim.sh" } }

Experimental Matrix

The Fractional Factorial Design produces 8 runs. Each row is one experiment with specific factor settings.

Runpreheat_tempsoak_timepeak_temptime_above_liquiduscooling_rate
1150120260301
220060230301
3200120230901
4200120260904
5150120230304
620060260304
715060230904
815060260901

Step-by-Step Workflow

1

Preview the design

Terminal
$ doe info --config use_cases/308_pcb_solder_reflow/config.json
2

Generate the runner script

Terminal
$ doe generate --config use_cases/308_pcb_solder_reflow/config.json \ --output use_cases/308_pcb_solder_reflow/results/run.sh --seed 42
3

Execute the experiments

Terminal
$ bash use_cases/308_pcb_solder_reflow/results/run.sh
4

Analyze results

Terminal
$ doe analyze --config use_cases/308_pcb_solder_reflow/config.json
5

Get optimization recommendations

Terminal
$ doe optimize --config use_cases/308_pcb_solder_reflow/config.json
6

Multi-objective optimization

With 2 competing responses, use --multi to find the best compromise via Derringer–Suich desirability.

Terminal
$ doe optimize --config use_cases/308_pcb_solder_reflow/config.json --multi
7

Generate the HTML report

Terminal
$ doe report --config use_cases/308_pcb_solder_reflow/config.json \ --output use_cases/308_pcb_solder_reflow/results/report.html

Features Exercised

FeatureValue
Design typefractional_factorial
Factor typescontinuous (all 5)
Arg styledouble-dash
Responses2 (joint_strength ↑, void_percentage ↓)
Total runs8

Analysis Results

Generated from actual experiment runs using the DOE Helper Tool.

Response: joint_strength

Top factors: cooling_rate (38.3%), preheat_temp (37.2%), time_above_liquidus (13.8%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
preheat_temp191.125091.12502.3440.1863
soak_time12.42002.42000.0620.8129
peak_temp11.44501.44500.0370.8547
time_above_liquidus112.500012.50000.3220.5952
cooling_rate196.605096.60502.4850.1758
preheat_temp*soak_time112.500012.50000.3220.5952
preheat_temp*peak_temp196.605096.60502.4850.1758
preheat_temp*time_above_liquidus12.42002.42000.0620.8129
preheat_temp*cooling_rate11.44501.44500.0370.8547
soak_time*peak_temp125.920025.92000.6670.4513
soak_time*time_above_liquidus191.125091.12502.3440.1863
soak_time*cooling_rate1242.0000242.00006.2240.0548
peak_temp*time_above_liquidus1242.0000242.00006.2240.0548
peak_temp*cooling_rate191.125091.12502.3440.1863
time_above_liquidus*cooling_rate125.920025.92000.6670.4513
Error(LenthPSE)5194.400038.8800
Total7472.015067.4307

Response: void_percentage

Top factors: time_above_liquidus (34.5%), cooling_rate (26.3%), peak_temp (23.3%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
preheat_temp10.38280.38280.6670.4513
soak_time13.87813.87816.7540.0483
peak_temp114.391614.391625.0630.0041
time_above_liquidus131.561531.561554.9640.0007
cooling_rate118.271018.271031.8190.0024
preheat_temp*soak_time131.561531.561554.9640.0007
preheat_temp*peak_temp118.271018.271031.8190.0024
preheat_temp*time_above_liquidus13.87813.87816.7540.0483
preheat_temp*cooling_rate114.391614.391625.0630.0041
soak_time*peak_temp10.03250.03250.0570.8214
soak_time*time_above_liquidus10.38280.38280.6670.4513
soak_time*cooling_rate10.03250.03250.0570.8214
peak_temp*time_above_liquidus10.03250.03250.0570.8214
peak_temp*cooling_rate10.38280.38280.6670.4513
time_above_liquidus*cooling_rate10.03250.03250.0570.8214
Error(LenthPSE)52.87110.5742
Total768.55019.7929

Multi-Objective Optimization

When responses compete, Derringer–Suich desirability finds the best compromise. Each response is scaled to a 0–1 desirability, then combined via a weighted geometric mean.

Overall Desirability
D = 0.8478

Per-Response Desirability

ResponseWeightDesirabilityPredictedDir
joint_strength 2.0
0.7989
50.50 0.7989 50.50 N
void_percentage 1.0
0.9545
2.16 0.9545 2.16 %

Recommended Settings

FactorValue
preheat_temp150 C
soak_time60 s
peak_temp230 C
time_above_liquidus90 s
cooling_rate4 C/s

Source: from observed run #1

Trade-off Summary

Sacrifice = how much worse than single-objective best.

ResponsePredictedBest ObservedSacrifice
void_percentage2.162.16+0.00

Top 3 Runs by Desirability

RunDFactor Settings
#80.7705preheat_temp=200, soak_time=60, peak_temp=260, time_above_liquidus=30, cooling_rate=4
#40.7659preheat_temp=200, soak_time=120, peak_temp=230, time_above_liquidus=90, cooling_rate=1

Model Quality

ResponseType
void_percentage0.7060linear

Full Multi-Objective Output

doe optimize --multi
============================================================ MULTI-OBJECTIVE OPTIMIZATION Method: Derringer-Suich Desirability Function ============================================================ Overall desirability: D = 0.8478 Response Weight Desirability Predicted Direction --------------------------------------------------------------------- joint_strength 2.0 0.7989 50.50 N ↑ void_percentage 1.0 0.9545 2.16 % ↓ Recommended settings: preheat_temp = 150 C soak_time = 60 s peak_temp = 230 C time_above_liquidus = 90 s cooling_rate = 4 C/s (from observed run #1) Trade-off summary: joint_strength: 50.50 (best observed: 54.30, sacrifice: +3.80) void_percentage: 2.16 (best observed: 2.16, sacrifice: +0.00) Model quality: joint_strength: R² = 0.4634 (linear) void_percentage: R² = 0.7060 (linear) Top 3 observed runs by overall desirability: 1. Run #1 (D=0.8478): preheat_temp=150, soak_time=60, peak_temp=230, time_above_liquidus=90, cooling_rate=4 2. Run #8 (D=0.7705): preheat_temp=200, soak_time=60, peak_temp=260, time_above_liquidus=30, cooling_rate=4 3. Run #4 (D=0.7659): preheat_temp=200, soak_time=120, peak_temp=230, time_above_liquidus=90, cooling_rate=1

Full Analysis Output

doe analyze
=== Main Effects: joint_strength === Factor Effect Std Error % Contribution -------------------------------------------------------------- cooling_rate 6.9500 2.9032 38.3% preheat_temp -6.7500 2.9032 37.2% time_above_liquidus -2.5000 2.9032 13.8% soak_time -1.1000 2.9032 6.1% peak_temp -0.8500 2.9032 4.7% === ANOVA Table: joint_strength === Source DF SS MS F p-value ----------------------------------------------------------------------------- preheat_temp 1 91.1250 91.1250 2.344 0.1863 soak_time 1 2.4200 2.4200 0.062 0.8129 peak_temp 1 1.4450 1.4450 0.037 0.8547 time_above_liquidus 1 12.5000 12.5000 0.322 0.5952 cooling_rate 1 96.6050 96.6050 2.485 0.1758 preheat_temp*soak_time 1 12.5000 12.5000 0.322 0.5952 preheat_temp*peak_temp 1 96.6050 96.6050 2.485 0.1758 preheat_temp*time_above_liquidus 1 2.4200 2.4200 0.062 0.8129 preheat_temp*cooling_rate 1 1.4450 1.4450 0.037 0.8547 soak_time*peak_temp 1 25.9200 25.9200 0.667 0.4513 soak_time*time_above_liquidus 1 91.1250 91.1250 2.344 0.1863 soak_time*cooling_rate 1 242.0000 242.0000 6.224 0.0548 peak_temp*time_above_liquidus 1 242.0000 242.0000 6.224 0.0548 peak_temp*cooling_rate 1 91.1250 91.1250 2.344 0.1863 time_above_liquidus*cooling_rate 1 25.9200 25.9200 0.667 0.4513 Error (Lenth PSE) 5 194.4000 38.8800 Total 7 472.0150 67.4307 Note: Error estimated using Lenth's pseudo-standard-error (unreplicated design) === Interaction Effects: joint_strength === Factor A Factor B Interaction % Contribution ------------------------------------------------------------------------ soak_time cooling_rate 11.0000 20.3% peak_temp time_above_liquidus -11.0000 20.3% preheat_temp peak_temp 6.9500 12.8% soak_time time_above_liquidus 6.7500 12.5% peak_temp cooling_rate -6.7500 12.5% soak_time peak_temp 3.6000 6.7% time_above_liquidus cooling_rate -3.6000 6.7% preheat_temp soak_time 2.5000 4.6% preheat_temp time_above_liquidus 1.1000 2.0% preheat_temp cooling_rate -0.8500 1.6% === Summary Statistics: joint_strength === preheat_temp: Level N Mean Std Min Max ------------------------------------------------------------ 150 4 48.5000 6.5462 39.1000 54.3000 200 4 41.7500 9.1712 32.1000 52.8000 soak_time: Level N Mean Std Min Max ------------------------------------------------------------ 120 4 45.6750 6.3710 36.8000 50.5000 60 4 44.5750 10.7677 32.1000 54.3000 peak_temp: Level N Mean Std Min Max ------------------------------------------------------------ 230 4 45.5500 9.6959 32.1000 54.3000 260 4 44.7000 7.9276 36.8000 52.8000 time_above_liquidus: Level N Mean Std Min Max ------------------------------------------------------------ 30 4 46.3750 9.5908 32.1000 52.8000 90 4 43.8750 7.8224 36.8000 54.3000 cooling_rate: Level N Mean Std Min Max ------------------------------------------------------------ 1 4 41.6500 7.7981 32.1000 50.1000 4 4 48.6000 8.0204 36.8000 54.3000 === Main Effects: void_percentage === Factor Effect Std Error % Contribution -------------------------------------------------------------- time_above_liquidus 3.9725 1.1064 34.5% cooling_rate -3.0225 1.1064 26.3% peak_temp 2.6825 1.1064 23.3% soak_time 1.3925 1.1064 12.1% preheat_temp 0.4375 1.1064 3.8% === ANOVA Table: void_percentage === Source DF SS MS F p-value ----------------------------------------------------------------------------- preheat_temp 1 0.3828 0.3828 0.667 0.4513 soak_time 1 3.8781 3.8781 6.754 0.0483 peak_temp 1 14.3916 14.3916 25.063 0.0041 time_above_liquidus 1 31.5615 31.5615 54.964 0.0007 cooling_rate 1 18.2710 18.2710 31.819 0.0024 preheat_temp*soak_time 1 31.5615 31.5615 54.964 0.0007 preheat_temp*peak_temp 1 18.2710 18.2710 31.819 0.0024 preheat_temp*time_above_liquidus 1 3.8781 3.8781 6.754 0.0483 preheat_temp*cooling_rate 1 14.3916 14.3916 25.063 0.0041 soak_time*peak_temp 1 0.0325 0.0325 0.057 0.8214 soak_time*time_above_liquidus 1 0.3828 0.3828 0.667 0.4513 soak_time*cooling_rate 1 0.0325 0.0325 0.057 0.8214 peak_temp*time_above_liquidus 1 0.0325 0.0325 0.057 0.8214 peak_temp*cooling_rate 1 0.3828 0.3828 0.667 0.4513 time_above_liquidus*cooling_rate 1 0.0325 0.0325 0.057 0.8214 Error (Lenth PSE) 5 2.8711 0.5742 Total 7 68.5501 9.7929 Note: Error estimated using Lenth's pseudo-standard-error (unreplicated design) === Interaction Effects: void_percentage === Factor A Factor B Interaction % Contribution ------------------------------------------------------------------------ preheat_temp soak_time -3.9725 31.9% preheat_temp peak_temp -3.0225 24.3% preheat_temp cooling_rate 2.6825 21.5% preheat_temp time_above_liquidus -1.3925 11.2% soak_time time_above_liquidus -0.4375 3.5% peak_temp cooling_rate 0.4375 3.5% soak_time peak_temp -0.1275 1.0% soak_time cooling_rate 0.1275 1.0% peak_temp time_above_liquidus -0.1275 1.0% time_above_liquidus cooling_rate 0.1275 1.0% === Summary Statistics: void_percentage === preheat_temp: Level N Mean Std Min Max ------------------------------------------------------------ 150 4 7.8225 4.5238 2.1600 13.2300 200 4 8.2600 1.5024 6.8000 9.7200 soak_time: Level N Mean Std Min Max ------------------------------------------------------------ 120 4 7.3450 3.5245 2.1600 9.7200 60 4 8.7375 3.0224 6.8000 13.2300 peak_temp: Level N Mean Std Min Max ------------------------------------------------------------ 230 4 6.7000 3.2193 2.1600 9.7200 260 4 9.3825 2.7729 6.8000 13.2300 time_above_liquidus: Level N Mean Std Min Max ------------------------------------------------------------ 30 4 6.0550 2.6563 2.1600 8.1200 90 4 10.0275 2.2965 7.7800 13.2300 cooling_rate: Level N Mean Std Min Max ------------------------------------------------------------ 1 4 9.5525 2.6723 7.1400 13.2300 4 4 6.5300 3.1013 2.1600 9.3800

Optimization Recommendations

doe optimize
=== Optimization: joint_strength === Direction: maximize Best observed run: #4 preheat_temp = 200 soak_time = 120 peak_temp = 230 time_above_liquidus = 90 cooling_rate = 1 Value: 54.3 RSM Model (linear, R² = 0.6672, Adj R² = -0.1649): Coefficients: intercept +45.1250 preheat_temp +2.2000 soak_time -3.0000 peak_temp -4.9250 time_above_liquidus -1.1250 cooling_rate +0.0500 Predicted optimum (from linear model, at observed points): preheat_temp = 200 soak_time = 60 peak_temp = 230 time_above_liquidus = 30 cooling_rate = 1 Predicted value: 56.3250 Surface optimum (via L-BFGS-B, linear model): preheat_temp = 200 soak_time = 60 peak_temp = 230 time_above_liquidus = 30 cooling_rate = 4 Predicted value: 56.4250 Model quality: Moderate fit — use predictions directionally, not precisely. Factor importance: 1. peak_temp (effect: -9.8, contribution: 43.6%) 2. soak_time (effect: 6.0, contribution: 26.5%) 3. preheat_temp (effect: 4.4, contribution: 19.5%) 4. time_above_liquidus (effect: -2.2, contribution: 10.0%) 5. cooling_rate (effect: 0.1, contribution: 0.4%) === Optimization: void_percentage === Direction: minimize Best observed run: #1 preheat_temp = 150 soak_time = 60 peak_temp = 230 time_above_liquidus = 90 cooling_rate = 4 Value: 2.16 RSM Model (linear, R² = 0.5235, Adj R² = -0.6677): Coefficients: intercept +8.0412 preheat_temp -0.5813 soak_time +0.4637 peak_temp +1.0962 time_above_liquidus -0.4637 cooling_rate -1.5863 Predicted optimum (from linear model, at observed points): preheat_temp = 150 soak_time = 120 peak_temp = 260 time_above_liquidus = 30 cooling_rate = 1 Predicted value: 12.2325 Surface optimum (via L-BFGS-B, linear model): preheat_temp = 200 soak_time = 60 peak_temp = 230 time_above_liquidus = 90 cooling_rate = 4 Predicted value: 3.8500 Model quality: Moderate fit — use predictions directionally, not precisely. Factor importance: 1. cooling_rate (effect: -3.2, contribution: 37.8%) 2. peak_temp (effect: 2.2, contribution: 26.2%) 3. preheat_temp (effect: -1.2, contribution: 13.9%) 4. soak_time (effect: -0.9, contribution: 11.1%) 5. time_above_liquidus (effect: -0.9, contribution: 11.1%)
← Previous: Wine Tasting Panel Next: Wastewater Treatment Optimization →