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.

[参考译文] TMS320F280049C:在与 EXTSYNCIN2同步的 APWM 模式下使用 ECAP 的问题:与 EXTSYNCIN2同步不起作用

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1292632/tms320f280049c-issue-of-using-ecap-on-apwm-mode-which-synchronizes-to-extsyncin2-not-work-of-synchronizes-to-extsyncin2

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

您好!

我想 在 APWM 模式下使用 ECAP4、它可与 TMS320F280049C 的 EXTSYNCIN2同步

我已经  按照 TI 参考手册将 ECAP4设置为与 EXTSYNCIN2同步。

但它不起作用、ECAP4 APWM 输出将在 EXTSYNCIN2输入上漂移。

请检查此代码设置、波形和 CCS 寄存器读取值如下所示。

请参考 C2000_C2000_SDK_4_00_00\solutions\TIDM_02002上的函数定义 Ware_Digital。

请尽快答复我。

非常感谢。

香港特区政府

     

*   同步 IO 设置

EALLOW;

GPIO_setDirectionMode (25、GPIO_DIR_MODE_IN);
GPIO_setQualificationMode (25、GPIO_QUAL_SYNC);

GPIO_setPinConfig (GPIO_25_GPIO25);

//将 Input-XBAR INPUT6配置为 ExtSynCIn2的 GPIO25
XBAR_setInputPin (XBAR_INPUT6、25);    

EDIS;

XBAR_setOutputMuxConfig (XBAR_OUTPUT8、XBAR_OUT_MUX06_ECAP4_OUT);
XBAR_enableOutputMux (XBAR_OUTPUT8、XBAR_MUX06);
GPIO_setPadConfig (17、GPIO_PIN_TYPE_STD);
GPIO_setPinConfig (GPIO_17_OUTPUTXBAR8);

*  ECAP4"同步输入/输出设置*****

EALLOW;
//禁用到 SYNCO
HWREGH (ECAP4_BASE + ECAP_O_ECCTL2)|=(0x3U<<ECAP_ECCTL2_SYNCO_SEL_S);
HWREGH (ECAP4_BASE + ECAP_O_ECCTL2)&=~ECAP_ECCTL2_SWSYNC;
EDIS;

SYSCTL_setSyncInputConfig (SYSCTL_SYNC_IN_ECAP4、SYSCTL_SYNC_IN_SRC_EXTSYNCIN2);

EALLOW;  //写入 SYNCI_EN

HWREGH (ECAP4_BASE + ECAP_O_ECCTL2)|= ECAP_ECCTL2_SYNCI_EN;

EDIS;

*  SysCtl_setSyncInputConfig 函数定义 

静态内联空
SYSCTL_setSyncInputConfig (Ctl_Sync 输入、Sys45g Ctl_Sync syncSrc)
{
uint32_t clearMask;

//
//将输入同步源选择写入相应的寄存器。
//
EALLOW;
if (syncInput == SYSCTL_SYNC_IN_EPWM1)
{
//
//请注意,EXTSYNCIN1是 ePWM1的唯一有效选项
//
HWREG (SYNCSOC_BASE + SYSCTL_O_SYNCSELECT)&=
~SYSCTL_SYNCSELECT_EPWM1SYNCIN_M;

否则
{
clearMask =(uint32_t) SYSCTL_SYNCSELECT_SYNCIN_M <<
(uint32_t) syncInput;

HWREG (SYNCSOC_BASE + SYSCTL_O_SYNCSELECT)=
(HWREG (SYNCSOC_BASE + SYSCTL_O_SYNCSELECT)&~clearMask)|
((uint32_t) syncSrc <<(uint32_t) syncInput);

EDIS;

*    ECAPWM  设定   

int32_t ecap_ticks =(int32_t)((float32_t)(pwmSysClk Freq_Hz / Freq_Hz));

ECAP_enableAPWMMode (ECAP4_BASE);
ECAP_setAPWMPeriod (ECAP4_BASE、ECAP_TICK);
ECAP_setAPWMCompare (ECAP4_BASE、100U);


ECAP_setPhaseShiftCount (ECAP4_BASE、0u);

ECAP_enableLoadCounter (ECAP4_BASE);

ECAP_clearInterrupt (ECAP4_BASE、0xFF);
ECAP_clearGlobalInterrupt (ECAP4_BASE);

ECAP_startCounter (ECAP4_BASE);

*  CCS 注册观察窗口

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

    尊敬的玉智:

    我提供了一个将 eCAP4同步至 EXTSYNCIN2的基本示例。 您提供的代码很难看到可能存在的故障。  

    我使用了 ePWM ISR 发出了 GPIO 切换信号、即 EXTSYNCIN2、我使用它来同步 eCAP4。

    以下示波器屏幕截图显示了以下

    黄色:EXTSYNCIN2的 GPIO 切换

    蓝色:eCAP4输出

    紫色:eCAP2输出(不同步)

    附加的文件是测试用例:

    C 文件:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    // Included Files
    //
    #include "driverlib.h"
    #include "device.h"
    #include "board.h"
    //
    // Main
    //
    void main(void)
    {
    //
    // Initialize device clock and peripherals
    //
    Device_init();
    //
    // Disable pin locks and enable internal pull ups.
    //
    Device_initGPIO();
    //
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    SysConfig:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    /**
    * Import the modules used in this configuration.
    */
    const ecap = scripting.addModule("/driverlib/ecap.js", {}, false);
    const ecap1 = ecap.addInstance();
    const ecap2 = ecap.addInstance();
    const epwm = scripting.addModule("/driverlib/epwm.js", {}, false);
    const epwm1 = epwm.addInstance();
    const gpio = scripting.addModule("/driverlib/gpio.js", {}, false);
    const gpio1 = gpio.addInstance();
    const inputxbar_input = scripting.addModule("/driverlib/inputxbar_input.js", {}, false);
    const inputxbar_input1 = inputxbar_input.addInstance();
    const outputxbar = scripting.addModule("/driverlib/outputxbar.js", {}, false);
    const outputxbar1 = outputxbar.addInstance();
    const outputxbar2 = outputxbar.addInstance();
    const sync = scripting.addModule("/driverlib/sync.js");
    /**
    * Write custom configuration values to the imported modules.
    */
    ecap1.$name = "myECAP0";
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    您好、Ryan  

    感谢你的评分

    我已经解决了这个问题。

    谢谢你。

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

    尊敬的玉智:

    不客气、可以将此主题标记为已解决吗?

    此致!

    马瑞安