Simulink/Simscape Electrical models for two scalar speed-control schemes of the same three-phase squirrel-cage induction motor.
- Model A - V/f voltage-source drive (3φ diode bridge → LC pre-link → DC-DC boost converter regulating V_dc to 700 V → 3-leg IGBT VSI → asynchronous machine; open-loop scalar V/f law with low-frequency boost; 5 kHz SPWM carrier).
- Model B - CSI drive with slip regulation (α-controlled 3φ thyristor rectifier → DC-link choke → 6-IGBT/Diode current-source inverter → asynchronous machine; outer speed PI → constant-Iₘ map → inner I_dc PI; canonical Structure 1 from the EE4251 Electrical Drives lecture notes).
Team: Amarasuriya G.N. and Perera P.S.R.
induction-motor-drive-sim/
├── setup.m
├── params/motor_params.m
├── scripts/
│ ├── build_vf_model.m Model A build (V/f VSI + DC boost)
│ ├── build_csi_model.m Model B build (CSI + Structure 1)
│ ├── build_all_models.m wrapper: builds all four .slx variants
│ ├── run_all_a_cases.m Model A test runner (A1-A4) + THD
│ ├── run_all_b_cases.m Model B test runner (B1-B3) + THD
│ ├── plot_comparison.m A vs B overlay plots + joined table
│ ├── analyze_thd.m FFT/THD per case
│ ├── sweep_boost.m m_boost sweep on case A4
│ └── generate_tables.m LaTeX-ready summary tables
├── docs/ Model A.md, Model B.md
├── models/ headless .slx (one per drive)
├── figures/
└── report/
Headless .slx files are tracked; the script-driven variants (vf_control_drive.slx, csi_current_control_drive.slx) are auto-regenerated by the runners. To regenerate them explicitly run build_all_models;.
- MATLAB R2023a - R2024a
- Toolboxes: Simulink, Simscape, Simscape Electrical
The script-driven model is the source of truth; the headless companion is for fresh-MATLAB-session demos.
setup; % addpath + assign p to base
build_all_models; % builds all four .slx variants
% Model A - V/f drive
out = sim('vf_control_drive');
summary_a = run_all_a_cases(); % A1-A4 + THD + figures
sweep_boost(); % m_boost sweep on A4
% Model B - CSI drive
out = sim('csi_current_control_drive');
summary_b = run_all_b_cases(); % B1-B3 + THD + figures
% Comparison and bookkeeping
plot_comparison(); % A↔B overlays + joined table
generate_tables(); % LaTeX summary fragmentsRegression tests are not shipped in the public repo. To verify a local clone matches an expected baseline, drop a baseline CSV at tests/expected_summary.csv (Model A) or tests/expected_summary_b.csv (Model B) and compare against a fresh run_all_a_cases() / run_all_b_cases() output - either via runtests('tests') after authoring a test class, or by diffing results/summary.csv against the baseline manually.
Headless variants run from a fresh MATLAB session without setup:
load_system('models/vf_control_drive_headless.slx');
out = sim('vf_control_drive_headless');
load_system('models/csi_current_control_drive_headless.slx');
out = sim('csi_current_control_drive_headless');Loaded by the Simulink Asynchronous Machine SI Units block via PresetModel = 15: 5.4 HP (4 kW) 400 V 50 Hz 1430 rpm. We do not hand-set R/L/J - they come from the preset's tabulated values for a reference 4 kW industrial motor.
| parameter | value |
|---|---|
| Rated shaft power | 4 kW |
| Line-to-line voltage | 400 V (RMS) |
| Frequency | 50 Hz |
| Poles | 4 |
| Rated rotor speed | 1430 rpm (slip 4.67 %) |
| Rated load torque | 26.71 N·m = 4000 / 149.75 |
| Rs, Rr' | 1.405 Ω, 1.395 Ω |
| Lls, Llr' | 5.84 mH each |
| Lm | 172.2 mH |
| J | 0.0131 kg·m² |
Open-loop scalar V/f speed control fronted by a diode-bridge rectifier, LC pre-link, DC-DC boost converter regulating the inverter-side bus to 700 V, and a 3-leg IGBT VSI. The boost stage is required so linear SPWM at m = 1 delivers the motor's rated 400 V LL at the stator.
For the full Simulink layout, naming conventions, A1-A4 results and case-by-case observations see docs/Model A.md.
Closed-loop CSI drive following EE4251 Electrical Drives. The outer speed PI on (ω_r* − LPF(ω_r)) produces the slip-frequency reference ω_2*; the constant-Iₘ map (lecture notes Part 3, pp. 5-6) converts |ω_2| to the DC-link current command I_d* = (π/√6)·I_1*; the inner I_dc PI sets the rectifier firing angle α. The CSI fires at ω_1 = ω_2 + p·ω_r. The CSI bridge uses 6 × IGBT/Diode.
For the full Simulink layout, naming conventions and B1-B3 results
see docs/Model B.md.
Both models verified end-to-end with their respective per-case runners. See report/main.pdf for full discussion; the headline steady-state numbers are:
| Pair | rpm cmd | rpm ss A / B | T_e ss A / B (N·m) | i_a THD A / B (%) |
|---|---|---|---|---|
| A1 / B1 | 1500 | 1499 / 974 | 0.40 / −2.49 | 1.17 / 41.17 |
| A2 / B2 | 1500 | 1440 / 1487 | 27.67 / 27.13 | 1.33 / 12.72 |
| A3 / B3 | 1000 | 999 / 785 | 0.31 / −6.92 | 0.03 / 42.38 |
- EE4251 - Electrical Drives notes.
- Bose, 2002 - Modern Power Electronics and AC Drives, Prentice-Hall. Ch. 8 §8.2.1 (V/f law); Ch. 6 §§6.4-6.5 (thyristor-ASCI and IGBT-CSI topologies).
- Krishnan, 2001 - Electric Motor Drives: Modeling, Analysis, and Control, Prentice-Hall. §5.6 V/f cross-reference; §6.4 CSI cross-reference.
- Erickson & Maksimović, 2001 - Fundamentals of Power Electronics, 2nd ed., Springer. DC-DC boost topology and CCM PI control.
- Colak & Kabalci, 2010 - Review of multilevel voltage source inverter topologies and control schemes. PWM strategy background.
See LICENSE.

