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.

[参考译文] TMS320F280021:改进/避免 PWM 抖动

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1168273/tms320f280021-improve-avoid-pwm-jitter

器件型号:TMS320F280021

您好!

我对生成的 PWM 波形有问题、从占空比和应用的死区时间角度来看、它们是正确的、但波形不稳定、它在示波器上左右移动(抖动)
我已确保它不是我的范围内的触发问题、因此我确定它是一个软件问题、但我不知道导致此问题的原因

电源 我正在使用全局加载、并尝试更改 PWM 开关频率、但仍然具有相同的行为  

您是否有解决此问题的建议?

提前感谢

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

    您好、Mohamed、

    请分享您在示波器中看到的抖动截屏。  

    此外、您能否提供、您用来注释更多内容的切换频率、CMPA 值。

    最棒的

    Uttam

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

    您好、Uttam、

    设置的开关频率为100KHz、CMPA 值为250
    我刚刚在示波器上测量了开关频率、它在101.04 KHz 左右波动、我认为这就是我可能具有此抖动的原因

    电源 我不使用评估板、因此基本上、我使用评估板来刷写/调试评估板上的外部目标、因此我使用晶体振荡 器作为输入时钟频率


    我配置外部时钟的方式如下所示

    如果我正确配置了外部时钟、您能为我提供指导吗? 我还附上了所用20MHz 外部晶体的屏幕截图(我测量了它的晶体、正确的方法是>> 20MHz)   

    //
    //要将 INTOSC 用作时钟源、请注释#define USE_PLL_SRC_XTAL、
    //并取消注释#define USE_PLL_SRC_INTOSC
    //
    //#define USE_PLL_SRC_XTAL
    #define USE_PLL_SRC_INTOSC

    //
    // controlCARD 上的20MHz XTAL。 与 SYSCTL_getClock()一起使用。
    //器件上的10MHz INTOSC。
    //
    #define DEVICE_OSCSRC_FREQ 20000000U
    #define DEVICE_INTOSC_FREQ 10000000U

    #IF 定义(USE_PLL_SRC_XTAL)
    //
    //定义以传递到 sysctl_setclock()。 将按如下方式配置时钟:
    // PLLSYSCLK = 10MHz (INTOSC2)* 60 (IMULT)/(2 (REFDIV)* 3 (ODIV)* 1 (SYSDIV))
    //
    #define DEVICE_SETCLOCK_CFG (SYSCTL_OSCSRC_OSC2 | SYSCTL_IMULT (60)|\
    SYSCTL_REFDIV (2)| SYSCTL_ODIV (3)|\
    SYSCTL_SYSDIV (1)| SYSCTL_PLL_ENABLE |\
    SYSCTL_DCC_BASE_0)

    //
    //基于上述 device_setClock_CFG 的100MHz SYSCLK 频率。 更新
    //如果使用不同的时钟配置,请使用下面的代码!
    //
    #define DEVICE_SYSCLK_FREQ ((SYSCTL_OSCSRC_OSC2 * 60)/(2 * 3 * 1))

    定义了#Elif (USE_PLL_SRC_INTOSC)
    //
    //定义以传递到 sysctl_setclock()。 将按如下方式配置时钟:
    // PLLSYSCLK = 10MHz (INT_OSC2)* 30 (IMULT)/(1 (REFDIV)* 3 (ODIV)* 1 (SYSDIV))
    //
    #define DEVICE_SETCLOCK_CFG (SYSCTL_OSCSRC_OSC2 | SYSCTL_IMULT (30)|\
    SYSCTL_REFDIV (1)| SYSCTL_ODIV (3)|\
    SYSCTL_SYSDIV (1)| SYSCTL_PLL_ENABLE |\
    SYSCTL_DCC_BASE_0)

    //
    //基于上述 device_setClock_CFG 的100MHz SYSCLK 频率。 更新
    //如果使用不同的时钟配置,请使用下面的代码!
    //
    #define DEVICE_SYSCLK_FREQ ((DEVICE_INTOSC_FREQ * 30)/(1 * 3 * 1))
    #endif

    //
    //基于上述 DEVICE_SYSCLK_FREQ 和默认值的25MHz LSPCLK 频率
    //低速外设时钟分频器4。 如果是、请更新以下代码
    //使用不同的 LSPCLK 分频器!
    //
    #define DEVICE_LSPCLK_FREQ (DEVICE_SYSCLK_FREQ / 4)

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

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

    我看到错误配置 是针对时钟完成的。

    在代码中、您使用的是内部 CLK 而不是 XTAL。 根据我的理解、您希望使用 XTAL、请更正此错误。

    //要将 INTOSC 用作时钟源、请注释#define USE_PLL_SRC_XTAL、
    //并取消注释#define USE_PLL_SRC_INTOSC
    //
    //#define USE_PLL_SRC_XTAL
    #define USE_PLL_SRC_INTOSC

    2.如果您仍然看到 PWM 抖动、请告诉我? 您能否分享设置的片段、了解 如何测量 PWM 波形、这通常是由于测量错误而发生的。  

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

    抖动是固定的。 我错误地设置了时钟
    感谢您的回复