工具/软件: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;
}
//
//文件结束
//