주요 콘텐츠

Overmodulation

R2026b

Extend voltage utilization beyond the linear modulation region using single-zone overmodulation

Since R2026b

Libraries:
Motor Control Blockset / Math Transforms

Description

The Overmodulation block enables the application of reference voltages beyond the space vector pulse width modulation (SVPWM) linear modulation limit using a single-zone overmodulation algorithm. Use this block if your motor application requires speeds above base speed or higher torque output than what linear SVPWM can provide. Place this block between the output of the current controller (or inverse Park transform) and the SVPWM generator in the field-oriented control (FOC) control loop.

The block automatically detects and operates in three regions based on reference voltage magnitude:

  • Linear region — The reference magnitude is at or below Vdc3. The block passes the reference through without change.

  • Overmodulation region — The reference magnitude exceeds Vdc3 but is below 2Vdc3. The block modifies both the magnitude and angle of the output voltage vector, clamping it to the inverter hexagonal boundary.

  • Six-step region — The reference magnitude exceeds 2Vdc3. The block drives the output to the hexagon vertices, producing six-step commutation waveforms.

Note

The block does not implement hysteresis for region transitions. If the reference voltage magnitude is slightly above a threshold, the block immediately enters the higher region. For example, a reference magnitude marginally above 2Vdc3 places the block in the six-step region.

Overmodulation regions showing linear circle, overmodulation region (yellow), six-step hexagon, and discrete voltage vectors

By transitioning through these three regions, the fundamental voltage component increases from Vdc3 (linear limit) to 2Vdc3 (six-step limit), representing approximately a 10% gain over conventional linear SVPWM. This extended voltage range allows your motor to achieve higher speeds and produce more torque without requiring a higher DC bus voltage.

Unlike traditional discrete mode-switching approaches, this block implements a unified voltage conversion strategy that operates continuously across all three regions without mode switching. Beyond the linear limit, the block converts the input voltage reference into an output that increasingly resembles a square wave as it approaches six-step commutation, allowing the FOC system to apply the maximum available fundamental voltage to the motor without discontinuities at region transitions.

Set the Voltage input type parameter to match your upstream controller output. Select Alpha and beta to provide alpha-beta voltage components directly from the current controller or inverse Park transform, or select Magnitude and position to provide the voltage magnitude and electrical position as separate signals. Monitor the Info output bus to track transitions across all three operating regions through the ModulationState signal.

Examples

expand all

This example shows how to use the Overmodulation block to extend inverter voltage utilization beyond the linear space vector pulse-width modulation (SVPWM) limit. This example uses a minimal model that drives the block with a linearly increasing alpha-axis voltage reference, which causes the operating region to sweep from linear modulation through the overmodulation region and into six-step commutation.

Using this example, you can observe the automatic transition from linear modulation to overmodulation to six-step commutation using the ModulationState signal and verify that the output voltage magnitude is clamped to the inverter hexagon boundary rather than growing unbounded.

Model

To focus on the Overmodulation block behavior, the example uses a model that feeds it a linearly increasing alpha-beta voltage reference. The Vdc value of 100 V sets the hexagon boundary thresholds. The block enters the overmodulation region when the reference magnitude exceeds Vdc3≃57.7 V, and enters the six-step region when it exceeds 2Vdc3≃66.7 V. A ramp starting at 20 V with slope 70 V/s sweeps through all three regions. Setting Vbeta to zero keeps the voltage vector on the alpha axis, which is the simplest input that covers all regions.

Open the model.

mdl = "OvermodulationRegions";
open_system(mdl)

Simulate and Inspect Regions

To observe how the block responds across all three regions, simulate the model and extract the ModulationState and VMagOVM signals from the logged Info bus. ModulationState identifies the current region (0 = linear, 1 = overmodulation, 2 = six-step). VMagOVM is the magnitude of the modified output voltage vector. In the linear region it tracks the input, and in the overmodulation and six-step regions it is clamped to the hexagon boundary.

out = sim(mdl);
info = out.logsout{1}.Values
info = struct with fields:
            VMagOVM: [1×1 timeseries]
           ThetaOVM: [1×1 timeseries]
    ModulationState: [1×1 timeseries]
       HoldingAngle: [1×1 timeseries]

Analyze Modulation State Transition

To verify the transition through all three regions and see how the output vector is constrained geometrically, plot ModulationState versus time alongside the space vector trajectory in the αβ plane. In the αβ plot, the hexagon boundary (black) is the maximum voltage the inverter can produce at each angle. The inscribed circle (blue dashed, radius Vdc3≃57.7 V) is the linear region limit, and the circumscribed circle (red dashed, radius 2Vdc3≃66.7 V) is the six-step threshold. The green trajectory sweeps along the positive α-axis because Vbeta is zero: it grows freely in the linear region, is clamped to the hexagon edge in the overmodulation region, and terminates at the hexagon vertex in the six-step region.

Vdc = 100;
modState = info.ModulationState.Data;
t = info.VMagOVM.Time;
theta = linspace(0, 2*pi, 500);
hex_v = (2*Vdc/3) * exp(1i * (0:5)*pi/3);
hex_x = [real(hex_v), real(hex_v(1))];
hex_y = [imag(hex_v), imag(hex_v(1))];
Va = out.vabOut.Data(1:10:end, 1);
Vb = out.vabOut.Data(1:10:end, 2);

figure('Position',[100 100 900 380]);
tiledlayout(1,2,'TileSpacing','compact','Padding','compact');

nexttile;
plot(t, modState);
yticks([0 1 2]);
yticklabels(["Linear", "Overmodulation", "Six-Step"]);
ylabel('Region');
xlabel('Time (s)');
title('Modulation State vs. Time');
grid on;

