Install
$ agentstack add skill-calebzu-pmsm-control-claude-skills-for-matlab-motor-mfpcc-eso ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo 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.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
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 →About
motor-mfpcc-eso — PMSM Model-Free Deadbeat Predictive Current Control + ESO Builder
Three-phase 2-level voltage-source inverter + SPMSM. Inner loop = model-free deadbeat predictive current control in the stationary αβ frame: plant abstracted as the first-order ultralocal model di_s/dt = F + α·u_s, a linear ESO estimating current + lumped disturbance F (absorbs resistance, back-EMF, all parameter variation), and a closed-form deadbeat inversion with one-step delay compensation producing a continuous (uα, uβ) command that SVPWM modulates at fixed switching frequency. Outer loop = speed PI providing iq_ref; id_ref = 0. Only 2 tuned parameters: α and ω0 (via pole z12). Distilled from Y. Zhang, J. Jin, L. Huang, IEEE Trans. Ind. Electron. 68(2):993-1002, 2021 (DOI 10.1109/TIE.2020.2970660). Layered on [motor-pmsm-base](../motor-pmsm-base/SKILL.md); all base discipline applies (Visual 4-check, broken-FOC defense).
⚠ Method Identity (PINNED)
Deadbeat PCC + ESO + SVM = CONTINUOUS control set. NOT FCS-MPC. No vector enumeration, no cost function, no switching-state selection — voltage solved algebraically, handed to a modulator. Do NOT layer this on the motor-fcs-mpc family. Full evidence: formulas §D.
Formula Sources (single source of truth)
- Method formulas: [pmsmformulas.md §G](../../../shared/formulas/pmsmformulas.md) — ultralocal model
(4)/(7), ESO (8)–(17), deadbeat (18)–(21), method identity, parameters. Plant by reference: [pmsmformulas.md §8](../../../shared/formulas/pmsmformulas.md) (αβ complex-vector SPMSM; Ld = Lq = Ls). ESO derivation + tuning rationale: [esoderivation.md](references/esoderivation.md).
Must-Follow Rules
- Plan first — numbered plan with parameter table and build-script structure. Get user approval.
- One-click reproducibility — all parameters injected via
set_param(mdl,'InitFcn',...);
wref/TL profiles as From-Workspace inline expressions. See [buildsop.md](references/buildsop.md).
- Model-free boundary + literal params — the
MFPCC_ESOchart uses ONLY `alpha, beta01,
beta02, Tsc (embedded as build-time numeric literals == InitFcn, asserted; bare workspace names do NOT resolve in charts). Rs/Ls/psif` inside the chart voids the method. See [chartcontract.md](references/chart_contract.md).
- Chart I/O contract is fixed —
MFPCC_ESO: 6 in `(ialpha, ibeta, thetae, omegae, iq_ref,
idref) → 6 out (ua, ub, iqmeas, idmeas, Fao, Fbo)`. See [chartcontract.md](references/chart_contract.md).
- Double-
Fwarning — PMSM maskF= viscous frictionB(plant); ESO stateF= lumped
disturbance (controller). Same letter, unrelated quantities. Never cross-assign.
- Glue: inputs = six ZOH @ Tsc, output = Unit Delay @ Tsc (NOT ZOH) — the
ua/ubUnit Delays
realize the 1-step delay that deadbeat eqs (20)/(21) compensate; a ZOH applies u(k) in the same cycle → horizon broken → divergence. Chart stays INHERITED. See [chartcontract.md](references/chartcontract.md) §3.
- ESO gains by closed form, asserted in build —
omega0 = (1 − z12)/Tsc,beta01 = 2·omega0·Tsc,
beta02 = omega0²·Tsc. Default z12 = 0.15, alpha = 50. See [esoderivation.md](references/esoderivation.md) §3.
- All-discrete solver — model
FixedStepDiscrete@Ts+ powerguiDiscrete@Ts;
SpeedPI chart DISCRETE @ Tsc; re-commit both chart configs after wiring. See [buildsop.md](references/buildsop.md) §5.
- SVPWM workspace contract + sector-7 fix — the library SVPWM reads
TpwmandVdc_valfrom
workspace; carrier is hardcoded for Tpwm = 1e-4; apply the MultiPortSwitch sector-7 startup fix on the local instance. See [buildsop.md](references/buildsop.md) §4.
idbias grows ∝ ωe² — expected physics, not a bug — do not "fix" it during acceptance; check
it stays inside the documented envelope. See [knownlimitations.md](references/knownlimitations.md) #1.
Build Flow
| Phase | Action | Reference | |---|---|---| | 0 | Validate inputs + sanity grid | base/[prebuildgrid.md](../motor-pmsm-base/references/prebuildgrid.md) | | 1 | Plant layer (powergui Discrete, DC, UB, PMSM, TL inline-FW, BusSelector) + measurement (Clark abc→αβ, Gain_Pn ×2 for θe/ωe) | [buildsop.md](references/buildsop.md) §2-§3 | | 2 | Outer SpeedPI chart (PI + anti-windup clamp ±iqmax) | [chartcontract.md](references/chartcontract.md) §2 | | 3 | MFPCC_ESO chart (two-channel ESO + deadbeat + delay comp) | [chartcontract.md](references/chartcontract.md) §1 | | 4 | Glue: 6 input ZOH @ Tsc + 2 output Unit Delay @ Tsc | [chartcontract.md](references/chartcontract.md) §3 | | 5 | Modulation (SVPWM library + sector-7 fix) → UB gate | [buildsop.md](references/buildsop.md) §4 | | 6 | Loggers (10 To Workspace) + Scope; solver + InitFcn + chart re-commit guard | [buildsop.md](references/buildsop.md) §5-§6 | | 7 | Acceptance (Layer 1 physics + Layer 2 metrics) | [acceptancecriteria.md](references/acceptance_criteria.md) |
Required User Inputs
Ask the user before starting. Validation-case defaults in [buildsop.md](references/buildsop.md) §7.
| Group | Parameters | |---|---| | Machine (7) | Rs, Ls (= Ld = Lq, SPMSM), psi_f, Pn, J, B (→ PMSM mask F), Vdc | | Control (5) | alpha (default 50), z12 (default 0.15), iq_max, Kp_w, Ki_w | | Sampling (3) | Ts (plant, default 1e-6), Tsc = Tpwm (control = switching, default 1e-4) | | Scenario (5) | wref_rpm, ramp_t, TL_val, TL_t, StopTime |
Triggers / Skip
| ✅ Use | ❌ Skip | |---|---| | Build / port / extend MFPCC-ESO (ultralocal + ESO + deadbeat + SVM) in Simulink | FCS-MPC single/dual/three-vector → motor-fcs-mpc family | | Model-free / parameter-free current loop with fixed switching frequency | FOC PI loops, DTC, SMC, sensorless, scalar V/Hz, BLDC | | Generalizing MFPCC-ESO to a new SPMSM parameter set | IPMSM saliency, MTPA, weak-field; IM predictive control; pure theory |
Generalization Across Machine Sub-Types
| Sub-type | Constraint | Verdict | |---|---|---| | SPMSM | Ld = Lq = Ls | ✅ supported; id_ref = 0 | | IPMSM (any saliency) | Ld ≠ Lq | ❌ out of scope — saliency introduces 2θe coupling that breaks the αβ ultralocal premise (pmsm_formulas §8) | | any SPMSM param set | — | topology unchanged (same blocks/wiring/charts); alpha/z12 defaults transfer (parameter-free law) |
Sibling Skills
- [motor-pmsm-base](../motor-pmsm-base/SKILL.md) — base infrastructure; [motor-smc-pmsm](../motor-smc-pmsm/SKILL.md) — closest architecture (outer + inner loop + SVPWM + UB)
- [motor-fcs-mpc](../motor-fcs-mpc/SKILL.md) / dualvector / trivector — FCS-MPC family (different identity: finite set); [motor-dtc-pmsm](../motor-dtc-pmsm/SKILL.md) — DTC
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: calebzu
- Source: calebzu/pmsm-control-claude-skills-for-matlab
- License: Apache-2.0
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.