You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
1.9 KiB
76 lines
1.9 KiB
/***************************************************************************
|
|
* Copyright (C) 2003-2005 by David Saxton *
|
|
* david@bluehaze.org *
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
***************************************************************************/
|
|
|
|
#ifndef BJT_H
|
|
#define BJT_H
|
|
|
|
#include "matrix.h"
|
|
#include "nonlinear.h"
|
|
|
|
class BJTState
|
|
{
|
|
public:
|
|
BJTState();
|
|
void reset();
|
|
|
|
BJTState operator-( const BJTState & s ) const;
|
|
|
|
double A[3][3];
|
|
double I[3];
|
|
};
|
|
|
|
|
|
class BJTSettings
|
|
{
|
|
public:
|
|
BJTSettings();
|
|
|
|
double I_S; ///< saturation current
|
|
double N_F; ///< forward emission coefficient
|
|
double N_R; ///< reverse emission coefficient
|
|
double B_F; ///< forward beta
|
|
double B_R; ///< reverse beta
|
|
};
|
|
|
|
|
|
/**
|
|
@author David Saxton
|
|
*/
|
|
class BJT : public NonLinear
|
|
{
|
|
public:
|
|
BJT( bool isNPN );
|
|
virtual ~BJT();
|
|
|
|
virtual Type type() const { return Element_BJT; }
|
|
virtual void update_dc();
|
|
virtual void add_initial_dc();
|
|
virtual void add_map();
|
|
BJTSettings settings() const { return m_bjtSettings; }
|
|
void setBJTSettings( const BJTSettings & settings );
|
|
|
|
protected:
|
|
virtual void updateCurrents();
|
|
/**
|
|
* Calculates the new BJTState from the voltages on the nodes.
|
|
*/
|
|
void calc_eq();
|
|
|
|
void calcIg( double V_BE, double V_BC, double * I_BE, double * I_BC, double * I_T, double * g_BE, double * g_BC, double * g_IF, double * g_IR );
|
|
|
|
BJTState m_os;
|
|
BJTState m_ns;
|
|
int m_pol;
|
|
double V_BE_prev, V_BC_prev;
|
|
BJTSettings m_bjtSettings;
|
|
};
|
|
|
|
#endif
|