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.

[参考译文] TMS320F28075:TI 触发区 CBC 问题

Guru**** 2391565 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1215362/tms320f28075-ti-trip-zone-cbc-problem

器件型号:TMS320F28075
"Thread:SysConfig"中讨论的其他器件

您好:  

  我们目前正在实施一个升压转换器、该转换器需要钳制 PWMH 占空比。 目前、我的方法是使用 CMPSS 模块+ ePWM XBAR + DC +跳匣区域 CBC 来完成。 然而、在 CBC 被触发后、PWMH 端的波形将有一个额外的错误波形。 键入、下图是我的 F28075 SysConfig 和实验图片。

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

    Poyi,

    我将向我们的 F2807x ePWM 专家转交这份工作。  

    NIMA

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

    尊敬的 Poyi:

    抱歉、我没有看到在 CBC 触发后生成的脉冲。  

    您还能否仅使用 PWM 设置提供 SysConfig 源代码? 我想看看你的 AQ 活动等等,并能够在我结束时运行这个,看看我是否可以重复这个。

    此致!

    Ryan Ma

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

    您好、Ryan

    下图是我们需要的 PWM 波和我们的 PWM 设置。 Thx~μ s

      

        EPWM_setEmulationMode(myEPWM7_BASE, EPWM_EMULATION_FREE_RUN);	
        EPWM_setClockPrescaler(myEPWM7_BASE, EPWM_CLOCK_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_1);	
        EPWM_setTimeBasePeriod(myEPWM7_BASE, 600);	
        EPWM_setTimeBaseCounter(myEPWM7_BASE, 0);	
        EPWM_setTimeBaseCounterMode(myEPWM7_BASE, EPWM_COUNTER_MODE_UP);	
        EPWM_disablePhaseShiftLoad(myEPWM7_BASE);	
        EPWM_setPhaseShift(myEPWM7_BASE, 0);	
        EPWM_setSyncOutPulseMode(myEPWM7_BASE, EPWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO);	
        EPWM_setCounterCompareValue(myEPWM7_BASE, EPWM_COUNTER_COMPARE_A, 600);	
        EPWM_setCounterCompareShadowLoadMode(myEPWM7_BASE, EPWM_COUNTER_COMPARE_A, EPWM_COMP_LOAD_ON_CNTR_ZERO);	
        EPWM_setCounterCompareValue(myEPWM7_BASE, EPWM_COUNTER_COMPARE_B, 48);	
        EPWM_setCounterCompareShadowLoadMode(myEPWM7_BASE, EPWM_COUNTER_COMPARE_B, EPWM_COMP_LOAD_ON_CNTR_ZERO);	
        EPWM_setCounterCompareValue(myEPWM7_BASE, EPWM_COUNTER_COMPARE_C, 181);	
        EPWM_setCounterCompareValue(myEPWM7_BASE, EPWM_COUNTER_COMPARE_D, 300);	
        EPWM_setActionQualifierT1TriggerSource(myEPWM7_BASE, EPWM_AQ_TRIGGER_EVENT_TRIG_DCA_2);	
        EPWM_setActionQualifierT2TriggerSource(myEPWM7_BASE, EPWM_AQ_TRIGGER_EVENT_TRIG_DCA_2);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);	
        EPWM_setActionQualifierT1TriggerSource(myEPWM7_BASE, EPWM_AQ_TRIGGER_EVENT_TRIG_DCA_2);	
        EPWM_setActionQualifierT2TriggerSource(myEPWM7_BASE, EPWM_AQ_TRIGGER_EVENT_TRIG_DCA_2);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_T1_COUNT_UP);	
        EPWM_setTripZoneAction(myEPWM7_BASE, EPWM_TZ_ACTION_EVENT_TZA, EPWM_TZ_ACTION_LOW);	
        EPWM_setTripZoneAction(myEPWM7_BASE, EPWM_TZ_ACTION_EVENT_TZB, EPWM_TZ_ACTION_LOW);	
        EPWM_setTripZoneAction(myEPWM7_BASE, EPWM_TZ_ACTION_EVENT_DCAEVT1, EPWM_TZ_ACTION_DISABLE);	
        EPWM_setTripZoneAction(myEPWM7_BASE, EPWM_TZ_ACTION_EVENT_DCAEVT2, EPWM_TZ_ACTION_DISABLE);	
        EPWM_setTripZoneAction(myEPWM7_BASE, EPWM_TZ_ACTION_EVENT_DCBEVT1, EPWM_TZ_ACTION_DISABLE);	
        EPWM_setTripZoneAction(myEPWM7_BASE, EPWM_TZ_ACTION_EVENT_DCBEVT2, EPWM_TZ_ACTION_DISABLE);	
        EPWM_enableTripZoneSignals(myEPWM7_BASE, EPWM_TZ_SIGNAL_DCAEVT2);	
        EPWM_selectDigitalCompareTripInput(myEPWM7_BASE, EPWM_DC_TRIP_TRIPIN4, EPWM_DC_TYPE_DCAH);	
        EPWM_selectDigitalCompareTripInput(myEPWM7_BASE, EPWM_DC_TRIP_TRIPIN4, EPWM_DC_TYPE_DCAL);	
        EPWM_setTripZoneDigitalCompareEventCondition(myEPWM7_BASE, EPWM_TZ_DC_OUTPUT_A2, EPWM_TZ_EVENT_DCXL_HIGH);	
        EPWM_setDigitalCompareEventSource(myEPWM7_BASE, EPWM_DC_MODULE_A, EPWM_DC_EVENT_1, EPWM_DC_EVENT_SOURCE_FILT_SIGNAL);	
        EPWM_setDigitalCompareEventSource(myEPWM7_BASE, EPWM_DC_MODULE_A, EPWM_DC_EVENT_2, EPWM_DC_EVENT_SOURCE_FILT_SIGNAL);	
        EPWM_selectDigitalCompareTripInput(myEPWM7_BASE, EPWM_DC_TRIP_TRIPIN4, EPWM_DC_TYPE_DCBH);	
        EPWM_selectDigitalCompareTripInput(myEPWM7_BASE, EPWM_DC_TRIP_TRIPIN4, EPWM_DC_TYPE_DCBL);	
        EPWM_setDigitalCompareFilterInput(myEPWM7_BASE, EPWM_DC_WINDOW_SOURCE_DCAEVT2);	
        EPWM_enableDigitalCompareBlankingWindow(myEPWM7_BASE);	
        EPWM_setDigitalCompareBlankingEvent(myEPWM7_BASE, EPWM_DC_WINDOW_START_TBCTR_ZERO);	
        EPWM_setDigitalCompareWindowOffset(myEPWM7_BASE, 576);	
        EPWM_setDigitalCompareWindowLength(myEPWM7_BASE, 84);	
        EPWM_setDeadBandDelayPolarity(myEPWM7_BASE, EPWM_DB_FED, EPWM_DB_POLARITY_ACTIVE_LOW);	
        EPWM_setDeadBandDelayMode(myEPWM7_BASE, EPWM_DB_RED, true);	
        EPWM_setRisingEdgeDelayCount(myEPWM7_BASE, 12);	
        EPWM_setDeadBandDelayMode(myEPWM7_BASE, EPWM_DB_FED, true);	
        EPWM_setFallingEdgeDelayCount(myEPWM7_BASE, 12);	
        EPWM_setDeadBandOutputSwapMode(myEPWM7_BASE, EPWM_DB_OUTPUT_A, true);	
        EPWM_setDeadBandOutputSwapMode(myEPWM7_BASE, EPWM_DB_OUTPUT_B, true);	
        EPWM_enableInterrupt(myEPWM7_BASE);	
        EPWM_setInterruptSource(myEPWM7_BASE, EPWM_INT_TBCTR_U_CMPD);	
        EPWM_setInterruptEventCount(myEPWM7_BASE, 1);	
        EPWM_enableADCTrigger(myEPWM7_BASE, EPWM_SOC_A);	
        EPWM_setADCTriggerSource(myEPWM7_BASE, EPWM_SOC_A, EPWM_SOC_TBCTR_U_CMPC);	
        EPWM_setADCTriggerEventPrescale(myEPWM7_BASE, EPWM_SOC_A, 1);	

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

    尊敬的 Poyi:

    何时清除逐周期跳闸区标志?  

    您能否在示波器上为 PWM 模块的 EXTSYNCOUT 设置一个输出酒吧、以查看 TBCTR 何时达到0或 PRD 或 CMPA、并与您最初发送的那些输出信号一起发送该输出?

    此致!

    Ryan Ma

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

    您好、Ryan

      1.我们的程序在 TBPRD 为零时清除 CBC 跳闸区标志。

      2.下面的图片是 outputxbar,但它总是拉高。

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

    尊敬的 Poyi:

    在 SYSCFG 中、您已启用 CMPD 来触发 ISR。 您是否采取了任何措施来影响此 ISR 内的输出?

    此外、我还编辑了您提供的示波器图片、我标记的这些标记是否正确? 您交换了1A 和1B 的输出。 橙色波形为1B、绿色波形为1A 正确吗? CMPA 之前似乎发生了某种情况、这种情况会导致输出再次变为高电平然后变为低电平。 我希望确保首先了解您的波形。 消隐窗口从 TBCTR = 0开始、然后在 CMPA 周围开始消隐。 576 + 84 TBCLK 计数。 我想知道您是否更改消隐窗口的偏移、以查看此脉冲是否发生移动? 您是否使用定制的 PCB、CC 或 LaunchPad?

    此致!

    Ryan Ma

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

    您好,Ryan:  

    很抱歉我之前的描述不够清楚、我重新进行了实验。

    CMPD 仅用于触发 CLA 任务、没有其他用途。

    我们实现了二极管仿真。 下图显示了我们实验的实际波形。 PWMA 和 PWMB 直通 DB 模块的输出交换、因此 A 输出和 B 输出交换。 消隐窗口设置的值可动态调整、消隐时间= CMPA 点+84。 本实验的目的是在电感电流低于5A 时关闭 PWMB 输出、但在每个 PWM 周期结束时都会出现错误波形。

    如下图所示、死区设置的错误波形位置正好为200ns、可以帮助我确认是死区导致 PWM 错误还是设置有误、谢谢。


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

    尊敬的 Poyi:

    您是否可以将死区从200ns 增加到300ns、以查看这是否会使死区处出现的脉冲发生变化? 如果是、那么它很可能与死区有关、我们可以从死区移出。  

    否则、如果这不会移动所生成的脉冲、我们可以研究其他可能的方式。

    您使用的是 LaunchPad 还是 controlCARD?

    此致!

    Ryan Ma

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

    您好、Ryan:

    我们使用 定制 PCB。

    在图片下方、我将死区从200ns 增加到400ns。

    我认为是死区模块问题。

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

    尊敬的 Poyi:  

    这似乎是某种类型的配置问题、因为 PWM7A 和 EPWM10A 似乎没有问题。 如果禁用死区、是否仍然存在相同的抖动? 我只想验证这确实是死区。 如果您使能它返回、是否返回了不正确的脉冲?

    此致!

    Ryan Ma

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

    您好、Ryan

    由于 PWMA 是死区模块的来源、PWMB 从 PWMA 推断出死区以生成 PWM 波、因此它会导致错误的 PWM 波形、因为我手头没有 EVM 板、您能帮助我使用 EVM 板来帮助我亲身体验吗?

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

    尊敬的 Poyi:

    是的、我将测试此问题、看看我是否能够重现此问题。

    此致!

    Ryan Ma

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

    尊敬的 Poyi:

    我尝试复制您的 SysConfig 代码生成、注意到您的 CMPA 和 TBPRD 等于600。 这是一个拼写错误吗? 您能否改为附加整个 SysConfig 源代码、或通过电子邮件将 SysConfig 源代码发送给我?

    r-ma2@ti.com

    此致!

    Ryan Ma

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

    您好、Ryan

    以下代码是我们的 sysconfig 文件 board.c board.h、请帮助我们解决此问题、谢谢。

    board.c

    /*
     * Copyright (c) 2020 Texas Instruments Incorporated - http://www.ti.com
     * All rights reserved.
     *
     * 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.
     *
     */
    
    #include "board.h"
    
    void Board_init()
    {
    	EALLOW;
    
    	PinMux_init();
    	SYNC_init();
    	CMPSS_init();
    	EPWM_init();
    	EPWMXBAR_init();
    
    	EDIS;
    }
    
    void PinMux_init()
    {
    	//
    	// EPWM7 -> myEPWM7 Pinmux
    	//
    	GPIO_setPinConfig(GPIO_12_EPWM7A);
    	GPIO_setPinConfig(GPIO_13_EPWM7B);
    
    }
    
     
    void CMPSS_init(){
    
    	//myCMPSS0 initialization
    	// Sets the configuration for the high comparator.
    	CMPSS_configHighComparator(myCMPSS0_BASE,(CMPSS_INSRC_DAC | CMPSS_OR_ASYNC_OUT_W_FILT));
    	// Sets the configuration for the high comparator.
    	CMPSS_configLowComparator(myCMPSS0_BASE,(CMPSS_INSRC_DAC | CMPSS_INV_INVERTED | CMPSS_OR_ASYNC_OUT_W_FILT));
    	// Sets the configuration for the internal comparator DACs.
    	//  - ePWM module must be configured before using here.
    	CMPSS_configDAC(myCMPSS0_BASE,(CMPSS_DACVAL_PWMSYNC | CMPSS_DACREF_VDDA | CMPSS_DACSRC_SHDW));
    	// Sets the value of the internal DAC of the high comparator.
    	CMPSS_setDACValueHigh(myCMPSS0_BASE,620U);
    	// Sets the value of the internal DAC of the low comparator.
    	CMPSS_setDACValueLow(myCMPSS0_BASE,124U);
    	//  Configures the digital filter of the high comparator.
    	CMPSS_configFilterHigh(myCMPSS0_BASE, 0U, 1U, 1U);
    	// Configures the digital filter of the low comparator.
    	CMPSS_configFilterLow(myCMPSS0_BASE, 0U, 1U, 1U);
    	// Sets the output signal configuration for the high comparator.
    	CMPSS_configOutputsHigh(myCMPSS0_BASE,(CMPSS_TRIPOUT_ASYNC_COMP | CMPSS_TRIP_SYNC_COMP));
    	// Sets the output signal configuration for the low comparator.
    	CMPSS_configOutputsLow(myCMPSS0_BASE,(CMPSS_TRIPOUT_ASYNC_COMP | CMPSS_TRIP_SYNC_COMP));
    	// Sets the comparator hysteresis settings.
    	CMPSS_setHysteresis(myCMPSS0_BASE,1U);
    	// Configures the comparator subsystem's ramp generator.
    	CMPSS_configRamp(myCMPSS0_BASE,0U,0U,0U,1U,true);
    	// Disables reset of HIGH comparator digital filter output latch on PWMSYNC
    	CMPSS_disableLatchResetOnPWMSYNCHigh(myCMPSS0_BASE);
    	// Disables reset of LOW comparator digital filter output latch on PWMSYNC
    	CMPSS_disableLatchResetOnPWMSYNCLow(myCMPSS0_BASE);
    	// Configures whether or not the digital filter latches are reset by PWMSYNC
    	CMPSS_configLatchOnPWMSYNC(myCMPSS0_BASE,false,false);
    	// Enables the CMPSS module.
    	CMPSS_enableModule(myCMPSS0_BASE);
    	// Delay for CMPSS DAC to power up.
    	DEVICE_DELAY_US(500);
    }
    void EPWM_init(){
        EPWM_setEmulationMode(myEPWM7_BASE, EPWM_EMULATION_FREE_RUN);	
        EPWM_setClockPrescaler(myEPWM7_BASE, EPWM_CLOCK_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_1);	
        EPWM_setTimeBasePeriod(myEPWM7_BASE, 600);	
        EPWM_setTimeBaseCounter(myEPWM7_BASE, 0);	
        EPWM_setTimeBaseCounterMode(myEPWM7_BASE, EPWM_COUNTER_MODE_UP);	
        EPWM_disablePhaseShiftLoad(myEPWM7_BASE);	
        EPWM_setPhaseShift(myEPWM7_BASE, 0);	
        EPWM_setSyncOutPulseMode(myEPWM7_BASE, EPWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO);	
        EPWM_setCounterCompareValue(myEPWM7_BASE, EPWM_COUNTER_COMPARE_A, 30);	
        EPWM_setCounterCompareShadowLoadMode(myEPWM7_BASE, EPWM_COUNTER_COMPARE_A, EPWM_COMP_LOAD_ON_CNTR_ZERO);	
        EPWM_setCounterCompareValue(myEPWM7_BASE, EPWM_COUNTER_COMPARE_B, 48);	
        EPWM_setCounterCompareShadowLoadMode(myEPWM7_BASE, EPWM_COUNTER_COMPARE_B, EPWM_COMP_LOAD_ON_CNTR_ZERO);	
        EPWM_setCounterCompareValue(myEPWM7_BASE, EPWM_COUNTER_COMPARE_C, 181);	
        EPWM_setCounterCompareValue(myEPWM7_BASE, EPWM_COUNTER_COMPARE_D, 300);	
        EPWM_setActionQualifierT1TriggerSource(myEPWM7_BASE, EPWM_AQ_TRIGGER_EVENT_TRIG_DCA_2);	
        EPWM_setActionQualifierT2TriggerSource(myEPWM7_BASE, EPWM_AQ_TRIGGER_EVENT_TRIG_DCA_2);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);	
        EPWM_setActionQualifierT1TriggerSource(myEPWM7_BASE, EPWM_AQ_TRIGGER_EVENT_TRIG_DCA_2);	
        EPWM_setActionQualifierT2TriggerSource(myEPWM7_BASE, EPWM_AQ_TRIGGER_EVENT_TRIG_DCA_2);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);	
        EPWM_setTripZoneAction(myEPWM7_BASE, EPWM_TZ_ACTION_EVENT_TZA, EPWM_TZ_ACTION_LOW);	
        EPWM_setTripZoneAction(myEPWM7_BASE, EPWM_TZ_ACTION_EVENT_TZB, EPWM_TZ_ACTION_DISABLE);	
        EPWM_setTripZoneAction(myEPWM7_BASE, EPWM_TZ_ACTION_EVENT_DCAEVT1, EPWM_TZ_ACTION_DISABLE);	
        EPWM_setTripZoneAction(myEPWM7_BASE, EPWM_TZ_ACTION_EVENT_DCAEVT2, EPWM_TZ_ACTION_DISABLE);	
        EPWM_setTripZoneAction(myEPWM7_BASE, EPWM_TZ_ACTION_EVENT_DCBEVT1, EPWM_TZ_ACTION_DISABLE);	
        EPWM_setTripZoneAction(myEPWM7_BASE, EPWM_TZ_ACTION_EVENT_DCBEVT2, EPWM_TZ_ACTION_DISABLE);	
        EPWM_enableTripZoneSignals(myEPWM7_BASE, EPWM_TZ_SIGNAL_DCAEVT2);	
        EPWM_selectDigitalCompareTripInput(myEPWM7_BASE, EPWM_DC_TRIP_TRIPIN4, EPWM_DC_TYPE_DCAH);	
        EPWM_selectDigitalCompareTripInput(myEPWM7_BASE, EPWM_DC_TRIP_TRIPIN4, EPWM_DC_TYPE_DCAL);	
        EPWM_setTripZoneDigitalCompareEventCondition(myEPWM7_BASE, EPWM_TZ_DC_OUTPUT_A2, EPWM_TZ_EVENT_DCXL_HIGH);	
        EPWM_setDigitalCompareEventSource(myEPWM7_BASE, EPWM_DC_MODULE_A, EPWM_DC_EVENT_1, EPWM_DC_EVENT_SOURCE_FILT_SIGNAL);	
        EPWM_setDigitalCompareEventSource(myEPWM7_BASE, EPWM_DC_MODULE_A, EPWM_DC_EVENT_2, EPWM_DC_EVENT_SOURCE_FILT_SIGNAL);	
        EPWM_selectDigitalCompareTripInput(myEPWM7_BASE, EPWM_DC_TRIP_TRIPIN4, EPWM_DC_TYPE_DCBH);	
        EPWM_selectDigitalCompareTripInput(myEPWM7_BASE, EPWM_DC_TRIP_TRIPIN4, EPWM_DC_TYPE_DCBL);	
        EPWM_setDigitalCompareFilterInput(myEPWM7_BASE, EPWM_DC_WINDOW_SOURCE_DCAEVT2);	
        EPWM_enableDigitalCompareBlankingWindow(myEPWM7_BASE);	
        EPWM_setDigitalCompareBlankingEvent(myEPWM7_BASE, EPWM_DC_WINDOW_START_TBCTR_ZERO);	
        EPWM_setDigitalCompareWindowOffset(myEPWM7_BASE, 576);	
        EPWM_setDigitalCompareWindowLength(myEPWM7_BASE, 86);	
        EPWM_setDeadBandDelayPolarity(myEPWM7_BASE, EPWM_DB_FED, EPWM_DB_POLARITY_ACTIVE_LOW);	
        EPWM_setDeadBandDelayMode(myEPWM7_BASE, EPWM_DB_RED, true);	
        EPWM_setRisingEdgeDelayCount(myEPWM7_BASE, 12);	
        EPWM_setDeadBandDelayMode(myEPWM7_BASE, EPWM_DB_FED, true);	
        EPWM_setFallingEdgeDelayCount(myEPWM7_BASE, 12);	
        EPWM_setDeadBandOutputSwapMode(myEPWM7_BASE, EPWM_DB_OUTPUT_A, true);	
        EPWM_setDeadBandOutputSwapMode(myEPWM7_BASE, EPWM_DB_OUTPUT_B, true);	
        EPWM_enableInterrupt(myEPWM7_BASE);	
        EPWM_setInterruptSource(myEPWM7_BASE, EPWM_INT_TBCTR_U_CMPD);	
        EPWM_setInterruptEventCount(myEPWM7_BASE, 1);	
        EPWM_enableADCTrigger(myEPWM7_BASE, EPWM_SOC_A);	
        EPWM_setADCTriggerSource(myEPWM7_BASE, EPWM_SOC_A, EPWM_SOC_TBCTR_U_CMPC);	
        EPWM_setADCTriggerEventPrescale(myEPWM7_BASE, EPWM_SOC_A, 1);	
    }
    
    void EPWMXBAR_init(){
    	//myEPWMXBAR0 initialization
    		
    	XBAR_setEPWMMuxConfig(XBAR_TRIP4, XBAR_EPWM_MUX07_CMPSS4_CTRIPL);
    	XBAR_enableEPWMMux(XBAR_TRIP4, XBAR_MUX07);
    
    }
    void SYNC_init(){
    	SysCtl_setSyncOutputConfig(SYSCTL_SYNC_OUT_SRC_EPWM7SYNCOUT);
    	// For EPWM1, the sync input is: SYSCTL_SYNC_IN_SRC_EXTSYNCIN1
    	SysCtl_setSyncInputConfig(SYSCTL_SYNC_IN_EPWM4, SYSCTL_SYNC_IN_SRC_EPWM1SYNCOUT);
    	SysCtl_setSyncInputConfig(SYSCTL_SYNC_IN_EPWM7, SYSCTL_SYNC_IN_SRC_EPWM1SYNCOUT);
    	SysCtl_setSyncInputConfig(SYSCTL_SYNC_IN_EPWM10, SYSCTL_SYNC_IN_SRC_EPWM7SYNCOUT);
    	SysCtl_setSyncInputConfig(SYSCTL_SYNC_IN_ECAP1, SYSCTL_SYNC_IN_SRC_EPWM1SYNCOUT);
    	SysCtl_setSyncInputConfig(SYSCTL_SYNC_IN_ECAP4, SYSCTL_SYNC_IN_SRC_EPWM1SYNCOUT);
    	// SOCA
    	SysCtl_enableExtADCSOCSource(0);
    	// SOCB
    	SysCtl_enableExtADCSOCSource(0);
    	SysCtl_lockSyncSelect();
    }
    

    board.h

    /*
     * Copyright (c) 2020 Texas Instruments Incorporated - http://www.ti.com
     * All rights reserved.
     *
     * 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.
     *
     */
    
    #ifndef BOARD_H
    #define BOARD_H
    
    //
    // Included Files
    //
    
    #include "driverlib.h"
    #include "device.h"
    
    #define GPIO_PIN_EPWM7A 12
    #define GPIO_PIN_EPWM7B 13
    
    #define myCMPSS0_BASE CMPSS4_BASE
    
    #define myEPWM7_BASE EPWM7_BASE
    
    void	Board_init();
    void	CMPSS_init();
    void	EPWM_init();
    void	EPWMXBAR_init();
    void	SYNC_init();
    void	PinMux_init();
    
    #endif  // end of BOARD_H definition
    

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

    我将对此进行研究、明天再与您联系。

    此致!

    Ryan Ma