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.

[参考译文] TMS320F28P659DK-Q1:两个不同封装控制器的 PWM 输出不匹配

Guru**** 2492385 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1547797/tms320f28p659dk-q1-mismatch-of-pwm-outputs-from-two-different-package-contorllers

器件型号:TMS320F28P659DK-Q1


工具/软件:

我正在处理的  “single_axis_servo_drive_fcl_QEP_f28p65x"</s>“  工程。

在最初进行评估时、我选择了 Launch-XL-F28P65X LaunchPad、并使用了具有 169 引脚的 NMR 封装。 对于定制电路板 、我们采用了 TMS320F28P659DK8-Q1、它是 100 引脚型号 (PZP)。

现在、根据 我的理解、如果配置相同、两个控制器的 PWM 输出必须相同。 在这里、我们得到的输出完全相反。

因此、我仅实现了具有 50%占空比的 PWM 配置、以便在两个具有相同配置的硬件上进行测试。

这是 PWM 的配置。

我使用的是加/减计数器、TBCTR==TBPRD 时的中断、

在向上计数期间、当 TBCTR =CMPA 时、输出引脚变为低电平、在 TBCTR =CMPA 时、输出引脚变为高电平。

void configurePWM(void)
{
    uint16_t base;

    SysCtl_disablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC);

    // *****************************************
    // Inverter PWM configuration - PWM 1, 2, 3
    // *****************************************
    for (base = 0; base < 3; base++)
    {
        // Time Base SubModule Registers
        // set Immediate load
        EPWM_setPeriodLoadMode(pwmHandle[base], EPWM_PERIOD_DIRECT_LOAD);
        EPWM_setTimeBasePeriod(pwmHandle[base], INV_PWM_TICKS / 2);
        EPWM_setPhaseShift(pwmHandle[base], 0);
        EPWM_setTimeBaseCounter(pwmHandle[base], 0);
        EPWM_setTimeBaseCounterMode(pwmHandle[base], EPWM_COUNTER_MODE_UP_DOWN);
        EPWM_setClockPrescaler(pwmHandle[base], EPWM_CLOCK_DIVIDER_1,
                               EPWM_HSCLOCK_DIVIDER_1);

        EPWM_disablePhaseShiftLoad(pwmHandle[base]);

        // sync "down-stream"
        EPWM_enableSyncOutPulseSource(pwmHandle[base],
        EPWM_SYNC_OUT_PULSE_ON_CNTR_ZERO);

        // Counter Compare Submodule Registers
        // set duty 0% initially
        EPWM_setCounterCompareValue(pwmHandle[base], EPWM_COUNTER_COMPARE_A, 0);
        EPWM_setCounterCompareShadowLoadMode(pwmHandle[base],
                                             EPWM_COUNTER_COMPARE_A,
                                             EPWM_COMP_LOAD_ON_CNTR_ZERO);
)
        // Action Qualifier SubModule Registers
                EPWM_setActionQualifierActionComplete(
                        pwmHandle[base],
                        EPWM_AQ_OUTPUT_A,
                        (EPWM_ActionQualifierEventAction) (EPWM_AQ_OUTPUT_LOW_UP_CMPA
                                | EPWM_AQ_OUTPUT_HIGH_DOWN_CMPA));

        // Active high complementary PWMs - Set up the deadband
        EPWM_setRisingEdgeDeadBandDelayInput(pwmHandle[base],
        EPWM_DB_INPUT_EPWMA);
        EPWM_setFallingEdgeDeadBandDelayInput(pwmHandle[base],
        EPWM_DB_INPUT_EPWMA);

        EPWM_setDeadBandDelayMode(pwmHandle[base], EPWM_DB_RED, true);
        EPWM_setDeadBandDelayMode(pwmHandle[base], EPWM_DB_FED, true);
        EPWM_setDeadBandDelayPolarity(pwmHandle[base], EPWM_DB_RED,
                                      EPWM_DB_POLARITY_ACTIVE_HIGH);
        EPWM_setDeadBandDelayPolarity(pwmHandle[base], EPWM_DB_FED,
                                      EPWM_DB_POLARITY_ACTIVE_LOW);
        EPWM_setRisingEdgeDelayCount(pwmHandle[base], INV_PWM_DB);
        EPWM_setFallingEdgeDelayCount(pwmHandle[base], INV_PWM_DB);
    }

