KiCad PCB EDA Suite
Loading...
Searching...
No Matches
coupled_stripline.h
Go to the documentation of this file.
1/*
2 * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this package; see the file COPYING. If not, write to
16 * the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
17 * Boston, MA 02110-1301, USA.
18 */
19
20#ifndef TRANSLINE_CALCULATIONS_COUPLED_STRIPLINE_H
21#define TRANSLINE_CALCULATIONS_COUPLED_STRIPLINE_H
22
23
26
27#include <utility>
28
29/*
30 * This implements the calculations described in:
31 *
32 * [1] S. B. Cohn, "Characteristic Impedance of the Shielded-Strip Transmission Line," in Transactions of the IRE
33 * Professional Group on Microwave Theory and Techniques, vol. 2, no. 2, pp. 52-57, July 1954
34 * [2] S. B. Cohn, "Shielded Coupled-Strip Transmission Line," in IRE Transactions on Microwave Theory and Techniques,
35 * vol. 3, no. 5, pp. 29-38, October 1955
36 * [3] B. C. Wadell, "Transmission Line Design Handbook," Artech House, Norwood, MA, 1991. Sec. 3.6.3
37 * "Off-Center Stripline" (Eqs. 3.6.3.21 - 3.6.3.23) gives the image-method plus three-term
38 * correction for a single strip offset between two ground planes; applied here per mode to the
39 * Reference [2] coupled-stripline solver.
40 */
41
43{
45
46public:
56
58 void Analyse() override;
59
61 bool Synthesize( SYNTHESIZE_OPTS aOpts ) override;
62
65 static bool IsCenteredOffset( double a, double h );
66
67private:
69 void SetAnalysisResults() override;
70
72 void SetSynthesisResults() override;
73
75 enum class ResultSink
76 {
79 };
80
84 void publishResults( ResultSink aSink, TRANSLINE_STATUS aImpedanceFailure, TRANSLINE_STATUS aGeometryFailure );
85
88
90 void calcFringeCapacitances( double h, double t, double er );
91
94
96 void calcZeroThicknessCoupledImpedances( double h, double w, double s, double er );
97
101 static bool isOffsetWithinFiniteThicknessLimits( double a, double h, double t );
102
111 void calcOffsetZeroThicknessCoupledImpedances( double h, double a, double w, double s, double t, double er );
112
118 static double applyOffsetCorrection( double aZImage, double aOffset, double aPlateSpacing, double aWidth,
119 double aThickness, double aEr );
120
124 std::pair<double, double> calcOffsetVirtualBranch( double aVirtualH, double w, double s, double t, double er );
125
127 void calcZ0EvenMode();
128
130 void calcZ0OddMode( double t, double s );
131
133 void calcLosses();
134
136 void calcDielectrics();
137
138 double C_f_0{ 0.0 };
139 double C_f_t_h{ 0.0 };
140
141 double Z0_w_h_0{ 0.0 };
142 double Z0_w_h_t_h{ 0.0 };
143 double Z0_e_w_h_0_s_h{ 0.0 };
144 double Z0_o_w_h_0_s_h{ 0.0 };
145
146 double e_eff_e{ 0.0 };
147 double e_eff_o{ 0.0 };
148 double ang_l{ 0.0 };
149 double unit_prop_delay_e{ 0.0 };
150 double unit_prop_delay_o{ 0.0 };
151
154};
155
156
157#endif //TRANSLINE_CALCULATIONS_COUPLED_STRIPLINE_H
void Analyse() override
Analyse track geometry parameters to output Z0 and Ang_L.
double C_f_t_h
Fringing capacitance of single strip of finite width.
void calcLosses()
Calculates conductor and dielectric losses.
void SetSynthesisResults() override
Sets the output values and status following synthesis.
STRIPLINE m_striplineCalc
Calculator used to determine single stripline values.
double unit_prop_delay_o
Odd mode unit propagation delay (ps/cm)
bool Synthesize(SYNTHESIZE_OPTS aOpts) override
Synthesis track geometry parameters to match given Z0.
void calcFringeCapacitances(double h, double t, double er)
Calculate the coupling fringe capacitances.
double Z0_o_w_h_0_s_h
Odd mode impedance of coupled zero thickness strips.
double Z0_w_h_t_h
Impedance of single strip of finite thickness.
void calcZ0EvenMode()
Calculates even mode Z0.
void calcDielectrics()
Calculate dialectric and propagation parameters.
static bool isOffsetWithinFiniteThicknessLimits(double a, double h, double t)
Returns true when the offset a is far enough from each ground plane that the Reference [1] finite-thi...
static bool IsCenteredOffset(double a, double h)
Returns true when the strip plane offset a is effectively at the centre (a = h/2 within numerical tol...
double Z0_w_h_0
Impedance of single strip of zero thickness.
void calcSingleStripImpedances()
Calculates impedances of finite- and zero-thickness single strips.
std::pair< double, double > calcOffsetVirtualBranch(double aVirtualH, double w, double s, double t, double er)
Runs the centred finite-thickness pipeline for a single Reference [3] virtual stripline of plate spac...
static double applyOffsetCorrection(double aZImage, double aOffset, double aPlateSpacing, double aWidth, double aThickness, double aEr)
Applies the Reference [3] Eq.
double e_eff_e
Even mode effective dielectric constant.
void calcZ0OddMode(double t, double s)
Calculates odd mode Z0.
void SetAnalysisResults() override
Sets the output values and status following analysis.
double C_f_0
Fringing capacitance from one edge to ground of zero thickness strip.
double e_eff_o
Odd mode effective dielectric constant.
double Z0_e_w_h_0_s_h
Even mode impedance of coupled zero thickness strips.
double calcZ0SymmetricStripline()
Calculates the impedance of a finite-width single strip.
double ang_l
Angular length (rad)
void calcZeroThicknessCoupledImpedances(double h, double w, double s, double er)
Calculates zero-thickness coupled strip impedances.
void calcOffsetZeroThicknessCoupledImpedances(double h, double a, double w, double s, double t, double er)
Offset-aware wrapper around calcZeroThicknessCoupledImpedances built on Reference [3] Sec.
TRANSLINE_PARAMETERS TCP
ResultSink
Identifies which result map publishResults() should populate.
void publishResults(ResultSink aSink, TRANSLINE_STATUS aImpedanceFailure, TRANSLINE_STATUS aGeometryFailure)
Shared body of SetAnalysisResults / SetSynthesisResults.
double unit_prop_delay_e
Even mode unit propagation delay (ps/cm)
TRANSLINE_CALCULATION_BASE(std::initializer_list< TRANSLINE_PARAMETERS > aParameters)
Constructs the transmission line calculation object.
SYNTHESIZE_OPTS
Options for specifying synthesis inputs, targets, or strategies.
TRANSLINE_STATUS
Parameter status values.
TRANSLINE_PARAMETERS
All possible parameters used (as inputs or outputs) by the transmission line calculations.