求各位懂DSP得大佬帮助下
这是关于软件强制输出高低电平的配置 :
#include "DSP2833x_Device.h"
#include "f2833xpwm.h"
void F2833X_PWM_Init(PWMGEN *p)
{
// Init Timer-Base Period Register for EPWM1-EPWM3
EPwm1Regs.TBPRD = p->PeriodMax;
EPwm2Regs.TBPRD = p->PeriodMax;
EPwm3Regs.TBPRD = p->PeriodMax;
// Init Timer-Base Phase Register for EPWM1-EPWM3
EPwm1Regs.TBPHS.half.TBPHS = 0;
EPwm2Regs.TBPHS.half.TBPHS = 0;
EPwm3Regs.TBPHS.half.TBPHS = 0;
// Init Timer-Base Control Register for EPWM1-EPWM3 0xA00A
EPwm1Regs.TBCTL.all = 0xA18E;
EPwm2Regs.TBCTL.all = 0xA18E;
EPwm3Regs.TBCTL.all = 0xA18E;
// Init Compare Control Register for EPWM1-EPWM3 0x0000
EPwm1Regs.CMPCTL.all = 0x0000;
EPwm2Regs.CMPCTL.all = 0x0000;
EPwm3Regs.CMPCTL.all = 0x0000;
// Init Action Qualifier Output A Register for EPWM1-EPWM3 0x0060
EPwm1Regs.AQCTLA.all = 0x0060;
EPwm2Regs.AQCTLA.all = 0x0060;
EPwm3Regs.AQCTLA.all = 0x0060;
// Init Dead-Band Generator Control Register for EPWM1-EPWM3 0x000B
EPwm1Regs.DBCTL.all = 0x0007;//DBCTL_INIT_STATE;
EPwm2Regs.DBCTL.all = 0x0007;//DBCTL_INIT_STATE;
EPwm3Regs.DBCTL.all = 0x0007;//DBCTL_INIT_STATE;
// Init PWM Chopper Control Register for EPWM1-EPWM3
EPwm1Regs.PCCTL.all = 0x0000;
EPwm2Regs.PCCTL.all = 0x0000;
EPwm3Regs.PCCTL.all = 0x0000;
// Init Dead-Band Generator Falling/Rising Edge Delay Register for EPWM1-EPWM3 100
EPwm1Regs.DBFED = 70;
EPwm1Regs.DBRED = 70;
EPwm2Regs.DBFED = 70;
EPwm2Regs.DBRED = 70;
EPwm3Regs.DBFED = 70;
EPwm3Regs.DBRED = 70;
//------------------------------------------
EALLOW;
EPwm1Regs.TZSEL.all=0x0000; //TZ1 OST
EPwm2Regs.TZSEL.all=0x0000; //TZ1 OST
EPwm3Regs.TZSEL.all=0x0000; //TZ1 OST
/* GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0; // Enable pullup on GPIO0
GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0; // Enable pullup on GPIO1
GpioCtrlRegs.GPAPUD.bit.GPIO2 = 0; // Enable pullup on GPIO2
GpioCtrlRegs.GPAPUD.bit.GPIO3 = 0; // Enable pullup on GPIO3
GpioCtrlRegs.GPAPUD.bit.GPIO4 = 0; // Enable pullup on GPIO4
GpioCtrlRegs.GPAPUD.bit.GPIO5 = 0; // Enable pullup on GPIO5 */
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1; // GPIO0 = PWM1A
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1; // GPIO1 = PWM1B
GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 1; // GPIO2 = PWM2A
GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 1; // GPIO3 = PWM2B
GpioCtrlRegs.GPAMUX1.bit.GPIO4 = 1; // GPIO4 = PWM3A
GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 1; // GPIO5 = PWM3B
EDIS;
/* EPwm1Regs.TZEINT.all=4; //Trip-zones Cycle by Cycle Interrupt
EPwm1Regs.TZCTL.all=0; //One Shot mod
EPwm2Regs.TZEINT.all=4; //Trip-zones Cycle by Cycle Interrupt
EPwm2Regs.TZCTL.all=0; //One Shot mod
EPwm3Regs.TZEINT.all=4; //Trip-zones Cycle by Cycle Interrupt
EPwm3Regs.TZCTL.all=0; //One Shot mod
*/
EPwm1Regs.AQSFRC.all = 0xc0;
EPwm2Regs.AQSFRC.all = 0xc0;
EPwm3Regs.AQSFRC.all = 0xc0;
EPwm1Regs.AQCSFRC.bit.CSFA=2; //对输出A强制产生连续高信号
EPwm2Regs.AQCSFRC.bit.CSFA=2;
EPwm3Regs.AQCSFRC.bit.CSFA=2;
EPwm1Regs.AQCSFRC.bit.CSFB=1; //对输出B强制产生连续高信号
EPwm2Regs.AQCSFRC.bit.CSFB=1;
EPwm3Regs.AQCSFRC.bit.CSFB=1;
//=========================================================//
}
下面是电流滞环的逻辑
void F2833X_PWM_Update(PWMGEN *p)
{
float32 A;
float32 B;
float32 C;
A=(float32)p->MfuncC4 - (float32)p->MfuncC1;//C1,C2,C3是指输入电流 , C4,C5,C6是指反馈电流
B=(float32)p->MfuncC5 -(float32) p->MfuncC2;
C=(float32)p->MfuncC6 -(float32) p->MfuncC3;
if( A>=0.316)
{
EPwm1Regs.AQCSFRC.bit.CSFA = 1; // Forcing a continuous Low on output A of EPWM1
EPwm1Regs.AQCSFRC.bit.CSFB = 2;
}
else
{
EPwm1Regs.AQCSFRC.bit.CSFA = 2; // Forcing a continuous Low on output A of EPWM1
EPwm1Regs.AQCSFRC.bit.CSFB = 1;
}
if( B>=0.316)
{
EPwm2Regs.AQCSFRC.bit.CSFA = 1; // Forcing a continuous Low on output A of EPWM1
EPwm2Regs.AQCSFRC.bit.CSFB = 2;
}
else
{
EPwm2Regs.AQCSFRC.bit.CSFA = 2; // Forcing a continuous Low on output A of EPWM1
EPwm2Regs.AQCSFRC.bit.CSFB = 1;
}
if( C>=0.316)
{
EPwm3Regs.AQCSFRC.bit.CSFA = 1; // Forcing a continuous Low on output A of EPWM1
EPwm3Regs.AQCSFRC.bit.CSFB = 2;
}
else
{
EPwm3Regs.AQCSFRC.bit.CSFA = 2; // Forcing a continuous Low on output A of EPWM1
EPwm3Regs.AQCSFRC.bit.CSFB = 1;
}
}