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.

[参考译文] MSP430I2021:多个 PWM 输出、一个计时器

Guru**** 2546020 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/779740/msp430i2021-multiple-pwm-outputs-one-timer

器件型号:MSP430I2021

可能是自己设计的角落。  CCR0/1/2作为引脚 P1.4/5/6上的输出 TA0.0/1/2可用、因此我可能错误地认为这意味着您可以使用它们(具体为 CCR0)。  我希望从一个计时器获得3个 PWM 信号、所有信号的频率/周期都相同、但占空比独特。  从阅读数据表中可以看出、我应该能够以250Hz 的连续模式(翻转0xFFFF)完成这一操作、但我似乎没有任何幸运。 我已经阅读过有关巧妙使用 ISR 来实现多个频率的文章、但这不是我要尝试的。  我应该能够做到这一点吗?

//启动计时器
Timer_A_clearTimerInterrupt (timer_A0_BASE);
Timer_A_initContinuousModeParam initContinuousParam ={0};
initContinuousParam.clockSource = TIMER_A_CLOCKSOURCE_SMCLK;
initContinuousParam.clockSourceDivider = TIMER_A_CLOCKSOURCE_divider;
initContinuousParam.timerInterruptEnable_TAIE = TIMER_A_TAIE_INTERRUPT_DISABLE;
initContinuousParam.timerClear = timer_a_do 清除;
initContinuousParam.startTimer = false;
Timer_A_initContinuousMode (timer_A0_BASE、&initContinuousParam);
Timer_A_startCounter (timer_A0_BASE、
Timer_A_Continuous_mode
);

//初始化比较寄存器以生成 PWM1
Timer_A_initCompareModeParam initComp0Param ={0};
initComp0Param.compareRegister = TIMER_A_CAPTURECMPARE 寄存器_0;
initComp0Param.compareInterruptEnable =
Timer_A_CAPTURECMPARE 中断禁用;
initComp0Param.compareOutputMode = TIMER_A_OUTPUTMODE_SET_RESET;
initComp0Param.compareValue = DUTY0;
Timer_A_initCompareMode (timer_A0_BASE、&initComp0Param);

//初始化比较寄存器以生成 PWM2
Timer_A_initCompareModeParam initComp1Param ={0};
initComp1Param.compareRegister = TIMER_A_CAPTURECMPARE 寄存器_1;
initComp1Param.compareInterruptEnable =
Timer_A_CAPTURECMPARE 中断禁用;
initComp1Param.compareOutputMode = TIMER_A_OUTPUTMODE_SET_RESET;
initComp1Param.compareValue = DUTY1;
Timer_A_initCompareMode (timer_A0_BASE、&initComp1Param);

//初始化比较寄存器以生成 PWM3
Timer_A_initCompareModeParam initComp2Param ={0};
initComp2Param.compareRegister = TIMER_A_CAPTURECMPARE 寄存器_2;
initComp2Param.compareInterruptEnable =
Timer_A_CAPTURECMPARE 中断禁用;
initComp2Param.compareOutputMode = TIMER_A_OUTPUTMODE_SET_RESET;
initComp2Param.compareValue = DUTY2;
Timer_A_initCompareMode (timer_A0_BASE、&initComp2Param);

谢谢、

Scott

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

    我认为 CCR0不会输出 PWM。 如果您的工作频率不是那么快、您可以尝试使用计时器的 ISR 来调整 GPIO。

    此致
    Gary