Skip to main content

GummelPoonModel

Struct GummelPoonModel 

pub struct GummelPoonModel {
Show 26 fields pub is: f64, pub bf: f64, pub br: f64, pub nf: f64, pub nr: f64, pub vt: f64, pub vaf: f64, pub var: f64, pub ikf: f64, pub ikr: f64, pub ise: f64, pub ne: f64, pub isc: f64, pub nc: f64, pub cje: f64, pub vje: f64, pub mje: f64, pub cjc: f64, pub vjc: f64, pub mjc: f64, pub rb: f64, pub re: f64, pub rc: f64, pub tf: f64, pub tr: f64, pub is_pnp: bool,
}
Expand description

Gummel-Poon BJT model parameters.

The Gummel-Poon model extends Ebers-Moll with:

  • Base charge modulation (Early effect, high injection)
  • Separate forward/reverse ideality factors
  • Base-emitter and base-collector leakage currents
  • Junction capacitances for transient analysis

Key equations:

Qb = (1 + Vbc/Vaf + Vbe/Var) / sqrt(1 - 4*q1/Ikf - 4*q2/Ikr)
Icc = Is * (exp(Vbe/Nf/Vt) - 1) / Qb
Iec = Is * (exp(Vbc/Nr/Vt) - 1) / Qb
Ic = Icc - Iec/Br
Ib = Icc/Bf + Iec/Br + Ise*(exp(Vbe/Ne/Vt)-1) + Isc*(exp(Vbc/Nc/Vt)-1)

Reference: H.K. Gummel and H.C. Poon, “An Integral Charge Control Model of Bipolar Transistors”, Bell Syst. Tech. J., 1970.

Fields§

§is: f64

Saturation current (A). Typically 1e-15 to 1e-12.

§bf: f64

Forward current gain (beta_F, hFE). Typically 100-500.

§br: f64

Reverse current gain (beta_R). Typically 1-20.

§nf: f64

Forward ideality factor (typically 1.0).

§nr: f64

Reverse ideality factor (typically 1.0).

§vt: f64

Thermal voltage (V). kT/q ≈ 25.85mV at 25°C.

§vaf: f64

Forward Early voltage (V). Models base-width modulation in forward-active. Typically 50-200V. Set to crate::Wave::INFINITY to disable.

§var: f64

Reverse Early voltage (V). Models base-width modulation in reverse-active. Typically 5-50V. Set to crate::Wave::INFINITY to disable.

§ikf: f64

Forward knee current (A). High-injection corner for forward gain. Typically 0.01-1A. Set to crate::Wave::INFINITY to disable.

§ikr: f64

Reverse knee current (A). High-injection corner for reverse gain. Typically 0.001-0.1A. Set to crate::Wave::INFINITY to disable.

§ise: f64

B-E leakage saturation current (A). Typically 0 or 1e-14.

§ne: f64

B-E leakage ideality factor. Typically 1.5-2.0.

§isc: f64

B-C leakage saturation current (A). Typically 0 or 1e-13.

§nc: f64

B-C leakage ideality factor. Typically 1.5-2.0.

§cje: f64

Zero-bias B-E junction capacitance (F).

§vje: f64

B-E built-in potential (V). Typically 0.7-0.9V.

§mje: f64

B-E grading coefficient. Typically 0.33-0.5.

§cjc: f64

Zero-bias B-C junction capacitance (F).

§vjc: f64

B-C built-in potential (V). Typically 0.5-0.75V.

§mjc: f64

B-C grading coefficient. Typically 0.33-0.5.

§rb: f64

Base spreading resistance (Ω). Models ohmic loss in base region. Typical range: 1–40 Ω. Causes negative feedback and limits gain.

§re: f64

Emitter ohmic resistance (Ω). Typical range: 0.1–2 Ω. Contributes degeneration / gain reduction.

§rc: f64

Collector ohmic resistance (Ω). Typical range: 0.1–4 Ω.

§tf: f64

Forward transit time (s). Affects high-frequency response via diffusion capacitance. C_diff_be = TF * gm = TF * Ic / Vt.

§tr: f64

Reverse transit time (s). Contributes to B-C diffusion capacitance. C_diff_bc = TR * gm_r = TR * Ie / Vt.

§is_pnp: bool

Whether this is a PNP (vs NPN) transistor.

Implementations§

§

impl GummelPoonModel

pub fn base_charge(&self, vbe: f64, vbc: f64) -> f64

Compute the base charge factor Qb.

Qb models base-width modulation (Early effect) and high-injection effects. When Qb > 1, the effective β drops (beta droop at high currents).

q1 = 1 + Vbc/Vaf + Vbe/Var
q2 = Is * (exp(Vbe/Nf/Vt) - 1) / Ikf + Is * (exp(Vbc/Nr/Vt) - 1) / Ikr
Qb = q1/2 * (1 + sqrt(1 + 4*q2))

pub fn currents(&self, vbe: f64, vbc: f64) -> (f64, f64)

Compute collector current using Gummel-Poon transport equations.

Returns (Ic, Ib) tuple.

pub fn currents_and_jacobian(&self, vbe: f64, vbc: f64) -> (f64, f64, [f64; 4])

Compute currents AND analytical 2×2 Jacobian in one pass.

Returns (ic, ib, [∂ib/∂vbe, ∂ib/∂vbc, ∂ic/∂vbe, ∂ic/∂vbc]).

Note: derivatives are w.r.t. (vbe, vbc), not (vbe, vce). Caller must chain-rule for (vbe, vce): ∂f/∂vce = -∂f/∂vbc since vbc = vbe - vce.

pub fn capacitance_be(&self, vbe: f64, ic: f64) -> f64

Compute B-E junction capacitance including both depletion and diffusion components.

Depletion capacitance: Standard junction formula with forward-bias linearization to avoid singularity at Vbe = Vje.

Diffusion capacitance: C_diff = TF × gm = TF × Ic / Vt. Dominant at high current densities; models minority carrier storage.

ic is the collector current at the current operating point (A).

§Note

These capacitances are currently computed by BjtGummelPoonRoot for reactive transient simulation. BjtTwoPort does not yet integrate them into its Newton-Raphson solver; a future task should add sample-rate and state tracking analogous to BjtGummelPoonRoot::cap_be_state.

pub fn capacitance_bc(&self, vbc: f64, ie: f64) -> f64

Compute B-C junction capacitance including both depletion and diffusion components.

Diffusion capacitance: C_diff = TR × gm_r = TR × |Ie| / Vt. ie is the emitter current at the current operating point (A).

§Note

See note on capacitance_be regarding integration into BjtTwoPort.

Trait Implementations§

§

impl Clone for GummelPoonModel

§

fn clone(&self) -> GummelPoonModel

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
§

impl Copy for GummelPoonModel

§

impl Debug for GummelPoonModel

§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more