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.

[参考译文] CCS/TMS320F2.8377万S:TMS320F2.8377万S

Guru**** 2487425 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/615856/ccs-tms320f28377s-tms320f28377s

部件号:TMS320F2.8377万S

工具/软件:Code Composer Studio

您好,

我正在使用Launchpad F2.8377万s。 我想同步ePWM7–ePWM11。 我在实现这一目标方面有一些困难。 我将ePWM7配置为主服务器,其余ePWM配置为从属服务器。 我可以在运行中更改EPwmyRegs.TBPHS.bit.TBPHS的值,其中y可以是8,9,并在示波器上查看信号正在移动。 如果y等于10,则11没有发生任何情况。 如果我将ePWM10重新配置为主服务器,我可以将ePWM11与ePWM10进行切换。 我也注意到,如果我输入EPwmyRegs.TBPHS.bit.TBPHS (y=8,9) 1000,1001,则相移不会发生,通过它可以与999和1002正常工作。 ePWM7-9和ePWM10-11之间的差异是不同的MUX组。

感谢您的帮助!

//###################################################################

 

//

#include "F28x_Project.h"

 

//

//函数原型

//

 

 

void ConfigureEPwm7(void);

void ConfigureEPwm8(void);

void ConfigureEPwm9 (void);

void ConfigureEPwm10 (void);

void ConfigureEPwm11(void);

 

 

Void主(void)

   InitSysCtrl();

   示例跳过InitGpio();//

   Initepwm7Gpio()

   Initepwm8Gpio()

   Initepwm9Gpio()

   Initepwm10gpio()

   Initepwm11gpio()

   配置EPwm7();

   配置EPwm8();

   配置EPwm9();

   配置EPwm10();

   配置EPwm11();

   InitPieCtrl();

   IER = 0x0000;

   IFR = 0x0000;

   InitPieVectorTable();

   EALLOW;

   ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV = 0;

   EDIS;

 

 

 

//

//同步ePWM

//

   EALLOW;

   CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1;

 

//

//无限循环转换

//

   

   {

        //

       //软件断点,再次点击"运行"以获取更新的转换

       //

//        asm ("  ESTOP0");

   }同时(1);

}

 

 

void配置EPwm7()

  //

  //设置TBCLK

  //

  EPwm7Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//计数

  EPwm7Regs.TBPRD = 2500;      //设置计时器周期

  EPwm7Regs.CMPA.bit.CMPA = 125;     // set比较值

  EPwm7Regs.DBCTL.bit.out模式= DB_FULL_ENABLE;//启用死带模块

  EPwm7Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;//有源Hi互补

  EPwm7Regs.DBFED.ALL = 0;// fed = 50 TBCLK

  EPwm7Regs.DBRED.All = 0;

  EPwm7Regs.TBCTL.bit.PHSEN = TB_DISABLE;

  EPwm7Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;

  EPwm7Regs.TBPHS.ALL = 0;

 

 

  //

  //设置操作

  //

  EPwm7Regs.AQCTLA.bit.PRD = AQ_Clear;           //清除周期中的PWM7A

  EPwm7Regs.AQCTLA.bit.CAU = AQ_SET;             //在事件A上设置PWM7A,

                                                  //上升计数

  EPwm7Regs.AQCTLB.bit.PRD = AQ_SET;

  EPwm7Regs.AQCTLB.bit.CAU = AQ_CLEAR;

}

 

void配置epwm8()

  //

  //设置TBCLK

  //

  EPwm8Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//计数

  EPwm8Regs.TBPRD = 2500;      //设置计时器周期

  EPwm8Regs.CMPA.bit.CMPA = 125;     // set比较值

  EPwm8Regs.DBCTL.bit.out模式= DB_FULL_ENABLE;//启用死带模块

  EPwm8Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;//有源Hi互补

  EPwm8Regs.DBFED.ALL = 0;// fed = 50 TBCLK

  EPwm8Regs.DBRED.All = 0;

  EPwm8Regs.TBCTL.bit.PHSEN = TB_ENable;

  EPwm8Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;

  EPwm8Regs.TBPHS.bit.TBPHS = 250;

 

  //

  //设置操作

  //

  EPwm8Regs.AQCTLA.bit.PRD = AQ_Clear;           //清除周期中的PWM2A

  EPwm8Regs.AQCTLA.bit.CAU = AQ_SET;             //在事件A上设置PWM2A,

                                                  //上升计数

  EPwm8Regs.AQCTLB.bit.PRD = AQ_SET;

  EPwm8Regs.AQCTLB.bit.CAU = AQ_CLEAR;

}

 

