
.. DO NOT EDIT.
.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY.
.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE:
.. "grid_examples/grid_forming/plot_13kva_do_gfm_sag.py"
.. LINE NUMBERS ARE GIVEN BELOW.

.. only:: html

    .. note::
        :class: sphx-glr-download-link-note

        :ref:`Go to the end <sphx_glr_download_grid_examples_grid_forming_plot_13kva_do_gfm_sag.py>`
        to download the full example code.

.. rst-class:: sphx-glr-example-title

.. _sphx_glr_grid_examples_grid_forming_plot_13kva_do_gfm_sag.py:


12.5-kVA, DO-GFM, grid-voltage sag
==================================

This example simulates a 12.5-kVA disturbance-observer-based grid-forming (DO-GFM)
converter during a grid-voltage sag in a weak grid. The grid voltage drops to 0.5 p.u.
while the active-power reference is kept at 1 p.u. The active-power reference is limited
to a realizable level, prioritizing the reactive current [#Maa2026]_. Without this
limitation (i.e., if `i_d_max` is not given), the converter loses synchronism during the
sag.

.. GENERATED FROM PYTHON SOURCE LINES 15-17

.. code-block:: Python

    from motulator.grid import control, model, utils








.. GENERATED FROM PYTHON SOURCE LINES 18-19

Compute base values based on the nominal values.

.. GENERATED FROM PYTHON SOURCE LINES 19-23

.. code-block:: Python


    nom = utils.NominalValues(U=400, I=18, f=50, P=12.5e3)
    base = utils.BaseValues.from_nominal(nom)








.. GENERATED FROM PYTHON SOURCE LINES 24-26

Configure the system model. The grid voltage drops to 0.5 p.u. at t = 0.4 s and
recovers at t = 1 s.

.. GENERATED FROM PYTHON SOURCE LINES 26-34

.. code-block:: Python


    ac_filter = model.LFilter(L_f=0.15 * base.L, R_f=0.05 * base.Z, L_g=0.74 * base.L)
    ac_source = model.ThreePhaseSource(
        w_g=base.w, e_g=lambda t: (1 - (t > 0.4) * 0.5 + (t > 1) * 0.5) * base.u
    )
    converter = model.VoltageSourceConverter(u_dc=650)
    mdl = model.GridConverterSystem(converter, ac_filter, ac_source)








.. GENERATED FROM PYTHON SOURCE LINES 35-36

Configure the control system, including the active-power reference limitation.

.. GENERATED FROM PYTHON SOURCE LINES 36-49

.. code-block:: Python


    cfg = control.ObserverBasedGridFormingControllerCfg(
        i_max=1.3 * base.i,
        L=0.35 * base.L,
        R=0.05 * base.Z,
        R_a=0.2 * base.Z,
        u_nom=base.u,
        w_nom=base.w,
        i_d_max=1.1 * base.i,
    )
    inner_ctrl = control.ObserverBasedGridFormingController(cfg)
    ctrl = control.GridConverterControlSystem(inner_ctrl)








.. GENERATED FROM PYTHON SOURCE LINES 50-51

Set the references for converter output voltage magnitude and active power.

.. GENERATED FROM PYTHON SOURCE LINES 51-55

.. code-block:: Python


    ctrl.set_ac_voltage_ref(base.u)
    ctrl.set_power_ref(lambda t: (t > 0.1) * nom.P)








.. GENERATED FROM PYTHON SOURCE LINES 56-57

Create the simulation object, simulate, and plot the results in per-unit values.

.. GENERATED FROM PYTHON SOURCE LINES 57-63

.. code-block:: Python


    sim = model.Simulation(mdl, ctrl)
    res = sim.simulate(t_stop=1.4)
    utils.plot_control_signals(res, base)
    utils.plot_grid_waveforms(res, base)




.. rst-class:: sphx-glr-horizontal


    *

      .. image-sg:: /grid_examples/grid_forming/images/sphx_glr_plot_13kva_do_gfm_sag_001.png
         :alt: plot 13kva do gfm sag
         :srcset: /grid_examples/grid_forming/images/sphx_glr_plot_13kva_do_gfm_sag_001.png
         :class: sphx-glr-multi-img

    *

      .. image-sg:: /grid_examples/grid_forming/images/sphx_glr_plot_13kva_do_gfm_sag_002.png
         :alt: plot 13kva do gfm sag
         :srcset: /grid_examples/grid_forming/images/sphx_glr_plot_13kva_do_gfm_sag_002.png
         :class: sphx-glr-multi-img





.. GENERATED FROM PYTHON SOURCE LINES 64-69

.. rubric:: References

.. [#Maa2026] Määttä, Hinkkanen, Nurminen, Karaca, Mourouvin, Kukkola, Harnefors,
   "Disturbance-observer-based grid-forming control for unbalanced grids," 2026,
   https://arxiv.org/abs/2608.11857


.. rst-class:: sphx-glr-timing

   **Total running time of the script:** (0 minutes 5.985 seconds)


.. _sphx_glr_download_grid_examples_grid_forming_plot_13kva_do_gfm_sag.py:

.. only:: html

  .. container:: sphx-glr-footer sphx-glr-footer-example

    .. container:: sphx-glr-download sphx-glr-download-jupyter

      :download:`Download Jupyter notebook: plot_13kva_do_gfm_sag.ipynb <plot_13kva_do_gfm_sag.ipynb>`

    .. container:: sphx-glr-download sphx-glr-download-python

      :download:`Download Python source code: plot_13kva_do_gfm_sag.py <plot_13kva_do_gfm_sag.py>`

    .. container:: sphx-glr-download sphx-glr-download-zip

      :download:`Download zipped: plot_13kva_do_gfm_sag.zip <plot_13kva_do_gfm_sag.zip>`


.. only:: html

 .. rst-class:: sphx-glr-signature

    `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_
