-
-
Notifications
You must be signed in to change notification settings - Fork 51k
Expand file tree
/
Copy pathhalf_wave_rectifier.py
More file actions
131 lines (113 loc) · 3.89 KB
/
Copy pathhalf_wave_rectifier.py
File metadata and controls
131 lines (113 loc) · 3.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
from typing import NamedTuple
class Result(NamedTuple):
name: str
value: float
def max_load_current(rf: float, rs: float, rl: float, vm: float) -> tuple:
"""
This function can calculate the maximum load current(Im)
in a half-wave rectifier circuit.
Im = maximum load current
rf = Forward Resistance of Diode
rs = Transformer secondary winding resistance
rl = load resistance
vm = maximum voltage or peak voltage
Cases:-
>>> max_load_current(rf=2 , rs=4 , rl=6 , vm=15 )
Result(name='max_load_current', value=1.25)
>>> max_load_current(rf=2 , rs=4 , rl=6 , vm=0 )
Result(name='max_load_current', value=0.0)
>>> max_load_current(rf=2 , rs=-4 , rl=6 , vm=15 )
Traceback (most recent call last):
...
ValueError: Resistance cannot be negative
>>> max_load_current(rf=0 , rs=0 , rl=0 , vm=15 )
Traceback (most recent call last):
...
ValueError: At least one Resistance must be non-zero
"""
if (rf, rs, rl).count(0) == 3:
raise ValueError("At least one Resistance must be non-zero")
elif rf < 0 or rs < 0 or rl < 0:
raise ValueError("Resistance cannot be negative")
elif vm == 0:
return Result("max_load_current", vm / (rf + rs + rl))
else:
return Result("max_load_current", vm / (rf + rs + rl))
def dc_current(im: float) -> tuple:
"""
This function can calculate the Average DC Current(Idc) in a circuit.
In all cases, a negative sign shows
the opposite direction of current or voltage.
Idc = average direct current (DC)
im = maximum current or peak current
cases:
>>> dc_current(im=2)
Result(name='Idc', value=0.636)
>>> dc_current(im=0)
Result(name='Idc', value=0.0)
"""
return Result("Idc", im * 0.318)
def dc_voltage(vm: float) -> tuple:
"""
This function can calculate the Average DC Voltage(Vdc) in a circuit.
In all cases, a negative sign shows
the opposite direction of current or voltage.
Vdc = average direct current (DC)
vm = maximum voltage or peak voltage
cases:
>>> dc_voltage(vm=2)
Result(name='Vdc', value=0.636)
>>> dc_voltage(vm=0)
Result(name='Vdc', value=0.0)
"""
return Result("Vdc", 0.318 * vm)
def max_current(vm: float, rl: float) -> tuple:
"""
This function can calculate the maximum current(Im) in a circuit.
In all cases, a negative sign shows the
opposite direction of current or voltage.
vm = maximum voltage or peak voltage
rl = load resistance
cases:
>>> max_current(vm=2, rl=5)
Result(name='Max_current_Im', value=0.4)
>>> max_current(vm=2, rl=-5)
Traceback (most recent call last):
...
ValueError: Resistance cannot be negative or equal to zero
"""
if rl <= 0:
raise ValueError("Resistance cannot be negative or equal to zero")
else:
return Result("Max_current_Im", vm / rl)
def rms_current(im: float) -> tuple:
"""
This function calculates the RMS(Root Mean Square) value of current(Irms).
In all cases, a negative sign shows
the opposite direction of current or voltage.
Irms = Root Mean Square Value of current
im = maximum current or peak current
cases:
>>> rms_current(im=10)
Result(name='Irms', value=5.0)
>>> rms_current(im=0)
Result(name='Irms', value=0.0)
"""
return Result("Irms", im / 2)
def rms_voltage(vm: float) -> tuple:
"""
This function calculates the RMS(Root Mean Square) value of voltage(Vrms).
In all cases, a negative sign shows
the opposite direction of current or voltage.
Vrms = Root Mean Square Value of voltage
vm = maximum voltage or peak voltage
cases:
>>> rms_voltage(vm=20)
Result(name='Vrms', value=10.0)
>>> rms_voltage(vm=0)
Result(name='Vrms', value=0.0)
"""
return Result("Vrms", vm / 2)
if __name__ == "__main__":
import doctest
doctest.testmod()