18
1 dulos CCP dulos CCP Los PIC16F87X disponen de 2 módulos CCP (Capture/Compare/PWM): CCP1 y CCP2. Cada módulo CCP cuenta con un registro de 16 bits (CCPR1 y CCPR2) que puede operar como un • Registro de captura • Registro de comparación • Registro de ciclo de servicio PWM Ambos módulos CCP operan de igual manera, excepto en la generación del disparo de un evento especial en el modo Compare.

Módulos CCPgstvvlzqz.tripod.com/modulosccp.pdf · 1 Módulos CCP Los PIC16F87X disponen de 2 módulos CCP (Capture/Compare/PWM): CCP1 y CCP2. Cada módulo CCP cuenta con un registro

  • Upload
    ngocong

  • View
    229

  • Download
    0

Embed Size (px)

Citation preview

1

MMóódulos CCPdulos CCP

Los PIC16F87X disponen de 2 módulos CCP (Capture/Compare/PWM):

CCP1 y CCP2.

Cada módulo CCP cuenta con un registro de 16 bits (CCPR1 y CCPR2) que puede operar como un

• Registro de captura

• Registro de comparación

• Registro de ciclo de servicio PWM

Ambos módulos CCP operan de igual manera, excepto en la generación del disparo de un evento especial en el modo Compare.

2

Módulo CCP1

El registro de 16 bits CCPR1 se forma mediante la concatenación de los registros CCPR1H (Byte de mayor peso) y CCPR1L (byte de menor peso).

CCPR1 = CCPR1H : CCPR1L

La operación de este módulo se controla con el registro CCP1CON.

Módulo CCP2

El registro de 16 bits CCPR2 se forma mediante la concatenación de los registros CCPR2H (Byte de mayor peso) y CCPR2L (byte de menor peso).

CCPR2 = CCPR2H : CCPR2L

La operación de este módulo se controla con el registro CCP2CON.

3

Modo Capture

En este modo CCPR1H : CCPR1L captura el valor del registro TMR1

cuando ocurre un evento en la terminal RC2/CCP1. Un evento puede ser:

• Cada flanco negativo CCP1CON<3:0> = 0100

• Cada flanco positivo CCP1CON<3:0> = 0101

• Cada 4 flancos positivos CCP1CON<3:0> = 0110

• Cada 16 flancos positivos CCP1CON<3:0> = 0111

La terminal RC2/CCP1 debe configurarse como entrada.

TRISC<2> = 1

El TMR1 debe estar operando en modo temporizador o en modo contador síncrono.

Cuando el módulo CCP se deshabilita (CCP1CON<3:0> = 0000), el predivisores limpiado. También cualquier reset limpia el predivisor. Cuando se cambia de un valor de predivisión a otro pudieran generarse interrupciones y además el registro del predivisor no será limpiado, por lo que se recomienda deshabilitar el modulo CCP (clrf CCP1CON) antes de cambiar el ajuste del predivisor.

4

Modo CompareEn este modo de operación, el valor del registro CCPR1 se compara constantemente contra el valor del registro TMR1. Cuando son iguales, la terminal RC2/CCP1:

• Se pone en alto o ‘1’

• Se pone en bajo o ‘0’

• No cambia de estado

Al mismo tiempo, la bandera de interrupción CCP1IF es activada.

La terminal RC2/CCP1 debe estar configurada como salida.

TRISC<2> = 0

El TMR1 debe estar operando en modo temporizador o en modo contador síncrono.

Cuando está seleccionado el modo de generación de interrupción por software, el estado de la terminal CCP1 no es afectado. La bandera CCP1IF se activa ocasionando una interrrupción CCP.

CCP1CON<3:0> = 1010

En el modo de disparo de evento especial del módulo CCP1, se pone en cero el TMR1, lo que permite al registro CCPR1 funcionar como unregistro de periodo programable de 16 bits para el TMR1.

