Pregunta sobre el período de PWM dsPIC33F y el cálculo del ciclo de trabajo

0

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

    
pregunta Adeel

1 respuesta

1

Encontré la respuesta a esta pregunta. En esta familia de MCU, el reloj temporizador PWM es más lento que el reloj de ciclo de trabajo. Si se selecciona un prescaler 1: 1 para el reloj PWM, para cada tic del reloj del temporizador hay dos tictac de reloj de ciclo de trabajo. Por lo tanto, el factor de 2 se multiplica en el cálculo del ciclo de trabajo.

Periodo de reloj del ciclo de trabajo = TCY / 2 ; PWM Timer PTMR Clock period = TCY (se usó el preescalador 1: 1)

Fuente: dsPIC33F / PIC24H Family Reference Manual - DS70187E (pp. 14-34 & 14-35)

    
respondido por el Adeel

Lea otras preguntas en las etiquetas