Motor Control, Part 5: Space Vector Modulation
From the series: Motor Control
Melda Ulusoy, MathWorks
Space vector modulation (SVM), also known as space vector pulse width modulation (SVPWM), is a common technique in field-oriented control for induction and permanent magnet synchronous motors (PMSM). SVM generates the pulse width modulated signals to control the switches of a three-phase inverter, which then generates the three-phase voltages required to drive the motor at a desired speed or torque. In this video, you’ll learn how SVM can generate a voltage vector at any given angle and magnitude by alternating between basic and null vectors. The video also compares space vector modulation to sinusoidal PWM (SPWM) which is another commonly used method for motor control. SVM lets us fully utilize the DC source voltage and increases bus utilization by 13.3% over sinusoidal PWM.
Previously we talked about field-oriented control and how it is used to control PMSM motors at varying speeds. In this video, we're going to focus on space vector modulation, which is the final step in a FOC algorithm generating the required three-phase voltages to drive the motor at a desired speed. When you do a search on this topic, you may come across different acronyms like SVM for space vector modulation, SVPWM for space vector pulse width modulation, and SPWM for sinusoidal pulse width modulation. These two terms are used interchangeably but they’re the same technique whereas sinusoidal PWM is a slightly different method for generating the desired three-phase voltages to the motor. SVM has some advantages over SPWM as it utilizes the DC source voltage more effectively and creates a higher voltage output to the motor, which we’ll discuss later in the video.
Last time, we explained how we use Clarke and Park transforms to compute Id and Iq currents and control them at their desired values using PI controllers. This control diagram helped us conceptually explain the different components of FOC and how they work. But the way we implement this algorithm is slightly different, which looks like this. Let’s first talk about what we’re trying to achieve with space vector modulation. Our goal is to create these three-phase voltages that are required to drive our PMSM motor. And the way we generate these three-phase voltages is through the use of a three-phase inverter, which takes as an input a constant DC voltage. For properly converting DC to AC power, we need to control the on and off states of the inverter switches along with their switching sequence. And this is where the space vector pulse width modulation comes into play. It takes the reference voltages created by inverse park transform and generates the duty cycles to be sent to the PWM driver on the microcontroller. The PWM driver outputs the required pulse width modulated signals to the three-phase inverter, which then generates the desired three-phase voltages to the motor. Note that space vector modulation eliminates the use of an inverse Clarke transform.
If you want to design and simulate a FOC algorithm with MATLAB and Simulink, there are different options that you can use for implementing space vector modulation. One option is to use the PWM generator block that is available in Simscape Electrical. In the block parameters, you can choose the PWM generation technique: sinusoidal or space vector PWM. The block takes the three-phase reference voltages and the DC-link voltage and generates two outputs; the first one is the pulses to control the inverter switches and the second one is the modulation waveforms. Based on the inverter you attach to the PWM generator, you can use one of these outputs. For example, for high-fidelity simulations, you can use an average-value inverter block that requires the modulation waveforms. Alternatively, you can use a three-phase inverter that lets you model the switching effects in the inverter, and requires the switch-controlling pulses as the input.
If you want to generate code from your motor control algorithm and deploy it to embedded hardware, you can implement space vector modulation using the Space Vector Generator block available with Motor Control Blockset. This block takes the reference voltages created by the inverse park transform and generates the modulated three-phase voltages. For more information on SVM with MATLAB and Simulink, check out the links provided below the video.
As you’ll remember from previous videos, in FOC we’re interested in creating a continuously rotating stator field vector orthogonal to the rotor field. To explain the concept behind space vector modulation, instead of a rotating field vector we’ll focus on a static one that’s shown in red. As we mentioned before, the on and off states of the three-phase inverter switches determine the output voltages to the motor. To clearly see these on and off states, we’ll use this illustration where rectangles represent the switches of the three-phase inverter. Red means the switch is closed and white means it’s open. Now for the space vector that we want to create along 0 degrees, the switching configuration looks like this leading to a positive voltage along phase A and a negative voltage along phases B and C. If we draw a simplified version of this circuit, we can see that phase A-to-neutral voltage is 2/3 of the DC source voltage whereas phase B and phase C to neutral voltages are -1/3 of the DC source voltage. Here is how we show these voltages with voltage vectors on the space vector diagram. For a positive voltage, the space vector is in the positive phase direction whereas a negative voltage vector points in the opposite direction of the phase. Adding up all the three vectors gives us the space vector along 0 degrees, which we’ll refer to as V1. The states for this space vector are shown here; it is . At each time, only one of the two switches along each inverter leg is closed giving us 8 different switching combinations. Six of them lead to these voltage vectors on the space vector diagram, each 60 degrees apart. These are also referred to as basic vectors. And the remaining two configurations give us zero or null vectors, which occur when either all the upper or all the lower switches are closed simultaneously. Since in this case, no current is flowing through the phases, no voltage is generated, and the resulting space vectors are null vectors shown on the origin.
Now we know how to control the switches of the three-phase inverter to create the space voltage vectors at the angles shown here. But what we’re actually interested in is generating a space vector at any angle and at any magnitude. This will let us create a continuously rotating voltage vector of any magnitude. This can be done using PWM. In one of the previous videos, we discussed the averaging effect of PWM. By switching between two voltage levels at a high frequency we were able to get an average output voltage. Similarly, a space vector can be averaged using PWM. The angle of this space vector is controlled by switching between two adjacent basic vectors and its magnitude is controlled by switching between basic and null vectors.
To better understand how space vector PWM works, we’ll use this animation. The magenta vector is the voltage vector that we’re creating and which we’ll refer to as the reference vector. The way we generate this reference vector is by switching between two adjacent basic vectors that are shown in red. To better understand what we mean, let’s slow down the animation and focus on what’s happening in each sector. Here the voltage vector that we want to create is in this sector. First, we find the basic vectors associated with that sector, in this case, V1 and V2, and then switch between the two vectors to synthesize the reference vector. This is the basic idea behind space vector pulse width modulation. If the reference vector is in another sector, we still follow the same logic and select the basic vectors according to that sector and alternate between them to average the reference vector. If you looked carefully, you might have noticed that there are instances where we don’t see any basic vectors at all, like this one or this one. To understand what’s happening during that time instance, let’s look at how the states of the inverter switches are changing. This animation reveals that when no basic vectors are present, we’re actually in a null state. So, the switching pattern doesn’t only consist of the basic vectors, in this case, V3 and V4, but it also includes the null vectors V0 and V7. Both null vectors result in zero volts on motor terminals. So, does it really matter which one we use in the switching pattern? The answer is yes; it matters and here’s why. Let’s focus on the switching pattern for a second. While we transition from the null vector V0 to V3, we only change the states of the switches along phase B while we keep the rest of the switches at the same state. The same is true when we transition from V3 back to V0. However, if we used the other null vector during this transition, then we would need to change the states of the switches both along phase A and phase C. This would cause a larger switching loss in the inverter. Similarly, for this part of the switching pattern where we need to transition between V4 and one of the null vectors, we choose V7 because that configuration reduces the switching loss in the inverter.
Now that we understand the selection of the null vectors, let’s look at things from a different perspective. This animation here represents an alternative visualization of space vector modulation. On the left, it shows us the accumulated on-time of the high side switches at phases A, B, and C during each sector. Let’s pause here and try to interpret what we see. As we discussed previously, for the sector our reference vector is in, the switching sequence looks like this and it includes these states. Arranging them vertically helps us see the common switch modes among the different voltage vectors. We immediately notice that the most time is spent in phase B high state as it is repeated in 5 out of 7 voltage vectors. This is followed by phase C and then finally phase A, which only becomes on due to the null vector V7. If we now play the animation, we’ll be able to confirm that the most time is spent in BH or B high, followed by CH and then finally AH where we spend the least amount of time and only due to the null vector V7. For the rest of the sectors, you can do a similar exercise as we’ve done here to estimate the accumulated switch-on times of the different phases.
Let’s go back to our previous animation. Another important thing you might have noticed is the time we spend in each vector varies. If the reference vector that we want to create is closer to one of the adjacent vectors, then we spend more time in that vector. If the reference vector is right in the middle of the two adjacent vectors, then we spend equal time in each vector. Let’s start the animation and monitor the on-time duration of V1 and V2. Right now, the reference vector is closer to V1, so we spend more time in V1 than V2. After the reference vector passes 30 degrees, it becomes closer to V2, so we spend more time in V2. Similarly, let’s take a look at what impact the duration of the null state has on the averaged voltage vector. The duration of the null vector affects the magnitude of the voltage vector. Let’s compare these two animations. For a voltage vector that is larger in magnitude, we spend less time in the null state; however, if we increase the duration of the null state, then we end up with a voltage vector that is smaller in magnitude.
Lastly, we will talk about how the space vector modulation differs from the sinusoidal PWM technique, which we’ve mentioned previously. The animations here show how the space vector PWM and sinusoidal PWM work. Their working principle is very similar. There’s only a slight difference in the switching timings. Although small, this difference significantly affects the signals generated by these different techniques. The modulation waveforms generated by space vector PWM have this double hump characteristics while they look like sine waves in sinusoidal PWM.
Both techniques produce sinusoidal three-phase voltages, but the shape of modulation waveforms in space vector PWM lets us fully utilize the DC source voltage. Here, the DC source voltage is 1 Volt. If we look closely at the voltage outputs, we’ll see that space vector PWM uses 100% of the source voltage whereas in sinusoidal PWM bus utilization is at 86.6% leading to three-phase voltages with amplitudes less than 1 Volt.
Let’s wrap up what we’ve seen in this video. We’ve introduced the basic and null vectors and how we alternate between them to synthesize a voltage vector at a certain angle and with a certain magnitude. We’ve discussed the selection of null vectors to minimize the switching losses in the inverter. And finally, we’ve showed that space vector PWM lets us increase the bus utilization by 13.3% over sinusoidal PWM. For more information on space vector modulation, please check out the links below the video.
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.