CCP1CON<3:0> = 1011

En el modo de disparo de evento especial del módulo CCP2, se pone en cero el TMR1 y se inicia una conversión A/D si el módulo A/D estáhabilitado.

CCP2CON<3:0> = 1011

5

El TMR1

EL módulo del TMR1 es un temporizador/contador de 16 bits, formado por los registros TMR1H y TMR1L concatenados.

La operación se controla con el registro T1CON.

El TMR1 se enciende/apaga mediante la puesta en 1/0 del bit TMR1ON.

La operación como temporizador/contador es seleccionada poniendo en 0/1 el bit TMR1CS.

La operación como contador síncrono/asíncrono es seleccionada poniendo en 0/1 el bit T1SYNC’

6

El oscilador del TMR1 se construye mediante un cristal conectado entre las terminales T1OSI y T1OSO. Su operación se habilita/deshabilita mediante la puesta en 1/0 del bitT1OSCEN del registro T1CON.

7

INVERSOR MONOFASICO

INVERSOR TIPO PUENTE H

8

ONDA CUADRADA

MODULACION DE UN PULSO

MODULACION SENOIDAL

RESULTADOS DE LA SIMULACION

DISEÑO DEL PROGRAMA

La frecuencia del voltaje de salida es de 60 Hz, siendo el periodo de 16, 666.66 µs.

Onda cuadrada

Se usa el módulo CCP2 en modo Compare conCCP2CON = 00001011b, de modo que cuando TMR1 = CCPR2,se activa la bandera CCP2IF y se limpia el TMR1 sin afectar elestado de la terminal RC1/T1OSCI/CCP2.

Considerando una onda simétrica, los semiciclos positivo y negativo deben durar 8, 333. 33 µs cada uno.

Si FOSC = 4 MHz, entonces el periodo del reloj interno es de 1 µs.

Considerando cada semiciclo de 8, 333 µs, el par de registros CCPR2H : CCPR2L deberá cargarse con el valor 208Dh, cargando el 20h al registro CCPR2H y el 8Dh al registro CCPR2L.

El TMR1 opera como temporizador, incrementándose con cada pulso del reloj interno, en este caso, cada microsegundo.

Predivisor del TMR1 = 1:1

9

Modulación de un pulso

El ancho de pulso es de 120°

Los ángulos de conmutación en µs son:

1389d = 056Dh = 30 grados6944d = 1B20h = 150 grados9722d = 25FAh = 210 grados15278d = 3BAEh = 330 grados16667d = 411Bh = 360 grados

El par de registros CCPR2H : CCPR2L se carga de manera consecutiva con cada uno de los valores hexadecimales anteriores, antes de que transcurra el tiempo correspondiente, para realizar la conmutación de los interruptores del Puente H y así ir generando la onda de voltaje de salida.

Después que se hace la última conmutación, el par de registros CCPR2H : CCPR2L se carga con el 411Bh correspondiente a 16667 µs (360°), y cuando el TMR1 es igual a este valor, el programa regresa a iniciar un nuevo ciclo.

PORTB<0> = 1 PORTB<1> = 1 PORTB<2> = 1

GenOndaCuadrada GenModPulso GenModSenoidal

Configuracion de puertos y registros

Inicio

DIAGRAMA DE FLUJO DEL PROGRAMA

Botones

si si si

no no no

10

PIR2<CCP2IF> = 1

PORTC = 0

PIR2<CCP2IF> = 0

nop

PIR2<CCP2IF> = 1

PORTC = 0

PIR2<CCP2IF> = 0

nop

PORTC = B’0110’

CCP1CON = B’00001011’CCPR2H = 0x20CCPR2L = 0x8DTMR1L = 0TMR1H = 0T1CON<TMR1ON> = 1PIR2<CCP2IF> = 0

si

no

no

si

PORTC =B’1001’

GenOndaCuadrada

GENERACION DE ONDA CUADRADA

GenModPulso

