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.

[参考译文] 更新 TA1CCR1时出现问题,是否有任何机构存在此问题?

Guru**** 2611705 points
Other Parts Discussed in Thread: MSP430G2553

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1083646/problem-with-update-ta1ccr1-any-body-have-this-problem

《线程》中讨论的其他部件:MSP430G2553测试

/*配置计时器*/
TA1CCR0 = 800;
P3DIR |=(PWM_buck + SD_Buck);
P3SEL 和=~PWM_buck;
// SMCLK /1 - CCR0 CLR
TA1CTL = tassel_2 + ID_1 + MC_1 + TCLR + TAIE;//除2主时钟为16MHz/2=8MHz
//TA1CTL = tassel_2 + ID_0 + MC_1 + TCLR + TAIE;//相同问题为16 MHz/1 = 16MHz
//
挥发 uint16反计时器=0;
#pragma vector=Timer1_A1_vector //28优先级
中断无效时间1_A1 (无效)

IF (TA1IV 和 TA1IV_TAIFG)

反计时器++;
如果(MPPT_CORRECTION < 0 || TIMER _Buck_state == STOP_IN_PROGRESS)// Decrease

IF (TA1CCR1>死时间)

TA1CCR1-;
MPPT_CORRECTION ++;
}
否则

MPPT_CORRECTION = 0;
如果(timer_buck_state == stop_in_progress)// stop 完成计时器 CCTL1

TA1CCTL1 = OUTMOD_0;
P3SEL 和=~PWM_buck;
P3OUT 和=~PWM_buck;
MPPT_CORRECTION=0;
//停用_降压;
Timer_Bucb_state =停止;
}
}
}
否则,如果(MPPT_CORRECTION > 0)//增加

IF (TA1CCR1<(频率死机时间))

TA1CCR1+;
MPPT_CORRECTION --;
}
否则 MPPT_CORRECTION = 0;
}
否则

}//无事可做,MISRA
}

TA1CCTL0和=~CCIFG;
}
当 aprx。  TA1CCR1 = 150 I  TIMER _Buck_state = STOP_IN_PROGRESS ,并应非常中断计时器以将 最小占空比减至死时间(15个小数位值) 在这段时间内,很容易重现1个全周期+小负荷周期 ,这会导致我在英国的 PWM 出现严重问题。

1.我在这里正确更新了占空比?
2.为什么会出现此问题?
aign 示波器调查。
 使用  TA1CTL = tassel_2 + ID_1 + MC_1 + TCLR + TAIE;
 使用 TA1CTL = tassel_2 + ID_0 + MC_1 + TCLR + TAIE;

谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    似乎正在发生的情况是,当您对 TA1CCR1进行计数时,您达到了一个点(由于中断延迟),您会将 CCR1值减至 TA1R 计数器的精确值(在该周期)。 因此,EQU1事件“错过了”,没有完成该周期的过渡。  

    1)如果您有选项(您使用的是什么设备?),请使用计时器 B——其 CLLD 机制旨在避免这种情况。

    2)由于您只做了一些小改动(++,---),请尝试在 EQU1事件(TA1CCTL1:CCIFG)发生后更新 CCR1,这将为您提供更新 CCR1的整个周期(800刻度)。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    I 使用 MSP430G2553
    向上向下显示的问题不会更多,但我会失去2次频率,如下图所示。 :(
    第二,我不确定我是否理解正确: 在中断例程之外更新 CCR1?我不确定是否最好更新中断例程的外侧 CCR1,因为当您尝试在 TA1R 计数期间更新时,尝试更改 CCR1时,会出现相同的问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    抱歉也出现在“Up Down Mode with Tooogle / Reset (使用切换/重置的上行模式)”中。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    1) G2553没有定时器 B 外设,因此该建议不起作用。

    2)我的意思是不使用 TAIE,而是使用 TA1CCTL1:CCIE,然后(在 ISR 中)使用(TA1IV=TA1IV_TACCR1)进行算术。 由于该事件刚刚发生,您有很长的时间来进行更新,而不会“丢失”。

    我认为,上/下模式对您的帮助不大,因为它容易受到同一场比赛的影响。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    完成。

    IF (TA1IV_Local = TA1IV_TACR1)

    如果(MPPT_CORRECTION < 0 || TIMER _Buck_state == STOP_IN_PROGRESS)// Decrease

    如果(buck_timer >死时间)

    降压计时器--;
    MPPT_CORRECTION ++;
    }
    否则

    MPPT_CORRECTION = 0;
    如果( timer_buck_state == stop_in_progress ) stop_timer_buck();
    }
    }
    否则,如果(MPPT_CORRECTION > 0)//增加

    IF (buck_timer <(频率-死机时间))

    降压计时器++;
    MPPT_CORRECTION --;
    }
    否则 MPPT_CORRECTION = 0;
    }
    否则

    }//无事可做

    TA1CCTL1和=~TA1IV_TACR1;
    }
    在 CCR1中,第一个印象是工作的。 需要更多的测试才能确定。 非常感谢这个主意。 我同时使用两个计时器,而是为 CCR1使用2个中断,CCR2只是在溢出时配置为在同一中断中重建 Tuguure 1和 Tuguus 2。 再次感谢您的创意。