Autor Tema: retardo entre señales PWM  (Leído 12143 veces)

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

Desconectado aitorsp

  • PIC18
  • ****
  • Mensajes: 296
Re: retardo entre señales PWM
« Respuesta #15 en: 20 de Septiembre de 2010, 11:40:14 »
Hola.

Un 556 podría servir no? o dos 555 en cascada? ... que otros integrados para generar PWM existen en el mercado?

Saludos

Hola:

Tienes razón. El 555 puede hacer ese trabajo pero estoy pensando que ocupa menos espacio un PIC programado que dos 555 configurados como PWM aunque sólo sea para generar dos señales.

Un saludo

aitor

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: retardo entre señales PWM
« Respuesta #16 en: 20 de Septiembre de 2010, 12:44:53 »
1 876 menos espacio que 2 555 ?  :shock: Además de salir más $  :?
No contesto mensajes privados, las consultas en el foro

Desconectado aitorsp

  • PIC18
  • ****
  • Mensajes: 296
Re: retardo entre señales PWM
« Respuesta #17 en: 20 de Septiembre de 2010, 12:57:27 »
1 876 menos espacio que 2 555 ?  :shock: Además de salir más $  :?

Hola:

bien, para empezar existen pics mas pequeños como el 12F629 que pueden hacer esa función. Respecto del 555... Cuanto crees que puedes reducir en tamaño una configuración de dos 555 generando señales PWM teniendo en cuenta que tienes que poner resistencias y condensadores?. Mas que un simple 12F629?. Es mas,el 16F876 crees que ocuparia mucho mas espacio que los dos 555?. Además de todo eso todavia tendria que resolver como desfasar las dos señales porque poniendo los dos 555 aparecian practicamente sincronizadas.  Lo del precio ya es otra cuestion...

Un saludo

Aitor
« Última modificación: 20 de Septiembre de 2010, 13:07:04 por aitorsp »

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: retardo entre señales PWM
« Respuesta #18 en: 20 de Septiembre de 2010, 13:20:51 »
Aaa!!! Esta bien... Si usas un 12F, para un programa sencillo, y que requiere algo de precisión podes usar asm.

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: retardo entre señales PWM
« Respuesta #19 en: 20 de Septiembre de 2010, 17:26:19 »
Hola.

Como piensas cambiar el Duty Cicle del PWM en el PIC? con unos potenciometros?

