@@ -18,30 +18,57 @@ node.
1818end
1919
2020"""
21- Resistor(; name, R )
21+ Resistor(; name, R_ref = 1.0, T_ref = 300.15, alpha = 0, T_dep = false )
2222
23- Creates an ideal Resistor following Ohm's Law .
23+ Generic resistor with optional temperature dependency .
2424
2525# States:
2626
27- See [OnePort](@ref)
27+ - See [OnePort](@ref)
28+ - `R(t)`: [`Ω`] Resistance (temperature dependent if `T_dep = true`)
2829
2930# Connectors:
3031
3132 - `p` Positive pin
3233 - `n` Negative pin
34+ - `heat_port` [HeatPort](@ref) (only if `T_dep = true`) Heat port to model the temperature dependency
3335
3436# Parameters:
3537
36- - `R`: [`Ohm`] Resistance
38+ - `R`: [`Ω`] Reference resistance
39+ - `T_ref`: [K] Reference temperature
40+ - `alpha`: [K⁻¹] Temperature coefficient of resistance
41+ - `T_dep`: [bool] Temperature dependency
3742"""
3843@mtkmodel Resistor begin
3944 @extend v, i = oneport = OnePort ()
45+
46+ @structural_parameters begin
47+ T_dep = false
48+ end
49+
4050 @parameters begin
41- R, [description = " Resistance" ]
51+ R = 1.0 , [description = " Reference resistance" , unit = " Ω" ]
52+ T_ref = 300.15 , [description = " Reference temperature" , unit = " K" ]
53+ alpha = 0.0 , [description = " Temperature coefficient of resistance" , unit = " K⁻¹" ]
4254 end
43- @equations begin
44- v ~ i * R
55+
56+ if T_dep
57+ @components begin
58+ heat_port = HeatPort ()
59+ end
60+ @variables begin
61+ R_T (t), [description = " Temperature-dependent resistance" , unit = " Ω" ]
62+ end
63+ @equations begin
64+ R_T ~ R * (1 + alpha * (heat_port. T - T_ref)) # Temperature-dependent resistance
65+ heat_port. Q_flow ~ - v * i # -LossPower
66+ v ~ i * R_T # Ohm's Law
67+ end
68+ else
69+ @equations begin
70+ v ~ i * R # Ohm's Law for constant resistance
71+ end
4572 end
4673end
4774
@@ -264,9 +291,9 @@ Electromotoric force (electric/mechanic transformer)
264291end
265292
266293"""
267- Diode(; name, Is = 1e-6, n = 1, T = 300.15)
294+ Diode(; name, Is = 1e-6, n = 1, T_ref = 300.15, T_dep = false )
268295
269- Ideal diode based on the Shockley diode equation .
296+ Generic diode with optional temperature dependency .
270297
271298# States
272299
@@ -276,70 +303,49 @@ Ideal diode based on the Shockley diode equation.
276303
277304 - `p` Positive pin
278305 - `n` Negative pin
306+ - `port` [HeatPort](@ref) (only if `T_dep = true`) Heat port to model the temperature dependency
279307
280- # Parameters
281-
308+ # Parameters:
309+
282310 - `Is`: [`A`] Saturation current
283311 - `n`: Ideality factor
284- - `T`: [K] Ambient temperature
312+ - `T_ref`: [K] Reference temperature
313+ - `T_dep`: [bool] Temperature dependency
285314"""
286315@mtkmodel Diode begin
287316 @constants begin
288317 k = 1.380649e-23 # Boltzmann constant (J/K)
289318 q = 1.602176634e-19 # Elementary charge (C)
290319 end
291320 @extend v, i = oneport = OnePort (; v = 0.0 )
292- @parameters begin
293- Is = 1e-6 , [description = " Saturation current (A)" ]
294- n = 1 , [description = " Ideality factor" ]
295- T = 300.15 , [description = " Ambient temperature" ]
296- end
297- @equations begin
298- i ~ Is * (exp (v * q / (n * k * T)) - 1 )
299- end
300- end
301-
302- """
303- HeatingDiode(; name, Is = 1e-6, n = 1)
304321
305- Temperature dependent diode based on the Shockley diode equation.
306-
307- # States
308-
309- - See [OnePort](@ref)
310-
311- # Connectors
312-
313- - `p` Positive pin
314- - `n` Negative pin
315- - `port` [HeatPort](@ref) Heat port to model the temperature dependency
316-
317- # Parameters:
318-
319- - `Is`: [`A`] Saturation current
320- - `n`: Ideality factor
321- """
322- @mtkmodel HeatingDiode begin
323- begin
324- k = 1.380649e-23 # Boltzmann constant (J/K)
325- q = 1.602176634e-19 # Elementary charge (C)
322+ @structural_parameters begin
323+ T_dep = false
326324 end
327325
328- @extend v, i = oneport = OnePort (; v = 0.0 )
329- @components begin
330- port = HeatPort ()
331- end
332326 @parameters begin
333327 Is = 1e-6 , [description = " Saturation current (A)" ]
334328 n = 1 , [description = " Ideality factor" ]
329+ T_ref = 300.15 , [description = " Reference temperature (K)" ]
330+ Vt_const = k * T_ref / q, [description = " Constant thermal voltage" ]
335331 end
336- @variables begin
337- Vt (t), [description = " Thermal voltage" ]
338- end
339- @equations begin
340- Vt ~ k * port. T / q # Thermal voltage equation
341- i ~ Is * (exp (v / (n * Vt)) - 1 ) # Shockley diode equation
342- port. Q_flow ~ - v * i # -LossPower
332+
333+ if T_dep
334+ @components begin
335+ port = HeatPort ()
336+ end
337+ @variables begin
338+ Vt (t), [description = " Thermal voltage" ]
339+ end
340+ @equations begin
341+ Vt ~ k * port. T / q # Thermal voltage equation
342+ i ~ Is * (exp (v / (n * Vt)) - 1 ) # Shockley diode equation with temperature dependence
343+ port. Q_flow ~ - v * i # -LossPower
344+ end
345+ else
346+ @equations begin
347+ i ~ Is * (exp (v / (n * Vt_const)) - 1 ) # Shockley diode equation
348+ end
343349 end
344350end
345351
@@ -366,20 +372,20 @@ R = R_const + pos * R_ref * (1 + alpha * (port.T - T_ref))
366372 - `R(t)`: Resistance
367373
368374# Connectors
369-
370- - `p` Positive pin
371- - `n` Negative pin
372- - `position` RealInput to set the position of the wiper
373- - `port` [HeatPort](@ref) Heat port to model the temperature dependency
375+
376+ - `p` Positive pin
377+ - `n` Negative pin
378+ - `position` RealInput to set the position of the wiper
379+ - `port` [HeatPort](@ref) Heat port to model the temperature dependency
374380
375381# Parameters
376-
377- - `R_ref`: [`Ω`] Resistance at temperature T_ref when fully closed (pos=1.0)
378- - `T_ref`: [K] Reference temperature
379- - `R_const`: [`Ω`] Constant resistance between p and n
380- - `T_dep`: Temperature dependency
381- - `alpha`: [K⁻¹] Temperature coefficient of resistance
382- - `enforce_bounds`: Enforce bounds for the position of the wiper (0-1)
382+
383+ - `R_ref`: [`Ω`] Resistance at temperature T_ref when fully closed (pos=1.0)
384+ - `T_ref`: [K] Reference temperature
385+ - `R_const`: [`Ω`] Constant resistance between p and n
386+ - `T_dep`: [bool] Temperature dependency
387+ - `alpha`: [K⁻¹] Temperature coefficient of resistance
388+ - `enforce_bounds`: Enforce bounds for the position of the wiper (0-1)
383389"""
384390@mtkmodel VariableResistor begin
385391 @extend v, i = oneport = OnePort ()
0 commit comments