Coil Adviser¶
The Coil Adviser optimizes winding configurations for a given core and wire combination, minimizing losses while meeting electrical requirements.
Overview¶
The Coil Adviser works in conjunction with the Wire Adviser to find optimal winding configurations. It considers turn placement, layer organization, and interleaving strategies.
flowchart TD
subgraph "Input"
A([Start]) --> B[Receive core and wire selection]
B --> C[Load design requirements]
C --> D[Load operating points]
end
subgraph "Winding Generation"
D --> E[Calculate required turns per winding]
E --> F[Generate winding distribution options]
F --> G{Multiple windings?}
G -->|Yes| H[Generate interleaving patterns]
G -->|No| I[Single winding layout]
H --> J[Calculate layer arrangements]
I --> J
end
subgraph "Evaluation"
J --> K[For each configuration]
K --> L[Calculate DC resistance]
L --> M[Calculate skin effect losses]
M --> N[Calculate proximity effect losses]
N --> O[Calculate leakage inductance]
O --> P[Score configuration]
P --> Q{More configs?}
Q -->|Yes| K
Q -->|No| R[Rank configurations]
end
subgraph "Output"
R --> S[Apply constraints]
S --> T[Return top configurations]
T --> U([End])
end
Key Features¶
Turn Calculation¶
The adviser calculates the required number of turns based on:
- Magnetizing inductance requirement
- Core reluctance (from selected reluctance model)
- Turns ratio for transformers
$$N = \sqrt{L \cdot R_{total}}$$
Where: - L = required inductance - R_total = total magnetic reluctance
Winding Distribution¶
For multi-winding designs, the adviser explores:
- Stacked windings: Each winding in its own section
- Interleaved windings: Primary-secondary-primary patterns
- Sectioned windings: Split windings for reduced leakage
Layer Optimization¶
The adviser optimizes layer arrangement considering:
- Wire dimensions and spacing
- Insulation requirements
- Manufacturing constraints
- Loss minimization
Configuration¶
Settings¶
auto& settings = OpenMagnetics::Settings::GetInstance();
// Maximum wires to consider from WireAdviser
settings.set_coil_adviser_maximum_number_wires(100);
// Allow margin tape between windings
settings.set_coil_allow_margin_tape(true);
// Allow pre-insulated wire
settings.set_coil_allow_insulated_wire(true);
// Try to fit even if marginal
settings.set_coil_wind_even_if_not_fit(false);
// Equalize margins on both sides
settings.set_coil_equalize_margins(true);
// Maximum layers for planar transformers
settings.set_coil_maximum_layers_planar(4);
Winding Preferences¶
OpenMagnetics::CoilAdviser adviser;
// Prefer fewer layers
adviser.set_layer_weight(0.3);
// Minimize proximity losses
adviser.set_proximity_weight(0.4);
// Minimize leakage inductance
adviser.set_leakage_weight(0.3);
Usage Example¶
#include "OpenMagnetics.h"
int main() {
// Load a core
auto core = OpenMagnetics::find_core_by_name("E 42/21/15");
// Define winding requirements
MAS::DesignRequirements requirements;
requirements.set_magnetizing_inductance(100e-6);
// Add turns ratio for transformer
std::vector<double> turnsRatios = {1.0, 0.1}; // 10:1 ratio
requirements.set_turns_ratios(turnsRatios);
// Operating point
MAS::OperatingPoint operatingPoint;
MAS::OperatingConditions conditions;
conditions.set_ambient_temperature(25);
operatingPoint.set_conditions(conditions);
MAS::OperatingPointExcitation excitation;
excitation.set_frequency(100000);
operatingPoint.set_excitations_per_winding({excitation, excitation});
// Run coil adviser
OpenMagnetics::CoilAdviser adviser;
auto coils = adviser.get_advised_coil(core, requirements, operatingPoint, 10);
for (const auto& coil : coils) {
std::cout << "Configuration:" << std::endl;
std::cout << " Layers: " << coil.get_layers().size() << std::endl;
std::cout << " Estimated losses: " << coil.get_estimated_losses() << " W" << std::endl;
}
return 0;
}
Interleaving Strategies¶
For transformers, interleaving reduces leakage inductance and proximity losses:
No Interleaving (P-S)¶
┌─────────────────────┐
│ Primary (P) │
├─────────────────────┤
│ Secondary (S) │
└─────────────────────┘
Simple Interleaving (P-S-P)¶
┌─────────────────────┐
│ Primary (P/2) │
├─────────────────────┤
│ Secondary (S) │
├─────────────────────┤
│ Primary (P/2) │
└─────────────────────┘
Full Interleaving (P-S-P-S-...)¶
┌─────────────────────┐
│ Primary (P/n) │
├─────────────────────┤
│ Secondary (S/n) │
├─────────────────────┤
│ Primary (P/n) │
├─────────────────────┤
│ Secondary (S/n) │
└─────────────────────┘
Loss Calculation¶
The adviser estimates losses for each configuration:
DC Resistance¶
$$R_{DC} = \rho \frac{l}{A}$$
AC Resistance (Skin + Proximity)¶
$$R_{AC} = R_{DC} \cdot F_r$$
Where Fr is the resistance factor accounting for skin and proximity effects.
Total Winding Loss¶
$$P_{winding} = I_{rms}^2 \cdot R_{AC}$$