Según lo que han comentado, sería bueno trabajar con un cristal de 20MHz ... tocaría con un 16F628A 16F88 o 16F873A ... porque en el 12F no alcanzarian los pines  :(

Si el valor del DC de los 2 PWM son el mismo valor, se podría generar un PWM mediante una interrupción de un Timer y el otro lo generas en el main, de esa manera puedes desfasar la señal del 2 PWM respecto a la primera con un delay.

Saludos
El papel lo aguanta todo

Desconectado aitorsp

  • PIC18
  • ****
  • Mensajes: 296
Re: retardo entre señales PWM
« Respuesta #20 en: 20 de Septiembre de 2010, 18:39:07 »
Hola.

Como piensas cambiar el Duty Cicle del PWM en el PIC? con unos potenciometros?

Según lo que han comentado, sería bueno trabajar con un cristal de 20MHz ... tocaría con un 16F628A 16F88 o 16F873A ... porque en el 12F no alcanzarian los pines  :(

Si el valor del DC de los 2 PWM son el mismo valor, se podría generar un PWM mediante una interrupción de un Timer y el otro lo generas en el main, de esa manera puedes desfasar la señal del 2 PWM respecto a la primera con un delay.

Saludos

Hola:

Con este código consigo generar las dos señales pero sincronizadas. Ahora falta desfasarlas 200 useg y de momento no lo consigo utilizando la interrupción.


#include <12F629.h>
#fuses NOWDT,INTRC_IO,NOCPD,NOPROTECT,NOMCLR,NOPUT                                   
#use fast_io(a)
#use delay(clock=4000000)
#int_TIMER0
void  RTCC_isr(void)
{
output_high(PIN_A0);
output_high(PIN_A1);
delay_us(200);
set_timer0(210);
}
void main()
{
set_tris_a(0b111100);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
do{
output_low(PIN_A0);
output_low(PIN_A1);
}while(1);
}

Un saludo

Aitor

Desconectado reiniertl

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1187
Re: retardo entre señales PWM
« Respuesta #21 en: 20 de Septiembre de 2010, 21:01:27 »
Vamos a ver...

Si la frecuencia del PWM es de 1KHz lo que significa que su período es de 1000us

1MHz = 1/1000 000 = 1us
1KHz = 1/1000       = 1000us

¿Qué sentido tiene que ambas señales estén desfasadas en 200us? que es un desfaje de 1/5 que no da un ángulo bonito ni mucho menos, por ejemplo si pretendes trabajar en el primer cuadrante trigonométrico tendrías un diferencia de fase de 18 grados QUE ANGULO MAS FEO.


No veo el sentido práctico de esto, si nos ayudas en aclarar esto podríamos ayudarte mejor a obtener lo que deseas.

Ten en cuenta que con esa fase entre ambas señales, en algun instante futuro, ambas señales van a a coincidir en el dominio del tiempo y puede que ese no sea un comportamiento deseable. No conozco muchas aplicaciones donde se utilicen consas como esa.

Un saludo
Reinier

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: retardo entre señales PWM
« Respuesta #22 en: 20 de Septiembre de 2010, 21:04:46 »
Hola.

Seria mejor cambiar la rutina dentro de la interrupción:

Código: C#
  1. ++state_on;
  2.         if(state_on<=T_alto)
  3.         {
  4.                 FlagCambioEstado=1;
  5.                 on(salida);
  6.         }
  7.         else
  8.         {
  9.                 off(salida);
  10.                 FlagCambioEstado=0;
  11.                 ++state_off;
  12.                 if(state_off>=T_bajo)
  13.                 {
  14.                         state_on=0;
  15.                         state_off=0;
  16.                 }
  17.         }

y en el programa principal, se valida la variable FlagCambioEstado y se genera el retardo de los 200uS que necesitas. En sí lo que se me ocurre es seguir la señal de PWM generada por la interrupción desde el main y generar el retardo en el programa principal.

Saludos
« Última modificación: 20 de Septiembre de 2010, 21:09:36 por MLO__ »
El papel lo aguanta todo

Desconectado aitorsp

  • PIC18
  • ****
  • Mensajes: 296
Re: retardo entre señales PWM
« Respuesta #23 en: 21 de Septiembre de 2010, 06:07:28 »
Hola:

No he conseguido afinarlo del todo pero supongo que en la realidad más o menos funcionará.

Código: C
  1. #include <12F629.h>
  2. #fuses NOWDT,INTRC_IO,NOCPD,NOPROTECT,NOMCLR,NOPUT                                    
  3. #use fast_io(a)
  4. #use delay(clock=4000000)
  5. int Flag=0;
  6. #int_TIMER0
  7. void  RTCC_isr(void)
  8. {
  9. output_low(PIN_A0);
  10. output_low(PIN_A1);
  11. set_timer0(242);
  12.    if(Flag==1){
  13.       Flag=0;
  14.    }
  15.    else
  16.       Flag=1;
  17. }
  18. void main()
  19. {
  20. set_tris_a(0b111100);
  21. setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16);
  22. enable_interrupts(INT_TIMER0);
  23. enable_interrupts(GLOBAL);
  24. output_a(0x00);
  25. do{
  26.    if (Flag==0){
  27.       output_high(PIN_A0);
  28.       output_low(PIN_A1);
  29.       delay_us(420);
  30.       Flag=1;
  31.    }
  32.    else{
  33.       output_high(PIN_A1);
  34.       output_low(PIN_A0);
  35.       delay_us(420);
  36.       Flag=0;
  37.    }
  38. set_timer0(243);
  39. }while(1);
  40. }
     
Un saludo

Aitor

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: retardo entre señales PWM
« Respuesta #24 en: 21 de Septiembre de 2010, 10:38:27 »
Otra solucion es hacer el delay por hardware. O sea, configuras dos salidas de PWM en fase, cada una con su duty, y a una de ellas la pasas por un circuito externo que genere los 200us de delay. Se puede hacer facilmente con un filtro RC y un comparador.
Saludos!!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado aitorsp

  • PIC18
  • ****
  • Mensajes: 296
Re: retardo entre señales PWM
« Respuesta #25 en: 21 de Septiembre de 2010, 10:46:11 »
Otra solucion es hacer el delay por hardware. O sea, configuras dos salidas de PWM en fase, cada una con su duty, y a una de ellas la pasas por un circuito externo que genere los 200us de delay. Se puede hacer facilmente con un filtro RC y un comparador.
Saludos!!

Hola:

Ummm...el problema del filtro RC es que distorsionaria la señal PWM que al ser de onda cuadrada no pasarian todas las frecuencias que la componen, incluso si la frecuencia de corte la alejas lo mas posible.

Un saludo

Aitor

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: retardo entre señales PWM
« Respuesta #26 en: 21 de Septiembre de 2010, 10:51:00 »
Para eso esta el comparador, asi volves a obtener la cuadrada. El filtro RC es solo para obtener el desfasaje.
saludos!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado reiniertl

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1187
Re: retardo entre señales PWM
« Respuesta #27 en: 21 de Septiembre de 2010, 18:38:13 »
Hacer el retardo es fácil, se escoge por ejemplo una frecuencia de interrupción para un timer, digamos que el TIMER1+CCP o el TIMER2 que son muy configurables si se les compara con el TIMER0. que sea submúltiplo de la frecuencia de ambos PWM y a la vez submúltiplo de la frecuencia del desfasaje, por ejemplo el máximo común divisor entre el  PWM y el retardo.


Ahora con unas banderas y unos contadores es muy simple armarse una lógica que le permita a la ISR determinar cuando cambiar el estado de cualquiera de las I/O de cada PWM y que se cumpla el desfasaje.

Un saludo
Reinier
« Última modificación: 22 de Septiembre de 2010, 13:22:42 por reiniertl »

Desconectado aitorsp

  • PIC18
  • ****
  • Mensajes: 296
Re: retardo entre señales PWM
« Respuesta #28 en: 22 de Septiembre de 2010, 06:03:54 »
Hola:

Expongo los resultados de proteus con el código que veis en mi última respuesta. las señales se aproximan bastante a lo que queria.

Un saludo

Aitor






Desconectado reiniertl

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1187
Re: retardo entre señales PWM
« Respuesta #29 en: 22 de Septiembre de 2010, 13:23:54 »
Felicidades entonces por haberlo conseguido. Ahora a montar el circuito y lograr que además funcione bien en el PCB.