Skip to content

Commit b6d518a

Browse files
authored
Add the cross-saturation compensation to the signal-injection method (#191)
1 parent 5625932 commit b6d518a

22 files changed

+255
-176
lines changed

docs/source/conf.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
author = "Aalto Electric Drives"
2727

2828
# The full version, including alpha/beta/rc tags
29-
release = "0.7.0"
29+
release = "0.7.1"
3030

3131
# -- General configuration -------------------------------------------------------------
3232

docs/source/model/drive/induction_machine.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ width: 100%
110110
align: center
111111
alt: Inverse-Gamma model of an induction machine
112112
---
113-
*Figure 3:* Inverse-Γ model of an induction machine.
113+
*Figure 3:* Inverse-Γ model of an induction machine. If main-flux saturation is included, the parameters become nonlinear functions of the stator flux magnitude, $\Lsgm(\abspsis)$, $\RR(\abspsis)$, and $\LM(\abspsis)$.
114114
```
115115

116116
```{figure} ../figs/im_inv_gamma.svg
@@ -120,7 +120,7 @@ width: 100%
120120
align: center
121121
alt: Inverse-Gamma model of an induction machine
122122
---
123-
*Figure 3:* Inverse-Γ model of an induction machine.
123+
*Figure 3:* Inverse-Γ model of an induction machine. If main-flux saturation is included, the parameters become nonlinear functions of the stator flux magnitude, $\Lsgm(\abspsis)$, $\RR(\abspsis)$, and $\LM(\abspsis)$.
124124
```
125125

126126
If the magnetic saturation is omitted, the inverse-Γ model is mathematically identical to the Γ model {cite}`Sle1989`. The parameters can be transformed as

docs/source/model/drive/synchronous_machine.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ label: sm_flux_linkage_map
136136
137137
```
138138

139-
In practice, these maps are typically realized as lookup tables or explicit mathematical functions, see, e.g., {cite}`Hin2017,Lel2024`.
139+
In practice, these maps can be realized as lookup tables, explicit mathematical functions {cite}`Hin2017,Woo2023,Lel2024`, or neural networks {cite}`Lee2025`.
140140

141141
Methods for manipulating and plotting the magnetic models are provided in the classes {class}`motulator.drive.utils.MagneticModel`, {func}`motulator.drive.utils.plot_map`, and {func}`motulator.drive.utils.plot_flux_vs_current`. If the magnetic model is lossless and physically feasible, it can be numerically inverted between the two representations, see the {func}`motulator.drive.utils.MagneticModel.invert` method.
142142

docs/source/model/figs/im_gamma.svg

Lines changed: 9 additions & 1 deletion
Loading

docs/source/model/figs/im_inv_gamma.svg

Lines changed: 20 additions & 23 deletions
Loading

docs/source/model/figs/sm.svg

Lines changed: 10 additions & 2 deletions
Loading

docs/source/refs.bib

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ @ARTICLE{Awa2018
1414
doi = {10.1109/TIA.2018.2862410},
1515
}
1616

17-
1817
@ARTICLE{Awa2019a,
1918
author = {Awan and Saarakkala and Hinkkanen},
2019
title = {Flux-linkage-based current control of saturated synchronous motors},
@@ -232,6 +231,14 @@ @INPROCEEDINGS{Kuk2021
232231
doi = {10.1109/ISGTEurope52324.2021.9640206},
233232
}
234233

234+
@ARTICLE{Lee2025,
235+
author = {Lee and Lee and Lee and Jin and Yoon},
236+
title = {Estimation of flux saturation model for {SynRMs} using artificial neural network},
237+
journal = {IEEE Trans. Ind. Appl.},
238+
year = {2025},
239+
doi = {10.1109/TIA.2025.3532412},
240+
}
241+
235242
@INPROCEEDINGS{Lel2024,
236243
author = {Lelli and Hinkkanen and {Giulii Capponi}},
237244
booktitle = {Proc. ICEM},
@@ -367,3 +374,11 @@ @ARTICLE{Ver1988
367374
year = {1988},
368375
doi = {10.1109/41.3067},
369376
}
377+
378+
@ARTICLE{Woo2023,
379+
author = {Woo and Park and Choi and Lee and Yoon},
380+
title = {Flux saturation model including cross saturation for synchronous reluctance machines and its identification method at standstill},
381+
journal = {IEEE Trans. Ind. Electron.},
382+
year = {2023},
383+
doi = {10.1109/TIE.2022.3174233},
384+
}

examples/drive/flux_vector/plot_5kw_pmsyrm_thor_sat_fvc.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,10 @@
7676
# Configure the control system.
7777

7878
# Create the flux and current maps for the control system
79-
curr_map = fem_flux_map.invert()
80-
81-
# In this example, the flux maps are not given to the control system. Therefore, the
82-
# flux linkages are iteratively computed from the currents in this example. You could
83-
# add the flux maps to the control system by adding `psi_s_dq_fcn=fem_flux_map` below.
84-
est_par = control.SaturatedSynchronousMachinePars(n_p=2, R_s=0.2, i_s_dq_fcn=curr_map)
85-
79+
fem_curr_map = fem_flux_map.invert()
80+
est_par = control.SaturatedSynchronousMachinePars(
81+
n_p=2, R_s=0.2, i_s_dq_fcn=fem_curr_map, psi_s_dq_fcn=fem_flux_map
82+
)
8683
# Since the inertia `J` is provided, the mechanical-model-based speed observer is used
8784
cfg = control.FluxVectorControllerCfg(i_s_max=2 * base.i, J=2 * 0.0042, alpha_i=0)
8885
vector_ctrl = control.FluxVectorController(est_par, cfg, sensorless=True)

examples/drive/flux_vector/plot_6kw_pmsyrm_sat_fvc.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,6 @@
120120
n_p=2, R_s=0.63, i_s_dq_fcn=est_curr_map, psi_s_dq_fcn=est_flux_map
121121
)
122122
cfg = control.FluxVectorControllerCfg(i_s_max=2 * base.i, J=0.05, alpha_i=0)
123-
# cfg = control.FluxVectorControllerCfg(i_s_max=2 * base.i)
124123
vector_ctrl = control.FluxVectorController(est_par, cfg, sensorless=True)
125124
speed_ctrl = control.SpeedController(J=0.05, alpha_s=2 * np.pi * 4)
126125
ctrl = control.VectorControlSystem(vector_ctrl, speed_ctrl)

examples/drive/signal_inj/README.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
Signal Injection
22
----------------
33

4-
These examples demonstrate a square-wave signal injection for low-speed operation based on [#Kim2012]_. A phase-locked loop is used to track the rotor position. For a wider speed range, signal injection could be combined to a model-based observer. The effects of magnetic saturation are not compensated for in this version.
4+
These examples demonstrate a square-wave signal injection for low-speed operation based on [#Kim2012]_. Cross-saturation errors are compensated for using flux maps [#You2018]_. A phase-locked loop is used to track the rotor position. For a wider speed range, signal injection could be combined to a model-based observer.
55

66
.. rubric:: References
77

88
.. [#Kim2012] Kim, Ha, Sul, "PWM switching frequency signal injection sensorless method in IPMSM," IEEE Trans. Ind. Appl., 2012, https://doi.org/10.1109/TIA.2012.2210175
9+
10+
.. [#You2018] Yousefi-Talouki, Pescetto, Pellegrino, Boldea, "Combined active flux and high-frequency injection methods for sensorless direct-flux vector control of synchronous reluctance machines," IEEE Trans. Power Electron., 2018, https://doi.org/10.1109/TPEL.2017.2697209

0 commit comments

Comments
 (0)