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.

[参考译文] TMS320F28377D:在定制 TMS320F28377D 设计上驱动 PWM 时遇到问题

Guru**** 2596205 points
Other Parts Discussed in Thread: TMS320F28377D, C2000WARE, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1249913/tms320f28377d-having-issues-driving-pwm-on-custom-tms320f28377d-design

器件型号:TMS320F28377D
主题中讨论的其他器件: C2000WARESysConfig

大家好!

我正在使用一个采用 TMS320F28377D 并基于 C2000XL Launchpad 设计的参考设计。 我正在编写一个程序、它会驱动 PWM 信号来触发电池充电器的某些事件。

我已经能够使用 C2000Ware 中的上下示例手动驱动所有 PWM、但分别是 GPIO 16和18上的 ePWM 9A 和 ePWM 10A。 10B 和9B 没有引脚输出。 我觉得我已经测试了所有内容、是否还有其他方法需要解决?

我已经测试了以下各项:

  • 换入另一个板
  • 直接探测 CPU 的引脚、通过示波器检查波形
  • ePWM 驱动器适用于带 F28779D 的 launchpadXL
  • 已检查引脚配置
  • 检查定时器/时钟问题
  • 电源或电缆问题
  • 已重新安装 C2000ware 以确保安装最新版本

我可能会遗漏一些,但这些似乎是最明显的。

以下是该板的引脚排列:

谢谢。