void配置EPwm9()

        EPwm9Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//计数

        EPwm9Regs.TBPRD = 2500;      //设置计时器周期

        EPwm9Regs.CMPA.bit.CMPA = 125;     // set比较值

        EPwm9Regs.DBCTL.bit.out模式= DB_FULL_ENABLE;//启用死带模块

        EPwm9Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;//有源Hi互补

        EPwm9Regs.DBFED.ALL = 0;// fed = 50 TBCLK

        EPwm9Regs.DBRED.All = 0;

        EPwm9Regs.TBCTL.bit.PHSEN = TB_ENable;

        EPwm9Regs.TBCTL.bit.PHSDIR = TB_DOWN;

        EPwm9Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;

        EPwm9Regs.TBPHS.bit.TBPHS = 250;

 

        //

        //设置操作

        //

        EPwm9Regs.AQCTLA.bit.PRD = AQ_Clear;           //清除周期中的PWM2A

        EPwm9Regs.AQCTLA.bit.CAU = AQ_SET;             //在事件A上设置PWM2A,

                                                        //上升计数

        EPwm9Regs.AQCTLB.bit.PRD = AQ_SET;

        EPwm9Regs.AQCTLB.bit.CAU = AQ_CLEAR;

 

}

void配置EPwm10()

        EPwm10Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//计数

        EPwm10Regs.TBPRD = 2500;      //设置计时器周期

        EPwm10Regs.CMPA.bit.CMPA = 125;     // set比较值

        EPwm10Regs.DBCTL.bit.out模式= DB_FULL_ENABLE;//启用死带模块

        EPwm10Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;//有源Hi互补

        EPwm10Regs.DBFED.ALL = 0;// fed = 50 TBCLK

        EPwm10Regs.DBRED.All = 0;

        EPwm10Regs.TBCTL.bit.PHSEN = TB_ENable;

        EPwm10Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;

        EPwm10Regs.TBPHS.bit.TBPHS = 250;

 

        //

        //设置操作

        //

        EPwm10Regs.AQCTLA.bit.PRD = AQ_Clear;           //清除周期中的PWM2A

        EPwm10Regs.AQCTLA.bit.CAU = AQ_SET;             //在事件A上设置PWM2A,

                                                        //上升计数

        EPwm10Regs.AQCTLB.bit.PRD = AQ_SET;

        EPwm10Regs.AQCTLB.bit.CAU = AQ_CLEAR;

 

}

void配置epwm11()

        EPwm11Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//计数

        EPwm11Regs.TBPRD = 2500;      //设置计时器周期

        EPwm11Regs.CMPA.bit.CMPA = 125;     // set比较值

        EPwm11Regs.DBCTL.bit.out模式= DB_FULL_ENABLE;//启用死带模块

        EPwm11Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;//有源Hi互补

        EPwm11Regs.DBFED.ALL = 0;// fed = 50 TBCLK

        EPwm11Regs.DBRED.All = 0;

        EPwm11Regs.TBCTL.bit.PHSEN = TB_ENable;

        EPwm11Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;

        EPwm11Regs.TBPHS.bit.TBPHS = 250;

 

        //

        //设置操作

        //

        EPwm11Regs.AQCTLA.bit.PRD = AQ_Clear;           //清除周期中的PWM2A

        EPwm11Regs.AQCTLA.bit.CAU = AQ_SET;             //在事件A上设置PWM2A,

                                                        //上升计数

        EPwm11Regs.AQCTLB.bit.PRD = AQ_SET;

        EPwm11Regs.AQCTLB.bit.CAU = AQ_CLEAR;

 

}

 

 

//

//文件结束

//

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

    您好,Vadim,

    我相信您看到的是此设备上使用的ePWM同步方案的结果。

    请查看F2.8377万S设备的TRM中标记为"Time-Base Counter Synchronization Scheme (时基计数器同步方案)"的图:
    http://www.ti.com/lit/spruhx5

    在其中,您将看到ePWM9不可能 成为ePWM10的同步主控。  但是,如果 某些寄存器 配置正确,ePWM10可以直接与ePWM7同步。 (SYNCSELECT[EPWM10SYNCIN])

    希望这能有所帮助!


    谢谢!
    Brett

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢Brett!
    它提供了帮助。 是否有办法了解为什么1000,1001不1001不提供相移?
    谢谢,Vadim
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Vadim,

    我不清楚问题的描述是什么-关于第二部分。  我认为更详细一点可能会有所帮助。

    例如,当TBPHS配置为1000和1001时,您是否看到没有发生相移,或者只是没有看到您期望的相移?


    谢谢!
    Brett

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Brett,您好!
    我看不到。 例如,当TBPHS为999时,有一个较大的班次(999/2500)。 当我设置1000,1001时,它将变为0移位(同一相位),当我设置1002时,它将返回到大移位(1002/2500)2500)。 我希望对于所有这些数字,换档不会跳转,并且在40 % 周围保持不变
    谢谢Vadim
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Vadim,

    因此,如果将TBPHS设置为1000,您会看到发生相位移。  但是,它看起来是0相移,而不是~40 %。

    当您将TBPHS设置为1000时,您能否确认通过CCS表达式窗口/监视窗口看到寄存器设置为1000?
    您如何更改TBPHS?  通过软件还是通过写入表达式窗口?


    谢谢!
    Brett

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Brett,您好!
    感谢您的支持! 我直接写在登记册上。 默认值为二进制。 我写的是小数。 如果位数是0和1,则当其他位数存在时,CCS首先转换为二进制;因此,十进制中的MY 1000和1001被解释为0万00001000。0.1万。
    谢谢Vadim