TheAlgorithms-Python
67 строк · 2.4 Кб
1from math import log2
3from scipy.constants import Boltzmann, physical_constants4
5T = 300 # TEMPERATURE (unit = K)6
7
8def builtin_voltage(9donor_conc: float, # donor concentration10acceptor_conc: float, # acceptor concentration11intrinsic_conc: float, # intrinsic concentration12) -> float:13"""14This function can calculate the Builtin Voltage of a pn junction diode.
15This is calculated from the given three values.
16Examples -
17>>> builtin_voltage(donor_conc=1e17, acceptor_conc=1e17, intrinsic_conc=1e10)
180.833370010652644
19>>> builtin_voltage(donor_conc=0, acceptor_conc=1600, intrinsic_conc=200)
20Traceback (most recent call last):
21...
22ValueError: Donor concentration should be positive
23>>> builtin_voltage(donor_conc=1000, acceptor_conc=0, intrinsic_conc=1200)
24Traceback (most recent call last):
25...
26ValueError: Acceptor concentration should be positive
27>>> builtin_voltage(donor_conc=1000, acceptor_conc=1000, intrinsic_conc=0)
28Traceback (most recent call last):
29...
30ValueError: Intrinsic concentration should be positive
31>>> builtin_voltage(donor_conc=1000, acceptor_conc=3000, intrinsic_conc=2000)
32Traceback (most recent call last):
33...
34ValueError: Donor concentration should be greater than intrinsic concentration
35>>> builtin_voltage(donor_conc=3000, acceptor_conc=1000, intrinsic_conc=2000)
36Traceback (most recent call last):
37...
38ValueError: Acceptor concentration should be greater than intrinsic concentration
39"""
40
41if donor_conc <= 0:42raise ValueError("Donor concentration should be positive")43elif acceptor_conc <= 0:44raise ValueError("Acceptor concentration should be positive")45elif intrinsic_conc <= 0:46raise ValueError("Intrinsic concentration should be positive")47elif donor_conc <= intrinsic_conc:48raise ValueError(49"Donor concentration should be greater than intrinsic concentration"50)51elif acceptor_conc <= intrinsic_conc:52raise ValueError(53"Acceptor concentration should be greater than intrinsic concentration"54)55else:56return (57Boltzmann
58* T59* log((donor_conc * acceptor_conc) / intrinsic_conc**2)60/ physical_constants["electron volt"][0]61)62
63
64if __name__ == "__main__":65import doctest66
67doctest.testmod()68