En la familia dsPIC33F de Microchip, el período PWM PTPER se calcula de la siguiente manera:
PTPER = (FCY / FPWM) * (Valor de preescala PTMR) - 1
donde PTMR es el reloj de entrada al PWM y FCY = Fosc / 2 , siendo FCY la frecuencia del ciclo de instrucciones y Fosc la frecuencia del reloj principal. Se especifica que el reloj de entrada a PTMR es Fosc / 4 (documento de referencia: DS70165D-página 178) . ¿Esto significa que el período se calcula en tictacs de reloj de ciclo de instrucción, o el doble de tics de reloj de ciclo de instrucción? ¿Esta información se relaciona con la razón por la cual se multiplica el PTPER por 2 en la siguiente línea de código (tomada de la Nota de aplicación de Microchip AN957):
PDC1 = (int)(((long)(PTPER*2)*(long)DutyCycle) >> 15); // why multiply PTPER by 2?
PDC2 = PDC1; // PDCx is the duty cycle register for PWMx channel
PDC3 = PDC2; // x = 1,2,3
En mi opinión, el factor de 2 no debería estar allí. Una versión más completa de este código fue publicada ayer en este foro: Ayude a comprender el código