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.

[参考译文] CCS/MSP430FR2311:基于计时器的 PWM 输出干扰

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/611202/ccs-msp430fr2311-timer-based-pwm-output-glitches

器件型号:MSP430FR2311
主题中讨论的其他器件:LM5111MSP430F5529

工具/软件:Code Composer Studio

您好!

我将根据   模拟电压生成两个可变占空比 PWM。 一个 PWM 输出是另一个 PWM 输出的反相。  该 PWM 输出  连接到 LM5111栅极驱动器、以驱动 FET 来控制 LED 亮度。 当我运行代码时、   有一段时间、两个 PWM 输出都为低电平、这会导致 LED 驱动 器重新启动。 因此、LED 闪烁而不是持续亮起。

我正在使用 msp430FR2311 Lanchpad 和 code composer 为 PWM 输出生成代码。    计时器上正在使用向上/向下计时器模式。  我正在读取 P1.4上的模拟电压、并在 P1.6和 P1.7上生成 PWM 信号。

我附加了两个图像。 在第一幅图像中、顶部的两个波形是 PWM 输出、底部的波形是 LED 驱动器电压。 顶部(黄色)波形有毛刺脉冲。  在第二幅图像中、两个波形是 PWM 输出。 请注意、底部波形 有毛刺脉冲。  使用同一端口进行计时器输出和 ADC 读取是否有问题?

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

    您好!

    此问题可能是由您的 SYSCFGx 设置引起的。 请参阅以下两个主题、了解一些相关的讨论。

    此致、

    James

    MSP 客户应用

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

    尊敬的 James:

    我检查了 Cout 引脚、PWM 输出和 P2.0之间没有电压相关性。 此外、我不会将 P2.0用于程序中的任何功能。

    我还添加了建议行"SYSCFG2 |= TB0TRGSEL;"、因为我使用的是 TB0、它没有停止毛刺脉冲。 或者、我尝试使用 "SYSCFG2 |= TB1TRGSEL"、 这也没有停止毛刺脉冲。  

    P2.0电压是下方的顶部波形、其中一个 PWM 输出低于。  P2.0上的电压仅约为100mV。

    您是否了解任何其他解决方案?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我能否在一天结束前得到最后一个问题的答案? 我有一个在星期五之前为客户完成的截止日期。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我还尝试使用端口2来生成 PWM、但这没有解决干扰问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Neville、

    我认为、您在 CCR 寄存器上使用 Toggle/Reset 和 Toggle/set 可能会导致代码中出现毛刺脉冲、并且您在更新 CCR 值时不会停止计时器。

    当您在不停止计时器的情况下更改占空比时、您可能会将 CCR 寄存器置于未知状态、而此时不清楚它们下一步是将切换为高电平还是低电平。 使用 Set/Reset 和 Reset/Set 以及在更改 CCR 值之前停止计时器将有助于缓解这种情况。

    此外、您还使用轮询来获取 ADC 值、然后每次更改 CCR 值。 一种更好的方法是使用中断来获取 ADC 值、然后将其与前一个值进行比较。 只有当 ADC 值发生显著变化时、才应更新占空比。

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

    在更改 CCR 值之前、我停止计时器、仅在 ADC 值发生特定量的变化时才更改 CCR 值、

    我将输出模式更改为"设置/复位"和"复位/设置"。 这无法解决问题。 但是、闪烁现在发生的较少。 这可能是 因为 ADC

     没有轮询时进行多少转换。

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

    是否可以在不改变 PWM 脉冲的情况下动态改变 CCR 值? 您将如何解决此问题?

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

    我不确定我是否理解您的问题。 您尝试避免对 PWM 脉冲进行何种更改?

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

    为了澄清、在一个周期内、由于 CCR 值的改变、PWM 脉冲宽度不正确。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Neville、

    您能否通过示波器或图表发布图片、以说明您所谈论的 PWM 脉冲宽度有何错误?

    但是、如果看不到图片、我想说您最好的办法是在更改寄存器之前停止计时器。 如果您无法做到这一点、则需要相当广泛地识别和处理任何边缘情况、以便在更改寄存器时不会出现意外情况。

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

    您好、Matt、

    示波器图像位于该论坛的最顶部。 我停止计时器、但它没有解决问题。

    我还收到了有关使用 MSP430F5529生成可变占空比 PWM 信号的应用手册。 为了选择合适的 CCR 值、他们使用了一种使用 TBxCCTLx 寄存器中的 CCI 位来检查 CC 定时器输出的值的方法。 此外、在设置 CCR 值之前、它们不会停止计时器。 您对这种方法有何看法?

    应用手册: www.ti.com/.../slaa513a.pdf

    这是其中断的代码片段。

    /*多时基 PWM
    *周期由两个 TBCCRx 偏移值之和决定
    *占空比由高/低 TBCCRx 值
    *与总周期的比率决定。
    //
    
    Timer B0中断服务例程
    #pragma vector=TIMERB0_vector
    __interrupt void TIMERB0_ISR (void)
    {
    if (TBCCTL0 & CCI)//如果输出当前为高
    电平{
    TBCCR0 += 300;// 75% HIGH
    }
    else
    {
    TBCCR0 += 100; // 25%低
    电平}
    }
    
    // Timer_B1中断矢量(TBIV)处理程序
    #pragma vector=TIMERB1_vector
    __interrupt void TIMERB1_ISR (void)
    {
    switch (_偶_IN_RANGE (TBIV、14))
    {
    案例0:break;
    案例2:if (TBCCTL1 & CCI)
    {
    TB0CCR1 + 100%/= 100%/ CCR1;
    
    
    案例
    4
    
    
    :// bak if (TBCCTL2和 CCI)
    {
    TB0CCR2 += 1250;// 31.25%高
    }
    else
    {
    TB0CCR2 += 2750;// 68.75%低
    }
    break;
    case 6:if (TBCCTL3 & CCI)
    {
    TB0CCR3 += 4000;// 80%高
    电平}
    else
    {
    TB0CCR3 += 1000;/ TB8
    
    :低电
    平} if (TBCCTL4和 CCI)
    {
    TB0CCR4 += 1500;// 25%高
    }
    else
    {
    TB0CCR4 += 4500;// 75%低
    }
    break;
    case 10:if (TBCCTL5和 CCI)
    {
    TB0CCR5 += 4000;// 57.1%高
    电平}
    else
    {
    TB0CCR5 += 3000;// 42.9低
    
    电
    平}: if (TBCCTL6 & CCI)
    {
    TB0CCR6 += 3000;// 37.5%高
    电平}
    else
    {
    TB0CCR6 += 5000;// 62.5%低
    电平}
    break;
    case 14:P1OUT ^= 0x01;//溢出
    中断;
    默认值:break;
    }
    

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

    抱歉、我不确定您是否遇到了与您最初看到的 PWM 变化不同的情况。

    当您在 E2E 上发布代码时、您可以使用" RTF 格式"选项中的"使用 Syntax荧 光笔插入代码"按钮、使代码更具可读性。 我已经编辑过您的帖子以执行此操作。

    与以前一样、不暂停计时器会带来风险。 您可能会遇到可能导致您的应用程序无法正常工作的意外情况、因此彻底探索可能的边缘情况非常重要。 但是、如果可能的话、暂停计时器就是要做的事情。

    对于您的特定应用、避免在计时器关闭时信号变为低电平的一种方法是将计时器引脚的 SEL 寄存器更改为 GPIO 功能、并在停止计时器之前将引脚驱动为高电平。 这样、引脚不会变为低电平、LED 驱动器不会复位。

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

    如果我在停止计时器之前将 GPIO 设置为高电平、然后在设置 CCR 寄存器后将引脚配置为计时器输出、则问题仍然存在。 我认为这个问题与正在停止的计时器无关、因为在设置 CCR 值之前、驱动程序仍然会在计时器停止的情况下或不停止计时器的情况下复位。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Neville、

    如果您查看示波器输出、两个 PWM 信号是否仍然同时变为低电平?

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

    您好、Matt、

    LED 驱动器似乎在与中断无关的时刻关闭... 我在中断中有一个 GPIO 变为高电平、此时驱动程序不会关闭。 当通道1变为低电平时、驱动器似乎关闭。 请注意、PWM 输出之间确实存在重叠。

    顶部波形通道1和2是 PWM 输出。 通道3是当中断被置位时设置为高电平的 GPIO。 通道4是 LED 驱动器电流。

    我手动将两个 PWM 输出设置为高电平的时间显示在第一次捕捉中。 此时、通道1已经是高电平、因此将 GPIO 设置为高电平没有我想象的那样有用。

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

    您好、Neville、

    LED 驱动器文档是否定义了 LED 驱动器将复位的任何其他情况?  

    此致、

    Matthew

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

    您是否能够解决此问题?

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

    自从我开始在 PCB 而不是试验电路板上进行测试以来、问题已停止。 我认为、由于连接不良、存在接地问题。

    我会认为这个问题已经解决、因为它不是由于 MSP430。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您对此进行故障排除的帮助!