Part Number:TMS320F28069M
Hi all,
I'm trying to do the SPWM using F28069M launchpad and I tried doing it using the following code:
#include "F2806x_Device.h" #include "IQmathLib.h" extern void InitSysCtrl(void); extern void InitPieVectTable(void); extern void InitPieCtrl(void); interrupt void ePWM1A_compare_isr(void); #pragma DATA_SECTION(sine_table,"IQmathTables"); _iq30 sine_table[512]; void main(void) { InitSysCtrl(); InitPieCtrl(); // basic setup of PIE table InitPieVectTable(); // copy default ISR’s into PIE EALLOW; PieVectTable.EPWM1_INT = &ePWM1A_compare_isr; SysCtrlRegs.WDCR = 0x00AF; GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1; // ePWM1A GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0; // enable pull-up EDIS; EPwm1Regs.TBCTL.all = 0; // default values EPwm1Regs.TBCTL.bit.CLKDIV = 0; // CLKDIV = 1; EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0; // HSPCLKDIV = 1 EPwm1Regs.TBCTL.bit.CTRMODE = 2; // up-down mode EPwm1Regs.AQCTLA.all = 0x0006; // ZRO=set; PRD=clear EPwm1Regs.TBPRD = 90; // 500 kHz PWM frequency // TBPRD = fcpu / (2* fpwm * CLKDIV * HSPCLKDIV) // TBPRB = 90 MHz / (2 * 500 kHz * 1 * 1) EPwm1Regs.CMPA.half.CMPA = 45; // initial duty 50 % EPwm1Regs.AQCTLA.all = 0x0060; // CMPA up = set; CMPA down = clear EPwm1Regs.ETSEL.all = 0; EPwm1Regs.ETSEL.bit.INTEN = 1; // enable ePWM1 int EPwm1Regs.ETSEL.bit.INTSEL = 5; // CMPA down match EPwm1Regs.ETPS.bit.INTPRD = 1; // 1st event PieCtrlRegs.PIEIER3.bit.INTx1 = 1; // ePWM1 IER |= 4; // enable INT3 EINT; // global int enable while(1) { EALLOW; SysCtrlRegs.WDKEY = 0x55; // service key #1 SysCtrlRegs.WDKEY = 0xAA; // service key #2 EDIS; } } interrupt void ePWM1A_compare_isr(void) { static unsigned int index = 0; EPwm1Regs.CMPA.half.CMPA = EPwm1Regs.TBPRD - _IQsat(_IQ30mpy((sine_table[index]+_IQ30(0.9999))/2, EPwm1Regs.TBPRD),EPwm1Regs.TBPRD,0); if (index++ >511) index = 0; EPwm1Regs.ETCLR.bit.INT = 1; // clear ePWM1 interrupt flag PieCtrlRegs.PIEACK.all = 4; // ACK for PIE group 3 int }
However, what I obtain in sine_table is not a sine but this:
Does anyone know why do I obtain such a look-up table and what be the best way to get a sine wave to code the SPWM?