Skip to content
NonlinearResistor.md

NonlinearResistor

A nonlinear resistor with a piecewise-linear current-voltage characteristic, commonly known as Chua's Resistor.

This component models a voltage-controlled nonlinear resistor where the current i is a function of the voltage v across its terminals. The current-voltage relationship is piecewise-linear, defined by three distinct regions: For voltages within the range [-Ve, Ve], the resistor has a conductance Ga. For voltages outside this range (v > Ve or v < -Ve), the resistor exhibits a different conductance Gb for the portion of the voltage exceeding +/-Ve. The mathematical relationship is:

i={Gb(v+Ve)GaVeif v<VeGavif VevVeGb(vVe)+GaVeif v>Ve

This behavior is characteristic of the nonlinear resistor element in Chua's circuit.

This component extends from OnePort

Usage

NonlinearResistor(Ga, Gb, Ve)

Parameters:

NameDescriptionUnitsDefault value
GaConductance in the central region (-Ve <= v <= Ve).S
GbConductance in the outer regions (v < -Ve or v > Ve).S
VeBreakpoint voltage defining the boundaries of the different conductance regions.V

Connectors

Variables

NameDescriptionUnits
vVoltage across the component (between pin p and pin n).V
iCurrent flowing through the component (from pin p to pin n).A

Behavior

v(t)=p.v(t)n.v(t)i(t)=p.i(t)n.i(t)+p.i(t)=0i(t)=ifelse(v(t)<Ve,GaVe+Gb(Ve+v(t)),ifelse(v(t)>Ve,GaVe+Gb(Ve+v(t)),Gav(t)))

Source

dyad
# A nonlinear resistor with a piecewise-linear current-voltage characteristic, commonly known as Chua's Resistor.
#
# This component models a voltage-controlled nonlinear resistor where the current `i` is a function of the voltage `v` across its terminals.
# The current-voltage relationship is piecewise-linear, defined by three distinct regions:
# For voltages within the range `[-Ve, Ve]`, the resistor has a conductance `Ga`.
# For voltages outside this range (`v > Ve` or `v < -Ve`), the resistor exhibits a different conductance `Gb` for the portion of the voltage exceeding `+/-Ve`.
# The mathematical relationship is:
#
# ```math
# i = \begin{cases}
# Gb(v + Ve) - Ga Ve & \text{if } v < -Ve \\
# Ga v & \text{if } -Ve \le v \le Ve \\
# Gb(v - Ve) + Ga Ve & \text{if } v > Ve
# \end{cases}
# ```
#
# This behavior is characteristic of the nonlinear resistor element in Chua's circuit.
component NonlinearResistor
  extends OnePort
  # Conductance in the central region (`-Ve <= v <= Ve`).
  parameter Ga::Conductance
  # Conductance in the outer regions (`v < -Ve` or `v > Ve`).
  parameter Gb::Conductance
  # Breakpoint voltage defining the boundaries of the different conductance regions.
  parameter Ve::Voltage
relations
  i = if (v<-Ve) then (Gb*(v+Ve)-Ga*Ve) else if (v>Ve) then (Gb*(v-Ve)+Ga*Ve) else Ga*v
end
Flattened Source
dyad
# A nonlinear resistor with a piecewise-linear current-voltage characteristic, commonly known as Chua's Resistor.
#
# This component models a voltage-controlled nonlinear resistor where the current `i` is a function of the voltage `v` across its terminals.
# The current-voltage relationship is piecewise-linear, defined by three distinct regions:
# For voltages within the range `[-Ve, Ve]`, the resistor has a conductance `Ga`.
# For voltages outside this range (`v > Ve` or `v < -Ve`), the resistor exhibits a different conductance `Gb` for the portion of the voltage exceeding `+/-Ve`.
# The mathematical relationship is:
#
# ```math
# i = \begin{cases}
# Gb(v + Ve) - Ga Ve & \text{if } v < -Ve \\
# Ga v & \text{if } -Ve \le v \le Ve \\
# Gb(v - Ve) + Ga Ve & \text{if } v > Ve
# \end{cases}
# ```
#
# This behavior is characteristic of the nonlinear resistor element in Chua's circuit.
component NonlinearResistor
  # Positive electrical pin.
  p = Pin() [{
    "Dyad": {
      "placement": {"icon": {"iconName": "pos", "x1": -50, "y1": 450, "x2": 50, "y2": 550}}
    }
  }]
  # Negative electrical pin.
  n = Pin() [{
    "Dyad": {
      "placement": {"icon": {"iconName": "neg", "x1": 950, "y1": 450, "x2": 1050, "y2": 550}}
    }
  }]
  # Voltage across the component (between pin p and pin n).
  variable v::Voltage
  # Current flowing through the component (from pin p to pin n).
  variable i::Current
  # Conductance in the central region (`-Ve <= v <= Ve`).
  parameter Ga::Conductance
  # Conductance in the outer regions (`v < -Ve` or `v > Ve`).
  parameter Gb::Conductance
  # Breakpoint voltage defining the boundaries of the different conductance regions.
  parameter Ve::Voltage
relations
  v = p.v-n.v
  i = p.i
  p.i+n.i = 0
  i = if (v<-Ve) then (Gb*(v+Ve)-Ga*Ve) else if (v>Ve) then (Gb*(v-Ve)+Ga*Ve) else Ga*v
metadata {}
end


Test Cases

This is setup code, that must be run before each test case.

julia
using ElectricalComponents
using ModelingToolkit, OrdinaryDiffEqDefault
using Plots
using CSV, DataFrames

snapshotsdir = joinpath(dirname(dirname(pathof(ElectricalComponents))), "test", "snapshots")
"/home/actions-runner-10/.julia/packages/ElectricalComponents/bmmPM/test/snapshots"
  • Examples

  • Experiments

  • Analyses