agentsclimarketplace

Motor fcs mpc dualvector

Skill calebzu/pmsm-control-claude-skills-for-matlab/.claude/skills/motor-fcs-mpc-dualvector

PMSM Claude Skills: methodology + skill library for AI-augmented MATLAB/Simulink modeling of PMSM control (FCS-MPC, DTC, SMC) with the Reference Model Learning Workflow; plus an extra FOC + load-torque-estimator reference

Install
npx -y skills add calebzu/pmsm-control-claude-skills-for-matlab --skill motor-fcs-mpc-dualvector

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 9 stars9 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

PMSM Dual-Vector Finite-Control-Set MPC Builder. Build an inner-loop two-vectors-per-period finite-control-set MPC current controller for a three-phase voltage-source-inverter-driven PMSM (SPMSM / mild-saliency IPMSM via parameterization) in Simulink, with an outer speed PI providing iq_ref. Two vectors per control period (V_opt1 + V_j) with q-axis-deadbeat time allocation cut switching-cycle current ripple ~3-5x below single-vector FCS-MPC. Use when constructing, reproducing, porting, or extending a dual-vector / two-vector FCS-MPC current-control simulation in Simulink (keywords dual-vector MPC, two-vector MPC, double-vector MPCC, deadbeat time allocation, duty-cycle MPC, 双矢量模型预测, 占空比 MPC). Skip for single-vector FCS-MPC (use motor-fcs-mpc), FOC, DTC, SMC, sensorless, scalar V/Hz, BLDC trapezoidal, induction-motor MPC, three-or-more-vector / multi-step-horizon MPC, strong-saliency IPMSM MTPA, weak-field, or pure theory questions. Layered on motor-pmsm-base.

SKILL.md

9.7 KB, as published. Nobody here has run it

motor-fcs-mpc-dualvector — PMSM Dual-Vector Finite-Control-Set MPC Builder

Three-phase 2-level voltage-source inverter + PMSM (SPMSM / mild-saliency IPMSM via parameterization). Inner loop = dual-vector FCS-MPC current control in the dq frame: each control period applies two voltage vectors — the first optimal active vector V_opt1 for a deadbeat-computed on-time t_opt1, then a second vector V_j for the remainder Tsc − t_opt1. Outer loop = speed PI providing iq_ref. The second vector + intra-period time split drive switching-cycle current ripple far below single-vector FCS-MPC at the same Tsc.

Distilled from Xu Yanping et al. 2017 (Two-Vector Model Predictive Current Control for PMSM, Trans. China Electrotech. Soc. 32(20):222-230). Control-law formulas are the signed N2–N5 in pmsm_formulas.md §E; plant physics, prediction, speed PI, Clarke/Park and the 8-vector set are reused by pointer from the same file (§0-§7 / §A / §B.5).

Layered on motor-pmsm-base. All base discipline applies (Goto TagVisibility, Vdc/BEMF rule, Visual 4-check, broken-FOC defense).

What makes dual-vector different (vs single-vector motor-fcs-mpc)

AspectSingle-vector (motor-fcs-mpc)Dual-vector (this skill)
Vectors per period1 (held the whole Tsc)2: V_opt1 for t_opt1, then V_j
Modulatornone; one switch state per periodnone; time-slicer sequences two states within Tsc
Extra noveltyq-axis deadbeat time allocation (N3), duty-weighted average voltage (N4)
Chart sample-timeINHERITED + dual ZOHtwo-rate DISCRETE: controller @ Tsc, slicer @ Ts (see rule 4)
Cost (this reference)L2 weightedL1 unweighted (paper eq 7)
Ripple @ same Tscbaseline~3-5x lower (paper Table 2)

There is no SVPWM and no Anti_Park — the selected discrete vectors are applied directly; the gate comes from the time-slicer, not a PWM modulator.

