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/TMS320F28377S:ePWM 开关频率

Guru**** 2482225 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/596799/ccs-tms320f28377s-epwm-switching-frequency

器件型号:TMS320F28377S

工具/软件:Code Composer Studio

你好!   在 28377中创建单相逆变器源代码。  

问题是开关频率是所需值的一半。 例如,如果我需要10kHz sw.freq, 实际上它显示为 5kHz .... 有人可以帮助我吗?  提前感谢!

代码 如下 :

#define    HSPCLK                     200000000.0

#define    SWITCH_INV_FREQ            (10000.0)
#define    PWM_COUNT_INV_MAX          (int)(HSPCLK/(2*SWITCH_INV_FREQ)

   EPwm1Regs.TBPRD                = PWM_COUNT_INV_MAX;
    EPwm1Regs.TBPHS.bit.TBPHS      = 0x0000;
    EPwm1Regs.TBCTR                = 0x0000;

    EPwm1Regs.CMPA.bit.CMPA        = 0x0000;
    EPwm1Regs.CMPB.bit.CMPB        = 0x0000;

    EPwm1Regs.TBCTL.bit.CTRMODE    = TB_COUNT_UPDOWN;
    EPwm1Regs.TBCTL.bit.PHSEN      = TB_ENABLE;
    EPwm1Regs.TBCTL.bit.PRDLD      = TB_SHADOW;
    EPwm1Regs.TBCTL.bit.SYNCOSEL   = TB_SYNC_IN;//TB_CTR_ZERO;
    EPwm1Regs.TBCTL.bit.HSPCLKDIV  = TB_DIV1;
    EPwm1Regs.TBCTL.bit.CLKDIV     = TB_DIV1;

    EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
    EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
    EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
    EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

    EPwm1Regs.AQCTLA.bit.CAD       = AQ_SET;
    EPwm1Regs.AQCTLA.bit.CAU       = AQ_CLEAR;

    EPwm1Regs.DBCTL.bit.OUT_MODE   = DB_FUL_ENABLE;
    EPwm1Regs.DBCTL.bit.POLSEL     = DB_ACTV_HIC;

    EPwm1Regs.DBRED.bit.DBRED      = 0x0;
    EPwm1Regs.DBFED.bit.DBFED      = 0x0;

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

    您好!

    [引用 user="eedii iiiiii]#define    PWM_COUNT_INV_MAX          (int)(HSPCLK/(2*SWITCH_INV_FREQ))

    您需要从分母中删除常量"2"。 以下是您可以参考的公式:

    TBPRD =((SYSCLK_FREE_IN_Hz/REF_Hz)-1)

    此致、

    Gautam

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,Gautam! 感谢您的回答。
    但我认为,如果是逆变器载波信号,它应该处于升压模式,对吧? 因此我们应该使用 TBPRD =((SYSCLK_FREE_IN_Hz/2.0*参考频率 FREQ_Hz)-1……
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我是说直流-交流逆变器...谢谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    哦、抱歉、我是为了进行向上计数。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    那么、开关频率的作用是什么。 ? 如何获得所需的值?
    提前感谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好

    默认情况下、ePWM 时基时钟是系统时钟的1/2、这意味着如果您的 CPU 设置为200MHz、ePWM 时基为100MHz、这就是您获得所需半频率的原因、请更改#define HSPCLK 200000000.0至
    #define HSPCLK 100000000.0
    可以解决您的问题

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

    有关具体信息、请参阅 F28377S 技术参考手册。 PERCLKDIVSEL 寄存器中的 EPWMCLKDIV 位默认为1,这些位选择 ePWM 模块是以/1还是/2时钟运行。

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

    你好!  

    感谢您的关注!

    是的,你是对的。 通过将值更改为100000000,我 可以获得所需的开关频率值。 但是,我想知道为什么在 CLKDIV=1的情况下,我 应该得到1/2 的值 ?  

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

    这很简单、当 EPWMCLKDIV=0时、您会得到 PLLSYSCLK 的/1、当 EPWMCLKDIV=1时、您会得到 PLLSYSCLK 的/2、这是由德州仪器在设计芯片时定义的。  很多外设 具有允许的最大时钟,这就是为什么当系统频率非常高时它们有一个时钟分频器,就像在200MHz 的情况中一样

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的意思是:
    EPwm8Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;// 0x0
    EPwm8Regs.TBCTL.bit.CLKDIV = TB_DIV1;// 0x0

    在本例中,我将获得1/1频率,但实际上我看到的是半频率。 这就是我想知道的原因。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您的系统时钟可能未正确设置为200MHz。 晶体振荡器频率是多少?
    如果您使用28377S lanchpad、晶体振荡器频率为10MHz、要获得正确的 ePWM 频率、您需要将此行添加到代码中:
    InitSysPll (XTAL_OSC、IMULT_40、FULT_0、PLLCLK_By_2);
    这会将系统时钟设置为200MHz (10*40/2=200M)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已通过示波器检查 Cristall 振荡器频率是否为20MHz。 型号为: X-Tal、SX-32、20MHz。

    SYSCTR()中的代码段是:
    InitSysPll (XTAL_OSC、IMULT_20、FULT_0、PLLCLK_By_2);
    请注意 XTAL_OSC = 1、IMULT_20 = 20、PLLCLK_BY_2 = 1。

    我已将器件更改为 InitSysPll (XTAL_OSC、IMULT_10、FULT_0、PLLCLK_By_2);但我得到所需值的1/4。。。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您可以在此处附加源文件、请单击"使用 RTF 格式"以附加该文件
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    源文件完全或仅 sysctrl()?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我找到了解决方案。 技术参考手册第1442页上有一条注释:EPWMCLK = SYSCLKOUT/2。

    因此,我理解为什么我的系统以100 MHz 而不是200 MHz 运行......

    感谢每个人!