Estoy intentando que el módulo PWM de alta velocidad de un dsPIC33EP64GS502
funcione. Anteriormente trabajé en el mismo módulo para dsPIC33FJ16GS402
pero no puedo hacer que este funcione. El PIC se ejecuta a 70 MIPS con un oscilador interno, la frecuencia PWM es de 300 KHz con un 50% de servicio, este es mi código:
// 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;
No obtengo absolutamente nada en los pines PWM1H y PWM1L. Simplemente no sé qué más cambiar para que funcione. El objetivo es que funcione en un convertidor buck síncrono, por lo que las señales son complementarias.