Autor Tema: Detectar flancos en señal PWM  (Leído 3224 veces)

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

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Detectar flancos en señal PWM
« en: 24 de Mayo de 2008, 05:32:12 »
Necesito generar una señal PWM a través de una patilla del PIC, y entiendo que su configuración (periodo y duty) está determinada por el Timer 2.

El problema es que también necesito detectar cuándo se produce el flanco de subida y cuándo el flanco de bajada de la señal PWM. ¿Tendría que conectar la salida PWM a otra patilla del PIC que funcione como interrupción externa? ¿o, como según creo, existe alguna forma de detectar los flancos internamente?

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Detectar flancos en señal PWM
« Respuesta #1 en: 24 de Mayo de 2008, 06:33:37 »
Si estás usando un 18F con módulo ECCP dispones de lo siguiente:
16.2.1 SPECIAL EVENT TRIGGER
The Special Event Trigger output of ECCP1 resets the
TMR1 or TMR3 register pair, depending on which timer
resource is currently selected. This allows the CCPR1
register to effectively be a 16-bit programmable period
register for Timer1 or Timer3.

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: Detectar flancos en señal PWM
« Respuesta #2 en: 24 de Mayo de 2008, 06:40:53 »
Muchas gracias Nocturno, pero me temo que mi nivel con los PICs no me permite aún entender el significado de tu cita   :mrgreen: (me río por no llorar)


¿Podrían orientarme un poco más cómo aplicar esto para detectar los flancos de la señal PWM?


Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Detectar flancos en señal PWM
« Respuesta #3 en: 24 de Mayo de 2008, 06:58:45 »
Te digo lo que yo interpreto, y a partir de aquí hablo de hipótesis porque no lo he probado.

Si tú activas el Special Event Trigger provocarás que el Timer1 o el Timer3 se reseteen cada vez que el PWM alcance su periodo. Si pones una interrupción en el Timer1 o el Timer3, esta se lanzará con cada periodo del PWM, o sea, con cada flanco descendente o ascendente, según lo hayas configurado.

No sé si me he explicado bien.

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: Detectar flancos en señal PWM
« Respuesta #4 en: 24 de Mayo de 2008, 07:57:31 »
Gracias Nocturno, ahora creo que sí lo entiendo. La cuestión es que el PWM está regido por el timer 2, y el special event trigger afecta al timer1 o timer3, por lo que entiendo que no sería aplicable en mi caso:

Citar
Like the standard CCP modules, the ECCP module can
utilize Timers 1, 2 or 3, depending on the mode
selected. Timer1 and Timer3 are available for modules
in Capture or Compare modes, while Timer2 is
available for modules in PWM mode. Interactions
between the standard and Enhanced CCP modules are
identical to those described for standard CCP modules.
Additional details on timer resources are provided in
Section 15.1.1 “CCP Modules and Timer
Resources”.

Otra posibilidad que me han apuntado: parece ser que aunque el pin esté configurado como salida para el PWM, podríamos leer cuál es su valor en cualquier instante, al menos, sí se puede con ASM. He rebuscado en el manual de CCS y creo que la función equivalente sería INPUT_STATE(). ¿Alguien con más experiencia podría confirmármelo?

La cuestión es que parece ser, según me han comentado, que para leer el estado de un pin se produce una cierta demora. ¿alguien sabe dónde aparece esto en el datasheet?

Siento estar tan preguntón...

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: Detectar flancos en señal PWM
« Respuesta #5 en: 24 de Mayo de 2008, 08:16:06 »
Parece ser que la demora a la que hacía alusión antes está relacionada con la instrucción ASM bcf o btfss, pero no encuentro información al respecto en el datasheet.

Creo entender que esta instrucción se ejecutan realmente dos ciclos depués de haber sido invocada ¿alguien lo confirma?
« Última modificación: 24 de Mayo de 2008, 08:25:23 por jfmateos2 »

Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4919
Re: Detectar flancos en señal PWM
« Respuesta #6 en: 24 de Mayo de 2008, 08:44:47 »
Juanfe tu leiste la Aplicacion de  AN1074?
yo creo que ahi lo explica bien
http://www.eetasia.com/ARTICLES/2007AUG/PDF/EEOL_2007AUG13_POW_EMS_OPT_AN.pdf?SOURCES=DOWNLOAD aqui creo que lo tiene mas claro amigo http://www.interq.or.jp/japan/se-inoue/e_pic7_4.htm
Saludo
« Última modificación: 24 de Mayo de 2008, 09:04:22 por stk500 »

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Detectar flancos en señal PWM
« Respuesta #7 en: 24 de Mayo de 2008, 12:40:09 »
Gracias Nocturno, ahora creo que sí lo entiendo. La cuestión es que el PWM está regido por el timer 2, y el special event trigger afecta al timer1 o timer3, por lo que entiendo que no sería aplicable en mi caso:
Sí, Juanfe, el PWM se sirve del Timer2 para funcionar, pero puedes configurarlo para que adicionalmente reinicie el Timer1 o el Timer3 con cada periodo.

Otra posibilidad que me han apuntado: parece ser que aunque el pin esté configurado como salida para el PWM, podríamos leer cuál es su valor en cualquier instante, al menos, sí se puede con ASM. He rebuscado en el manual de CCS y creo que la función equivalente sería INPUT_STATE(). ¿Alguien con más experiencia podría confirmármelo?

La cuestión es que parece ser, según me han comentado, que para leer el estado de un pin se produce una cierta demora. ¿alguien sabe dónde aparece esto en el datasheet?
Puedes utilizar el comando input(PIN_B1) o este método que me gusta más:
#byte PORTB 0x06  // definiciones iniciales
#bit PINPWM PORTB.1 // por ejemplo

y luego sólo
if (PINPWM) ...

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: Detectar flancos en señal PWM
« Respuesta #8 en: 24 de Mayo de 2008, 13:17:58 »
Gracias stk. Ese documento me viene muy bien para otra cosa, aunque no veo cómo aplicarlo en este caso.

Para mi aplicación concreta parece que tengo que renunciar a las interrupciones, así que adiós a la primera opción que me proponías Nocturno.

La segunda me la quedo sin rechistar. A mí también me gusta. MUCHAS GRACIAS. Este servicio da gusto, atiende incluso los sábados por la tarde  :mrgreen:.

Por cierto, este asunto está relacionado con el hilo del SID6581 del FORO TÉCNICO. Continuaré por allí mis avances.


Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4919
Re: Detectar flancos en señal PWM
« Respuesta #9 en: 24 de Mayo de 2008, 13:35:37 »


. Este servicio da gusto, atiende incluso los sábados por la tarde  :mrgreen:.


:D :D ya  sabe Juanfe, sabado Sabalete camisa nueva y corbarta y lo que venga  :D :D :D :D
 :D :D

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: Detectar flancos en señal PWM
« Respuesta #10 en: 24 de Mayo de 2008, 13:55:14 »
 :D :D :D

Yo ya había perdido la esperanza de resolver este asunto hoy, pues les hacía a todos enfrascados en otros "asuntos más placenteros" ...



 

anything