Beispiel #1
0
        private static void RunModel()
        {
            var circuit = new CircuitBuilder()
                          .AddVoltageSource(1, 0, new PieceWiseLinearBehavior
            {
                DefinitionPoints = new Dictionary <double, double>
                {
                    [100e-6] = 1
                },
                InitialValue = 0
            }, "V")
                          .AddDiode(1, 0, d => { d.ReverseBreakdownVoltage = 2; }, "D")
                          .BuildCircuit();

            var model = circuit.GetLargeSignalModel();

            model.MaxDcPointIterations = 10000;

            model.EstablishDcBias();
            SimulateAndPrint(model, 1000e-6, 1e-6);
        }
Beispiel #2
0
        public static void SimpleRlc()
        {
            var circuit = new CircuitBuilder()
                          .AddVoltageSource(1, 0, new PulseBehavior
            {
                InitialLevel = 0,
                PulseLevel   = 5,
                Delay        = 5e-3,                  // 5 ms
                PulseWidth   = 25e-3                  // 25 ms
            }, "vc")
                          .AddResistor(1, 2, 50)
                          .AddInductor(2, 3, 0.125)
                          .AddCapacitor(3, 0, 1e-6)
                          .BuildCircuit();

            var model = circuit.GetLargeSignalModel();
            var vc    = (ITwoTerminalLargeSignalDevice)model.FindDevice("vc");

            model.EstablishDcBias();

            Console.WriteLine("Time V(1) V(3)");

            var timestep = 0.2e-3;                  // use 0.2 ms timestep

            while (model.CurrentTimePoint <= 55e-3) // simulate for 55 ms
            {
                var time = model.CurrentTimePoint;
                var v1   = model.NodeVoltages[1];
                var v3   = model.NodeVoltages[3];

                Console.WriteLine($"{time} {v1} {v3} {vc.Current}");

                model.AdvanceInTime(timestep);
            }

//            model.SimulationParameters.IntegrationMethodFactory =
//                new SimpleIntegrationMethodFactory(() => new TrapezoidalIntegrationMethod());
        }