Must-Follow Rules

  1. Plan first. Before any add_block, write a numbered plan: parameter table, design-decision choices (design_decisions.md), build-script structure. Get user approval.
  2. One-click reproducibility. Inject all parameters via set_param(mdl, 'InitFcn', sprintf(...)). Model must Run from .slx double-click in a fresh MATLAB session. See crit_conditions.md §J-CRIT.
  3. Controller chart hardcodes machine params via sprintf. The DualVecMPC chart embeds Rs/Ld/Lq/psif as numeric literals at build time; the literals MUST equal the InitFcn values digit-for-digit (assert it in the build). Never put them in an external .m file (drifts from the plant). See crit_conditions.md §K-CRIT.
  4. Two-rate DISCRETE sample times (the validated structure — see crit_conditions.md §G-CRIT):
    • DualVecMPC and ThetaSrcMATLABFunctionConfiguration.UpdateMethod='Discrete', SampleTime='s_Tsc' (compute once per control period and hold).
    • TimeSlicerDiscrete, SampleTime='s_Ts' (must run at the fast plant rate to slice within the period), fed by a Digital Clock @ Ts.
    • SampleTime is silently ignored unless UpdateMethod='Discrete' is set first. A continuous/inherited gate fails to propagate into the discrete SimPowerSystems bridge.
  5. DC bus polarity must match. Wire DC +(RConn) → UB RConn(1)(+) and DC −(LConn) → UB RConn(2)(−). Reversed polarity forward-biases the bridge freewheel diodes, clamps the DC link to ≈0, and the motor sees no voltage (vds=vqs=0, zero current, rotor stalls). See anti_patterns.md #1 — this is the most common dual-vector build failure.
  6. gate is a 6-element COLUMN vector. The TimeSlicer output must be [Sa+;Sa−;Sb+;Sb−;Sc+;Sc−] (column) so the inferred size [6 1] matches the Universal_Bridge gate port [6]; a [1 6] row triggers a back-propagation size error. See crit_conditions.md §D-CRIT.
  7. One theta_e, integrated at Tsc, feeds both Plark and the controller. theta_e += Tsc·(Pn·w) in a persistent var, wrapped via atan2(sin,cos). Do NOT use the PMSM bus theta. If routed via Goto/From, TagVisibility='global'. See crit_conditions.md §A-CRIT.
  8. Outer PI saturation is mandatory. LimitOutput='on', limits [−iq_max, +iq_max] with 1.5·Pn·psif·iq_max ≥ 1.3·TL_max, back-calculation anti-windup. See parameter_defaults.md.

Build Flow

PhaseActionReference
0Validate inputs + sanity gridbase/pre_build_grid.md
1Plant layer (powergui Discrete @ Ts, DC, UB Inverter, PMSM Salient-pole, TL) — check DC polaritycrit_conditions.md, anti_patterns.md #1
2Measurement layer (BusSelector → Clark → Plark, theta_e source)crit_conditions.md §A
3Outer speed PI (RPM↔rad/s, mandatory saturation)parameter_defaults.md, scripts/speed_pi_design.m
4DualVecMPC two-stage controller chartalgorithm_pseudocode.md + crit_conditions.md §G/§K
5TimeSlicer two-vector sequencer + Digital Clockalgorithm_pseudocode.md §slicer + crit_conditions.md §G/§D
6Logging (To Workspace @ fast rate Ts for ripple signals i_d/i_q; controller outputs may log @ Tsc)acceptance_criteria.md
7Solver (fixed-step discrete, FixedStep = Ts; powergui Discrete) + InitFcn injectioncrit_conditions.md §J
8Self-tests + acceptance (visual 4-check, then §E ripple vs operating point)acceptance_criteria.md

If issues arise, consult crit_conditions.md (A/D/G/J/K) and anti_patterns.md.

Required User Inputs

Ask the user before starting. Defaults in parameter_defaults.md.

GroupParameter
MachineRs (Ω), Ld, Lq (H; SPMSM: Ld=Lq=Ls), psif (V·s), Pn, J (kg·m²), F (N·m·s)
Power stageVdc (V) — BEMF margin; ripple scales with Vdc·Tsc/L, so it co-sets the ripple level
SamplingTs (plant solver, ~1 μs), Tsc (control period, paper 100 μs @ 10 kHz; Tsc/Ts ≥ 50)
Outer loopKp_w, Ki_w (recommend speed_pi_design.m; B=0 ⇒ Symmetric Optimum a=4), iq_max
MPCcost form (L1-unweighted = paper / L2-weighted = production option), id_ref (SPMSM/mild-IPMSM: 0)
ScenarioStopTime, omega_ref profile (RPM), TL_step_time, TL_value (< 1.5·Pn·psif·iq_max)

Triggers / Skip

✅ Use❌ Skip
Build / port / extend a dual-vector (two-vector) FCS-MPC simulation in SimulinkSingle-vector FCS-MPC → motor-fcs-mpc
Two vectors/period, q-deadbeat time allocation, duty-cycle MPCFOC, DTC, SMC, sensorless, scalar V/Hz, BLDC trapezoidal
Generalizing dual-vector MPC to a new SPMSM / mild-saliency machineThree-or-more vectors, multi-step horizon (N>1), induction-motor MPC
Strong-saliency IPMSM MTPA, weak-field; pure theory questions

Generalization Across Machine Sub-Types

Sub-typeParameter constraintStrategy
SPMSMLd == Lqid_ref = 0. The N2–N5 general (Ld,Lq) form reduces verbatim to the paper's SPMSM equations.
IPMSM mild saliencyLq > Ld, Lq/Ld ≤ 1.5id_ref = 0 workable; the general form already carries the salient cross-terms.
IPMSM strong saliencyLq/Ld ≥ 2id_ref from MTPA (out of v1 scope; ask user)

Topology does not change — same blocks, same wiring, same two-stage chart, same CRIT conditions. Only parameters and id_ref strategy differ. Out-of-scope: SynRM (psif ≈ 0), IM, BLDC trapezoidal — different prediction equations.

Sibling Skills

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.