TMS320F28335: 相移PWM輸出問題

Part Number: TMS320F28335


使用PSIM的1-phase PWM (with phase-shift)模組,並使用PSIM產生程式碼,當相移角度在90度左右時相移的PWM會有一瞬間輸出反向這是為什麼呢。

DS0014.PNG

DS0017.PNG
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