Profile
Back to NewsBack
GitHub Trending 3 min
Reader Mode
Aalto-Electric-Drives/motulator: Motor drive and grid converter simulator in Python

Aalto-Electric-Drives/motulator: Motor drive and grid converter simulator in Python

4 hours ago

motulator

Motor drive and grid converter simulator in Python

PyPI version</a> Python versions</a> Build Status</a> License</a> DOI</a>

Documentation · Drive examples · Grid examples · Installation

Simulated sensorless flux-vector control of a 2.2-kW IPMSM drive: speed step, load-torque step, and phase currents

motulator provides simulation models and control algorithms for electric machine drives and grid converter systems. The system models are simulated in the continuous-time domain, while the control algorithms run in discrete time, as they would in a real converter.

Features

  • Machine models: induction machines, synchronous reluctance machines, and permanent-magnet synchronous machines, including magnetic saturation and two-mass mechanics, fed from a converter or directly from the grid
  • Grid converter models: L and LCL filters, inductive-resistive grids, DC-bus dynamics, and diode bridges
  • Drive control: V/Hz control, current-vector and flux-vector control, sensorless observers, and signal injection
  • Grid converter control: grid-following and grid-forming control, including disturbance-observer-based and power-synchronization methods
  • Ready-to-run examples as Python scripts and Jupyter notebooks, including neural-network-based flux maps learned from measured data

Installation

Install the package from PyPI in a virtual environment. On Linux and macOS:

python3 -m venv .venv
source .venv/bin/activate
pip install motulator

On Windows, the environment is created and activated with py -m venv .venv and .venv\Scripts\activate.

For development, clone the repository and install the package with pip install -e ".[dev]", as described in the installation guide.

Quick start

A complete simulation takes about 20 lines. This example runs sensorless flux-vector control of a 2.2-kW interior permanent-magnet synchronous machine drive:

import motulator.drive.control.sm as control
from motulator.drive import model, utils

Continuous-time system model: 2.2-kW IPMSM, mechanics, and converter

par = model.SynchronousMachinePars(n_p=3, R_s=3.6, L_d=0.036, L_q=0.051, psi_f=0.545) mdl = model.Drive( model.SynchronousMachine(par), model.MechanicalSystem(J=0.015), model.VoltageSourceConverter(u_dc=540), )

Discrete-time control system: sensorless flux-vector control

cfg = control.FluxVectorControllerCfg(i_s_max=6.5, sensorless=True) ctrl = control.VectorControlSystem( control.FluxVectorController(par, cfg), control.SpeedController(J=0.015, alpha_s=25) )

Speed reference and load torque

ctrl.set_speed_ref(lambda t: (t > 0.1) * 50) # rad/s mdl.mechanics.set_external_load_torque(lambda t: (t > 0.7) * 10) # Nm

res = model.Simulation(mdl, ctrl).simulate(t_stop=1.2) utils.plot(res)

To go further, start from the drive examples and grid examples. New system models and controllers can be developed using the existing ones as templates.

From simulation to the laboratory

Laboratory test bench: a permanent-magnet synchronous machine coupled to a load machine through a torque sensor, with the converter cabinet in the background

Almost all control methods in the examples have also been implemented and tested on laboratory test benches at Aalto University, such as the one shown here. The simulation models aim to capture the dynamics that matter for control design.


Related packages

The following packages extend motulator, each maintained in its own repository:

  • motulator-export: export of drive and grid converter systems to PLECS and Simulink, with the control algorithms ported to C
  • motulator-gradnet: training of gradient-network magnetic models of synchronous machines from measured or finite-element data
  • motulator-impedance: mechanical impedance of machine drives and output admittance of grid converters, measured by frequency sweeps
  • motulator-multiphase: multi-three-phase machine drives based on the decoupled multi-stator transformation
See the related packages page for the tested releases and for listing a package.

Contributors

Lauri Tiitinen
Lauri Tiitinen

💻 🤔 💡 🧑‍🏫
HannuHar
HannuHar

💻 🐛
Marko Hinkkanen
Marko Hinkkanen

💻 🤔 💡 🧑‍🏫
silundbe
silundbe

💻 💡
JoonaKukkonen
JoonaKukkonen

💻 🚇
jarno-k
jarno-k

🤔 👀 🧑‍🏫
angelicaiaderosa
angelicaiaderosa

💻 💡
Luca Peretti
Luca Peretti

🤔 📣
GianmarioPellegrinoPolito
GianmarioPellegrinoPolito

🔣
Simone Ferrari
Simone Ferrari

🔣
Jialed0303
Jialed0303

🤔
murgui
murgui

🐛
Nithin Valiyaveettil Sadanandan
Nithin Valiyaveettil Sadanandan

🐛
saarela
saarela

🐛
Ushnish
Ushnish

🐛
Francesco-Lelli
Francesco-Lelli

💻 💡 🤔
Mikko Sarén
Mikko Sarén

💻 💡 🤔
Juho Määttä
Juho Määttä

💻 💡 🤔
rayanmour
rayanmour

💻 💡 🤔 👀 🧑‍🏫
Cosimo Bassi
Cosimo Bassi

🚇 📖
Junyi Li
Junyi Li

💻 💡 🤔
Tim Foißner
Tim Foißner

🔣 🤔
Claudio Lima
Claudio Lima

💻 🤔

Acknowledgment

This project has been sponsored by ABB Oy and by the Research Council of Finland Centre of Excellence in High-Speed Electromechanical Energy Conversion Systems. The example control methods included in this repository are based on published algorithms (available in textbooks and scientific articles). They do not present any proprietary control software.

Chat with me