使用PSIM的1-phase PWM (with phase-shift)模組,並使用PSIM產生程式碼,當相移角度在90度左右時相移的PWM會有一瞬間輸出反向這是為什麼呢。
PSIM產生的相移PWM相關程式碼如下:
fC13 = 2.5;
fC14 = 2.5;
// Start of changing PWM2(phase shift) registers
// Set Duty Cycle
#ifdef PWM_IN_CHECK
if (fC14 <= (0)) {
PWM_CMPA(2) = PWM_TBPRD(2);
} else if (fC14 >= (5 + 0)) {
PWM_CMPA(2) = 0;
} else {
#else // PWM_IN_CHECK
{
#endif
static Uint16 oldTBPHS2Up = 0, oldTBPHS2Dn = 65535;
Uint16 reg, _cmpA;
DefaultType _val = ((5 + 0) - fC14) * (1.0/5);
_cmpA = (int)(PWM_TBPRD(2) * _val);
_val = fGblLIM14 * (1.0/360.0) + 2.0;
_val -= (int)_val; // phaseshift input should be great than -720 degree
_val *= 2.0;
if (_val < 1.0) {
reg = (Uint16)(PWM_TBPRD(2) * _val);
if ((oldTBPHS2Up < _cmpA) && (_cmpA <= reg)) {
_cmpA = reg; // We add this to ensure PWM counting up action
}
PWM_TBPHS(2) = oldTBPHS2Up = reg;
PWM_TBCTL(2) |= 1 << 13; // Up
oldTBPHS2Dn = 0;
} else {
reg = (Uint16)(PWM_TBPRD(2) * (2.0 - _val));
if ((oldTBPHS2Dn >= _cmpA) && (_cmpA > reg)) {
_cmpA = oldTBPHS2Dn + 1; // We add this to ensure PWM counting down action
}
PWM_TBPHS(2) = oldTBPHS2Dn = reg;
PWM_TBCTL(2) &= ~(1 << 13); // Down
oldTBPHS2Up = PWM_TBPRD(2);
}
PWM_CMPA(2) = _cmpA;
}
// End of changing PWM2(phase shift) registers