CCP1CON =B’1010’T1CON<TMR1ON> = 1

PORTC = B’0101’

TMR1H=0TMR1L=0

CCPR1H=0x05CCPR1L=6D

PIR1<CCP1IF>=0

PIR1<CCP1IF = 0 ?

PORTC<2>=0CPR1H=0x1BCCPR1L=20

PIR1<CCP1IF>=0PORTC<3>=1

PIR1<CCP1IF = 0 ?

PORTC<0>=0CPR1H=0x25CCPR1L=FA

PIR1<CCP1IF>=0PORTC<1>=1

PIR1<CCP1IF = 0 ?

PORTC<3>=0CPR1H=0x3BCCPR1L=AE

PIR1<CCP1IF>=0PORTC<2>=1

PIR1<CCP1IF = 0 ?

PORTC<1>=0CPR1H=0x41CCPR1L=1B

PIR1<CCP1IF>=0PORTC<0>=1

PIR1<CCP1IF = 0 ?

30°

150°

210°

330°

360°

SI SI

SISI

SI

NO

NO

NO

NO NO

Modulación de un solopulso

11

S1 1 1 0 0S2 0 0 1 1S3 1 0 0 1S4 0 1 1 0

10

10

1001

GenModSenoidal

CCP1CON =B’1010’T1CON<TMR1ON> = 1

PORTC = B’0101’

TMR1H=0TMR1L=0

PIR1<CCP1IF>=0ANGULO=0

CargarAngulo

PIR1<CCP1IF = 0 ?

PORTC<Q3>=0nop

PORTC<Q4>=1PIR1<CCP1IF>=0

CargarAngulo

PIR1<CCP1IF = 0 ?

PORTC<Q4>=0nop

PORTC<Q3>=1PIR1<CCP1IF>=0

CargarAngulo

ANGULO = 19 ?

PORTC=0nop

PORTC=B’1010’

PIR1<CCP1IF = 0 ?

PORTC<Q4>=0nop

PORTC<Q3>=1PIR1<CCP1IF>=0

CargarAngulo

PIR1<CCP1IF = 0 ?

SI

SI

SI

SI

SI

NO

NO

NO

NO

Modulación senoidal

PORTC<Q3>=0nop

PORTC<Q4>=1PIR1<CCP1IF>=0

CargarAngulo

ANGULO = 37 ?NO

NO

PORTC=0nop

PORTC=B’0101’

PIR1<CCP1IF = 0 ?

SI

SI

NO

12

CargarAngulo

ANGULO = ANGULO + 1W = ANGULOTablaCCPRxHCCPR1H = WW = ANGULOTablaCCPRxLCCPR1L = W

PIR1<CCP1IF> = 0

return

;…………………….TablaCCPRxH

addwf PCL,Fnopretlw 0x2retlw 0x3retlw 0x5retlw 0x7..retlw 0x3Eretlw 0x41

;…………………..TablaCCPRxL

addwf PCL,Fnopretlw 0xE5retlw 0xB6retlw 0xD1retlw 0x5C..retlw 0x35retlw 0x1A

;…………………..end

0xA40xA50xA60xA70xA80xA9..0xC90xCA

0xCB0xCC0xCD0xCE0xCF0xD0..0xF00xF1

LOC

Cada tabla contiene 37 valores.

El último corresponde a 16666 µs = 360°

S1 1 1 1 1S2 0 0 0 0S3 1 0 1 0S4 0 1 0 1

10

10

0 00 10 00 1

01

10

0101

01

10

0 10 00 10 0

360°

ANGULO=37ANGULO=19ANGULO=1

