Saltar a contenido

CCP – Guía Rápida (Modo PWM)

Para más detalles sobre el módulo CCP, su configuración y funcionamiento, consultar la guía completa.

Cálculos Previos

Periodo PWM

\[TxPR = \frac{T_{PWM} \times F_{osc}}{4 \times TMRx\ Prescaler} - 1\]
Fórmula de verificación7
\[T_{PWM} = \frac{4 \times (TxPR+1) \times TMRx\ Prescaler}{F_{osc}}\]

Fuente de reloj

Es menester que la fuente de reloj del timer sea \(\frac{F_{osc}}{4}\) para el correcto funcionamiento del módulo CCP. El PostScaler no afecta el periodo PWM.

Duty Cycle (Tiempo en alto)

\[\text{CCPRx value} = \frac{T_{ON} \times F_{osc}}{TMRx\text{ Prescaler}}\]
Fórmula de verificación8
\[T_{ON} = CCPRx\text{ value} \times \frac{TMRx\text{ Prescaler}}{F_{osc}}\]
  • Si FMT = 0 (derecha): CCPRx value = CCPRxH[1:0]:CCPRxL
  • Si FMT = 1 (izquierda): CCPRx value = CCPRxH:CCPRxL[7:6]

Registros a usar

Registro Función Banco
CCPTMRS1 Selección del timer asociado al CCPx Access
RxyPPS2 Asigna pin de salida al módulo CCPx 0x0E
TRISx Dirección del pin (entrada/salida) Access
TxPR Cuenta máxima del timer → define periodo PWM Access
CCPxCON3 Control del CCP: habilitar (EN), modo (MODE), formato (FMT) Access
CCPRxH:L Valor de 10 bits que define el duty cycle Access
TxCLKCON Fuente de reloj del timer (TxCLKCON=1\(F_{osc}/4\)) Access
TxCON5 Control del timer: habilitar (ON), prescaler (CKPS) Access
PIR44 Banderas de interrupción TMR2/4/6 (TMR2IF bit 1) 0x0E

CCPTMRS: Bits CxTSEL

Bits 3:2 Bits 1:0
C2TSEL[1:0] C1TSEL[1:0]
  • Seleccionar TMR2 (CxTSEL = 00), TMR4 (CxTSEL = 10) o TMR6 (CxTSEL = 11)

PPS: Códigos de salida CCP

RxyPPS Módulo Puertos destino
0x05 CCP1 RB, RC
0x06 CCP2 RB, RC

CCPxCON

Bit 7 Bit 5 Bit 4 Bits 3:0
EN OUT (RO) FMT MODE[3:0]
  • Modo PWM: MODE = 11xx
  • FMT = 1: justificado a la izquierda / FMT = 0: derecha

TxCON

Bit 7 Bits 6:4 Bits 3:0
ON CKPS[2:0] OUTPS[3:0]
  • ON = 1: habilitar timer
  • CKPS: prescaler (000 = 1:1, 001 = 1:2, …, 111 = 1:128)

PIR4: Banderas TMR2/4/6

Bit 5 Bit 3 Bit 1
TMR6IF TMR4IF TMR2IF

Configuración rápida

No evita "pulsos basura" durante la configuración.

  1. Seleccionar timer (TMR2/4/6) con CCPTMRS1.
  2. Asignar vía PPS un pin al CCP1 (RxyPPS=5) o al CCP2 (RxyPPS=6) 2.
  3. Configurar el pin como salida (TRISxbits.TRISxy = 0).
  4. Cargar el periodo calculado en TxPR.
  5. Configurar CCPxCON: modo PWM + formato (EN, MODE, FMT)3.
  6. Cargar duty cycle calculado (10 bits) en CCPRxH:L.
  7. Seleccionar reloj del timer: TxCLKCON = 1 (\(\frac{F_{osc}}{4}\)).
  8. Configurar prescaler y habilitar timer: TxCON (ON = 1)5.

Configuración segura

Evita "pulsos basura" configurando el pin como entrada hasta que el timer esté listo6.

  1. Seleccionar timer (TMR2/4/6) con CCPTMRS1.
  2. Asignar vía PPS un pin al CCP1 (RxyPPS=5) o al CCP2 (RxyPPS=6) 2.
  3. Configurar el pin como entrada (TRISxbits.TRISxy = 1).
  4. Cargar el periodo calculado en TxPR.
  5. Configurar CCPxCON: modo PWM + formato (EN, MODE, FMT)3.
  6. Cargar duty cycle calculado (10 bits) en CCPRxH:L.
  7. Bajar bandera TMRxIF en PIR44.
  8. Seleccionar reloj del timer: TxCLKCON = 1 (\(\frac{F_{osc}}{4}\)).
  9. Configurar prescaler y habilitar timer: TxCON (ON = 1)5.
  10. Esperar a que TMRxIF == 1.
  11. Habilitar salida del pin (TRISxbits.TRISxy = 0).

Referencias


  1. Microchip Technology Inc. (2020). PIC18F27/47Q10 Microcontroller Data Sheet. Sección 22.6.4, "CCPTMRS". Ver PDF (Pág. 359)

  2. Microchip Technology Inc. (2020). PIC18F27/47Q10 Microcontroller Data Sheet. Sección 18.2, "PPS Outputs". Ver PDF (Pág. 287)

  3. Microchip Technology Inc. (2020). PIC18F27/47Q10 Microcontroller Data Sheet. Sección 22.6.1, "CCPxCON". Ver PDF (Pág. 356)

  4. Microchip Technology Inc. (2020). PIC18F27/47Q10 Microcontroller Data Sheet. Sección 15.13.6, "PIR4". Ver PDF (Pág. 203)

  5. Microchip Technology Inc. (2020). PIC18F27/47Q10 Microcontroller Data Sheet. Sección 21.9.3, "TxCON". Ver PDF (Pág. 341)

  6. Microchip Technology Inc. (2020). PIC18F27/47Q10 Microcontroller Data Sheet. Sección 22.4.2, "Setup for PWM Operation". Ver PDF (Pág. 351)

  7. Microchip Technology Inc. (2020). PIC18F27/47Q10 Microcontroller Data Sheet. Sección 22.4.4, "PWM Period". Ver PDF (Pág. 352)

  8. Microchip Technology Inc. (2020). PIC18F27/47Q10 Microcontroller Data Sheet. Sección 22.4.5, "PWM Duty Cycle". Ver PDF (Pág. 353)