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.

[参考译文] TMS320F28384S:帮助设置 PWM 通道

Guru**** 2393295 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1103788/tms320f28384s-help-setting-up-pwm-channels

器件型号:TMS320F28384S
主题中讨论的其他器件:C2000WARE

尊敬的 TI 团队:

我正在将应用从 TI 28374S 迁移到28384S。

在28374S 中、我们有24个 EPWM1到 EPWM12设置、工作正常。

在具有32个 PMW 通道的新型28384S 上、在对之前的设置序列进行了几次微调后、我的前24个通道触发良好(EPWM1A-B 至 EPWM12A-B)、前24个信号没有问题。

但是、我将 EPWM13A-B 设置为 EPWM16A-B 的方式与24个正常工作的方式完全相同、但 我无法 让 这些设备熄火。

特别是、我们直接从处理器外部使用 EPWM16A、因此在我的第一个测试点、我应该看到这个简单的好方波10kHz、然后我命令不同的占空比。

问题:

通道 EPWM13至16是否与 EPWM1-12有任何不同? 这些是否需要以不同的方式进行配置?

您能否提供示例代码来简单地配置每个 PWM 通道、从而独立于给定的占空比触发?

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

    您好、Rafael、

    [~ userid="220216" URL"/support/microrims/C2000-microset-group/C2000/f/C2000-microriers-forum/1103788/tms320f28384s-help-setting-up PWM 通道"]通道 EPWM13至16是否与 EPWM1-12有任何不同? 这些是否需要以不同的方式进行配置?[/quot]

    与1-12 ePWM 模块相比、这些通道应该没有差异。

    [引用 userid="220216" URL"~/support/microrims/C2000-microset-group/C2000/f/C2000-microriers-forum/1103788/tms320f28384s-help-setting-up PWM 通道"]您能否提供示例代码来简单地配置每个 PWM 通道以独立于给定占空比触发?

    C2000Ware 中确实有一些示例、我建议您尝试、以确保您可以在 EPWM13至16上获得输出。 只需将任一示例的 ePWM 基础更改为 ePWM 13、14、15或16即可。 请告诉我这是否仍然不起作用、我将在硬件上自行测试。

    C:\ti\c2000\C2000Ware_version\driverlib\f2838x\examples\C28x\ePWM  

    此致、

    Marlyn

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

    您好、Marlyn、

    感谢您回答我的问题并指出示例代码。  不幸的是、我仍然需要帮助来了解我的错误。

    我修改了我的代码、以便在 电路板上使用 TI 的示例代码。  这是我用于初始化 EPWM 器件的代码、基本上是从 EPWM_ex11_configure_signal.c 文件中获取的。

    volatile uint16_dtc debugPeriodReadback[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    
    
    EPWM_SignalParams pwmSignal =
                {20000, 0.5f, 0.5f, true, DEVICE_SYSCLK_FREQ, SYSCTL_EPWMCLK_DIV_1,
                EPWM_COUNTER_MODE_UP_DOWN, EPWM_CLOCK_DIVIDER_1,
                EPWM_HSCLOCK_DIVIDER_1};
    
    void myEpwmInitFunction()
    {
        // setup all EMPWM pins
        EALLOW;
        GPIO_setPinConfig(GPIO_0_EPWM1A);
        GPIO_setPinConfig(GPIO_1_EPWM1B);
        GPIO_setPinConfig(GPIO_2_EPWM2A);
        GPIO_setPinConfig(GPIO_3_EPWM2B);
        GPIO_setPinConfig(GPIO_4_EPWM3A);
        GPIO_setPinConfig(GPIO_5_EPWM3B);
        GPIO_setPinConfig(GPIO_151_EPWM4A);
        GPIO_setPinConfig(GPIO_152_EPWM4B);
        GPIO_setPinConfig(GPIO_153_EPWM5A);
        GPIO_setPinConfig(GPIO_154_EPWM5B);
        GPIO_setPinConfig(GPIO_155_EPWM6A);
        GPIO_setPinConfig(GPIO_156_EPWM6B);
        GPIO_setPinConfig(GPIO_157_EPWM7A);
        GPIO_setPinConfig(GPIO_158_EPWM7B);
        GPIO_setPinConfig(GPIO_159_EPWM8A);
        GPIO_setPinConfig(GPIO_160_EPWM8B);
        GPIO_setPinConfig(GPIO_161_EPWM9A);
        GPIO_setPinConfig(GPIO_162_EPWM9B);
        GPIO_setPinConfig(GPIO_18_EPWM10A);
        GPIO_setPinConfig(GPIO_19_EPWM10B);
        GPIO_setPinConfig(GPIO_20_EPWM11A);
        GPIO_setPinConfig(GPIO_21_EPWM11B);
        GPIO_setPinConfig(GPIO_167_EPWM12A);
        GPIO_setPinConfig(GPIO_168_EPWM12B);
        GPIO_setPinConfig(GPIO_137_EPWM13A);
        GPIO_setPinConfig(GPIO_138_EPWM13B);
        GPIO_setPinConfig(GPIO_139_EPWM14A);
        GPIO_setPinConfig(GPIO_140_EPWM14B);
        GPIO_setPinConfig(GPIO_141_EPWM15A);
        GPIO_setPinConfig(GPIO_142_EPWM15B);
        GPIO_setPinConfig(GPIO_143_EPWM16A);
        GPIO_setPinConfig(GPIO_144_EPWM16B);
        EDIS;
    
        // Disable sync(Freeze clock to PWM as well)
        SysCtl_disablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC);
     
        EPWM_configureSignal(EPWM1_BASE, &pwmSignal);
        EPWM_disablePhaseShiftLoad(EPWM1_BASE);
        EPWM_setPhaseShift(EPWM1_BASE, 0U);
        EPWM_enableSyncOutPulseSource(EPWM1_BASE, EPWM_SYNC_OUT_PULSE_ON_CNTR_ZERO);
        debugPeriodReadback[0] = EPWM_getTimeBasePeriod(EPWM1_BASE);  // For my debug
    
        EPWM_configureSignal(EPWM2_BASE, &pwmSignal);
        EPWM_disablePhaseShiftLoad(EPWM2_BASE);
        EPWM_setPhaseShift(EPWM2_BASE, 0U);
        EPWM_setSyncInPulseSource(EPWM2_BASE, EPWM_SYNC_IN_PULSE_SRC_SYNCOUT_EPWM1);
        debugPeriodReadback[1] = EPWM_getTimeBasePeriod(EPWM2_BASE);    // For my debug
    
        // ... here I repeat the same set of lines for EPWM3 to 16
        
        //Re-enable Peripheral Clock
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC);
    }
    
    

    我有一个1Hz 环路、获取一个全局占空比值、我从调试器窗口将该值设置为0至100%的值 、并在每个通道上命令所需的直流电流。

    但是、使用 TI 示例代码、我会获得与原始代码完全相同的行为。  ePWM 1A-B 至12A-B、无问题火灾(占空比和频率正常)、但 在 EMDW 13-16上没有任何活动。

    这里是一个示波器图像、我在50%直流和20kHz 频率下捕获 ePWM 1A (2至12 A-B 侧相同)输出(蓝线)、而 EPWM16A (ePWM 13至16相同)以0%的频率连接到平面下方的红线。

    我想把 这个问题归咎于 我们的新电路板、并要求我们的 EE 各位向下追击、在调试应用时、我会看到一些奇怪的事情。

    当我浏览每个通道的配置块时、我会将周期设置读回我的 debugPeriodReadback 变量。  EPMW 1-12的周期读回正常、但13-16的周期读回全为0。  检查寄存器存储器空间也确认1-12中的某些寄存器的值不是0、而 ePWM 13-16中除了0以外没有其他显示。

    ePWM_configureSignal (EPWM12_BASE、&pwmSignal);
    ePWM_DisablePhaseShiftLoad (EPWM12_BASE);
    ePWM_setPhaseShift (EPWM12_BASE、0U);
    ePWM_setSyncInPulseSource (EPWM12_BASE、ePWM_SYNC_IN_PULSE_SRC_SYNCOUT_EPWM1);
    debugPeriodReadback [11]= ePWM_getTimeBasePeriod (EPWM12_BASE);  //这个读取正常

    ePWM_configureSignal (EPWM13_BASE、&pwmSignal);
    ePWM_DisablePhaseShiftLoad (EPWM13_BASE);
    ePWM_setPhaseShift (EPWM13_BASE、0U);
    ePWM_setSyncInPulseSource (EPWM13_BASE、ePWM_SYNC_IN_PULSE_SRC_SYNCOUT_EPWM1);
    debugPeriodReadback [12]= ePWM_getTimeBasePeriod (EPWM13_BASE);//这一直到 EPWM16A 读取0。

    通过检查 ePWM 控制寄存器存储器、我看到 EPMW1-12有一小部分寄存器不是0、而与13-16相关的配置寄存器都是0。

      

    如果您有任何疑问、或者您可能需要其他信息来帮助我解决此问题、请告诉我。

    谢谢你。

    拉斐尔

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

    您好、Rafael、

    非常感谢您的详细检查。 现在、让我检查一下我的侧、我将在我的器件上运行相同的代码、看看我是否遇到相同的问题。 我将在明天作出答复。  

    此致、

    Marlyn

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

    您好、Rafael、

    我今天无法获得正确的硬件来测试这一点、但明天将尝试找到正确的硬件。 我会随时为您发布。

    此致、

    Marlyn

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

    您好、Marlyn、

    感谢您不断向我介绍这方面的最新进展。  这是办公室的热门话题、因为我们发现自己处于从使用28374S 的一个电路板版本到使用28384S 的下一个电路板版本的设计过渡阶段。  我们只有少数旧板可供使用、最终确定此板的验证将保留新板的订购顺序。

    我很想知道您在调用 ePWM 13 - 16上的配置后是否会遇到相同的问题、其中配置/控制寄存器全部为0。

    接下来、我将尝试 为这个新处理器创建一个新的空项目、并且只添加用于配置和设置 PWM 的最小代码。  我不知道我是否  有导致问题的新旧处理器库或文件的混合。

    谢谢你。

    拉斐尔

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

    您好、Marlyn、

    这一问题已经解决。

    问题在基础知识方面、我忘记添加调用来启用新外设。 (啊!)

    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_EPWM13);
    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_EPWM14);
    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_EPWM15);
    SYSCTL_enablePeripheral (SYSCTL_PERIPH_CLK_EPWM16);

    将这些行添加到我的初始化函数中、EPWM13-16现在工作正常。

    感谢您迄今提供的帮助。