list p=16f873 include "p16f873.inc" ANGULO equ 0x20 Q1 equ 0x00 Q2 equ 0x01 Q3 equ 0x02 Q4 equ 0x03 org 0x00 goto inicio org 0x05 inicio clrf PORTC bsf STATUS,RP0 ;Banco 1 movlw B'11111111' movwf TRISB movlw B'00000000' movwf TRISC movlw B'01111111' movwf OPTION_REG ;Se habilitan las resistencias elevadoras del puerto B bcf STATUS,RP0 ;Banco 0 Botones btfss PORTB,0 goto GenOndaCuadrada btfss PORTB,1 goto GenModPulso btfss PORTB,2 goto GenModSenoidal goto Botones ;.................................................... ;Onda cuadrada, medio ciclo = 8333 microsegundos ;8333d=208Dh GenOndaCuadrada movlw B'00001011' ;El modulo CCP2 se configura en el modo de movwf CCP2CON ;comparacion, evento especial que reinicia al TMR1 movlw 0x20 movwf CCPR2H movlw 0x8D movwf CCPR2L clrf TMR1L clrf TMR1H bsf T1CON,TMR1ON ;Se enciende el TMR1 bcf PIR2,CCP2IF OndaCuadrada

movlw B'1001' ;Se encienden Q1 y Q4 movwf PORTC uno btfss PIR2,CCP2IF ;Transcurrieron 8333 microsegundos ? goto uno clrf PORTC ;Si, se apagan los transistores bcf PIR2,CCP2IF ;Tiempo nop ;muerto movlw B'0110' ;Se encienden Q2 y Q3 (delta t = 4 microsegundos) movwf PORTC dos btfss PIR2,CCP2IF ;Transcurrieron 8333 microsegundos ? goto dos clrf PORTC ;Si, se apagan los transistores bcf PIR2,CCP2IF nop goto OndaCuadrada ;(delta t = 6 microsegundos) ;.............................................. ;Modulacion de un pulso ;1389d=0x056D=30 grados ;6944d=0x1B20=150 grados ;9722d=0x25FA=210 grados ;15278d=0X3BAE=330 grados ;16667d=0x411B=360 grados GenModPulso movlw B'00001010' ;El modulo CCP1 se configura en el modo de movwf CCP1CON ;comparacion, no se afecta el estado de la terminal ;RC2/CCP1 bsf T1CON,TMR1ON ;Se enciende el TMR1 movlw B'0101' ;Se encienden Q1 y Q3 movwf PORTC Modulacion clrf TMR1L clrf TMR1H movlw 0x05 movwf CCPR1H movlw 0x6D movwf CCPR1L bcf PIR1,CCP1IF tres btfss PIR1,CCP1IF ;Transcurrieron 1389 microsegundos (30 grados) ? goto tres bcf PORTC,2 ;Si, se apaga Q3 movlw 0x1B movwf CCPR1H movlw 0x20 movwf CCPR1L bcf PIR1,CCP1IF

bsf PORTC,3 ;Se enciende Q4 cuatro btfss PIR1,CCP1IF ;Transcurrieron 9722 microsegundos (150 grados) ? goto cuatro bcf PORTC,0 ;Si, se apaga Q1 movlw 0x25 movwf CCPR1H movlw 0xFA movwf CCPR1L bcf PIR1,CCP1IF bsf PORTC,1 ;Se enciende Q2 cinco btfss PIR1,CCP1IF ;Transcurrieron 2777 microsegundos (210 grados) ? goto cinco bcf PORTC,3 ;Si, se apaga Q4 movlw 0x3B movwf CCPR1H movlw 0xAE movwf CCPR1L bcf PIR1,CCP1IF bsf PORTC,2 ;Se enciende Q3 seis btfss PIR1,CCP1IF ;Transcurrieron 15278 microsegundos (330 grados) ? goto seis bcf PORTC,1 ;Si, se apaga Q2 movlw 0x41 movwf CCPR1H movlw 0x1B movwf CCPR1L bcf PIR1,CCP1IF bsf PORTC,0 ;Se enciende Q1 btfss PIR1,CCP1IF ;Transcurrieron 16667 microsegundos (360 grados) ? goto $-1 goto Modulacion ;Si ;.............................................. ;modulacion senoidal GenModSenoidal movlw B'00001010' ;El modulo CCP1 se configura en el modo de movwf CCP1CON ;comparacion bsf T1CON,TMR1ON ;Se enciende el TMR1 movlw B'0101' ;Se encienden Q1 y Q3 movwf PORTC ModSeno

