AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified Apache-2.0 Self-run

Motor Fcs Mpc Dualvector

skill-calebzu-pmsm-control-claude-skills-for-matlab-motor-fcs-mpc-dualvector · by calebzu

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 cur…

No reviews yet
0 installs
24 views
0.0% view→install

Install

$ agentstack add skill-calebzu-pmsm-control-claude-skills-for-matlab-motor-fcs-mpc-dualvector

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-calebzu-pmsm-control-claude-skills-for-matlab-motor-fcs-mpc-dualvector)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
3mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Motor Fcs Mpc Dualvector? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

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 [pmsmformulas.md §E](../../../shared/formulas/pmsmformulas.md); 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](../motor-pmsm-base/SKILL.md). 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)

| Aspect | Single-vector (motor-fcs-mpc) | Dual-vector (this skill) | |---|---|---| | Vectors per period | 1 (held the whole Tsc) | 2: V_opt1 for t_opt1, then V_j | | Modulator | none; one switch state per period | none; time-slicer sequences two states within Tsc | | Extra novelty | — | q-axis deadbeat time allocation (N3), duty-weighted average voltage (N4) | | Chart sample-time | INHERITED + dual ZOH | two-rate DISCRETE: controller @ Tsc, slicer @ Ts (see rule 4) | | Cost (this reference) | L2 weighted | L1 unweighted (paper eq 7) | | Ripple @ same Tsc | baseline | ~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 ([designdecisions.md](references/designdecisions.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 [critconditions.md §J-CRIT](references/critconditions.md).
  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 [critconditions.md §K-CRIT](references/critconditions.md).
  4. Two-rate DISCRETE sample times (the validated structure — see [critconditions.md §G-CRIT](references/critconditions.md)):
  • 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.
  1. 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 [antipatterns.md](references/antipatterns.md) #1 — this is the most common dual-vector build failure.
  2. 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 UniversalBridge gate port [6]; a [1 6] row triggers a back-propagation size error. See [critconditions.md §D-CRIT](references/crit_conditions.md).
  3. 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 [critconditions.md §A-CRIT](references/critconditions.md).
  4. 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 [parameterdefaults.md](references/parameterdefaults.md).

Build Flow

| Phase | Action | Reference | |---|---|---| | 0 | Validate inputs + sanity grid | base/[prebuildgrid.md](../motor-pmsm-base/references/prebuildgrid.md) | | 1 | Plant layer (powergui Discrete @ Ts, DC, UB Inverter, PMSM Salient-pole, TL) — check DC polarity | [critconditions.md](references/critconditions.md), [antipatterns.md](references/antipatterns.md) #1 | | 2 | Measurement layer (BusSelector → Clark → Plark, thetae source) | [critconditions.md §A](references/critconditions.md) | | 3 | Outer speed PI (RPM↔rad/s, mandatory saturation) | [parameterdefaults.md](references/parameterdefaults.md), [scripts/speedpidesign.m](scripts/speedpidesign.m) | | 4 | DualVecMPC two-stage controller chart | [algorithmpseudocode.md](references/algorithmpseudocode.md) + [critconditions.md §G/§K](references/critconditions.md) | | 5 | TimeSlicer two-vector sequencer + Digital Clock | [algorithmpseudocode.md](references/algorithmpseudocode.md) §slicer + [critconditions.md §G/§D](references/critconditions.md) | | 6 | Logging (To Workspace @ fast rate Ts for ripple signals i_d/i_q; controller outputs may log @ Tsc) | [acceptancecriteria.md](references/acceptancecriteria.md) | | 7 | Solver (fixed-step discrete, FixedStep = Ts; powergui Discrete) + InitFcn injection | [critconditions.md §J](references/critconditions.md) | | 8 | Self-tests + acceptance (visual 4-check, then §E ripple vs operating point) | [acceptancecriteria.md](references/acceptance_criteria.md) |

If issues arise, consult [critconditions.md](references/critconditions.md) (A/D/G/J/K) and [antipatterns.md](references/antipatterns.md).

Required User Inputs

Ask the user before starting. Defaults in [parameterdefaults.md](references/parameterdefaults.md).

| Group | Parameter | |---|---| | Machine | Rs (Ω), Ld, Lq (H; SPMSM: Ld=Lq=Ls), psif (V·s), Pn, J (kg·m²), F (N·m·s) | | Power stage | Vdc (V) — BEMF margin; ripple scales with Vdc·Tsc/L, so it co-sets the ripple level | | Sampling | Ts (plant solver, ~1 μs), Tsc (control period, paper 100 μs @ 10 kHz; Tsc/Ts ≥ 50) | | Outer loop | Kp_w, Ki_w (recommend speed_pi_design.m; B=0 ⇒ Symmetric Optimum a=4), iq_max | | MPC | cost form (L1-unweighted = paper / L2-weighted = production option), id_ref (SPMSM/mild-IPMSM: 0) | | Scenario | StopTime, omega_ref profile (RPM), TL_step_time, TL_value (`1), induction-motor MPC | | | Strong-saliency IPMSM MTPA, weak-field; pure theory questions |

Generalization Across Machine Sub-Types

| Sub-type | Parameter constraint | Strategy | |---|---|---| | SPMSM | Ld == Lq | id_ref = 0. The N2–N5 general (Ld,Lq) form reduces verbatim to the paper's SPMSM equations. | | IPMSM mild saliency | Lq > Ld, Lq/Ld ≤ 1.5 | id_ref = 0 workable; the general form already carries the salient cross-terms. | | IPMSM strong saliency | Lq/Ld ≥ 2 | id_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

  • [motor-pmsm-base](../motor-pmsm-base/SKILL.md) — base infrastructure (this skill layers on it)
  • [motor-fcs-mpc](../motor-fcs-mpc/SKILL.md) — single-vector FCS-MPC (the natural comparison baseline)
  • [motor-dtc-pmsm](../motor-dtc-pmsm/SKILL.md) — Direct Torque Control alternative
  • [motor-smc-pmsm](../motor-smc-pmsm/SKILL.md) — Sliding Mode Control alternative

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.