Autor Tema: DEFASAR DOS PWM EN EL PIC16F877A  (Leído 2172 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado raul1485

  • PIC10
  • *
  • Mensajes: 5
DEFASAR DOS PWM EN EL PIC16F877A
« en: 25 de Mayo de 2007, 18:02:39 »
Hola a todos en este foro, mi problema es el siguiente estoy utilizando el PIC16f877 configurando los dos pwm, he buscado por todos lados de como defasar los dos pwm, ya que cuando configuro los dos pwm y asigno cierto Ciclo de trabajo (CT) para cada uno, los dos CT de los pwm empiezan al mismo tiempo, lo que quiero lograr es que primero empiece el CT del PWM1 despues de un tiempo corto Empiece el CT del PWM2 y posteriormente empice nuevamente le ciclo.

En Pocas Palabras DEFASAR un PWM con respecto al otro.

Aqui les dejo el programa para ver si me pueden ayudar:

Si tienen alguna idea la pueden exponer aqui: gracias

   list p=16f877A
   #include<p16f877A.inc>
   __CONFIG _CP_OFF & _CPD_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _LVP_OFF & _XT_OSC
   
   ;Parámetros para eliminar los mensajes de warning cuando lo ensamblas
   ERRORLEVEL -302      ;suppress "not in bank 0" message
   ERRORLEVEL -203      ;suppress  message
   ERRORLEVEL -305      ;suppress  message
   ERRORLEVEL -205      ;suppress  message
   
CTH      EQU 22H
CTL      EQU 23H
CTH2   EQU 3AH
CTL2   EQU 3BH


   ORG 00H

INICIO:
   NOP
   NOP   
   BSF STATUS,RP0   ;BANCO 1
   CLRF TRISB
   CLRF TRISC
   CLRF TRISA
   MOVLW 0FFH
   MOVWF TRISD
   CLRF TRISE
   MOVLW 0FFH      ;CARGA PERIODO
   MOVWF PR2
   
   BCF STATUS,RP0   ;BANCO 0
   CLRF CCPR1L      ;INICIALIZA CICLO DE TRABAJO CON 0 PWM1
   BCF CCP1CON,CCP1X
   BCF CCP1CON,CCP1Y

   CLRF CCPR2L      ;INICIALIZA CICLO DE TRABAJO CON 0 PWM2
   BCF CCP2CON,CCP2X
   BCF CCP2CON,CCP2Y
   
   MOVLW 05H      ;CONFIGURA TIMER2
   MOVWF T2CON      ;PREESCALADOR 1/4,HABILITA TIMER2

   BSF CCP1CON,CCP1M3 ;CONFIGURA EL MODULO CCP1 PARA OPERACION PWM
   BSF CCP1CON,CCP1M2

   BSF CCP2CON,CCP2M3 ;CONFIGURA EL MODULO CCP2 PARA OPERACION PWM
   BSF CCP2CON,CCP2M2

   MOVLW 0AH
   MOVWF CTL      ;INICIALIZA CT DE 10 BITS EN 0AH
   CLRF CTH

   MOVLW 0AH
   MOVWF CTL2
   CLRF CTH2   
   
   
START:
   ;PWM1
   MOVF CTL,W      
   MOVWF CCPR1L   ;ACTUALIZA PARTE BAJA DEL CT REAL
   ;A CONTINUACION ACTUALIZA PARTE ALTA DEL CT REAL
   MOVLW 0CFH    ;MASCARA
   ANDWF CCP1CON,1   ;LIMPIA LOS DOS MSBITS DEL CT REAL
   MOVLW 03H      ;MASCARA
   ANDWF CTH,1      ;LIMPIA LOS 6 BITS ALTOS EN CTH
   SWAPF CTH,W      ;COPIA LOS 2 BITS BAJOS DE CTH EN EL NIBBLE ALTO D W
   IORWF CCP1CON,1   ;PONE BITS QUE DEBEN SER 1 EN LOS DOS MSB DEL CT REAL
   
   ;PWM2
   MOVF CTL2,W      
   MOVWF CCPR2L   ;ACTUALIZA PARTE BAJA DEL CT REAL
   ;A CONTINUACION ACTUALIZA PARTE ALTA DEL CT REAL
   MOVLW 0CFH    ;MASCARA
   ANDWF CCP2CON,1   ;LIMPIA LOS DOS MSBITS DEL CT REAL
   MOVLW 03H      ;MASCARA
   ANDWF CTH2,1      ;LIMPIA LOS 6 BITS ALTOS EN CTH
   SWAPF CTH2,W      ;COPIA LOS 2 BITS BAJOS DE CTH EN EL NIBBLE ALTO D W
   IORWF CCP2CON,1   ;PONE BITS QUE DEBEN SER 1 EN LOS DOS MSB DEL CT REAL


   GOTO START

   END


Desconectado proteus

  • PIC10
  • *
  • Mensajes: 28
Re: DEFASAR DOS PWM EN EL PIC16F877A
« Respuesta #1 en: 09 de Agosto de 2007, 18:27:26 »
Hola compañero, creo que lo que pretendes hacer desde el programa no será posible, pues al parecer el micro arranca el pwm con el sincronizmo del reloj interno, pues recuerda que este pwm se basa en un timer interno, lo que te recomiendo es que uses un hardware externo, algo como colocar COLOCAR UN FLIP-FLOP tipo D; una salida de un timer que de el tiempo que deseas desfasar y por la entrada D colocas la señal del pwm a desfasar, en la salida Q tendrás una señal desfasada en el tiempo determinado por el timer; este timer puedes hacerlo externo ó con el mismo micro.

Espero te sea de utilidad y puedas usar hardware externo en tu aplicación.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: DEFASAR DOS PWM EN EL PIC16F877A
« Respuesta #2 en: 10 de Agosto de 2007, 09:00:31 »
Coincido con proteus... el problema es que si usas un PWM por hardware en el 16F877A ambos usan el TMR2 como referencia.  Solo puedes cambiar el duty cycle de uno y otro PWM pero no su frecuencia en forma independiente la cual será la misma en ambos casos.

En este pic solo te queda hacerlo por software o bien usar una RED RC como filtro pasabajo y retraso de fase... pero esto es dependiente de la frecuencia.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Juan_PIC

  • PIC12
  • **
  • Mensajes: 84
Re: DEFASAR DOS PWM EN EL PIC16F877A
« Respuesta #3 en: 17 de Agosto de 2007, 21:57:41 »
Hola. El pic posee dos patas con pwm. Estas patas comparten el generador de clock (utilizando el timer2). En pocas palabras, ambas patas van a tener SIEMPRE la misma frecuencia. Lo unico que podes cambiar es el tiempo que esten en "1" o en "0" (el famoso duty time como dicen arriba).
La idea de poner un FF es buena, pero si no queres agragar circuiterio, y si tenes libre el timer 0 o el 1 preferentemente, podrias "crear" un pwm mediante interrupciones con timer, y el otro dejarlo funcionando con el modulo PWM del pic.
Espero ser de ayuda. Saludos. :mrgreen:
Cuando se ponen límites, la mente humana comienza a buscar maneras de romperlos.


 

anything