From 9db9a3bb95f1a1f0d352a311be844543c55c5fbb Mon Sep 17 00:00:00 2001 From: AHaumer Date: Mon, 19 May 2025 21:06:52 +0200 Subject: [PATCH 1/4] Redesign ChuaCircuit, add ChuaDiode --- .../Electrical/Analog/Examples/ChuaCircuit.mo | 140 ++++++++++++------ .../Electrical/Analog/Examples/ChuaDiode.mo | 131 ++++++++++++++++ .../Electrical/Analog/Examples/package.order | 1 + .../ChuaCircuit/comparisonSignals.txt | 6 +- .../Examples/ChuaDiode/comparisonSignals.txt | 3 + 5 files changed, 229 insertions(+), 52 deletions(-) create mode 100644 Modelica/Electrical/Analog/Examples/ChuaDiode.mo create mode 100644 Modelica/Resources/Reference/Modelica/Electrical/Analog/Examples/ChuaDiode/comparisonSignals.txt diff --git a/Modelica/Electrical/Analog/Examples/ChuaCircuit.mo b/Modelica/Electrical/Analog/Examples/ChuaCircuit.mo index c2b56664bd..c01fd190d0 100644 --- a/Modelica/Electrical/Analog/Examples/ChuaCircuit.mo +++ b/Modelica/Electrical/Analog/Examples/ChuaCircuit.mo @@ -1,58 +1,94 @@ within Modelica.Electrical.Analog.Examples; -model ChuaCircuit "Chua's circuit, ns, V, A" +model ChuaCircuit "Chua's circuit" extends Modelica.Icons.Example; - - Modelica.Electrical.Analog.Basic.Inductor L(L=18, i(start=0, fixed=true)) annotation (Placement(transformation( - origin={-75,38}, - extent={{-25,-25},{25,25}}, + parameter Modelica.Units.SI.Resistance R=1900 "Try R={1850,1800,1750}"; + SI.Voltage v1(start=+2.764331, fixed=true)=c1.v "Result: c1.v"; + SI.Voltage v2(start=+0.744123, fixed=true)=c2.v "Result: c2.v"; + Modelica.Electrical.Analog.Basic.Inductor inductor(i(fixed=true, start=0), L=18e-3) + annotation (Placement(transformation( + origin={-70,20}, + extent={{-20,-20},{20,20}}, rotation=270))); - Modelica.Electrical.Analog.Basic.Resistor Ro(R=12.5e-3) annotation (Placement(transformation( - origin={-75,-17}, - extent={{-25,-25},{25,25}}, + Modelica.Electrical.Analog.Basic.Resistor rL(R=14) annotation (Placement(transformation( + origin={-70,-40}, + extent={{-20,-20},{20,20}}, rotation=270))); - Modelica.Electrical.Analog.Basic.Conductor G(G=0.565) annotation (Placement(transformation(extent={{-25,38}, - {25,88}}))); - Modelica.Electrical.Analog.Basic.Capacitor C1(C=10, v(start=4, fixed=true)) annotation (Placement(transformation( - origin={25,3}, - extent={{-25,-25},{25,25}}, + Modelica.Electrical.Analog.Basic.Resistor resistor(R=R) annotation ( + Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={0,40}))); + Modelica.Electrical.Analog.Basic.Capacitor c1(C=10e-9) + annotation (Placement(transformation( + origin={20,-10}, + extent={{-20,-20},{20,20}}, rotation=270))); - Modelica.Electrical.Analog.Basic.Capacitor C2(C=100, v(start=0, fixed=true)) annotation (Placement(transformation( - origin={-25,3}, - extent={{-25,-25},{25,25}}, + Modelica.Electrical.Analog.Basic.Capacitor c2(C=100e-9) + annotation (Placement(transformation( + origin={-20,-10}, + extent={{-20,-20},{20,20}}, rotation=270))); - Modelica.Electrical.Analog.Examples.Utilities.NonlinearResistor Nr( - Ga(min=-1) = -0.757576, - Gb(min=-1) = -0.409091, - Ve=1) annotation (Placement(transformation( - origin={75,3}, - extent={{-25,-25},{25,25}}, + Modelica.Electrical.Analog.Examples.Utilities.NonlinearResistor chuasDiode( + Ga(min=-1) = -757.7576e-6, + Gb(min=-1) = -409.0909e-6, + Ve=1) annotation (Placement(transformation( + origin={70,-10}, + extent={{-20,-20},{20,20}}, rotation=270))); - Modelica.Electrical.Analog.Basic.Ground Gnd annotation (Placement(transformation(extent={{-25,-112},{25, - -62}}))); + Modelica.Electrical.Analog.Basic.Ground Gnd annotation (Placement(transformation(extent={{-20, + -100},{20,-60}}))); equation - connect(L.n, Ro.p) annotation (Line(points={{-75,13},{-75,8}})); - connect(C2.p, G.p) annotation (Line( - points={{-25,28},{-25,45.5},{-25,45.5},{-25,63}}, color={0,0,255})); - connect(L.p, G.p) annotation (Line( - points={{-75,63},{-25,63}}, color={0,0,255})); - connect(G.n, Nr.p) annotation (Line( - points={{25,63},{75,63},{75,28}}, color={0,0,255})); - connect(C1.p, G.n) annotation (Line( - points={{25,28},{25,45.5},{25,45.5},{25,63}}, color={0,0,255})); - connect(Ro.n, Gnd.p) annotation (Line( - points={{-75,-42},{-75,-62},{0,-62}}, color={0,0,255})); - connect(C2.n, Gnd.p) annotation (Line( - points={{-25,-22},{-24,-22},{-24,-62},{0,-62}}, color={0,0,255})); - connect(Gnd.p, C1.n) annotation (Line( - points={{0,-62},{25,-62},{25,-22}}, color={0,0,255})); - connect(Gnd.p, Nr.n) annotation (Line( - points={{0,-62},{75,-62},{75,-22}}, color={0,0,255})); + connect(inductor.n, rL.p) annotation (Line(points={{-70,0},{-70,-20}})); + connect(c2.p, resistor.p) + annotation (Line(points={{-20,10},{-20,40}}, color={0,0,255})); + connect(inductor.p, resistor.p) + annotation (Line(points={{-70,40},{-20,40}}, color={0,0,255})); + connect(resistor.n, chuasDiode.p) + annotation (Line(points={{20,40},{70,40},{70,10}}, color={0,0,255})); + connect(c1.p, resistor.n) + annotation (Line(points={{20,10},{20,40}}, color={0,0,255})); + connect(rL.n, Gnd.p) annotation (Line( + points={{-70,-60},{0,-60}}, color={0,0,255})); + connect(c2.n, Gnd.p) annotation (Line( + points={{-20,-30},{-20,-60},{0,-60}}, color={0,0,255})); + connect(Gnd.p,c1. n) annotation (Line( + points={{0,-60},{20,-60},{20,-30}}, color={0,0,255})); + connect(Gnd.p, chuasDiode.n) + annotation (Line(points={{0,-60},{70,-60},{70,-30}}, color={0,0,255})); annotation ( + experiment( + StopTime=0.1, + Interval=1e-06, + Tolerance=1e-06), + Diagram(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{ + 100,100}}), graphics={Text( + extent={{-100,90},{100,60}}, + textColor={0,0,255}, + textString="Path to chaos: R = +{1850, 1800, 1750} Ohm +Plot v2 vs. v1")}), Documentation(info=" -

Chua's circuit is the most simple nonlinear circuit which shows chaotic behaviour. The circuit consists of linear basic elements (capacitors, resistor, conductor, inductor), and one nonlinear element, which is called Chua's diode. The chaotic behaviour is simulated.

-

The simulation end time should be set to 5e4. To get the chaotic behaviour please plot C1.v. Choose C2.v as the independent variable .

+

This is a remake of the original implementation using realistic parameters for the components.

+

Chua's circuit is the most simple nonlinear circuit which shows chaotic behaviour. The circuit consists of linear basic elements (capacitors, resistor, conductor, inductor), and one nonlinear element, which is called Chua's diode.

+

It is possible to implement the nonlinear Chua's diode with two circuits called NIC +(negative impedance converter) using each an operational amplifier.

+

+The default paremeterization shows periodic behaviour at least after initial transients have vanished.
+In the periodic region two attractors exist: Try initialization for v1 and v2 with exact negative values.
+To investigate the path to chaos set (one after the other) R = {1900, 1850, 1800, 1750} Ohm and plot v2 vs. v1 as independent variable.
+

Reference:

-

Kennedy, M.P.: Three Steps to Chaos - Part I: Evolution. IEEE Transactions on CAS I 40 (1993)10, 640-656

+ ", revisions="
@@ -60,7 +96,7 @@ equation Main Authors:
-Christoph Clauß + Christoph Clauß <christoph@clauss-it.com>
André Schneider <Andre.Schneider@eas.iis.fraunhofer.de>
@@ -69,9 +105,15 @@ Christoph Clauß Zeunerstraße 38
D-01069 Dresden
+
+Revision 2025: +
+
+ Prof. Anton Haumer + <anton.haumer@oth-regensburg.de>
+ Estbavarian Technical University of Applied Sciences Regensburg
+ D-93053 Regensburg, Germany
+
-"), - experiment(StopTime=5e4, Interval=1), - Diagram(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{ - 100,100}}))); +")); end ChuaCircuit; diff --git a/Modelica/Electrical/Analog/Examples/ChuaDiode.mo b/Modelica/Electrical/Analog/Examples/ChuaDiode.mo new file mode 100644 index 0000000000..745db947db --- /dev/null +++ b/Modelica/Electrical/Analog/Examples/ChuaDiode.mo @@ -0,0 +1,131 @@ +within Modelica.Electrical.Analog.Examples; +model ChuaDiode "Demonstrate Chuas Diode" + extends Modelica.Icons.Example; + parameter SI.Voltage Vs=7.66667 "Supply voltage"; + //NIC1+2 + parameter SI.Resistance R1=220 "Pos. and neg. feedback resistance of NIC1"; + parameter SI.Resistance Rg1=2200 "Resistance to ground of NIC1"; + parameter SI.Resistance R2=22000 "Pos. and neg. feedback resistance of NIC2"; + parameter SI.Resistance Rg2=3300 "Resistance to ground of NIC2"; + //Results for NIC1+2 + parameter SI.Voltage VLim1=Vs*Rg1/(Rg1 + R1) "NIC1: Left and right corner voltage"; + parameter SI.Conductance gPos1=1/R1 "NIC1: Positive differential conductance"; + parameter SI.Conductance gNeg1=-1/Rg1 "NIC1: Negative (inner) conductance"; + parameter SI.Voltage VLim2=Vs*Rg2/(Rg2 + R2) "NIC2: Left and right corner voltage"; + parameter SI.Conductance gPos2=1/R2 "NIC2: Positive differential conductance"; + parameter SI.Conductance gNeg2=-1/Rg2 "NIC2: Negative (inner) conductance"; + //Results for Chuas Diode + parameter SI.Conductance Ga=gNeg1 + gNeg2 "CHUA: Inner slope"; + parameter SI.Voltage Ve=min(VLim1, VLim2) "CHUA: Inner limit"; + parameter SI.Conductance Gb=if VLim1Chua's diode can be implemented two OpAmp-circuits called NIC +(negative impedance converter) using each an operational amplifier. The relations between the parameters of the OpAmp-circuit and the +ideal nonlinear resistor can be seen from the parameter calculations in the text layer. +

+

Plot currentSensorA.i and currentSensorB.i versus source.v to inspect the characteristic.

+

Note:
+The implementation using 2 NICs shows an outer positive slope which is not present in the ideal nonlinear resistor.

+")); +end ChuaDiode; diff --git a/Modelica/Electrical/Analog/Examples/package.order b/Modelica/Electrical/Analog/Examples/package.order index 4a465f0b24..d4ba98dfb4 100644 --- a/Modelica/Electrical/Analog/Examples/package.order +++ b/Modelica/Electrical/Analog/Examples/package.order @@ -4,6 +4,7 @@ CauerLowPassSC CharacteristicIdealDiodes CharacteristicThyristors ChuaCircuit +ChuaDiode DifferenceAmplifier HeatingMOSInverter HeatingNPN_NORGate diff --git a/Modelica/Resources/Reference/Modelica/Electrical/Analog/Examples/ChuaCircuit/comparisonSignals.txt b/Modelica/Resources/Reference/Modelica/Electrical/Analog/Examples/ChuaCircuit/comparisonSignals.txt index 965dd1cacd..5b7dd8e740 100644 --- a/Modelica/Resources/Reference/Modelica/Electrical/Analog/Examples/ChuaCircuit/comparisonSignals.txt +++ b/Modelica/Resources/Reference/Modelica/Electrical/Analog/Examples/ChuaCircuit/comparisonSignals.txt @@ -1,4 +1,4 @@ time -C1.v -C2.v -L.i +v1 +v2 +inductor.i diff --git a/Modelica/Resources/Reference/Modelica/Electrical/Analog/Examples/ChuaDiode/comparisonSignals.txt b/Modelica/Resources/Reference/Modelica/Electrical/Analog/Examples/ChuaDiode/comparisonSignals.txt new file mode 100644 index 0000000000..5ebe1043cd --- /dev/null +++ b/Modelica/Resources/Reference/Modelica/Electrical/Analog/Examples/ChuaDiode/comparisonSignals.txt @@ -0,0 +1,3 @@ +time +currentSensorA.i +currentSensorB.i From 14943cc28dc6ebc087ca6d04dec8a0d940fe5ab7 Mon Sep 17 00:00:00 2001 From: AHaumer Date: Fri, 23 May 2025 11:19:37 +0200 Subject: [PATCH 2/4] changed layout of Examples/ChuaCircuit.mo --- .../Electrical/Analog/Examples/ChuaCircuit.mo | 47 ++++++++++--------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/Modelica/Electrical/Analog/Examples/ChuaCircuit.mo b/Modelica/Electrical/Analog/Examples/ChuaCircuit.mo index c01fd190d0..6a2e2e49c7 100644 --- a/Modelica/Electrical/Analog/Examples/ChuaCircuit.mo +++ b/Modelica/Electrical/Analog/Examples/ChuaCircuit.mo @@ -6,55 +6,58 @@ model ChuaCircuit "Chua's circuit" SI.Voltage v2(start=+0.744123, fixed=true)=c2.v "Result: c2.v"; Modelica.Electrical.Analog.Basic.Inductor inductor(i(fixed=true, start=0), L=18e-3) annotation (Placement(transformation( - origin={-70,20}, - extent={{-20,-20},{20,20}}, + origin={-50,20}, + extent={{-10,-10},{10,10}}, rotation=270))); Modelica.Electrical.Analog.Basic.Resistor rL(R=14) annotation (Placement(transformation( - origin={-70,-40}, - extent={{-20,-20},{20,20}}, + origin={-50,-20}, + extent={{-10,-10},{10,10}}, rotation=270))); Modelica.Electrical.Analog.Basic.Resistor resistor(R=R) annotation ( Placement(transformation( - extent={{-20,-20},{20,20}}, + extent={{-10,-10},{10,10}}, rotation=0, origin={0,40}))); Modelica.Electrical.Analog.Basic.Capacitor c1(C=10e-9) annotation (Placement(transformation( - origin={20,-10}, - extent={{-20,-20},{20,20}}, + origin={20,0}, + extent={{-10,-10},{10,10}}, rotation=270))); Modelica.Electrical.Analog.Basic.Capacitor c2(C=100e-9) annotation (Placement(transformation( - origin={-20,-10}, - extent={{-20,-20},{20,20}}, + origin={-20,0}, + extent={{-10,-10},{10,10}}, rotation=270))); Modelica.Electrical.Analog.Examples.Utilities.NonlinearResistor chuasDiode( Ga(min=-1) = -757.7576e-6, Gb(min=-1) = -409.0909e-6, Ve=1) annotation (Placement(transformation( - origin={70,-10}, - extent={{-20,-20},{20,20}}, + origin={50,0}, + extent={{-10,-10},{10,10}}, rotation=270))); - Modelica.Electrical.Analog.Basic.Ground Gnd annotation (Placement(transformation(extent={{-20, - -100},{20,-60}}))); + Modelica.Electrical.Analog.Basic.Ground Gnd annotation (Placement(transformation(extent={{-10,-60}, + {10,-40}}))); equation - connect(inductor.n, rL.p) annotation (Line(points={{-70,0},{-70,-20}})); + connect(inductor.n, rL.p) annotation (Line(points={{-50,10},{-50,-10}})); connect(c2.p, resistor.p) - annotation (Line(points={{-20,10},{-20,40}}, color={0,0,255})); + annotation (Line(points={{-20,10},{-20,40},{-10,40}}, + color={0,0,255})); connect(inductor.p, resistor.p) - annotation (Line(points={{-70,40},{-20,40}}, color={0,0,255})); + annotation (Line(points={{-50,30},{-50,40},{-10,40}}, + color={0,0,255})); connect(resistor.n, chuasDiode.p) - annotation (Line(points={{20,40},{70,40},{70,10}}, color={0,0,255})); + annotation (Line(points={{10,40},{50,40},{50,10}}, color={0,0,255})); connect(c1.p, resistor.n) - annotation (Line(points={{20,10},{20,40}}, color={0,0,255})); + annotation (Line(points={{20,10},{20,40},{10,40}}, + color={0,0,255})); connect(rL.n, Gnd.p) annotation (Line( - points={{-70,-60},{0,-60}}, color={0,0,255})); + points={{-50,-30},{-50,-40},{0,-40}}, color={0,0,255})); connect(c2.n, Gnd.p) annotation (Line( - points={{-20,-30},{-20,-60},{0,-60}}, color={0,0,255})); + points={{-20,-10},{-20,-40},{0,-40}}, color={0,0,255})); connect(Gnd.p,c1. n) annotation (Line( - points={{0,-60},{20,-60},{20,-30}}, color={0,0,255})); + points={{0,-40},{20,-40},{20,-10}}, color={0,0,255})); connect(Gnd.p, chuasDiode.n) - annotation (Line(points={{0,-60},{70,-60},{70,-30}}, color={0,0,255})); + annotation (Line(points={{0,-40},{50,-40},{50,-10}}, color={0,0,255})); annotation ( experiment( StopTime=0.1, From a922fc3768dd2d0e73338503b2f69e3616be8acf Mon Sep 17 00:00:00 2001 From: AHaumer Date: Thu, 29 May 2025 18:32:05 +0200 Subject: [PATCH 3/4] Adapted to #4653 --- Modelica/Electrical/Analog/Examples/ChuaDiode.mo | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/Modelica/Electrical/Analog/Examples/ChuaDiode.mo b/Modelica/Electrical/Analog/Examples/ChuaDiode.mo index 745db947db..2289ba3629 100644 --- a/Modelica/Electrical/Analog/Examples/ChuaDiode.mo +++ b/Modelica/Electrical/Analog/Examples/ChuaDiode.mo @@ -26,16 +26,14 @@ model ChuaDiode "Demonstrate Chuas Diode" extent={{-10,-10},{10,10}}, rotation=0, origin={-70,40}))); - Modelica.Electrical.Analog.Ideal.ImprovedOpAmpLimited - opAmp1(Vps=+Vs, Vns=-Vs) annotation (Placement( + Modelica.Electrical.Analog.Ideal.OpAmpLimited opAmp1(Vps=+Vs, Vns=-Vs) annotation (Placement( transformation( extent={{10,10},{-10,-10}}, rotation=0, origin={-70,10}))); Modelica.Electrical.Analog.Basic.Resistor rNeg1(R=R1) annotation (Placement( transformation(extent={{-80,-10},{-60,-30}}, rotation=0))); - Modelica.Electrical.Analog.Basic.Resistor rg1(R=Rg1, i(start=0)) - annotation (Placement( + Modelica.Electrical.Analog.Basic.Resistor rg1(R=Rg1, i(start=0)) annotation (Placement( transformation( extent={{-10,-10},{10,10}}, rotation=270, @@ -45,16 +43,14 @@ model ChuaDiode "Demonstrate Chuas Diode" extent={{10,-10},{-10,10}}, rotation=0, origin={-30,40}))); - Modelica.Electrical.Analog.Ideal.ImprovedOpAmpLimited - opAmp2(Vps=+Vs, Vns=-Vs) annotation (Placement( + Modelica.Electrical.Analog.Ideal.OpAmpLimited opAmp2(Vps=+Vs, Vns=-Vs) annotation (Placement( transformation( extent={{-10,10},{10,-10}}, rotation=0, origin={-30,10}))); Modelica.Electrical.Analog.Basic.Resistor rNeg2(R=R2) annotation (Placement( transformation(extent={{-20,-10},{-40,-30}}, rotation=0))); - Modelica.Electrical.Analog.Basic.Resistor rg2(R=Rg2, i(start=0)) - annotation (Placement( + Modelica.Electrical.Analog.Basic.Resistor rg2(R=Rg2, i(start=0)) annotation (Placement( transformation( extent={{-10,10},{10,-10}}, rotation=270, From 7a5df54780118ee2c3556674ea40187cac0cf53e Mon Sep 17 00:00:00 2001 From: Christian Kral Date: Sat, 31 May 2025 11:04:22 +0200 Subject: [PATCH 4/4] Remove redundant text in Diagram layer --- Modelica/Electrical/Analog/Examples/ChuaCircuit.mo | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/Modelica/Electrical/Analog/Examples/ChuaCircuit.mo b/Modelica/Electrical/Analog/Examples/ChuaCircuit.mo index 6a2e2e49c7..50d5a2f775 100644 --- a/Modelica/Electrical/Analog/Examples/ChuaCircuit.mo +++ b/Modelica/Electrical/Analog/Examples/ChuaCircuit.mo @@ -64,12 +64,7 @@ equation Interval=1e-06, Tolerance=1e-06), Diagram(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{ - 100,100}}), graphics={Text( - extent={{-100,90},{100,60}}, - textColor={0,0,255}, - textString="Path to chaos: R = -{1850, 1800, 1750} Ohm -Plot v2 vs. v1")}), + 100,100}})), Documentation(info="

This is a remake of the original implementation using realistic parameters for the components.

Chua's circuit is the most simple nonlinear circuit which shows chaotic behaviour. The circuit consists of linear basic elements (capacitors, resistor, conductor, inductor), and one nonlinear element, which is called Chua's diode.