当前位置:首页 > svpwm源程序
/ TI File $Revision: /main/8 $
// Checkin $Date: April 21, 2008 15:41:53 $
//########################################################################### //
// FILE: Example_2833xEPwmUpDownAQ.c //
// TITLE: 空间电压矢量产生程序SVPWM //
// ASSUMPTIONS: //
// This program requires the DSP2833x header files. //
// Monitor ePWM1-ePWM3 pins on an oscilloscope as described // below. //
// EPWM1A is on GPIO0-------5脚 // EPWM1B is on GPIO1-------6脚 //
// EPWM2A is on GPIO2-------7脚 // EPWM2B is on GPIO3-------10脚 //
// EPWM3A is on GPIO4-------11脚 // EPWM3B is on GPIO5-------12脚 // //
//########################################################################### // $TI Release: DSP2833x/DSP2823x Header Files V1.20 $ // $Release Date: August 1, 2008 $
//###########################################################################
#include \ // Device Headerfile and Examples Include File // Prototype statements for functions found within this file. void InitEPwm1Example(void); void InitEPwm2Example(void); void InitEPwm3Example(void); void svpwmGen(void);
interrupt void svpwm_isr(void); volatile float Ualpha,Ubeta; volatile float A,B,C;
volatile float T0,T1,T2,T3,T4,T5,T6; volatile float Taon,Tbon,Tcon; float Ua,Ub,Uc; float Ts; int a,b,c;
int N= 0,sector= 0; #define TPRD 800 #define Udc 800
void main(void) {
// Step 1. Initialize System Control: // PLL, WatchDog, enable Peripheral Clocks
// This example function is found in the DSP2833x_SysCtrl.c file. InitSysCtrl();
// Step 2. Initalize GPIO:
// This example function is found in the DSP2833x_Gpio.c file and // illustrates how to set the GPIO to it's default state. // InitGpio(); // Skipped for this example
// For this case just init GPIO pins for ePWM1, ePWM2, ePWM3 // These functions are in the DSP2833x_EPwm.c file InitEPwm1Gpio(); InitEPwm2Gpio(); InitEPwm3Gpio();
// Step 3. Clear all interrupts and initialize PIE vector table: // Disable CPU interrupts DINT;
// Initialize the PIE control registers to their default state. // The default state is all PIE interrupts disabled and flags // are cleared.
// This function is found in the DSP2833x_PieCtrl.c file. InitPieCtrl();
// Disable CPU interrupts and clear all CPU interrupt flags: IER = 0x0000;
IFR = 0x0000;
// Initialize the PIE vector table with pointers to the shell Interrupt // Service Routines (ISR).
// This will populate the entire table, even if the interrupt // is not used in this example. This is useful for debug purposes. // The shell ISR routines are found in DSP2833x_DefaultIsr.c. // This function is found in DSP2833x_PieVect.c. InitPieVectTable();
// Interrupts that are used in this example are re-mapped to // ISR functions found within this file.
EALLOW; // This is needed to write to EALLOW protected registers PieVectTable.EPWM1_INT = &svpwm_isr; //PieVectTable.EPWM2_INT = &epwm2_isr; //PieVectTable.EPWM3_INT = &epwm3_isr;
EDIS; // This is needed to disable write to EALLOW protected registers
// Step 4. Initialize all the Device Peripherals: // This function is found in DSP2833x_InitPeripherals.c // InitPeripherals(); // Not required for this example
// For this example, only initialize the ePWM EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; EDIS;
InitEPwm1Example(); InitEPwm2Example(); InitEPwm3Example(); EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; EDIS;
// Step 5. User specific code, enable interrupts:
// Enable CPU INT3 which is connected to EPWM1-3 INT: IER |= M_INT3;
// Enable EPWM INTn in the PIE: Group 3 interrupt 1-3 PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
//PieCtrlRegs.PIEIER3.bit.INTx2 = 1; //PieCtrlRegs.PIEIER3.bit.INTx3 = 1;
// Enable global Interrupts and higher priority real-time debug events: EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
// Step 6. IDLE loop. Just sit and loop forever (optional): for(;;) {
asm(\); }
}//main结束
//=======================================================================
interrupt void svpwm_isr(void) {
svpwmGen();
// Set Compare values
EPwm1Regs.CMPA.half.CMPA = Taon; // adjust duty for output EPWM1A EPwm2Regs.CMPA.half.CMPA = Tbon; // adjust duty for output EPWM2A EPwm3Regs.CMPA.half.CMPA = Tcon; // adjust duty for output EPWM3A
// Clear INT flag for this timer EPwm1Regs.ETCLR.bit.INT = 1;
// Acknowledge this interrupt to receive more interrupts from group 3 PieCtrlRegs.PIEACK.all = PIEACK_GROUP3; }
void InitEPwm1Example()
共分享92篇相关文档