44constexpr BA_COEFFICIENTS EXTERNAL_COEFFS{ 215.3, 2.0, -1.15, -1.0 };
46constexpr BA_COEFFICIENTS INTERNAL_HALF_OZ_COEFFS{ 120.0, 2.0, -1.10, -1.52 };
47constexpr BA_COEFFICIENTS INTERNAL_1OZ_COEFFS{ 200.0, 1.9, -1.10, -1.52 };
48constexpr BA_COEFFICIENTS INTERNAL_2OZ_COEFFS{ 300.0, 2.0, -1.15, -1.52 };
49constexpr BA_COEFFICIENTS INTERNAL_3OZ_COEFFS{ 262.5, 1.9, -1.15, -1.52 };
52constexpr double HALF_OZ_MILS = 0.689;
53constexpr double ONE_OZ_MILS = 1.378;
54constexpr double TWO_OZ_MILS = 2.756;
55constexpr double THREE_OZ_MILS = 4.134;
58const BA_COEFFICIENTS& coefficients(
bool aUseInternalLayer,
double aThicknessMils )
60 if( !aUseInternalLayer )
61 return EXTERNAL_COEFFS;
63 if( aThicknessMils < ( HALF_OZ_MILS + ONE_OZ_MILS ) / 2.0 )
64 return INTERNAL_HALF_OZ_COEFFS;
66 if( aThicknessMils < ( ONE_OZ_MILS + TWO_OZ_MILS ) / 2.0 )
67 return INTERNAL_1OZ_COEFFS;
69 if( aThicknessMils < ( TWO_OZ_MILS + THREE_OZ_MILS ) / 2.0 )
70 return INTERNAL_2OZ_COEFFS;
72 return INTERNAL_3OZ_COEFFS;
78 double aDeltaT_C,
bool aUseInternalLayer )
80 const BA_COEFFICIENTS& k = coefficients( aUseInternalLayer, aThicknessMils );
83 double denom = k.K * std::pow( aWidthMils, k.b ) * std::pow( aThicknessMils, k.c );
85 return std::pow( aDeltaT_C / denom, 1.0 / k.a );
90 double aDeltaT_C,
bool aUseInternalLayer )
92 const BA_COEFFICIENTS& k = coefficients( aUseInternalLayer, aThicknessMils );
95 double denom = k.K * std::pow( aCurrentA, k.a ) * std::pow( aThicknessMils, k.c );
97 return std::pow( aDeltaT_C / denom, 1.0 / k.b );
double CurrentFromWidth(double aWidthMils, double aThicknessMils, double aDeltaT_C, bool aUseInternalLayer)
Compute the maximum current a track can carry for a given temperature rise.
double WidthFromCurrent(double aCurrentA, double aThicknessMils, double aDeltaT_C, bool aUseInternalLayer)
Compute the track width required to carry a given current for a given temperature rise.