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.

[参考译文] TMS320F28388D:CMPSS -数字滤波器+斜坡发生器+ EPWMSYNCPER + CRTIPOUTH OUT(outputxbar):预期结果完全不匹配。

Guru**** 2522770 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1170870/tms320f28388d-cmpss---digital-filter-ramp-generator-epwmsyncper-crtipouth-out-outputxbar-the-expected-results-do-not-match-at-all

器件型号:TMS320F28388D

您好:

   我使用 epwm1递增计数模式、生成 EPWM1SYNCPER、输出到 CMPSS 模块、斜坡发生器到 DAC 负极、正极连接到1.1V、通过数字滤波器、输出 CTRIPOUTH、

从理论上讲、接收 EPWM1SYNCPER 信号后的输出结果应先为低电平、然后为高电平、实际信号完全不同、实际信号完全不同、379D 也是如此。

测试结果:

通道1 :  EPWM1SYNCPER

通道 2 :  CRTIPOUTH (OUTPUTXABR 输出)

通道 3  :  DAC +

预期结果:

以下是我的设置:

/******* 委员会  /

void Board_init()

EALLOW;

PinMux_init();
SYNC_INIT();
CMPSS_INIT();
ePWM_init();
OUTPUTXBAR_INIT();

EDIS;

空 PinMux_init()

//
// EPWM1 -> myEPWM1 Pinmux
//
GPIO_setPinConfig (GPIO_0_EPWM1A);
GPIO_setPinConfig (GPIO_1_EPWM1B);
//
// OUTPUTXBAR1 -> myOUTPUTXBAR1引脚多路复用
//
GPIO_setPinConfig (GPIO_2_OUTPUTXBAR1);
//
// OUTPUTXBAR3 -> myOUTPUTXBAR2引脚多路复用
//
GPIO_setPinConfig (GPIO_14_OUTPUTXBAR3);


void CMPSS 初始化(){

//myCMPSS0初始化
//设置高比较器的配置。
CMPSS_CONFIGHighComparator (myCMPSS0_BASE、(CMPSS_INSRC_DAC));
//设置高比较器的配置。
CMPSS_CONFIGLowComparator (myCMPSS0_BASE、(CMPSS_INSRC_DAC));
//设置内部比较器 DAC 的配置。
//- ePWM 模块必须在使用这里之前进行配置。
CMPSS_CONFIGDAC (myCMPSS0_BASE、(CMPSS_DACVAL_PWMSYNC | CMPSS_DACREF_VDDA | CMPSS_DACSRC_RAMP));
//设置高比较器的内部 DAC 值。
CMPSS_setDACValueHigh (myCMPSS0_BASE、0U);
//设置低比较器的内部 DAC 的值。
CMPSS_setDACValueLow (myCMPSS0_BASE、0U);
//配置高比较器的数字滤波器。
CMPSS_CONFIGFilterHigh (myCMPSS0_BASE、1U、1U、1U);
//配置低比较器的数字滤波器。
CMPSS_CONFIGFilterLow (myCMPSS0_BASE、0U、1U、1U);
//初始化高比较器的数字滤波器。
CMPSS_initFilterHigh (myCMPSS0_BASE);
//设置高电平比较器的输出信号配置。
CMPSS_CONFIGOutputsHigh (myCMPSS0_BASE、(CMPSS_TRIPOUT_FILTER | CMPSS_TRIP_FILTER));
//设置低电平比较器的输出信号配置。
CMPSS_CONFIGOutputsLow (myCMPSS0_BASE、(CMPSS_TRIPOUT_ASYNC_COMP | CMPSS_TRIP_ASYNC_COMP));
//设置比较器迟滞设置。
CMPSS_set迟滞(myCMPSS0_BASE、0U);
//配置比较器子系统的斜坡发生器。
CMPSS_CONFIGRAMP (myCMPSS0_BASE、3000U、1U、1U、1U、true);
//禁用 PWMSYNC 上高比较器数字滤波器输出锁存的复位
CMPSS_disableLatchResetOnPWMSYNCHigh (myCMPSS0_BASE);
//禁用 PWMSYNC 上低比较器数字滤波器输出锁存的复位
CMPSS_disableLatchResetOnPWMSYNCLow (myCMPSS0_BASE);
//设置保持复位跳闸的 EPWM 模块消隐信号。
CMPSS_CONFIG消 隐(myCMPSS0_BASE、1U);
//禁用 ePWM 消隐信号,使跳闸保持在复位状态。
CMPSS_disableBlanking (myCMPSS0_BASE);
//配置数字滤波器锁存器是否由 PWMSYNC 复位
CMPSS_CONFIGLatchOnPWMSYNC (myCMPSS0_BASE、true、false);
//启用 CMPSS 模块。
CMPSS_enableModule (myCMPSS0_BASE);
// CMPSS DAC 加电延迟。
DEVICE_DELAY_US (500);

void ePWM_init(){
ePWM_setClockPrescaler (myEPWM1_base、ePWM_CLOCK 分频器_2、ePWM_HSCLOCK_divider);
ePWM_setClockPrescaler (myEPWM1_base、ePWM_CLOCK 分频器_2、ePWM_HSCLOCK_divider);
ePWM_setTimeBasePeriod (myEPWM1_base、2000);
ePWM_setTimeBaseCounter (myEPWM1_base、0);
ePWM_setTimeBaseCounterMode (myEPWM1_base、ePWM_COUNTER_MODE_UP);
ePWM_DisablePhaseShiftLoad (myEPWM1_base);
ePWM_setPhaseShift (myEPWM1_base、0);
ePWM_enableSyncOutPulseSource (myEPWM1_base、ePWM_SYNC_OUT_PULSE_ON_CNTR_ZERO);
ePWM_setCounterCompareValue (myEPWM1_base、ePWM_COUNTER_COMPARE_A、1000);
ePWM_setCounterCompareShadowImage LoadMode (myEPWM1_base、ePWM_COUNTER_COMPARE_A、ePWM_COMP_LOAD_ON_CNTR_ZERO);
ePWM_setCounterCompareValue (myEPWM1_base、ePWM_COUNTER_COMPARE_B、1000);
ePWM_setCounterCompareShadowImage LoadMode (myEPWM1_base、ePWM_COUNTER_COMPARE_B、ePWM_COMP_LOAD_ON_CNTR_ZERO);
ePWM_setCounterCompareValue (myEPWM1_base、ePWM_COUNTER_COMPARE_C、300);
ePWM_setActionQualifierAction (myEPWM1_base、ePWM_AQ_output_A、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_zero);
ePWM_setActionQualifierAction (myEPWM1_base、ePWM_AQ_output_A、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_period);
ePWM_setActionQualifierAction (myEPWM1_base、ePWM_AQ_output_A、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_up_CMPA);
ePWM_setActionQualifierAction (myEPWM1_base、ePWM_AQ_output_A、ePWM_AQ_output_no_change、ePWM_AQ_output_on_timebase_down_cmPA);
ePWM_setActionQualifierAction (myEPWM1_base、ePWM_AQ_output_A、ePWM_AQ_output_no_change、ePWM_AQ_output_on_timebase_up_CMPB);
ePWM_setActionQualifierAction (myEPWM1_base、ePWM_AQ_output_A、ePWM_AQ_output_no_change、ePWM_AQ_output_on_timebase_down_CMPB);
ePWM_setActionQualifierAction (myEPWM1_base、ePWM_AQ_output_B、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_zero);
ePWM_setActionQualifierAction (myEPWM1_base、ePWM_AQ_output_B、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_period);
ePWM_setActionQualifierAction (myEPWM1_base、ePWM_AQ_output_B、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_up_CMPA);
ePWM_setActionQualifierAction (myEPWM1_base、ePWM_AQ_output_B、ePWM_AQ_output_no_change、ePWM_AQ_output_on_timebase_down_cmPA);
ePWM_setActionQualifierAction (myEPWM1_base、ePWM_AQ_output_B、ePWM_AQ_output_no_change、ePWM_AQ_output_on_timebase_up_CMPB);
ePWM_setActionQualifierAction (myEPWM1_base、ePWM_AQ_output_B、ePWM_AQ_output_no_change、ePWM_AQ_output_on_timebase_down_CMPB);
ePWM_enableInterrupt (myEPWM1_base);
ePWM_setInterruptSource (myEPWM1_base、ePWM_INT_TBCTR_U_CMPA);
ePWM_setInterruptEventCount (myEPWM1_BASE、3);

void OUTPUTXBAR_init (){

//myOUTPUTXBAR1初始化
Xbar_setOutputLatchMode (OUTPUTXBAR_BASE、XBAR_Output1、false);
Xbar_invertOutputSignal (OUTPUTXBAR_base、XBAR_Output1、false);

//Mux 配置
Xbar_setOutputMuxConfig (OUTPUTXBAR_base、XBAR_Output1、XBAR_OUT_MUX14_EXTSYNCOUT);
Xbar_enableOutputMux (OUTPUTXBAR_base、XBAR_Output1、XBAR_MUX14);

//myOUTPUTXBAR2初始化
Xbar_setOutputLatchMode (OUTPUTXBAR_BASE、XBAR_OUTPUT3、false);
Xbar_invertOutputSignal (OUTPUTXBAR_base、XBAR_OUTPUT3、false);

//Mux 配置
Xbar_setOutputMuxConfig (OUTPUTXBAR_base、XBAR_OUTPUT3、XBAR_OUT_MUX00_CMPSS1_CTRIPOUTH);
Xbar_enableOutputMux (OUTPUTXBAR_base、XBAR_OUTPUT3、XBAR_MUX00);

void sync_init(){
SYSCTL_setSyncOutputConfig (SYSCTL_SYNC_OUT_SRC_EPWM1SYNCOUT);
// SOCA
SYSCTL_enableExtADCSOCSOURCE (0);
// SOCB
SYSCTL_enableExtADCSOCSOURCE (0);

/******* //board.c  /

/******* //main.c  /

#include "driverlib.h"
#include "device.h"
#include "board.h"

typedef 结构

uint32_t epwmModule;
uint16_t epwmCompADirection;
uint16_t epwmCompBDirection;
uint16_t epwmTimerIntCount;
uint16_t epwmMaxCompA;
uint16_t epwmMinCompA;
uint16_t epwmMaxCompB;
uint16_t epwmMinCompB;
} epwmInfo;

epwmInfo epwm1Info;

volatile uint16_t compAVal、compBVal;

#define EPWM1_TIMER_TBPRD 2000 //周期寄存器
#define EPWM1_MAX_CMPA 1950
#define EPWM1_MIN_CMPA 50
#define EPWM1_MAX_CMPB 1950
#define EPWM1_MIN_CMPB 50.

#define ePWM_CMP_UP 1.
#define ePWM_CMP_DOWN 0
//
// updateCompare -更新指定 ePWM 的比较值
//

// epwm1ISR -用于更新比较值的 EPWM1 ISR
//
_interrupt void epwm1ISR (void)

//
//清除此计时器的 INT 标志
//
ePWM_clearEventTriggerInterruptFlag (myEPWM1_base);

//
//确认此中断以接收来自组3的更多中断
//
INTERRUPT_clearACKGROUP (INTERRUPT_ACK_Group3);

// initEPWM1信息
//
空 initEPWM1()

//
//此示例用于跟踪的信息
CMPA/CMPB 值的方向//
//移动、最小和最大允许值和
//指向正确 ePWM 寄存器的指针
//

//首先增大 CMPA & CMPB
epwm1Info.epwmCompADirection = ePWM_CMP_UP;
epwm1Info.epwmCompBDirection = ePWM_CMP_UP;

//清除中断计数器
epwm1Info.epwmTimerIntCount = 0;

//将 base 设置为 ePWM1
epwm1Info.epwmModule = myEPWM1_base;

//设置最小值/最大 CMPA/CMP 值
epwm1Info.epwmMaxCompA = EPWM1_MAX_CMPA;
epwm1Info.epwmMinCompA = EPWM1_MIN_CMPA;
epwm1Info.epwmMaxCompB = EPWM1_MAX_CMPB;
epwm1Info.epwmMinCompB = EPWM1_MIN_CMPB;

void Test_init()

EALLOW;

HWREG (0x00005C80 + 0x4)|= 0xC000;

EDIS;

//
//主函
//
uint32_t vTestCount = 0;
uint32_t bTestFlag = 0;
uint16_t vData = 1;
uint32_t vRAMPVALUE = 0、vRAMPVALUE2 = 0;

void main (void)

//
//初始化设备时钟和外设
//
device_init();

//
//禁用引脚锁定并启用内部上拉。
//
DEVICE_initGPIO();

//
//初始化 PIE 并清除 PIE 寄存器。 禁用 CPU 中断。
//
interrupt_initModule();

//
//使用指向 shell 中断的指针初始化 PIE 矢量表
//服务例程(ISR)。
//
interrupt_initVectorTable();

//
//此示例中使用的中断被重新映射到
//此文件中的 ISR 函数。
//
INTERRUPT_REGISTER (INT_EPWM1、epwm1ISR);

//
//禁用同步(也冻结 PWM 的时钟)
//
SYSCTL_DisablePeripheral (SYSCTL_Periph_CLK_TBCLKSYNC);

//
//配置 GPIO 引脚和 ePWM 模块
//
Board_init();
//Test_init();

initEPWM1();

//
//启用到 PWM 的同步和时钟
//
SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_TBCLKSYNC);

//
//启用此示例所需的中断
//
INTERRUPT_ENABLE (INT_EPWM1);

//
//启用全局中断和更高优先级的实时调试事件:
//
EINT;//启用全局中断 INTM
ERTM;//启用全局实时中断 DBGM

//
//空闲循环。 只需坐下来循环(可选):
//
for (;;)

vTestCount++;

IF (bTestFlag)

bTestFlag = 0;

// vRAMPVALUE = HWREG (0x00005C80 + 0x10);

// vRAMPVALUE2 = HWREGH (0x00005C80 + 0x10);

/******* //main.c   /

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

    您好!  

    感谢您的耐心等待。  

    我将仔细查看您的代码、并尽快回复您。

    此致、

    哈迪

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

    您好 Carl、  

    根据我的理解、您将使用 信号  EPWM1SYNCPER 来更新 DACHVALA 寄存器、该寄存器将转至比较器的负输入端。 因此、在比较器中、如果反相引脚的电压低 于同相引脚(1.1V)、则输出应为高电平。

    我检查了您的 CMPSS 部分代码。

    您需要注意以下几点:

    1) 1)您能否将与启用 CMPSS 模块相关的代码移动到 其函数的开头、我是说将 CMPSS_enableModule (myCMPSS0_BASE) 放在 initCMPSS (void)函数的第一行?

    2) 2)在代码中 、阈 值和 samplpleWindow 相等。 实际上、为了确保滤波器正常工作、您需要确保阈值必须大于 sampleWindow。  

    请告诉我它是如何工作的。

    谢谢、

    哈迪

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

    感谢您的回复、您的理解正是我想说的。   关于您提到的两点、我会尝试一下、我会尽快返回给您、并提供结果

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

    Hadi ,您好

    我已经尝试过您提到的两点、结果仍然没有变化。

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

    您好 Carl、

    首先、请移动 DELAY 函数调用并将其置于 CMPSS_enableModule (myCMPSS0_BASE)之后。 因此 ,initCMPSS (void)函数的开头如下所示:

    void CMPSS 初始化(){

    //启用 CMPSS 模块。
    CMPSS_enableModule (myCMPSS0_BASE);
    // CMPSS DAC 加电延迟。
    DEVICE_DELAY_US (500);

    其次,需要 CMPSS_INIT()之前调用 ePWM_init()函数。  然后,您的 Board_init()如下所示:

    void Board_init()

    EALLOW;

    PinMux_init();
    SYNC_INIT();

    ePWM_init();
    CMPSS_INIT();
    OUTPUTXBAR_INIT();

    EDIS;

    请告诉我它是如何工作的。

    此致、

    哈迪

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

    Hadi ,您好

      我根据您的建议修改了代码、但它不起作用。

    然后、我在我的一侧有一个新发现:随机数需要设置为16位、我将其设置为32000U 和

    我可以看到、RAMPSTS 的值正在减小、但实际输出始终为低电平。

    我尝试修改 RAMPMAXREFS 的值、不管它是大还是小、结果都始终很低。

    • 这是我的代码和结果:
    • CH1 == EPWM1
    • CH2 =EPWM1SYNCPER
    • CH3 =CRTIPOUTH  (OUTPUTXABR 输出)
    • DAC+==1.1V

    ../../******* 启动“*******” /

    void Board_init()

    EALLOW;

    PinMux_init();
    SYNC_INIT();

    ePWM_init();
    CMPSS_INIT();
    OUTPUTXBAR_INIT();

    EDIS;

    空 PinMux_init()

    //
    // EPWM1 -> myEPWM1 Pinmux
    //
    GPIO_setPinConfig (GPIO_0_EPWM1A);
    GPIO_setPinConfig (GPIO_1_EPWM1B);
    //
    // OUTPUTXBAR1 -> myOUTPUTXBAR1引脚多路复用
    //
    GPIO_setPinConfig (GPIO_2_OUTPUTXBAR1);
    //
    // OUTPUTXBAR3 -> myOUTPUTXBAR2引脚多路复用
    //
    GPIO_setPinConfig (GPIO_14_OUTPUTXBAR3);


    void CMPSS 初始化(){
    //启用 CMPSS 模块。
    CMPSS_enableModule (myCMPSS0_BASE);

    // CMPSS DAC 加电延迟。
    DEVICE_DELAY_US (500);

    //myCMPSS0初始化
    //设置高比较器的配置。
    CMPSS_CONFIGHighComparator (myCMPSS0_BASE、(CMPSS_INSRC_DAC));
    //设置高比较器的配置。
    CMPSS_CONFIGLowComparator (myCMPSS0_BASE、(CMPSS_INSRC_DAC));
    //设置内部比较器 DAC 的配置。
    //- ePWM 模块必须在使用这里之前进行配置。
    CMPSS_CONFIGDAC (myCMPSS0_BASE、(CMPSS_DACVAL_PWMSYNC | CMPSS_DACREF_VDDA | CMPSS_DACSRC_RAMP));
    //设置高比较器的内部 DAC 值。
    CMPSS_setDACValueHigh (myCMPSS0_BASE、0U);
    //设置低比较器的内部 DAC 的值。
    CMPSS_setDACValueLow (myCMPSS0_BASE、0U);
    //配置高比较器的数字滤波器。
    CMPSS_CONFIGFilterHigh (myCMPSS0_BASE、1U、1U、2U);
    //配置低比较器的数字滤波器。
    CMPSS_CONFIGFilterLow (myCMPSS0_BASE、0U、1U、1U);
    //初始化高比较器的数字滤波器。
    CMPSS_initFilterHigh (myCMPSS0_BASE);
    //设置高电平比较器的输出信号配置。
    CMPSS_CONFIGOutputsHigh (myCMPSS0_BASE、(CMPSS_TRIPOUT_FILTER | CMPSS_TRIP_FILTER));
    //设置低电平比较器的输出信号配置。
    CMPSS_CONFIGOutputsLow (myCMPSS0_BASE、(CMPSS_TRIPOUT_ASYNC_COMP | CMPSS_TRIP_ASYNC_COMP));
    //设置比较器迟滞设置。
    CMPSS_set迟滞(myCMPSS0_BASE、0U);
    //配置比较器子系统的斜坡发生器。
    CMPSS_CONFIGRAMP (myCMPSS0_BASE、32768U、1U、1U、1U、true);
    //禁用 PWMSYNC 上高比较器数字滤波器输出锁存的复位
    CMPSS_disableLatchResetOnPWMSYNCHigh (myCMPSS0_BASE);
    //禁用 PWMSYNC 上低比较器数字滤波器输出锁存的复位
    CMPSS_disableLatchResetOnPWMSYNCLow (myCMPSS0_BASE);
    //设置保持复位跳闸的 EPWM 模块消隐信号。
    CMPSS_CONFIG消 隐(myCMPSS0_BASE、1U);
    //禁用 ePWM 消隐信号,使跳闸保持在复位状态。
    CMPSS_disableBlanking (myCMPSS0_BASE);
    //配置数字滤波器锁存器是否由 PWMSYNC 复位
    CMPSS_CONFIGLatchOnPWMSYNC (myCMPSS0_BASE、true、false);
    //启用 CMPSS 模块。
    //CMPSS_enableModule (myCMPSS0_BASE);
    // CMPSS DAC 加电延迟。
    DEVICE_DELAY_US (500);

    void ePWM_init(){
    ePWM_setClockPrescaler (myEPWM1_base、ePWM_CLOCK 分频器_2、ePWM_HSCLOCK_divider);
    ePWM_setClockPrescaler (myEPWM1_base、ePWM_CLOCK 分频器_2、ePWM_HSCLOCK_divider);
    ePWM_setTimeBasePeriod (myEPWM1_base、2000);
    ePWM_setTimeBaseCounter (myEPWM1_base、0);
    ePWM_setTimeBaseCounterMode (myEPWM1_base、ePWM_COUNTER_MODE_UP);
    ePWM_DisablePhaseShiftLoad (myEPWM1_base);
    ePWM_setPhaseShift (myEPWM1_base、0);
    ePWM_enableSyncOutPulseSource (myEPWM1_base、ePWM_SYNC_OUT_PULSE_ON_CNTR_ZERO);
    ePWM_setCounterCompareValue (myEPWM1_base、ePWM_COUNTER_COMPARE_A、1000);
    ePWM_setCounterCompareShadowImage LoadMode (myEPWM1_base、ePWM_COUNTER_COMPARE_A、ePWM_COMP_LOAD_ON_CNTR_ZERO);
    ePWM_setCounterCompareValue (myEPWM1_base、ePWM_COUNTER_COMPARE_B、1000);
    ePWM_setCounterCompareShadowImage LoadMode (myEPWM1_base、ePWM_COUNTER_COMPARE_B、ePWM_COMP_LOAD_ON_CNTR_ZERO);
    ePWM_setCounterCompareValue (myEPWM1_base、ePWM_COUNTER_COMPARE_C、300);
    ePWM_setActionQualifierAction (myEPWM1_base、ePWM_AQ_output_A、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_zero);
    ePWM_setActionQualifierAction (myEPWM1_base、ePWM_AQ_output_A、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_period);
    ePWM_setActionQualifierAction (myEPWM1_base、ePWM_AQ_output_A、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_up_CMPA);
    ePWM_setActionQualifierAction (myEPWM1_base、ePWM_AQ_output_A、ePWM_AQ_output_no_change、ePWM_AQ_output_on_timebase_down_cmPA);
    ePWM_setActionQualifierAction (myEPWM1_base、ePWM_AQ_output_A、ePWM_AQ_output_no_change、ePWM_AQ_output_on_timebase_up_CMPB);
    ePWM_setActionQualifierAction (myEPWM1_base、ePWM_AQ_output_A、ePWM_AQ_output_no_change、ePWM_AQ_output_on_timebase_down_CMPB);
    ePWM_setActionQualifierAction (myEPWM1_base、ePWM_AQ_output_B、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_zero);
    ePWM_setActionQualifierAction (myEPWM1_base、ePWM_AQ_output_B、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_period);
    ePWM_setActionQualifierAction (myEPWM1_base、ePWM_AQ_output_B、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_up_CMPA);
    ePWM_setActionQualifierAction (myEPWM1_base、ePWM_AQ_output_B、ePWM_AQ_output_no_change、ePWM_AQ_output_on_timebase_down_cmPA);
    ePWM_setActionQualifierAction (myEPWM1_base、ePWM_AQ_output_B、ePWM_AQ_output_no_change、ePWM_AQ_output_on_timebase_up_CMPB);
    ePWM_setActionQualifierAction (myEPWM1_base、ePWM_AQ_output_B、ePWM_AQ_output_no_change、ePWM_AQ_output_on_timebase_down_CMPB);
    ePWM_enableInterrupt (myEPWM1_base);
    ePWM_setInterruptSource (myEPWM1_base、ePWM_INT_TBCTR_U_CMPA);
    ePWM_setInterruptEventCount (myEPWM1_BASE、3);

    void OUTPUTXBAR_init (){

    //myOUTPUTXBAR1初始化
    Xbar_setOutputLatchMode (OUTPUTXBAR_BASE、XBAR_Output1、false);
    Xbar_invertOutputSignal (OUTPUTXBAR_base、XBAR_Output1、false);

    //Mux 配置
    Xbar_setOutputMuxConfig (OUTPUTXBAR_base、XBAR_Output1、XBAR_OUT_MUX14_EXTSYNCOUT);
    Xbar_enableOutputMux (OUTPUTXBAR_base、XBAR_Output1、XBAR_MUX14);

    //myOUTPUTXBAR2初始化
    Xbar_setOutputLatchMode (OUTPUTXBAR_BASE、XBAR_OUTPUT3、false);
    Xbar_invertOutputSignal (OUTPUTXBAR_base、XBAR_OUTPUT3、false);

    //Mux 配置
    Xbar_setOutputMuxConfig (OUTPUTXBAR_base、XBAR_OUTPUT3、XBAR_OUT_MUX00_CMPSS1_CTRIPOUTH);
    Xbar_enableOutputMux (OUTPUTXBAR_base、XBAR_OUTPUT3、XBAR_MUX00);

    void sync_init(){
    SYSCTL_setSyncOutputConfig (SYSCTL_SYNC_OUT_SRC_EPWM1SYNCOUT);
    // SOCA
    SYSCTL_enableExtADCSOCSOURCE (0);
    // SOCB
    SYSCTL_enableExtADCSOCSOURCE (0);

    /******** 结束******** /

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

    Carl、

    为了更好地解决此问题、我们需要将其分为 ePWM 部分。  

    首先、让我们尝试将 CMPSS 配置为使用引脚上的电压、而不是斜坡发生器。 因此,请在代码中使用 CMPSS_init()函数,如下所示:

    void CMPSS 初始化(){
    //启用 CMPSS 模块。
    CMPSS_enableModule (myCMPSS0_BASE);

    // CMPSS DAC 加电延迟。
    DEVICE_DELAY_US (500);

    //myCMPSS0初始化
    //设置高比较器的配置。
    CMPSS_CONFIGHighComparator (myCMPSS0_BASE、(CMPSS_INSRC_DAC));
    //设置低比较器的配置。
    CMPSS_CONFIGLowComparator (myCMPSS0_BASE、(CMPSS_INSRC_DAC));
    //设置内部比较器 DAC 的配置。
    CMPSS_CONFIGDAC (myCMPSS0_BASE、(
    CMPSS_DACVAL_SYSCLK| CMPSS_DACREF_VDDA | CMPSS_DACSRC_Shdw));
    //设置高比较器的内部 DAC 值。
    CMPSS_setDACValueHigh (myCMPSS0_BASE、
    1200);
    //设置低比较器的内部 DAC 的值。
    CMPSS_setDACValueLow (myCMPSS0_BASE、
    1200);
    //配置高比较器的数字滤波器。
    CMPSS_CONFIGFilterHigh (myCMPSS0_BASE、0x3FF、32、31);
    //配置低比较器的数字滤波器。
    CMPSS_CONFIGFilterLow (myCMPSS0_BASE、0x3FF、32、31);
    //初始化高比较器的数字滤波器。
    CMPSS_initFilterHigh (myCMPSS0_BASE);
    //设置高电平比较器的输出信号配置。
    CMPSS_CONFIGOutputsHigh (myCMPSS0_BASE、(CMPSS_TRIPOUT_FILTER | CMPSS_TRIP_FILTER));
    //设置低电平比较器的输出信号配置。
    CMPSS_CONFIGOutputsLow (myCMPSS0_BASE、(CMPSS_TRIPOUT_ASYNC_COMP | CMPSS_TRIP_ASYNC_COMP));
    //设置比较器迟滞设置。
    CMPSS_set迟滞(myCMPSS0_BASE、0U);

    --------------------------------------------------------------------

    其次,在代码中修改 OUTPUTXBAR_INIT(),如下所示:

    void OUTPUTXBAR_init (){

    //Mux 配置
    Xbar_setOutputMuxConfig (XBAR_OUTPUT3、XBAR_OUT_MUX00_CMPSS1_CTRIPOUTH);
    Xbar_enableOutputMux (XBAR_OUTPUT3、XBAR_MUX00);

    //Mux 配置
    Xbar_setOutputMuxConfig (XBAR_OUTPUT3、XBAR_OUT_MUX00_CMPSS1_CTRIPOUTH);
    Xbar_enableOutputMux (XBAR_OUTPUT3、XBAR_MUX00);

    ----------------------------------------------------------------

    在这里 、我为比较器的反相引脚提供了1V 电压。 您应该能够看到输出 为高电平。

    请验证这一点并让我知道它是如何工作的。

    此致、

    哈迪