Hola compañeros!
Acabo de solucionar un problema que me ha tenido muchas horas bloqueado.
Leí este post en mi búsqueda de una solución:
Tras configurar los módulos PWM de control de motores del dsPIC33fj64mc802, en modo H/L independientes, Free Runing, y usando sólo PWM1H3 y PWM2H1 como señal PWM, las demás como puerto de salida (01 ó 10):
int InitPWM(void)
{
/************ PWM1 MODULE ***********************/
//P1TCONbits.PTEN=1; //Enable time base
P1TCONbits.PTSIDL=0; //PWM runs in idle mode
P1TCONbits.PTOPS=0b1111; //Output postscaler 16
P1TCONbits.PTCKPS=0b01; //Prescaler 1:4 Tcy
P1TCONbits.PTMOD=0; //Time base in free run
P1TMRbits.PTDIR=0; //Counting up
P1TMRbits.PTMR=0;
P1TPER=999; //FUNCIONAMIENTO: PERIODO 0.1ms
P1SECMPbits.SEVTDIR=0; //Special event in counting up
P1SECMPbits.SEVTCMP=20; //FUNCIONAMIENTO:A las 20 cuentas disparo de SpcialEvent:ADC
PWM1CON1bits.PMOD3=1; //Canal H3 y L3 en modo independent
PWM1CON1bits.PEN3H=1; //Pin enabled for PWM
PWM1CON1bits.PEN2H=0; //Pin disabled, gpi/o
PWM1CON1bits.PEN1H=0; //Pin disabled, gpi/o
PWM1CON1bits.PEN3L=0; //Pin disabled, gpi/o
PWM1CON1bits.PEN2L=0; //Pin disabled, gpi/o
PWM1CON1bits.PEN1L=0; //Pin disabled, gpi/o
PWM1CON2bits.SEVOPS=0; //1:1 Postscaller para special event trigger
PWM1CON2bits.IUE=0; //Updates of DC1 synchro to PWM timebase
PWM1CON2bits.OSYNC=0; //Overrides synchro to Tcy
PWM1CON2bits.UDIS=0; //Updates of DC and PTPER enabled
P1DC3=1500; //FUNCIONAMIENTO: Esto debería darme un 50%
P1TCONbits.PTEN=1; //Enable time base resulta que en la práctica el módulo no sacaba nada, pero lo que me mosqueaba más todavía: las patillas PWM que uso como puerto de salida, tampoco me da daban los niveles (1 ó 0) esperados, por lo que simulé y vi que en el puerto B las patillas donde van los canales PWM no respondían.
Después de mucho rato, y dar muchas vueltas, me di cuenta de que en la palabra de configuración, además del nivel lógico asignado a la señal activa de un PWM, también se configura si tras un reset, el control de las patillas PWM lo tiene el módulo o el puerto B.
En mi caso, era el módulo PWM el que tenía el control, y nada más cambiar en FPOR a PWMPIN_ON, tuve control total de las patillas que no uso para PWM.
Espero que si a alguien le pasa algo parecido no tenga que dar tantas vueltas como yo