工具/软件:
您好、
我使用的是 MSP430FR4276微控制器、在使用 Timer_A3生成 PWM 信号时遇到问题。 需要通过 PI 控制器随时调节 PWM 占空比。 然而,我面临一个问题(如所附的图像中所示),我认为是有关时间我更新 CCR1
.
似乎、如果我 CCR1
在错误的时刻更新、 CCR1
和之间的比较事件 CCR0
在计时器达到其最大值之前不会发生。 因此、新的占空比仅在下一个周期生效。
挑战在于、我不想使用 MC
位来停止计时器、也不想使用中断(ISR)。 根据数据表、影子寄存器用于此目的、应由自动处理 Timer_A_initCompareMode()
。 因此、我希望只需调用以下命令:
Timer_A_setCompareValue(TA3_BASE, TIMER_A_CAPTURECOMPARE_REGISTER_1, newDutyCycle);
void MY_TIMER_init(void) { // Set up Timer_A3 in Up Mode Timer_A_initUpModeParam upModeParams = {0}; upModeParams.clockSource = TIMER_A_CLOCKSOURCE_SMCLK; upModeParams.clockSourceDivider = TIMER_A_CLOCKSOURCE_DIVIDER_1; upModeParams.timerPeriod = 0xFFF; upModeParams.timerInterruptEnable_TAIE = TIMER_A_TAIE_INTERRUPT_DISABLE; upModeParams.captureCompareInterruptEnable_CCR0_CCIE = TIMER_A_CCIE_CCR0_INTERRUPT_DISABLE; upModeParams.timerClear = TIMER_A_DO_CLEAR; upModeParams.startTimer = false; Timer_A_initUpMode(TA3_BASE, &upModeParams); // Configure CCR1 for PWM output Timer_A_initCompareModeParam compareParams = {0}; compareParams.compareRegister = TIMER_A_CAPTURECOMPARE_REGISTER_1; compareParams.compareInterruptEnable = TIMER_A_CAPTURECOMPARE_INTERRUPT_DISABLE; compareParams.compareOutputMode = TIMER_A_OUTPUTMODE_RESET_SET; compareParams.compareValue = 0x7FF; Timer_A_initCompareMode(TA3_BASE, &compareParams); Timer_A_startCounter(TA3_BASE, TIMER_A_UP_MODE); }