//    // configure V and W as slaves
    EPWM_setSyncInPulseSource(MTR_V_PWM_BASE, PWM_SYNC_SOURCE);
    EPWM_enablePhaseShiftLoad(MTR_V_PWM_BASE);
    EPWM_setPhaseShift(MTR_V_PWM_BASE, 2);
    EPWM_setCountModeAfterSync(MTR_V_PWM_BASE, EPWM_COUNT_MODE_UP_AFTER_SYNC);

    EPWM_setSyncInPulseSource(MTR_W_PWM_BASE, PWM_SYNC_SOURCE);
    EPWM_enablePhaseShiftLoad(MTR_W_PWM_BASE);
    EPWM_setPhaseShift(MTR_W_PWM_BASE, 2);
    EPWM_setCountModeAfterSync(MTR_W_PWM_BASE, EPWM_COUNT_MODE_UP_AFTER_SYNC);

    SysCtl_disablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC);

    return;
}

以下是 来自同一配置下两个控制器的探测输出。 黄色  

在这里、黄色是占空比为 50%的 EPWMxA、粉色是 GPIO 引脚每 TBCTR=TBPRD 变为高电平、此处的 TBPRD 为 2500。(硬编码用于测试)

从逻辑上讲、定制电路板输出是我想的正确输出。

是否缺少任何配置?

谢谢。此致  

