工具/软件:Code Composer Studio
你好
我希望 Three_H_bridges...bridge 2和3的 PWM 以桥1为基准
这意味着 PWM2和3 w.r.t PWM_1 I 正在使用 UP_MODE。
但我不想让腿超前相移。
#include "F28x_Project.h"
#include "math.h"
#define PWM_PRD 10000;
#define Phi1 500;//(625) 45度相位
#define Phi2 1300;//(625) 45度相位
#define PI 3.14159265358979323846
void InitEPwm1Examples(void);
void InitEPwm2Examples(void);
void InitEPwm3Examples(void);
void InitEPwm4Examples(void);
void InitEPwm5Examples(void);
void InitEPwm6Examples(void);
_interrupt void epwm1_ISR (void);
unsigned int i=0、m=0、k=0;
unsigned int a=0;
unsigned int b[101]={0};
void main (void)
{
InitSysCtrl();
对于(m=0;m<100;m++)
{
a=sin (pi*0.02*m);
b[m]= 5000*A + 5000;//50%半正弦波周期。
}
B[100]=0;
InitGpio();
EALLOW;
InitEPwm1Gpio();
InitEPwm2Gpio();
InitEPwm3Gpio();
InitEPwm4Gpio();
InitEPwm5Gpio();
InitEPwm6Gpio();
EDIS;
Dint;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW;
PieVectTable.EPWM1_INT =&epwm1_ISR;
InitEPwm1Examples();
InitEPwm2Examples();
InitEPwm3Examples();
InitEPwm4Examples();
InitEPwm5Examples();
InitEPwm6Examples();
GpioCtrlRegs.GPBDIR.bit.GPIO52=1;
EDIS;
IER |= M_INT3;
PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
PieCtrlRegs.PIEIER3.bit.INTx2 = 1;
PieCtrlRegs.PIEIER3.bit.INTx3=1;
EINT;//启用全局中断 INTM
ERTM;//启用全局实时中断 DBGM
for (;;)
{
ASM (" NOP");
}
}
_interrupt void epwm1_ISR (void)
{
GpioDataRegs.GPBDAT.bit.GPIO52=1;
a=sin (pi*0.02*i);
如果(A>=0)
{
EPwm1Regs.CMPA.bit.CMPA =b[i];
EPwm1Regs.CMPB.bit.CMPB =b[i];
EPwm2Regs.CMPA.bit.CMPA =b[i];
EPwm2Regs.CMPB.bit.CMPB =b[i];
EPwm3Regs.CMPA.bit.CMPA =b[i];
EPwm3Regs.CMPB.bit.CMPB =b[i];
EPwm4Regs.CMPA.bit.CMPA =b[i];
EPwm4Regs.CMPB.bit.CMPB =b[i];
EPwm5Regs.CMPA.bit.CMPA =b[i];
EPwm5Regs.CMPB.bit.CMPB =b[i];
EPwm6Regs.CMPA.bit.CMPA =b[i];
EPwm6Regs.CMPB.bit.CMPB =b[i];
}
其他
{
EPwm1Regs.CMPA.bit.CMPA =b[i];
EPwm1Regs.CMPB.bit.CMPB =b[i];
EPwm2Regs.CMPA.bit.CMPA =b[i];
EPwm2Regs.CMPB.bit.CMPB =b[i];
EPwm3Regs.CMPA.bit.CMPA =b[i];
EPwm3Regs.CMPB.bit.CMPB =b[i];
EPwm4Regs.CMPA.bit.CMPA =b[i];
EPwm4Regs.CMPB.bit.CMPB =b[i];
EPwm5Regs.CMPA.bit.CMPA =b[i];
EPwm5Regs.CMPB.bit.CMPB =b[i];
EPwm6Regs.CMPA.bit.CMPA =b[i];
EPwm6Regs.CMPB.bit.CMPB =b[i];
}
GpioDataRegs.GPBDAT.bit.GPIO52=0;
i++;
如果(i=101)
{
I=0;
}
EPwm1Regs.ETCLR.bit.INT = 1;
PieCtrlRegs.PIEACX.ALL = PIEACK_Group3;
}
空 InitEPwm1Examples()
{
////设置计数器模式//
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//递增和递减计数
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;//禁用相位加载
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;
//时钟设置
ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV =0;
ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV=0;
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//时钟与 SYSCLKOUT 的比率
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
////设置重影//
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_IMMETERM;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_IMMETERM;
//设置比较 A 值
EPwm1Regs.AQCTLA.bit.PRD = AQ_SET;//在事件 A 上设置 PWM1A、向上
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;//在事件 B 上清除 PWM1A,向下
EPwm1Regs.AQCTLB.bit.CBU = AQ_SET;//在事件 A 上设置 PWM1B、向上
EPwm1Regs.AQCTLB.bit.PRD = AQ_CLEAR;//在事件 B 上清除 PWM1B,向下
//PWM 设置
EPwm1Regs.TBPRD = PWM_PRD;//设置计时器周期801 TBCLK
EPwm1Regs.TBPHS.bit.TBPHS = 0;//相位为0
EPwm1Regs.TBCTR = 0;
//启用 INT 设置
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;//选择零事件时的 INT
EPwm1Regs.ETSEL.bit.INTEN = 1;//启用 INT
EPwm1Regs.ETPS.bit.INTPRD = et_1st;//在第三个事件发生时生成 INT
}
空 InitEPwm2Examples()
{
////设置计数器模式//
EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//递增和递减计数
EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE;//禁用相位加载
EPwm2Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV =0;
ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV=0;
EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//时钟与 SYSCLKOUT 的比率
EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1;
////设置重影//
EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_IMMETERM;
EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_IMMETERM;
////设置操作//
EPwm2Regs.AQCTLA.bit.PRD = AQ_CLEAR;//在事件 A 上设置 PWM1A、向上
EPwm2Regs.AQCTLA.bit.CAU = AQ_SET;//在事件 B 上清除 PWM1A、向下
EPwm2Regs.AQCTLB.bit.CBU = AQ_CLEAR;//在事件 A 上设置 PWM1B、向上
EPwm2Regs.AQCTLB.bit.PRD = AQ_SET;//在事件 B 上清除 PWM1B,向下
EPwm2Regs.TBPRD = PWM_PRD;//设置计时器周期801 TBCLK
EPwm2Regs.TBPHS.bit.TBPHS = 0;//相位为0
EPwm2Regs.TBCTR = 0;
////中断,其中我们将更改比较值//
EPwm2Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;//选择零事件时的 INT
EPwm2Regs.ETSEL.bit.INTEN = 1;//启用 INT
EPwm2Regs.ETPS.bit.INTPRD = et_1st;//在第三个事件发生时生成 INT
}
空 InitEPwm3Examples()
{
////设置计数器模式//
EPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//递增和递减计数
EPwm3Regs.TBCTL.bit.PHSEN = TB_ENABLE;//禁用相位加载
EPwm3Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm3Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV =0;
ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV=0;
EPwm3Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//时钟与 SYSCLKOUT 的比率
EPwm3Regs.TBCTL.bit.CLKDIV = TB_DIV1;
////设置重影//
EPwm3Regs.CMPCTL.bit.SHDWAMODE = CC_IMMETERM;
EPwm3Regs.CMPCTL.bit.SHDWBMODE = CC_IMMETERM;
////设置操作//
EPwm3Regs.AQCTLA.bit.PRD = AQ_SET;//在事件 A 上设置 PWM1A、向上
EPwm3Regs.AQCTLA.bit.CAU = AQ_CLEAR;//在事件 B 上清除 PWM1A,向下
//.AQCTLB.bit.CBU = AQ_CLEAR;//在事件 A 上设置 PWM1B、向上
//EPwm3Regs.AQCTLB.bit.PRD = AQ_SET;//在事件 B 上清除 PWM1B,向下
EPwm3Regs.TBPRD = PWM_PRD;//设置计时器周期801 TBCLK
EPwm3Regs.TBPHS.bit.TBPHS = Phi1;//相位为 PHI_1
EPwm3Regs.TBCTR = 0;
////中断,我们将在其中更改比较值//
EPwm3Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;//选择零事件时的 INT
EPwm3Regs.ETSEL.bit.INTEN = 1;//启用 INT
EPwm3Regs.ETPS.bit.INTPRD = et_1st;//在第三个事件发生时生成 INT
}
空 InitEPwm5Examples()
{
////设置计数器模式//
EPwm5Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//递增和递减计数
EPwm5Regs.TBCTL.bit.PHSEN = TB_ENABLE;//禁用相位加载
EPwm5Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm5Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV =0;
ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV=0;
EPwm5Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//时钟与 SYSCLKOUT 的比率
EPwm5Regs.TBCTL.bit.CLKDIV = TB_DIV1;
////设置重影//
EPwm5Regs.CMPCTL.bit.SHDWAMODE = CC_IMMETERM;
EPwm5Regs.CMPCTL.bit.SHDWBMODE = CC_IMMETERM;
////设置操作//
EPwm5Regs.AQCTLA.bit.PRD = AQ_CLEAR;//在事件 A 上设置 PWM1A、向上
EPwm5Regs.AQCTLA.bit.CAU = AQ_SET;//在事件 B 上清除 PWM1A、向下
EPwm5Regs.AQCTLB.bit.CBU = AQ_CLEAR;//在事件 A 上设置 PWM1B、向上
EPwm5Regs.AQCTLB.bit.PRD = AQ_SET;//在事件 B 上清除 PWM1B,向下
EPwm5Regs.TBPRD = PWM_PRD;//设置计时器周期801 TBCLK
EPwm5Regs.TBPHS.bit.TBPHS = Phi2;//相位为0
EPwm5Regs.TBCTR = 0;
////中断,我们将在其中更改比较值//
EPwm5Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;//选择零事件时的 INT
EPwm5Regs.ETSEL.bit.INTEN = 1;//启用 INT
EPwm5Regs.ETPS.bit.INTPRD = et_1st;//在第三个事件发生时生成 INT
}

