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.

[参考译文] MSP430F5659:2个相同定时器的 PWM 处于 aren't 同步状态

Guru**** 2538950 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/721722/msp430f5659-2-pwms-of-the-same-timer-aren-t-synchronized

器件型号:MSP430F5659

您好!

我想使用定时器 A0的两个比较块。 TA0由32.768kHz 的外部晶振供源。 我希望第一个 PWM 信号的占空比为1/128、频率为256Hz、另一个信号的占空比为50%。 以下是我的代码:

void main (void){

TA0CTL = TASSEL_ACLK | ID_1 | MC_STOP;

// PWM1
P1SEL |= BIT6;
P1DIR |= BIT6;
P1OUT &=~BIT6;
TA0CCR1 = 1;

// PWM 2引脚
P1SEL |= BIT7;
P1DIR |= BIT7;
P1OUT &=~BIT7;
TA0CCR2 = 128;

TA0R = 0;
TA0CCR0 = 128;
TA0CTL |= MC__UP;

TA0CCTL2 = OUTMOD1 | OUTMOD0 | CCIE;
TA0CCTL1 = OUTMOD2 | CCIE;

} 

我得到我想要的波形、但它们不会同步在一起。 PWM2切换和 PWM1复位之间存在大约50us 的延迟。 它们是否不应该同步?

从数据表中:

OUTMOD3:当定时器计数到 TAxCCRn 值时、输出被置位。 当定时器计数到 TAxCCR0值时、它被复位。

OUTMOD4: 当定时器计数到 TAxCCRn 值时、输出被切换。

在本例中、TA0CCR2等于 TA0CCR0 (128)、因此我猜两个事件会同时发生。

谢谢、