kg

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

    你好、kg、

    您是否在 SysConfig 的帮助下使用 driverlib? 如果没有、您只使用 driverlib 吗? 如果不是 driverlib 或 SysConfig、您是否使用 bitfield 支持?

    您能否提供您的 GPIO 引脚配置? 您能否在调试时验证寄存器是否有值、以及从 AQCTLA 寄存器发生的操作限定符? 您能选择 CMPA/ZRO 上的操作吗? 您还可以在 CCS 寄存器视图内通过持续刷新来验证 TBCTR 是否实时更新? 还要验证您的计数器模式确实处于向上计数模式。

    此致!

    马瑞安

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

    您好、Ryan、

    我将使用 F28x_Project 而不是 driverlib、因为这是代码库基于这里。 我目前不使用 bitfield 支持。

    我的 GPIO 引脚配置为:

    EPWM1A -> GPIO0

    EPWM2A -> GPIO2

    EPWM3A -> GPIO4

    EPWM4A -> GPIO6

    EPWM4B -> GPIO7

    EPWM5A -> GPIO8

    EPWM5B -> GPIO9

    EPWM6A -> GPIO10

    EPWM6B -> GPIO11

    EPWM7A -> GPIO12

    EPWM7B -> GPIO13

    EPWM8A -> GPIO14

    EPWM8B -> GPIO15

    EPWM9A -> GPIO16

    EPWM10A -> GPIO18

    EPWM11A -> GPIO20

    EPWM12A -> GPIO22

    EPWM12B -> GPIO23

    PWM 驱动器和 EPWM 配置:

    e2e.ti.com/.../F2837xD_5F00_epwm.he2e.ti.com/.../4130.main.c

    我看到的是 TBPRD 和 AQCTLA 寄存器上的值。 TBCTL 寄存器不断刷新。 除了在配置中的一些多路复用外、几乎所有引脚的代码都是相同的。 如果我并排比较寄存器、它们似乎都以相同的方式工作。 除了前面提到的波形外、我可以插入示波器、查看所有器件上的向上方波形。

    此外、还可能出现硬件问题、有些电路板曾经工作过。 我有20块电路板可以工作、有20块电路板不工作、所有这些电路板都使用相同的代码。 我明白这不是您最终可以解决的事情、但我不想在此时排除任何问题。 如果有任何其他途径需要我进行故障排除、请告诉我。

    谢谢。

    K·G·卡登

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

    你好、KG、

    是否按照用户指南下表所述为 EPWM9和10配置 GPIO MUX 选项:



    您可以在"GPIO 和外设多路复用"部分下的"GPIO"一章中找到此内容。

    我在 InitEPwm9Gpio()函数中使用以下代码将 GPIO16配置为 EPWM9A,并且能够在 GPIO16上看到 PWM 信号:  

        GpioCtrlRegs.GPAGMUX2.bit.GPIO16 = 0x01;
        GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 0x01;


    我怀疑、因为从 EPWM9多路复用器选择开始过渡到不同的组、因此需要相应地进行选择。

    谢谢。

    Prarthan.

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

    请允许我拍一下,谢谢!

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

    抱歉、我的 ePWM 12A/12B 无法正常工作、不是 EPWM9。 我的原理图读错了。

    尽管如此,我应用你的建议12没有运气。

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

    好吧,你能给我发送你为 InitEPwm12Gpio()函数编写的代码吗,我会尝试看看我是否能复制它用于 EPWM12

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

    来这里吧!

    //
    // InitEPwm12Gpio - Initialize EPWM12 GPIOs
    //
    void InitEPwm12Gpio(void) //set as GPIO
    {
    
    	//set to low. Latched for output mode configuration.
        GpioDataRegs.GPADAT.bit.GPIO22 = 0;
        GpioDataRegs.GPADAT.bit.GPIO23 = 0;
    
        EALLOW;
        GpioCtrlRegs.GPAPUD.bit.GPIO22 = 1;    // Disable pull-up on GPIO22 (EPWM12A)
        GpioCtrlRegs.GPAGMUX2.bit.GPIO22 = 0; //(GPIO_MUX_9A_12A & 0xC) >> 2; //2 High Bits
        GpioCtrlRegs.GPAMUX2.bit.GPIO22 = 0; //GPIO_MUX_9A_12A & 0x3;   // Configure GPIO22 as EPWM12A
    
        GpioCtrlRegs.GPAPUD.bit.GPIO23 = 1;    // Disable pull-up on GPIO23 (EPWM12B)
        GpioCtrlRegs.GPAGMUX2.bit.GPIO23 = 0; //(GPIO_MUX_9A_12A & 0xC) >> 2; //2 High Bits
        GpioCtrlRegs.GPAMUX2.bit.GPIO23 = 0; //GPIO_MUX_9A_12A & 0x3;   // Configure GPIO23 as EPWM12B
    
    
        GpioCtrlRegs.GPADIR.bit.GPIO22 = 1;
        GpioCtrlRegs.GPADIR.bit.GPIO23 = 1;
    
        GpioDataRegs.GPACLEAR.bit.GPIO22 = 1; //set to low
        GpioDataRegs.GPACLEAR.bit.GPIO23 = 1; //set to low
    
        GpioCtrlRegs.GPAQSEL2.bit.GPIO22 = 0; //Syn to CLK
        GpioCtrlRegs.GPAQSEL2.bit.GPIO23 = 0; //Syn to CLK
    
        GpioCtrlRegs.GPACSEL3.bit.GPIO22 = 1; //CPU1.CLA
        GpioCtrlRegs.GPACSEL3.bit.GPIO23 = 1; //CPU1.CLA
    
        EDIS;
    }

    感谢您的帮助、

    K·戈尔达

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

    您好、Kaden:

    我可以看到 EPWM12A 在 GPIO22上的 PWM 脉冲、代码如下:

    void InitEPwm12Gpio(void)
    {
        EALLOW;
        
        GpioCtrlRegs.GPAPUD.bit.GPIO22 = 1;    // Disable pull-up on GPIO167 (EPWM12A)
    
        GpioCtrlRegs.GPAGMUX2.bit.GPIO22 = 0x01;
        GpioCtrlRegs.GPAMUX2.bit.GPIO22 = 0x01;
    
        EDIS;
    }


    在我之前的回复中、我已经将多路复用器选项位设为0x01、而将其设为0。

    您能否相应地更改代码。

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

    我要把这个标记为"已解决"、但我仍然看不到信号。 我开始认为这是硬件问题、我可以直接探测 CHIPS 引脚、但没有信号。 所有其他 ePWM 均能正常工作、以前的一些电路板也能正常工作。