Other Parts Discussed in Thread: MOTORWARE
starting with release 1_01_00_09 there is a new SVM module that is being used when the Controlerl is run from user code. User code is used ALL the time with the 2x devices, and is used in all 6x projects starting at 2b. If you are running the full FOC system from ROM (6x lab2a) it still uses the standard SVM.
This new SVM is in the doxygen comments in MotorWare.exe and is being documented in the User's Guide. But considering there is a week or two delay in that publishing I wanted to be sure to post this updated documentation here.
Max Duty Cycle
This parameter has two meanings. When the value is from 0.0 to 2/SQRT(3), or 1.1547, it represents that maximum duty cycle to be generated by the space vector modulation block keeping a pure sine output. This parameter can also be set up to 4/SQRT(3)-1, or 1.3094, in order to produce outputs in overmodulation region, touching every corner of the hexagon of space vector modulation, producing a six step voltage output.
Maximum duty cycle is set in the file user.h and is used to set the maximum duty cycle provided to the PWM module.
//! \brief Defines the maximum duty cycle
#define USER_MAX_DUTY_CYCLE (1.1547)
Besides this definition of the maximum duty cycle, a member of the controller object can be changed to allow changing the output of the current controllers, which is then the input of the space vector modulation (SVM). This is important to note, because even though the duty cycle is defined in user.h to be a maximum of 1.1547 (or 100% maximum duty cycle), the inputs to the SVM can go up to 4/SQRT(3)-1, or 1.3094, allowing overmodulation. An input into the SVM above 1.1547 is in the overmodulation region. An input of 1.1547 is where the crest of the sine wave touches the 100% duty cycle. At an input of 1.3094, the SVM generator produces a trapezoidal waveform. The following code example changing the output of the current controllers to 1.3094 allowing maximum overmodulation:
// Set the maximum current controller output for the Iq and Id current
// controllers to enable overmodulation.
CTRL_setMaxDutyCycle(ctrlHandle,gMotorVars.OverModulation);
The following table describes the different ranges of the maximum SVM input and what it means for the space vector modulation module (SVM).
|
USER_MAX_DUTY_CYCLE |
Duty Cycle on EPWM Pins |
Waveform Type |
Maximum Phase to Phase RMS Voltage |
|
#define USER_MAX_DUTY_CYCLE (1.1547) |
From 0.0% To 100.0% |
Perfect Sinusoidal |
Vbus / sqrt(2)
|
|
#define USER_MAX_DUTY_CYCLE (1.3094) |
From 0.0% To 100.0% |
Trapezoidal |
Vbus * sqrt(5) / 3
|
When operating in the overmodulation region, voltage waveforms start turning from sinusoidal to trapezoidal depending on how much overmodulation is applied. Motor vibration and torque ripple should be expected as motor operation goes deeper into overmodulation. The SVM module is explained in detail in the MotorWare section of this document.
100% duty cycle requires three shunt current measurement
The actual duty cycle range depends on the number of shunt resistors used to sample the currents. If 100% duty cycles are required by the application, user must use three shunt resistors to sample the phase currents of the motor. Having only two shunt resistors limits the duty cycle to be less than 100%. The maximum duty cycle allowed when using two shunt resistors depends on the OPAMP parameters and the layout itself. The details of choosing the right components for the current feedback are covered in the Shunt Current Measurements section of this document.