Fred

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

    您好、Fred、

    您能否分别检查 TA0CCTL1和 TA0CCTL2中的输出模式设置? 我有点困惑、因为您将寄存器的设置与下面的文本中的描述不同:例如、TA0CCTL1中的 OUTMOD2与 OUTMOD4。

    其次、您可以查看《用户指南》17.2.5.1.1中的输出示例、因为这样可以很好地指示输出行为。

    我看到您正在设置捕获比较中断使能位。 您是否正在使用中断服务例程? 在您发送的代码片段中、我看不到一个、因此您可能需要考虑在不需要时禁用中断。 只是为了确保中断处理不会导致任何您目前未考虑的延迟。

    如果没有任何建议帮助、请粘贴一个快速图、说明您希望输出的行为方式以及它的实际行为方式(图17-12的样式是可行的)。

    此致、

    Britta

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

    您好、Britta、感谢您的回答。

    msp430f5xx_6xxgeneric.h 中定义了以下宏

    #define OUTMOD2 (0x0080) /*输出模式2 */
    #define OUTMOD1 (0x0040) /*输出模式1 */
    #define OUTMOD0 (0x0020) /*输出模式0 */ 

    在我的案例中、TA0CCTL2位于 OUTMOD3中、TA0CCTL1位于 OUTMOD4中。 确实可以禁用中断、但这不会影响硬件、对吧?

    您可以在下面看到我尝试获取的信号

    谢谢、

    Fred

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

    您好、Fred、

    感谢您的澄清。

    让我回顾一下我收集到的信息、并根据我的理解给出一些指示。 请验证这对您是否有意义:

    输出单元1:

    -在切换模式(输出模式4)下使用 CCR0作为基极(128)和 CCR1 (1)

    -我希望上面显示的信号反相、启动条件复位、如示例和图所示

    输出单元2:

    -在 设置/复位模式(输出模式3)下使用 CCR0作为基址(128、因为它与 CCR0寄存器和设置相同)和 CCR2 (也是128)。

    请注意 UG 章节17.2.5输出单元中的以下内容:

    最后一句适用于您的输出单元2、因为您已经设置了 CCR2 = CCR0、因此您将看到 EQU2 = EQU0。 我希望不会看到您在同一时间设置和复位的输出信号。 要查看所需的输出、请调整 CCR2、例如 CCR2=CCR1。

    这对您来说有道理吗?

    此致、

    Britta

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

    您好、Britta、

    不完全是这样。 我意识到我在上一篇文章中发送的图表上切换了 TA0.1和 TA0.2、很抱歉。 我将查看我的代码、看看我是否也将其反转了。

    输出1: 在设置/复位(非切换)模式(输出模式3)下使用 CCR0作为基极(128)和 CCR1 (1)。

    输出2: 在 切换模式(未设置/复位)(输出模式4)下使用 CCR0作为基址(128、因为它与 CCR0寄存器和设置相同)和 CCR2 (也是128)。

    基本上、对于输出2、我希望占空比为输出1频率的一半(256Hz / 2 = 128Hz、晶振= 32.768kHz)。

    现在、我还意识到、如果我需要256Hz、而不是128、我需要将 CCR0设置为127。 只是一个小的观察、它不应影响我看到的行为。

    Fred

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

    请继续并查看代码。 我想您也在那里切换了输出模式设置、但我可能会根据图误解了它。 请看一下。

    如果更正了该错误、则输出1应该正常。
    对于输出2、有以下注意事项:我看到您已经考虑到切换模式基本上会使计时器周期加倍。 50%占空比设置为"切换"输出设置、因此该设置应该适合您。 然后、CCR2将定义两个计时器输出之间的移位(在哪里需要 EQU2)。 从您的第一篇帖子中、我认为您希望两者都以同步方式开始、以便 CCR2应等于 CCR1 (图17-12中的图表显示了它的外观)。

    它能解决您的问题吗?

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

    我已经查看了代码、一切都很好。 TA0CCR1为1、TA0CCTL1处于 OUTMOD3 (置位/复位)、TA0CCR2 = 128、TA0CCTL2处于 OUTMOD4 (切换)。


    我不希望它们在第一个计数时同步、而是在第128个计数时同步、如我发送的图形所示。 如果我将 TA0CCR2设置为1、同步是否不会在第一个计数时进行?

    理想情况下、当 TA0CCR0和 TA0CCR2计数到128时、两个波形都将切换、而当 TA0CCR1计数到1时、输出1也将切换。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    为了获得我发送的图形中所描述的波形、您需要将哪些值设置到寄存器?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Britta、

    我刚刚进行了测试、我的延迟为~30微秒、而不是50、因此它看起来恰好是 RTC 的一个计数(32768Hz)。

    此外、我尝试将两个输出反相(TA0.1用作 TA0.2、反之亦然)、但延迟仍然存在(计时器输出 OUTMOD4比 OUTMOD3中的计时器快30微秒切换)。

    谢谢、

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

    我只是尝试在0而不是128上切换 OUTMOD4中的输出、现在两个波形都同步了。

    我不清楚它现在起作用的原因。 当定时器从 TA0CCRx-1计数到 TA0CCRx 或在 TA0CCRx 计数到 TA0CCRx+1之前发生切换吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    好的、这只是在其他一个帖子中混在一起。

    当说 

    user4725373 说:
    我不希望它们在第1个计数时同步,但在第128个计数
    时 ,这意味着您希望输出单元1同时复位和输出单元2切换。 但它们不需要处于相同的状态、对吧?

    此致、

    Britta

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

    现在、您明确表示要将切换与复位同步、如下所示:
    '当定时器计数到 TAxCCRn 值时、输出被切换。 输出周期是定时器周期的两倍。" (摘自 SLAU208的表17-2)
    因此、从该 CCR2应该等于 CCR0。 我记得您之前的帖子已将 CCR0更改为127、对吧? 您是否尝试将 CCR0和 CCR2同时设置为127并查看其中一个输出单元的延迟? 第17.2.5.1节规定:"对于除模式0之外的所有模式、OUTn 信号随着定时器时钟的上升沿而变化。" 这当然适用于两个输出单元。
    这将导致您在计时器从 TAR 计数到 TAR +1时切换的情况。 尽管如此、这适用于两个输出。

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

    这是使其正常工作的配置。 正如您说过的、我希望在复位的同时进行切换。

    TA0CTL = TASSEL_ACLK | ID_1 | MC_STOP;
    
    P1SEL |= BIT6;
    P1DIR |= BIT6;
    P1OUT &=~BIT6;
    
    P1SEL |= BIT7;
    P1DIR |= BIT7;
    P1OUT &=~BIT7;
    
    TA0CCR1 = 0;
    TA0CCTL1 = OUTMOD2;
    
    TA0CCR2 = 1;
    TA0CCTL2 = OUTMOD1 | OUTMOD0;
    
    
    TA0R = 0;
    TA0CCR0 = 127;
    TA0CTL |= MC__UP; 

    现在、切换与复位同时发生。 那么、在 TA0CCR0 = 127时发生复位、但是如果我设置 TA0CCR1 = 0、在127时也会发生切换呢?

    谢谢、

    Fred

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

    这必须取决于计时器架构(内部)。 请让我调查一下这个细节、然后返回给您。
    由于您的问题似乎已得到解决、如果这需要几天时间、您或许可以。 我想在本周结束之前就有答案-希望在此之前也有答案。

    此致、
    Britta
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢、我将继续关注。 事实上,时间并不是这方面的关键因素,而是对形势有了很好的了解。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Fred、

    非常感谢您的耐心等待。 我花了一段时间、但现在我应该有您要查找的信息。

    让我快速重新捕获这一切所涉及的场景:
    您希望基于同一个计时器同步两个 PWM。 PWM2的频率应为 PWM1的一半、因此您使用切换模式。 在 PWM1的复位时应进行同步、这意味着在复位发生时需要进行切换。

    您看到的是、当设置 CCR2 = CCR0 = 127时、"切换"在复位前发生一个计时器周期。 同样、当设置 CCR2 = 0而 CCR0= 127时、您将看到所需的同步。

    我发现、为了进行 CCR0相关比较(例如从设置/复位模式复位)、为处于向上计数模式的计时器添加了一个额外的同步周期。 这说明了在设置 CCR2=0时两个 PWM 同步的原因。

    希望这能解答您的问题。
    此致、
    Britta
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Britta、

    感谢您回来。 SLAU208中是否记录了在向上计数模式下添加的同步周期?

    Fred

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

    不幸的是、不是。 这就是为什么我花了这么长时间来验证它的原因。 不过、我将着手更新文档。
    非常感谢您对此进行了重点介绍!

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

    祝你度过美好的一天!

    Fred