This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Hello,
I am trying to implement short-pulse suppression for an inverter running motorware 18 on a TMS320F28069.
The solution I came up with is to modify the HAL_writePwmData function in the following way:
static inline void HAL_writePwmData(HAL_Handle handle,CTRL_PwmData_t *pPwmData)
{
uint_least8_t cnt;
HAL_Obj *obj = (HAL_Obj *)handle;
PWM_Obj *pwm;
_iq period;
_iq pwmData_neg;
_iq pwmData_sat;
_iq pwmData_sat_dc;
_iq value;
uint16_t value_sat;
for(cnt=0;cnt<3;cnt++)
{
pwm = (PWM_Obj *)obj->pwmHandle[cnt];
period = (_iq)pwm->TBPRD;
pwmData_neg = _IQmpy(pPwmData->Tabc.value[cnt],_IQ(-1.0));
pwmData_sat = _IQsat(pwmData_neg,_IQ(0.5),_IQ(-0.5));
pwmData_sat_dc = pwmData_sat + _IQ(0.5);
// Short-pulse suppression. For min_pulse = 0.056, pulses smaller than 1us would be suppressed
if(pwmData_sat_dc > _IQ(1 - MIN_PULSE_WIDTH)) pwmData_sat_dc = _IQ(1.0);
if(pwmData_sat_dc < _IQ(MIN_PULSE_WIDTH)) pwmData_sat_dc = _IQ(0.0);
value = _IQmpy(pwmData_sat_dc, period);
value_sat = (uint16_t)_IQsat(value, period, _IQ(0.0));
// write the PWM data
PWM_write_CmpA(obj->pwmHandle[cnt],value_sat);
}
return;
} // end of HAL_writePwmData() function
So that too short pulses are rounded down to 0 and too large pulses are rounded up to 1. By testing I came up with the value 0.056 to suppress pulses smaller than 1usecond (switching at 14kHz).
I just wanted to know you opinion about this implementation and its possible effects on the controller or things like overmodulation (which is active).
I had seen a post with a different implementation by saturating the pulses to a min and max values by:
value_sat = (uint16_t)_IQsat(value, _IQ(max_value), _IQ(min_value));
But I would think this solution has 2 problems.
1. It would affect overmodulation since you are limiting the maximum pwm duty cycle
2. It implies higher losses than the previous solution since on the previous solution if you round the duty cycle to 0 or 1, on that cycle that IGBT wouldn't switch and thus increasing efficiency at high and low pwm duty cycles.
Am I missing something? Is there a chance this implementation might be troublesome for some reason?
Thanks in advance,
I believe that the way I do it I am also limiting the width of the OFF pulse. Since what I am doing is, if the pulse > x, pulse =1.
However we are using Hall effect current sensors on the phases not shunts, so I guess it won't be a problem.
My concern about overmodulation is because, from my understanding, if I am increasing the duty cycle from 95+% to 100% that would artificially increase the total Vs output, wouldnt it? Also I guess it would increase a little bit the current as well since the duty cycle is higher. I worry how those effects might affect the motor/controller.
Thanks for taking you time with this, that makes much more sense. What do you mean with a decrease in performance? Higher ripple current or something like that?
Also, is there any example project or somewhere I can look at to see how could I correct the timing of the other phases to compensate for the short-pulse suppression?