mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-12-05 02:40:16 +00:00
94b51f6a91
* Added Builtin Voltage * Update builtin_voltage.py * Update electronics/builtin_voltage.py Co-authored-by: Caeden Perelli-Harris <caedenperelliharris@gmail.com> * Update electronics/builtin_voltage.py Co-authored-by: Caeden Perelli-Harris <caedenperelliharris@gmail.com> * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Apply suggestions from code review Co-authored-by: Caeden Perelli-Harris <caedenperelliharris@gmail.com> * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Create elf.py Co-authored-by: Caeden Perelli-Harris <caedenperelliharris@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Christian Clauss <cclauss@me.com>
68 lines
2.4 KiB
Python
68 lines
2.4 KiB
Python
from math import log
|
|
|
|
from scipy.constants import Boltzmann, physical_constants
|
|
|
|
T = 300 # TEMPERATURE (unit = K)
|
|
|
|
|
|
def builtin_voltage(
|
|
donor_conc: float, # donor concentration
|
|
acceptor_conc: float, # acceptor concentration
|
|
intrinsic_conc: float, # intrinsic concentration
|
|
) -> float:
|
|
"""
|
|
This function can calculate the Builtin Voltage of a pn junction diode.
|
|
This is calculated from the given three values.
|
|
Examples -
|
|
>>> builtin_voltage(donor_conc=1e17, acceptor_conc=1e17, intrinsic_conc=1e10)
|
|
0.833370010652644
|
|
>>> builtin_voltage(donor_conc=0, acceptor_conc=1600, intrinsic_conc=200)
|
|
Traceback (most recent call last):
|
|
...
|
|
ValueError: Donor concentration should be positive
|
|
>>> builtin_voltage(donor_conc=1000, acceptor_conc=0, intrinsic_conc=1200)
|
|
Traceback (most recent call last):
|
|
...
|
|
ValueError: Acceptor concentration should be positive
|
|
>>> builtin_voltage(donor_conc=1000, acceptor_conc=1000, intrinsic_conc=0)
|
|
Traceback (most recent call last):
|
|
...
|
|
ValueError: Intrinsic concentration should be positive
|
|
>>> builtin_voltage(donor_conc=1000, acceptor_conc=3000, intrinsic_conc=2000)
|
|
Traceback (most recent call last):
|
|
...
|
|
ValueError: Donor concentration should be greater than intrinsic concentration
|
|
>>> builtin_voltage(donor_conc=3000, acceptor_conc=1000, intrinsic_conc=2000)
|
|
Traceback (most recent call last):
|
|
...
|
|
ValueError: Acceptor concentration should be greater than intrinsic concentration
|
|
"""
|
|
|
|
if donor_conc <= 0:
|
|
raise ValueError("Donor concentration should be positive")
|
|
elif acceptor_conc <= 0:
|
|
raise ValueError("Acceptor concentration should be positive")
|
|
elif intrinsic_conc <= 0:
|
|
raise ValueError("Intrinsic concentration should be positive")
|
|
elif donor_conc <= intrinsic_conc:
|
|
raise ValueError(
|
|
"Donor concentration should be greater than intrinsic concentration"
|
|
)
|
|
elif acceptor_conc <= intrinsic_conc:
|
|
raise ValueError(
|
|
"Acceptor concentration should be greater than intrinsic concentration"
|
|
)
|
|
else:
|
|
return (
|
|
Boltzmann
|
|
* T
|
|
* log((donor_conc * acceptor_conc) / intrinsic_conc**2)
|
|
/ physical_constants["electron volt"][0]
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
import doctest
|
|
|
|
doctest.testmod()
|