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.

TMS320F280041: PWM模块间同步问题

Part Number: TMS320F280041

Hi,all

我想实现EPWM7相对于EPWM4的同步移相,但根据F28004X的数据手册,EPWM4SYNCIN不能接收EPWM7SYNCOUT的同步脉冲。

现在我的想法是将EPWM7SYNCOUT输出到GPIO39上,或者将EPWM7发出的同步脉冲配置为EXTSYNCOUT再输出到GPIO39。GPIO39作为EXTSYNCIN1外部同步脉冲输入到

EPWM4SYNCIN,实现同步移相操作。

现在我遇到的问题如下:

1.如何实现EPWM7SYNCOUT到GPIO39的输出配置?是否需要使用OUTPUT X-BAR功能?

2.如何实现GPIO39到EXTSYNCIN1的输入配置?是否需要使用INTPUT X-BAR功能?

  • 你好,

    你之前的回复和我的想法是一样的,但我现在编的程序无法实现想要的效果。我理解是没有做到EPWM7SYNCOUT到EXTSYNCOUT,EXTSYNCOUT到GPIO5,和GPIO5到EXTSYNCIN1的传输,但是我在数据手册中没有找到可以进行这种转换的寄存器设置。可以的话请帮我检查一下我的程序缺少了哪些设置。

    //GPIO5,EXTSYNCOUT
    InputXbarRegs.INPUT3SELECT = 5;
    GpioCtrlRegs.GPADIR.bit.GPIO26 = 0; //配置为输入
    GpioCtrlRegs.GPAPUD.bit.GPIO26 = 0; //配置为上拉
    GpioCtrlRegs.GPAQSEL2.bit.GPIO26 = 3; //GPIO配置为非同步模式

    //EPWM7作为输出源,EPWM7SYNCOUT

    EPwm7Regs.TBCTL.bit.SYNCOSEL = 1; //Sync Output Select,01: CTR = zero: Time-base counter equal to zero (TBCTR = 0x00)
    SyncSocRegs.SYNCSELECT.bit.SYNCOUT = 2;//10: EPWM7SYNCOUT selected
    OutputXbarRegs.OUTPUT1MUX0TO15CFG.bit.MUX0 = 1; //01 : Select .1 input for Mux0
    OutputXbarRegs.OUTPUT1MUXENABLE.bit.MUX0 = 1; //1: Respective output of Mux0 is enabled to drive the OUTPUT1 of
    GpioCtrlRegs.GPAGMUX2.bit.GPIO5 = 1;
    GpioCtrlRegs.GPAMUX2.bit.GPIO5 = 1;EPwm7Regs.TBCTL.bit.PHSEN = 0; // 0: do not load the TBCTR from the TBPHS,禁用移相
    EPwm7Regs.TBPHS.bit.TBPHS = 0;//phase shift angle

    //EPWM4配置EPWM4SYNCIN为EXTSYNCIN1

    EPwm4Regs.TBCTL.bit.SYNCOSEL = 0;
    SyncSocRegs.SYNCSELECT.bit.EPWM4SYNCIN = 5;//101: EXTSYNCIN1 selected
    EPwm4Regs.TBCTL.bit.PHSEN = 1; // 0: do not load the TBCTR from the TBPHS
    EPwm4Regs.TBPHS.bit.TBPHS = 0;

    寄存器配置中我没有找到可以设置EPWM7输出同步脉冲到EXTSYNCOUT的配置位

  • 另外,请问您提到的“将EPWM3的输出直接作为EXTSYNCIN1EXTSYNCIN2的输入信号”的想法如何实现,我认为我的功能也可以这么做,将EPWM7的输出作为EXTSYNCIN1的输入信号。

  • 好的,我看一下

  • 昨天写的比较粗糙,GPIO口写错了。我重新发一下给您。

    //GPIO5引脚作为同步脉冲寄存。
    InputXbarRegs.INPUT3SELECT = 5;
    GpioCtrlRegs.GPADIR.bit.GPIO5 = 1; //配置为输出
    GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 0; //GPIO口输出
    GpioCtrlRegs.GPAPUD.bit.GPIO5 = 0; //配置为上拉
    GpioCtrlRegs.GPAQSEL1.bit.GPIO5 = 3; //GPIO配置为非同步模式

    EPwm7Regs.TBCTL.bit.SYNCOSEL = 1; //Sync Output Select,01: CTR = zero: Time-base counter equal to zero (TBCTR = 0x00)
    SyncSocRegs.SYNCSELECT.bit.SYNCOUT = 2;//10: EPWM7SYNCOUT selected
    OutputXbarRegs.OUTPUT1MUX0TO15CFG.bit.MUX0 = 1; //01 : Select .1 input for Mux0
    OutputXbarRegs.OUTPUT1MUXENABLE.bit.MUX0 = 1; //1: Respective output of Mux0 is enabled to drive the OUTPUT1 of
    GpioCtrlRegs.GPAGMUX1.bit.GPIO5 = 1;
    GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 1;

    EPwm7Regs.TBCTL.bit.PHSEN = 0; // 0: do not load the TBCTR from the TBPHS,禁用移相
    EPwm7Regs.TBPHS.bit.TBPHS = 0;//phase shift angle

    EPwm4Regs.TBCTL.bit.SYNCOSEL = 1;
    SyncSocRegs.SYNCSELECT.bit.EPWM4SYNCIN = 5;//101: EXTSYNCIN1 selected
    EPwm4Regs.TBCTL.bit.PHSEN = 1; // 0: do not load the TBCTR from the TBPHS
    EPwm4Regs.TBPHS.bit.TBPHS = 100;
    EPwm4Regs.TBCTR = 0x0000; // initial value of counter
    EPwm4Regs.TBPRD = 454;//1000; // time-base counter

  • sprui33f_TMS320F28004x Real-Time Microcontrollers Technical Reference Manual (Rev. F)

    OutputXbarRegs.OUTPUT1MUX0TO15CFG.bit.MUX0 = 1; //01 : Select .1 input for Mux0
    OutputXbarRegs.OUTPUT1MUXENABLE.bit.MUX0 = 1; //1: Respective output of Mux0 is enabled to drive the OUTPUT1 of

    首先你的output xbar选错了,只有MUX14的第3个信号是EXTSYNCOUT。8个OUTPUT可以任选一个,但是必须使用MUX14选择第3个信号;

    (第995页)

    GpioCtrlRegs.GPADIR.bit.GPIO5 = 1; //配置为输出
    GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 0; //GPIO口输出
    GpioCtrlRegs.GPAPUD.bit.GPIO5 = 0; //配置为上拉
    GpioCtrlRegs.GPAQSEL1.bit.GPIO5 = 3; //GPIO配置为非同步模式
    GpioCtrlRegs.GPAGMUX1.bit.GPIO5 = 1;
    GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 1;

    再来说GPIO,你选择的是OTPUT1,那就应该选择GPIO2

    (第892页)

    再通过MUXGMUX寄存器选择GPIO的功能为5

    SyncSocRegs.SYNCSELECT.bit.EPWM4SYNCIN = 5;//101: EXTSYNCIN1 selected
    InputXbarRegs.INPUT3SELECT = 5;

    鉴于你为EPWM4选择的同步输入信号是EXTSYNCIN1,输入INPUTXBAR应该选择INPUTXBAR5

    (第989页)

    这是我发现的有关同步信号输出输入的一些问题。

    EPwm4Regs.TBCTL.bit.SYNCOSEL = 1;

    另外,EPWM4后边如果还有同步信号链上的模块需要同步的,建议直接将EPWM4的同步输入信号直通到后面,即

    EPwm4Regs.TBCTL.bit.SYNCOSEL = 0;

  • Hi,Yale

    问题已经解决,谢谢你的帮助!