Electronic – High Speed PWM Module on dsPIC33 not switching

picpwm

I'm trying to get the High Speed PWM Module from a dsPIC33EP64GS502 to work. I previously got working the same module for a dsPIC33FJ16GS402 but I can't get this one to work. The PIC is running at 70 MIPS with internal oscillator, the PWM frequency is 300KHz with a 50% duty, this is my code:

// ACLK setup
ACLKCONbits.FRCSEL = 1;
ACLKCONbits.SELACLK = 1;
ACLKCONbits.APSTSCLR = 7;
ACLKCONbits.ENAPLL = 1;
while(ACLKCONbits.APLLCK != 1);

// PWM setup
PTCONbits.PTEN = 0;
PTCONbits.PTSIDL = 0;
PTCONbits.SEIEN = 0;
PTCONbits.EIPU = 0;
PTCONbits.SYNCPOL = 0;
PTCONbits.SYNCOEN = 0;
PTCONbits.SYNCEN = 0;
PTCON2bits.PCLKDIV = 0;

PWMH_TRIS = PWML_TRIS = 1;

PWMCON1bits.FLTIEN = 0;
PWMCON1bits.CLIEN = 1;
PWMCON1bits.TRGIEN = 0;
PWMCON1bits.ITB = 1;
PWMCON1bits.MDCS = 0;
PWMCON1bits.DTC = 0;
PWMCON1bits.CAM = 0;
PWMCON1bits.XPRES = 0;
PWMCON1bits.IUE = 0;

TRIG1 = 1568; 
TRGCON1bits.DTM = 0;
TRGCON1bits.TRGSTRT = 0;
TRGCON1bits.TRGDIV = 5;

IOCON1bits.PENH = 0;
IOCON1bits.PENL = 0;
IOCON1bits.POLH = 0;
IOCON1bits.POLL = 0;
IOCON1bits.PMOD = 0;
IOCON1bits.SWAP = 0;
IOCON1bits.OSYNC = 0;

PHASE1 = 3136; // 300KHz
PDC1 = SDC1 = 1568; // 50%
DTR1 = 157;
ALTDTR1 = 157;

// Override
IOCON1bits.OVRDAT = 0;
IOCON2bits.OVRDAT = 0;
IOCON1bits.OVRENH = 1; IOCON1bits.OVRENL = 1;

PTCONbits.PTEN = 1;
IOCON1bits.OVRENH = 0; IOCON1bits.OVRENL = 0;

__delay_us(100);

IOCON1bits.PENH = 1;
IOCON1bits.PENL = 1;

I get absolutely nothing on PWM1H and PWM1L pins. I just don't know what else to change to make it work. This is intended to work in a synchronous buck converter so the signals are complementary.

Best Answer

the I/O settings is set as input :

PWMH_TRIS = PWML_TRIS = 1;

PIC microcontrollers use 1 for input 0 for output .