clrf TMR1L clrf TMR1H bcf PIR1,CCP1IF clrf ANGULO call CargarAngulo t1 btfss PIR1,CCP1IF goto t1 bcf PORTC,Q3 ;Se apaga Q3 nop bsf PORTC,Q4 ;Se enciende Q4 bcf PIR1,CCP1IF call CargarAngulo t2 btfss PIR1,CCP1IF goto t2 bcf PORTC,Q4 ;Se apaga Q4 nop bsf PORTC,Q3 ;Se enciende Q3 bcf PIR1,CCP1IF call CargarAngulo movlw D'19' xorwf ANGULO,W btfss STATUS,Z goto t1 clrf PORTC ;Se apagan Q1,Q2,Q3 y Q4 nop movlw B'1010' ;Se encienden Q2 y Q4 movwf PORTC t3 btfss PIR1,CCP1IF goto t3 bcf PORTC,Q4 ;Si, se apaga Q4 nop bsf PORTC,Q3 ;Se enciende Q3 bcf PIR1,CCP1IF call CargarAngulo t4 btfss PIR1,CCP1IF goto t4 bcf PORTC,Q3 ;Si, se apaga Q3 nop bsf PORTC,Q4 ;Se enciende Q4 bcf PIR1,CCP1IF call CargarAngulo movlw D'37' xorwf ANGULO,W btfss STATUS,Z goto t3 clrf PORTC ;Se apagan Q1,Q2,Q3 y Q4

nop movlw B'0101' ;Se encienden Q1 y Q3 movwf PORTC dosPI btfss PIR1,CCP1IF goto dosPI goto ModSeno ;.............................................. CargarAngulo incf ANGULO,F movf ANGULO,W call TablaCCPRxH movwf CCPR1H movf ANGULO,W call TablaCCPRxL movwf CCPR1L bcf PIR1,CCP1IF retlw 0 ;.............................................. TablaCCPRxH addwf PCL,F nop retlw 0x2 retlw 0x3 retlw 0x5 retlw 0x7 retlw 0x8 retlw 0xA retlw 0xB retlw 0xE retlw 0xE retlw 0x11 retlw 0x12 retlw 0x14 retlw 0x15 retlw 0x17 retlw 0x19 retlw 0x1A retlw 0x1C retlw 0x1D retlw 0x23 retlw 0x24 retlw 0x26 retlw 0x27 retlw 0x29 retlw 0x2B retlw 0x2C retlw 0x2E retlw 0x2F retlw 0x32 retlw 0x32 retlw 0x35 retlw 0x36 retlw 0x38 retlw 0x39 retlw 0x3B retlw 0x3D retlw 0x3E

retlw 0x41 ...................... TablaCCPRxL addwf PCL,F nop retlw 0xE5 retlw 0xB6 retlw 0xD1 retlw 0x5C retlw 0xCA retlw 0xE5 retlw 0xD6 retlw 0x4D retlw 0xFC retlw 0x91 retlw 0x41 retlw 0xB7 retlw 0xA8 retlw 0xC3 retlw 0x31 retlw 0xBC retlw 0xD7 retlw 0xA8 retlw 0x72 retlw 0x43 retlw 0x5E retlw 0xE9 retlw 0x57 retlw 0x72 retlw 0x63 retlw 0xDA retlw 0x89 retlw 0x1E retlw 0xCE retlw 0x44 retlw 0x35 retlw 0x50 retlw 0xBE retlw 0x49 retlw 0x64 retlw 0x35 retlw 0x1A ;.............................................. end