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.

[参考译文] MSP430F5324:MSP430F5324中TimerB的PWM发生器

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/614877/msp430f5324-pwm-generator-of-timerb-in-msp430f5324

部件号:MSP430F5324

您好,e2e:

 

MSP430F5324中TimerB的计时器输出存在问题。

如果更改频率,第一个脉冲不是我们预期的。 该值大于预期值,且脉冲比预期值长;

 

以下是一个示例。

 

功能要求:

           输出PWM定义。 (更改步长为25毫秒。)

 

计时器和模式选择:

           CCR0正在对频率工作。

CCR2正在运行占空比。

           

代码:

初始化函数:

void enable_timerB_tone(){

           TB0CCR0 = 0;

           TB0CCR2 = 0;

           TB0CCTL2 = CLLD_1 | OUTMOD_6

           TB0CTL = TBSSEL__SMCLK + MC__UP + ID__2 + TBCLR

       }

 

每25毫秒更改参数以更改频率:

void set_parameters_timerB (uint16_t period,uint16_t pulse_width_counter){

           TB0CCR0 =周期;

           TB0CCTL0 = CLLD_3

           TB0CCR2 =脉冲宽度计数器;

       }

 

结果:

使用OSC检查输出:

紫色线标记参数更改时间(GPIO切换用于调试,它表示MCU中的值更改)。

绿线是CCR2的输出。

紫色箭头是调用“set_parameters_timerB()”函数的时间(也已完成)。

绿色箭头表示问题脉冲

 

(改变脉冲之前为90US,问题之后为100us。 两侧都是正确的参数。)

(从问题脉冲的上升沿到脉冲的下一上升沿,周期也大于预期值。)

 

      

 您对此问题有什么建议吗?

提前感谢。

Leon

 

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

    我正在检查此问题,并将在我有想法时回复您。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Leon:

    您是否检查了您的项目中是否考虑了用户指南中的以下注意事项:

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

    您是否检查过Dietmar的建议?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Jetim:

    我不确定它是否符合我的理解。 这意味着需要在操作寄存器(几乎所有寄存器)之前停止计时器B。 当前,我们的要求需要持续更新频率和占空比。

    如果需要停止任何操作。 如何理解“CCLD”寄存器和“TBCLGRP”寄存器,以及如何使用它们。

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

    我不确定这是否正确,也不确定我对Dietmar的评论的理解。 "需要在操作寄存器(几乎所有寄存器)之前停止定时器B。"

    当前,我们的要求是不断更新频率和工作周期的解决方案。

    如果需要停止计时器B的任何操作。 如何理解“CLLD”和“TBCLGRP”寄存器的含义。

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

    我不确定这是否正确,也不确定我对Dietmar的评论的理解。 "需要在操作寄存器(几乎所有寄存器)之前停止定时器B。"

    目前,我们的要求是持续更新频率和占空比的解决方案。

    如果需要停止计时器B的任何操作。 如何理解“CLLD”和“TBCLGRP”寄存器的含义。

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

    您好,Leon:

    如果我理解您的代码正确,您使用的是由DCO提供的SMCLK,这意味着您正在同步运行时钟定时器 和CPU 吗?

    在初始化功能中,您使用CLLD = 01B表示TBxCLn加载,当TBxR计数为0时。

    当您更新频率(TB0CCR0) 和占空比值(TB0CCR2)时,当TBxR计数为TBxCLn时,将CLLD设置更改为11b TBxCLn加载

    那么,您能告诉我您写入TB0CCR0和TB0CCR2的值是相同的值吗?
    它的范围看起来是因为在100us脉冲之后,你可以再次看到90US脉冲,对吗?

    那么,我们的想法是在下一个周期后更新频率和脉冲宽度(在您的图示中绿色箭头之后)?
    这是因为旧值仍应位于比较闩锁中,对吗?

    将更新功能的顺序更改为以下顺序是否有帮助:

    void set_parameters_timerB (uint16_t period,uint16_t pulse_width_counter){

               TB0CCR0 =周期;

                TB0CCR2 =脉冲宽度计数器;

               TB0CCTL0 = CLLD_3;

           }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Leon:
    上述请求信息是否有任何更新,或者您是否已经解决了这种情况?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Dietmar,您好!

    目前客户没有反馈,我会与他们核对,感谢您的注释。

    Leon