nexttile;
hold on;
plot(hex_x, hex_y, 'k-', 'LineWidth', 1.5);
plot((Vdc/sqrt(3))*cos(theta), (Vdc/sqrt(3))*sin(theta), 'b--');
plot((2*Vdc/3)*cos(theta), (2*Vdc/3)*sin(theta), 'r--');
plot(Va, Vb, 'Color', [0.2 0.6 0.2], 'LineWidth', 2);
hold off;
grid on;
xlim([-80 80]); ylim([-80 80]);
xlabel('\alpha'); ylabel('\beta');
title('Space Vector Trajectory');

Figure contains 2 axes objects. Axes object 1 with title Modulation State vs. Time, xlabel Time (s), ylabel Region contains an object of type line. Axes object 2 with title Space Vector Trajectory, xlabel \alpha, ylabel \beta contains 4 objects of type line.

The modulation state plot confirms the block transitions from linear to overmodulation at approximately 0.54 s, and from overmodulation to six-step at approximately 0.67 s. The αβ plot shows the same behavior geometrically. The output trajectory (green) follows the reference exactly inside the inscribed circle, is constrained to the hexagon edge in the overmodulation region, and terminates at the hexagon vertex in the six-step region.

Extended Examples

Ports

Input

expand all

Alpha-beta voltage reference vector, specified as a two-element vector [Valpha Vbeta]. Connect the output of the current controller or inverse Park transform in the stationary reference frame to this port.

Dependencies

Data Types: single | double | fixed point

Voltage reference magnitude, specified as a scalar. Provide the magnitude of the voltage space vector in the same units as the Vdc input port. The block compares this value against Vdc3 (linear limit) and 2Vdc3 (six-step limit) to determine the operating region.

Dependencies

  • To enable this port, set Voltage input type to Magnitude and position.

Data Types: single | double | fixed point

Electrical position of the voltage reference vector, specified as a scalar. Set the Electrical position units parameter to match the units of your position signal.

Dependencies

  • To enable this port, set Voltage input type to Magnitude and position.

Data Types: single | double | fixed point

DC bus voltage of the three-phase inverter, specified as a scalar. The block uses this value to compute region boundaries: Vdc3 for the linear-to-overmodulation transition and 2Vdc3 for the overmodulation-to-six-step transition. Connect this to the measured or known DC link voltage of the inverter.

Data Types: single | double | fixed point

Output

expand all

Modified alpha-beta voltage reference after overmodulation, returned as a two-element vector [Valpha,Vbeta]. In the linear region, the output equals the input reference. In the overmodulation region, the block clamps the output voltage vector to the inverter hexagonal boundary. In the six-step region, the block drives the output to the hexagon vertices. Connect this output to the space vector PWM generator or modulator in your control system.

Data Types: single | double | fixed point

Diagnostic information bus containing overmodulation state and parameters, returned as a bus with the following elements:

  • VMagOVM — Modified voltage magnitude from the overmodulation algorithm.

  • ThetaOVM — Modified electrical angle in per-unit, in the range [0,1] where 1 represents a full electrical revolution.

  • ModulationState — Current region of operation. Use this signal to monitor transitions among the linear, overmodulation, and six-step states. The values at this element correspond to:

    • 0 — Linear region

    • 1 — Overmodulation region

    • 2 — Six-step region

  • HoldingAngle — Holding angle in per-unit. In the overmodulation region, this angle indicates the portion of each sector where the voltage vector is held at the hexagonal boundary.

Tips

  • If you do not need the diagnostic signals, leave this port unconnected or connect it to a Terminator block. Do not connect this port to an Outport block that is left unconnected in the parent system, as this can cause data type propagation errors.

Data Types: bus

Parameters

expand all

To edit block parameters interactively, use the Property Inspector. From the Simulink® Toolstrip, on the Simulation tab, in the Prepare gallery, select Property Inspector.

Format of the voltage reference input signals. Select the option that matches the output format of your upstream controller.

  • Alpha and beta — The block accepts a two-element vector of alpha-beta voltage components through the Vαβ port and the DC bus voltage through the Vdc port. Use this setting when connecting directly to the output of an inverse Park transform or a current controller that produces alpha-beta voltages.

  • Magnitude and position — The block accepts separate magnitude, electrical position, and DC bus voltage inputs through the Vmag, θe, and Vdc ports. Use this setting when the voltage magnitude and angle are already available, for example when combining this block with a separate coordinate transform.

Programmatic Use

To set the block parameter value programmatically, use the set_param function.

Parameter: VoltageInputType
Values: "Alpha and beta" (default) | "Magnitude and position"

Example: set_param(gcb,"VoltageInputType","Magnitude and position")

Unit of measurement for the electrical position input at the θe port. Set this parameter to match the units of the position signal from your system. The block converts the input to per-unit internally for the overmodulation computation.

  • Radians — Position is in the range [0, 2π].

  • Degrees — Position is in the range [0, 360].

  • Per-unit — Position is in the range [0, 1], where 1 corresponds to a full electrical revolution.

Dependencies

  • To enable this parameter, set Voltage input type to Magnitude and position.

Programmatic Use

To set the block parameter value programmatically, use the set_param function.

Parameter: PositionUnit
Values: "Radians" (default) | "Degrees" | "Per-unit"

Example: set_param(gcb,"PositionUnit","Degrees")

References

[1] Bolognani, Silverio, and Mauro Zigliotto. "Novel Digital Continuous Control of SVM Inverters in the Overmodulation Range." IEEE Transactions on Industry Applications 33, no. 2 (March/April 1997): 525–530.

Extended Capabilities

expand all

C/C++ Code Generation
Generate C and C++ code using Simulink® Coder™.

Version History

Introduced in R2026b