Raghu。

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

    尊敬的 Raghu:

    如果两个电路板对 ePWM 使用相同的时钟配置 (200MHz)、并且两个电路板上都使用相同的 ePWM 配置、则两个 ePWM 输出应该相同。 (例如,如果 GPIO 切换设置为周期,则两个周期应该相同)

    什么是生成 GPIO 切换? 它与 ePWM 是同步还是异步? 是否确定要在电路板之间探测您配置的 PWM 的相同输出引脚? 在第二个屏幕截图中、似乎 LaunchPad 的 GPIO 正在开启周期、而对于定制电路板、GPIO 在发生零事件时切换。 您能否再次确认这些设置?

    此致、

    Ryan Ma

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

    您好、Ryan、

    感谢您的答复。 PWM 配置保持不变、仅更改 GPIO 引脚映射。 我相信我正在探测正确的引脚。 GPIO 在 ISR 内进行切换、该 ISR 是在每个 TBCTR = TBPRD(中心对齐的 PWM)生成的。

    谢谢、此致  

    Raghu

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

    尊敬的 Raghu:

    在配置中或您正在使用的范围中必须有一些不同之处。 您是否有可能确定了 ZRO 事件的同步范围?   

    TBPRD 是相同的值吗? 您是否确定两个电路板(LaunchPad 与定制电路板)上的时钟相同?

    能否确保在完成 PWM 初始化后设置 GTBCLKSYNC? 如果不使用 GTBCLKSYNC、请确保在 ePWM 初始化后正确设置 TBCLKSYNC。  

    此致、

    Ryan Ma

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

    您好、Ryan、

    除了 GPIO 引脚编号外、没有任何变化。

    TBPRD 值经过硬编码可生成 50%的占空比、两个电路板中的值相同、如以上快照所示。 两个电路板具有相同的时钟 (25MHz 时钟 OSC 上拉至 200MHz)。 PWM 时钟设置为 100MHz。

    我使用 的是 TBCLKSYNC (SYSCTL_enablePeripheral (SYSCTL_PERIPH_CLK_TBCLKSYNC);“此 API 在 PWM 配置后调用。

    谢谢、

    Raghu

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

    两个 PWM 是否处于相同的计数器模式? 您能否在正在处理的和不在工作的之间比较寄存器?

    PWM 之间是否应用了相移?

    此致、

    Ryan Ma

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

    是的、它们都处于加/减计数器模式。 我猜当外设的配置相同时、与它们相关的所有内容都是相同的。 现在、我只关注一个 PWM。 因此没有相移。 仅监控一个 PWM 输出。  

    探针在 MCU 上的引脚编号

    100PZP — 引脚 6 (GPIO15) - PWM8A

    NMR — 接头 J4(引脚 7 GPIO14)- PWM8A、还尝试使用 J8(引脚 5 GPIO99)- PWM8A


    以下是运行时寄存器的快照。

    其余寄存器也相同。

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

    尊敬的 Raghu:

    在 device_init () 例程中、能否确保禁用 GTBCLKSYNC 和 TBCLKSYNC?

    然后、当 PWM 初始化时、设置 TBCLKSYNC。

    下面是我在两个屏幕截图之间看到的快速寄存器摘要。 两个配置相同、因此输出应相同。

    寄存器 ePWM 定制板 ePWM LaunchPad
    TBCTL 0x2 0x2
    TBCTL2 0x0 0x0
    EPWMSYNCINSEL 0x1 0x1
    EPWMSYNCOUTEN 0x1 0x1
    CMPCTL 0x0 0x0
    CMPCTL2 0x0 0x0
    DBCTL 0x0 0x0
    AQCTL 0x0 0x0
    AQCTLA 0x60 0x60
    AQCTLB 0x90 0x90
    TBPRD 0x9C4 0x9C4
    CMPA 0x4E2 0x4E2
    CMPB 0x4E2 0x4E2

    此致、

    Ryan Ma

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

    您好、Ryan、

    在 configurePWM 函数中 、我禁用 TBCLKSYNC  SysCtl_disablePeripheral (SYSCTL_PERIPH_CLK_TBCLKSYNC);配置外设后、启用 TBCLKSYNC   SysCtl_enablePeripheral (SYSCTL_PERIPH_CLK_TBCLKSYNC);  

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

    尊敬的 Raghu:

    如果在 Device_init () 中设置了 GTBCLKSYNC、则会忽略对 TBCLKSYNC 的任何写入、并且计数器继续运行。 写入 TBCLKSYNC 之前、能否确保此位设置为 0?

    此致、

    Ryan Ma

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

    您好、Ryan、

    Device_init()--> Device_enableAllPeripheral()--> SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_GTBCLKSYNC);中 。

    我是否需要禁用该功能并进行测试?

    此致
    Raghu

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

    好的、请。  

    此致、

    Ryan Ma

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

    您好、Ryan、
    我通过禁用了它  SysCtl_disablePeripheral (SYSCTL_PERIPH_CLK_GTBCLKSYNC);  但问题是一样的。 如果您有 Launchpad、您能复制相同的器件吗、看看这是否也在您的终端发生。

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

    尊敬的 Raghu:

    我没有定制板、因此无法重现此问题。  

    您可能会给错误的 PWM 输出设置范围? 另一个 PWM 输出、因为它是 LaunchPad 上作用域的互补版本。

    此致、

    Ryan Ma

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

    您好、Ryan、

    LaunchPad 输出似乎不正确。 所以、我让您在 LaunchPad 上执行该操作。

    如我所述、我们直接在定制硬件和 LaunchPad 上的接头上探测控制器引脚...我们非常确信我们正在探测正确的引脚。

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

    尊敬的 Raghu:

    即使在 LaunchPad 上、我也无法复制此内容。 请参阅以下示例、在相同配置下使用 ePWM8A 作为输出。

    我简化了该测试用例、以便仅在 GPIO99 上显示 ePWM8A。

    //#############################################################################
    //
    // FILE:   empty_driverlib_main.c
    //
    //! \addtogroup driver_example_list
    //! <h1>Empty Project Example</h1> 
    //!
    //! This example is an empty project setup for Driverlib development.
    //!
    //
    //#############################################################################
    //
    //
    // 
    // C2000Ware v5.04.00.00
    //
    // Copyright (C) 2024 Texas Instruments Incorporated - http://www.ti.com
    //
    // Redistribution and use in source and binary forms, with or without 
    // modification, are permitted provided that the following conditions 
    // are met:
    // 
    //   Redistributions of source code must retain the above copyright 
    //   notice, this list of conditions and the following disclaimer.
    // 
    //   Redistributions in binary form must reproduce the above copyright
    //   notice, this list of conditions and the following disclaimer in the 
    //   documentation and/or other materials provided with the   
    //   distribution.
    // 
    //   Neither the name of Texas Instruments Incorporated nor the names of
    //   its contributors may be used to endorse or promote products derived
    //   from this software without specific prior written permission.
    // 
    // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
    // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
    // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
    // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
    // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
    // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
    // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
    // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    // $
    //#############################################################################
    
    //
    // Included Files
    //
    #include "driverlib.h"
    #include "device.h"
    //
    // EPWM8 -> myEPWM8 Pinmux
    //
    //
    // EPWM8_A - GPIO Settings
    //
    #define GPIO_PIN_EPWM8_A 99
    #define myEPWM8_EPWMA_GPIO 99
    #define myEPWM8_EPWMA_PIN_CONFIG GPIO_99_EPWM8_A
    //
    // EPWM8_B - GPIO Settings
    //
    #define GPIO_PIN_EPWM8_B 15
    #define myEPWM8_EPWMB_GPIO 15
    #define myEPWM8_EPWMB_PIN_CONFIG GPIO_15_EPWM8_B
    //
    // GPIO0 - GPIO Settings
    //
    #define myGPIO0_GPIO_PIN_CONFIG GPIO_0_GPIO0
    
    
    //*****************************************************************************
    //
    // GPIO Configurations
    //
    //*****************************************************************************
    #define myGPIO0 0
    void myGPIO0_init();
    
    //*****************************************************************************
    //
    // INTERRUPT Configurations
    //
    //*****************************************************************************
    
    // Interrupt Settings for INT_myEPWM8
    // ISR need to be defined for the registered interrupts
    #define INT_myEPWM8 INT_EPWM8
    #define INT_myEPWM8_INTERRUPT_ACK_GROUP INTERRUPT_ACK_GROUP3
    __interrupt void INT_myEPWM8_ISR(void);
    
    //*****************************************************************************
    //
    // SYNC Scheme Configurations
    //
    //*****************************************************************************
    
    //*****************************************************************************
    //
    // Board Configurations
    //
    //*****************************************************************************
    void	Board_init();
    void	EPWM_init();
    void	GPIO_init();
    void	INTERRUPT_init();
    void	SYNC_init();
    void	PinMux_init();
    //
    // Main
    //
    void main(void)
    {
    
        //
        // Initialize device clock and peripherals
        //
        Device_init();
    
        //
        // Disable pin locks and enable internal pull-ups.
        //
        Device_initGPIO();
    
        //
        // Initialize PIE and clear PIE registers. Disables CPU interrupts.
        //
        Interrupt_initModule();
    
        //
        // Initialize the PIE vector table with pointers to the shell Interrupt
        // Service Routines (ISR).
        //
        Interrupt_initVectorTable();
    
        //
        // PinMux and Peripheral Initialization
        //
        
        Board_init();
        configurePWM();
    
    
        //
        // Enable Global Interrupt (INTM) and real time interrupt (DBGM)
        //
        EINT;
        ERTM;
    
        while(1)
        {
            
        }
    }
    void configurePWM(void)
    {
    
        SysCtl_disablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC);
    
        // *****************************************
        // Inverter PWM configuration - PWM 1, 2, 3
        // *****************************************
    
        // Time Base SubModule Registers
        // set Immediate load
        EPWM_setPeriodLoadMode(EPWM8_BASE, EPWM_PERIOD_DIRECT_LOAD);
        EPWM_setTimeBasePeriod(EPWM8_BASE, 2500);
        EPWM_setPhaseShift(EPWM8_BASE, 0);
        EPWM_setTimeBaseCounter(EPWM8_BASE, 0);
        EPWM_setTimeBaseCounterMode(EPWM8_BASE, EPWM_COUNTER_MODE_UP_DOWN);
        EPWM_setClockPrescaler(EPWM8_BASE, EPWM_CLOCK_DIVIDER_1,
                                EPWM_HSCLOCK_DIVIDER_1);
    
        EPWM_disablePhaseShiftLoad(EPWM8_BASE);
    
        // sync "down-stream"
        EPWM_enableSyncOutPulseSource(EPWM8_BASE,
        EPWM_SYNC_OUT_PULSE_ON_CNTR_ZERO);
    
        // Counter Compare Submodule Registers
        // set duty 0% initially
        EPWM_setCounterCompareValue(EPWM8_BASE, EPWM_COUNTER_COMPARE_A, 1250);
        EPWM_setCounterCompareShadowLoadMode(EPWM8_BASE,
                                                EPWM_COUNTER_COMPARE_A,
                                                EPWM_COMP_LOAD_ON_CNTR_ZERO);
    
        // Action Qualifier SubModule Registers
                EPWM_setActionQualifierActionComplete(
                        EPWM8_BASE,
                        EPWM_AQ_OUTPUT_A,
                        (EPWM_ActionQualifierEventAction) (EPWM_AQ_OUTPUT_LOW_UP_CMPA
                                | EPWM_AQ_OUTPUT_HIGH_DOWN_CMPA));
    
        // Active high complementary PWMs - Set up the deadband
        EPWM_setRisingEdgeDeadBandDelayInput(EPWM8_BASE,
        EPWM_DB_INPUT_EPWMA);
        EPWM_setFallingEdgeDeadBandDelayInput(EPWM8_BASE,
        EPWM_DB_INPUT_EPWMA);
    
        EPWM_setDeadBandDelayMode(EPWM8_BASE, EPWM_DB_RED, true);
        EPWM_setDeadBandDelayMode(EPWM8_BASE, EPWM_DB_FED, true);
        EPWM_setDeadBandDelayPolarity(EPWM8_BASE, EPWM_DB_RED,
                                        EPWM_DB_POLARITY_ACTIVE_HIGH);
        EPWM_setDeadBandDelayPolarity(EPWM8_BASE, EPWM_DB_FED,
                                        EPWM_DB_POLARITY_ACTIVE_LOW);
        EPWM_setRisingEdgeDelayCount(EPWM8_BASE, 0);
        EPWM_setFallingEdgeDelayCount(EPWM8_BASE, 0);
        EPWM_enableInterrupt(EPWM8_BASE);	
        EPWM_setInterruptSource(EPWM8_BASE, EPWM_INT_TBCTR_PERIOD);	
        EPWM_setInterruptEventCount(EPWM8_BASE, 1);	
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC);
    
        return;
    }
    
    void INT_myEPWM8_ISR(void)
    {
        GPIO_writePin(myGPIO0, 1);
        GPIO_writePin(myGPIO0, 0);
    
        EPWM_clearEventTriggerInterruptFlag(EPWM8_BASE);
        Interrupt_clearACKGroup(INT_myEPWM8_INTERRUPT_ACK_GROUP);
    }
    //
    // End of File
    //
    void Board_init()
    {
    	EALLOW;
    
    	PinMux_init();
    	GPIO_init();
    	INTERRUPT_init();
    
    	EDIS;
    }
    
    //*****************************************************************************
    //
    // PINMUX Configurations
    //
    //*****************************************************************************
    void PinMux_init()
    {
    	//
    	// PinMux for modules assigned to CPU1
    	//
    	
    	//
    	// EPWM8 -> myEPWM8 Pinmux
    	//
    	GPIO_setPinConfig(myEPWM8_EPWMA_PIN_CONFIG);
    	GPIO_setPadConfig(myEPWM8_EPWMA_GPIO, GPIO_PIN_TYPE_STD);
    	GPIO_setQualificationMode(myEPWM8_EPWMA_GPIO, GPIO_QUAL_SYNC);
    
    	GPIO_setPinConfig(myEPWM8_EPWMB_PIN_CONFIG);
    	GPIO_setPadConfig(myEPWM8_EPWMB_GPIO, GPIO_PIN_TYPE_STD);
    	GPIO_setQualificationMode(myEPWM8_EPWMB_GPIO, GPIO_QUAL_SYNC);
    
    	// GPIO0 -> myGPIO0 Pinmux
    	GPIO_setPinConfig(GPIO_0_GPIO0);
    
    }
    
    
    //*****************************************************************************
    //
    // GPIO Configurations
    //
    //*****************************************************************************
    void GPIO_init(){
    	myGPIO0_init();
    }
    
    void myGPIO0_init(){
    	GPIO_writePin(myGPIO0, 0);
    	GPIO_setPadConfig(myGPIO0, GPIO_PIN_TYPE_STD);
    	GPIO_setQualificationMode(myGPIO0, GPIO_QUAL_SYNC);
    	GPIO_setDirectionMode(myGPIO0, GPIO_DIR_MODE_OUT);
    	GPIO_setControllerCore(myGPIO0, GPIO_CORE_CPU1);
    }
    
    //*****************************************************************************
    //
    // INTERRUPT Configurations
    //
    //*****************************************************************************
    void INTERRUPT_init(){
    	
    	// Interrupt Settings for INT_myEPWM8
    	// ISR need to be defined for the registered interrupts
    	Interrupt_register(INT_myEPWM8, &INT_myEPWM8_ISR);
    	Interrupt_enable(INT_myEPWM8);
    }
    
    

    此致、

    Ryan Ma

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

    您好、Ryan、

    道歉。 在第一条消息中、图像被互换。 其中一个具有定制板的是 LaunchPad 图、启动图是定制板。 我还将获得相同的输出。

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

    尊敬的 Raghu:

    问题出在定制电路板上?

    是否 在 LaunchPad 上获得相同的输出?

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

    是的。 LaunchPad 上的输出与您获得的任何结果相同。

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

    尊敬的 Raghu:

    明白了、在定制电路板上加载此示例代码是否会产生相同的输出?

    此致、  

    Ryan Ma

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

    是的。 相同的示例代码不变。 外部的 GPIO 引脚编号 从 99 更改为 14。

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

    好的、因此事件触发器配置之间存在一些不同之处、您可能尚未与定制电路板的 PWM 配置共享这些配置。 您能检查一下这是否相同吗?

    此致、

    Ryan Ma

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

    您好、Ryan、

    感谢您的耐心。 就像我之前说的那样   “single_axis_servo_drive_fcl_QEP_f28p65x"</s>“  示例  这是事件触发配置

        // Enable EPWM8 INT to generate MotorControlISR
        // Select INT @ ctr = 0
        EPWM_setInterruptSource(MTR_U_PWM_BASE, EPWM_INT_TBCTR_PERIOD);
    
        // This needs to be 1 for the INTFRC to work
        EPWM_setInterruptEventCount(MTR_U_PWM_BASE, 1);
    
        // Enable Interrupt Generation from the PWM module
        EPWM_enableInterrupt(MTR_U_PWM_BASE);
    
        // Clear ePWM Interrupt flag
        EPWM_clearEventTriggerInterruptFlag(MTR_U_PWM_BASE);
    
        // specify the ISR handler function
        Interrupt_register(MTR_CTL_INT_NUM, &motorControlISR);
    
        // Enable AdcA-ADCINT1- to help verify EoC before result data read
        ADC_setInterruptSource(MTR_IV_ADC_BASE, ADC_INT_NUMBER1,
        MTR_IV_ADC_SOC_NUM);
        ADC_enableContinuousMode(MTR_IV_ADC_BASE, ADC_INT_NUMBER1);
        ADC_enableInterrupt(MTR_IV_ADC_BASE, ADC_INT_NUMBER1);
    
    //
    // PWM Clocks Enable
    //
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC);

    定制板和 LaunchPad 的情况相同。

    谢谢

    Raghu

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

    您好、Ryan、

    任何更新  

    谢谢

    Raghu

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

    尊敬的 Raghu:

    如果 LaunchPad 和定制电路板上的代码相同、则硬件之间必须存在差异。 两者的原理图是否存在差异?  

    您能否在定制电路板上运行软件时切换 GPIO 时设置断点、看看这实际上是否在周期中发生? 在 GPIO 的上升沿设置触发器、并验证是否符合预期的 PWM 输出。

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

    您好、Ryan、

    唯一的区别是封装。 我们使用 100 引脚型号。 以下是 PWM 使用的 GPIO 引脚

    我们已经验证了输出。
    今天、我禁用了 EPWMxB 上的输出、仅在 EPWMxA 上启用。 但我在控制器引脚(引脚 5 - gpio14)上的 EPWMxB 上获得输出

     然后我禁用了 EPWMxA 上的输出并启用了 EPWMxB、我在控制器引脚上得到 EPWMxA 上的输出(引脚 6 - GPIO 15)

    谢谢

    Raghu

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

    尊敬的 Raghu:

    禁用输出意味着什么? 您是说您没有将 GPIO14 配置为 PWM 输出吗?

    可能是交换了 GPIO 配置、这是如何实现的?  

    此致、

    Ryan Ma

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

    您好、Ryan、

    我的意思是禁用特定输出 EPWMxA/xB 配置为不提供输出。

    一次只配置一个 GPIO。

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

    尊敬的 Raghu:

    那是奇怪的。  如果您已禁用 ePWMxA 的动作限定器、则不应在 ePWMxA 的输出端看到任何内容。

    如果仍在 ePWMxA 上看到输出、则该输出必须来自 ePWMxB。 您能否确保 DBCTL 中的 OUTSWAP 寄存器配置正确?

    您可以发送死区寄存器设置吗?

    此致、

    Ryan Ma

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

    Ryan、

    我想我已经分享了寄存器设置值。 IM 共享下面的 DBCTL 寄存器。

    我认为、如果定制板和 LaunchPad 的配置相同、则寄存器组值也将相同。 fyi、除了 GPIO 编号外、我不做任何更改。

    谢谢  

    Raghu。

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

    尊敬的 Raghu:

    如果您更改了 GPIO 编号、那么我假定问题出在哪里。

    您提到如果您禁用了 ePWMA 的动作限定符、您仍然在 ePWMA 上看到输出。  

    GPIO15 ->不输出 ePWMA、它应输出 ePWM8B

    GPIO12 ->不输出 EPWMB、应该输出 EPWM7A

    请仔细检查您的原理图、好像是标记问题。

    此致、

    Ryan Ma

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

    您好、Ryan、

    我认为这总结了我们的问题。我们会更仔细地研究它,然后回来。 再次感谢您的耐心。

    此致  

    Raghu

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

    尊敬的 Raghu:  

    请在您确认后将此主题标记为已解决。

    此致、

    Ryan Ma