From 33b5cd10f7ded3f55ee459372b0de7513075f54d Mon Sep 17 00:00:00 2001 From: haitao-ZCU Date: Thu, 1 Oct 2026 08:55:57 +0200 Subject: [PATCH 1/4] move n_phases and belt_offset to geometry part --- motors/synrm_3f_36s.py | 4 ++-- motors/synrm_5f_40s.py | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/motors/synrm_3f_36s.py b/motors/synrm_3f_36s.py index 812a051..70cedfc 100644 --- a/motors/synrm_3f_36s.py +++ b/motors/synrm_3f_36s.py @@ -48,6 +48,8 @@ def set_winds_params(self): def set_mod_params(self): self.PolePairs = 2 + self.n_phases=3 + self.belt_offset=0 self.mod_params = { "Poles": f"2*{self.PolePairs}", "ModelLength": "85mm", @@ -172,8 +174,6 @@ def _assign_stator_mesh(self, m2d: Maxwell2d, stator_id, id_coils) -> None: class Computation(ComputationBase): def set_oper_params(self): - self.phases = 3 - self.belt_offset = 0 f = 50 # [Hz] RotSpeed = 60 * f / self.geometry.PolePairs # [rpm] w = 2 * np.pi * f diff --git a/motors/synrm_5f_40s.py b/motors/synrm_5f_40s.py index d22601a..1da83f9 100644 --- a/motors/synrm_5f_40s.py +++ b/motors/synrm_5f_40s.py @@ -28,11 +28,13 @@ def set_winds_params(self): super().set_winds_params() self.wind_params["Nc"] = "113" + def set_mod_params(self): + super().set_mod_params() + self.n_phases=5 + self.belt_offset=1 class Computation(ComputationBase): def set_oper_params(self): - self.phases = 5 - self.belt_offset = 1 f = 50 # [Hz] RotSpeed = 60 * f / self.geometry.PolePairs # [rpm] w = 2 * np.pi * f From 35f9a5696dcb0cef8250f9394e31ee46279190e7 Mon Sep 17 00:00:00 2001 From: haitao-ZCU Date: Thu, 1 Oct 2026 09:03:18 +0200 Subject: [PATCH 2/4] update set_initpos() --- machine_design/designs/computation.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/machine_design/designs/computation.py b/machine_design/designs/computation.py index 4e57fbe..9b6fd1b 100644 --- a/machine_design/designs/computation.py +++ b/machine_design/designs/computation.py @@ -44,9 +44,9 @@ def set_variables(self, m2d: Maxwell2d, *args): ... def extract_results(self, solutions): ... def set_initpos(self) -> None: - Q = int(self.geometry.geom_params["SlotNumber"]) - p = self.geometry.PolePairs - self.InitPos = compute_initpos(Q, p, self.phases, belt_offset=self.belt_offset) + g=self.geometry + Q = int(g.geom_params["SlotNumber"]) + self.InitPos = compute_initpos(Q, g.PolePairs, g.n_phases, belt_offset=g.belt_offset) self.oper_params["InitPos"] = f"{self.InitPos}deg" def push_variables(self, m2d: Maxwell2d) -> None: From d334578aa8e5cdfb07854643c22a0735d789c6a4 Mon Sep 17 00:00:00 2001 From: haitao-ZCU Date: Thu, 1 Oct 2026 09:18:48 +0200 Subject: [PATCH 3/4] parameterize n_phases and belt_offset --- machine_design/designs/computation.py | 2 +- motors/synrm_3f_36s.py | 4 ++-- motors/synrm_3f_60s.py | 3 +-- motors/synrm_5f_40s.py | 5 +++-- motors/synrm_5f_60s.py | 3 +-- 5 files changed, 8 insertions(+), 9 deletions(-) diff --git a/machine_design/designs/computation.py b/machine_design/designs/computation.py index 9b6fd1b..969b0f4 100644 --- a/machine_design/designs/computation.py +++ b/machine_design/designs/computation.py @@ -44,7 +44,7 @@ def set_variables(self, m2d: Maxwell2d, *args): ... def extract_results(self, solutions): ... def set_initpos(self) -> None: - g=self.geometry + g = self.geometry Q = int(g.geom_params["SlotNumber"]) self.InitPos = compute_initpos(Q, g.PolePairs, g.n_phases, belt_offset=g.belt_offset) self.oper_params["InitPos"] = f"{self.InitPos}deg" diff --git a/motors/synrm_3f_36s.py b/motors/synrm_3f_36s.py index 70cedfc..7af04f8 100644 --- a/motors/synrm_3f_36s.py +++ b/motors/synrm_3f_36s.py @@ -48,8 +48,8 @@ def set_winds_params(self): def set_mod_params(self): self.PolePairs = 2 - self.n_phases=3 - self.belt_offset=0 + self.n_phases = 3 + self.belt_offset = 0 self.mod_params = { "Poles": f"2*{self.PolePairs}", "ModelLength": "85mm", diff --git a/motors/synrm_3f_60s.py b/motors/synrm_3f_60s.py index 65c0189..dc5a8b0 100644 --- a/motors/synrm_3f_60s.py +++ b/motors/synrm_3f_60s.py @@ -39,8 +39,7 @@ def assign_stator_coils(self, m2d: Maxwell2d) -> None: Q = int(self.geometry.geom_params["SlotNumber"]) p = self.geometry.PolePairs - # belt_offset=0 reproduces the legacy 3-phase(36-slot) base winding. - groups = phase_groups(Q, p, 3, belt_offset=0) + groups = phase_groups(Q, p, self.geometry.n_phases, belt_offset=self.geometry.belt_offset) for group in groups: for coil_name, polarity in group: diff --git a/motors/synrm_5f_40s.py b/motors/synrm_5f_40s.py index 1da83f9..0c5e402 100644 --- a/motors/synrm_5f_40s.py +++ b/motors/synrm_5f_40s.py @@ -30,8 +30,9 @@ def set_winds_params(self): def set_mod_params(self): super().set_mod_params() - self.n_phases=5 - self.belt_offset=1 + self.n_phases = 5 + self.belt_offset = 1 + class Computation(ComputationBase): def set_oper_params(self): diff --git a/motors/synrm_5f_60s.py b/motors/synrm_5f_60s.py index 8e6fe46..46af442 100644 --- a/motors/synrm_5f_60s.py +++ b/motors/synrm_5f_60s.py @@ -45,8 +45,7 @@ def assign_stator_coils(self, m2d: Maxwell2d) -> None: Q = int(self.geometry.geom_params["SlotNumber"]) p = self.geometry.PolePairs - # belt_offset=1 reproduces the 5-phase(40-slot) base winding. - groups = phase_groups(Q, p, 5, belt_offset=1) + groups = phase_groups(Q, p, self.geometry.n_phases, belt_offset=self.geometry.belt_offset) for group in groups: for coil_name, polarity in group: From 763134af8832cd92ec3b9b193b45bf6dd69664b7 Mon Sep 17 00:00:00 2001 From: haitao-ZCU Date: Thu, 1 Oct 2026 09:26:17 +0200 Subject: [PATCH 4/4] move phase_groups to abstract parents class like compute_initpos() --- machine_design/designs/computation.py | 6 ++++++ motors/synrm_3f_60s.py | 6 +----- motors/synrm_5f_60s.py | 6 +----- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/machine_design/designs/computation.py b/machine_design/designs/computation.py index 969b0f4..fb35eea 100644 --- a/machine_design/designs/computation.py +++ b/machine_design/designs/computation.py @@ -3,6 +3,7 @@ from ansys.aedt.core import Maxwell2d from machine_design.generic.compute_initpos import compute_initpos +from machine_design.generic.winding import phase_groups from .geometry import GeometryBase from .reserved_variables import check_no_reserved_variable_names @@ -49,6 +50,11 @@ def set_initpos(self) -> None: self.InitPos = compute_initpos(Q, g.PolePairs, g.n_phases, belt_offset=g.belt_offset) self.oper_params["InitPos"] = f"{self.InitPos}deg" + def compute_phase_groups(self): + g = self.geometry + Q = int(g.geom_params["SlotNumber"]) + return phase_groups(Q, g.PolePairs, g.n_phases, belt_offset=g.belt_offset) + def push_variables(self, m2d: Maxwell2d) -> None: for k, v in self.oper_params.items(): m2d[k] = v diff --git a/motors/synrm_3f_60s.py b/motors/synrm_3f_60s.py index dc5a8b0..3c748a6 100644 --- a/motors/synrm_3f_60s.py +++ b/motors/synrm_3f_60s.py @@ -3,8 +3,6 @@ import numpy as np from ansys.aedt.core import Maxwell2d -from machine_design.generic.winding import phase_groups - from .synrm_3f_36s import Computation as BaseComputation from .synrm_3f_36s import Geometry as BaseGeometry @@ -37,9 +35,7 @@ def assign_stator_coils(self, m2d: Maxwell2d) -> None: I_B = "Im * cos(w*Time-120deg+epsI)" I_C = "Im * cos(w*Time-240deg+epsI)" - Q = int(self.geometry.geom_params["SlotNumber"]) - p = self.geometry.PolePairs - groups = phase_groups(Q, p, self.geometry.n_phases, belt_offset=self.geometry.belt_offset) + groups = self.compute_phase_groups() for group in groups: for coil_name, polarity in group: diff --git a/motors/synrm_5f_60s.py b/motors/synrm_5f_60s.py index 46af442..dad4504 100644 --- a/motors/synrm_5f_60s.py +++ b/motors/synrm_5f_60s.py @@ -7,8 +7,6 @@ import numpy as np from ansys.aedt.core import Maxwell2d -from machine_design.generic.winding import phase_groups - from .synrm_5f_40s import Computation as BaseComputation from .synrm_5f_40s import Geometry as BaseGeometry @@ -43,9 +41,7 @@ def assign_stator_coils(self, m2d: Maxwell2d) -> None: I_D = "Im1*cos(w*Time-216deg+epsI1-pi) + Im3*cos(3*(w*Time-216deg)+epsI3-pi)" I_E = "Im1*cos(w*Time-288deg+epsI1-pi) + Im3*cos(3*(w*Time-288deg)+epsI3-pi)" - Q = int(self.geometry.geom_params["SlotNumber"]) - p = self.geometry.PolePairs - groups = phase_groups(Q, p, self.geometry.n_phases, belt_offset=self.geometry.belt_offset) + groups = self.compute_phase_groups() for group in groups: for coil_name, polarity in group: