Autor Tema: pwm´s desfasados t/4  (Leído 3449 veces)

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

Desconectado empeco

  • PIC10
  • *
  • Mensajes: 12
pwm´s desfasados t/4
« en: 26 de Junio de 2007, 04:51:20 »
hoala amigos, debo diseñar un sistema que genere cuator señales pwm con la misma frecuencia y ciclo de servicio, pero deben estar desfasadas un cuarto de periodo entre ellas. Inicialmente se me ocurrieron varias ideas, que posteriormente han sido descartadas. La que mejor me parece es la de usar cuatro micros y sincronizarlos mediante la interrupcion externa, y como tanto la frecuencia como el ciclo de servicio deben ser variables, estos datos enviarlos entre ellos por i2c.

y mi pregunta es la siguiente:
¿que os parece?
¿como puedo mejorarlo, para usar un numero menor de micros?

Espero vuestra ayuda....Gracias

Desconectado jfh900

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: pwm´s desfasados t/4
« Respuesta #1 en: 26 de Junio de 2007, 05:52:52 »
Por que no utilizas unos monoestables que te produzcan el desfasaje?

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Re: pwm´s desfasados t/4
« Respuesta #2 en: 26 de Junio de 2007, 06:15:20 »
yo probaria con lo que se suele llamar relojes virtuales, que no es mas que generar una interrupcion con el timer cada cierto tiempo, incrementas una variable y miras si tienes que poner esa patilla a 0 o a 1 si haces 4 comparaciones ("if") con un poco de maña poniendoles una especie de "offset" a la cuenta supongo que podrías conseguir tu proposito, cuentanos tus avances y te examos un cable ;)
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: pwm´s desfasados t/4
« Respuesta #3 en: 27 de Junio de 2007, 00:41:37 »
una vez hice algo parecido, era disparar 5 señales de la misma frecuencia pero desfasadas 1/6 entre ellas, y pues tenia que escoger la frecuencia entre 8 valores 400hz....5hz, lo hice con un pic16f84a con 20MHz.... no es necesario usar 4 pics para eso, pero implica un cierto conocimiento del pic para hacer el programa.
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado empeco

  • PIC10
  • *
  • Mensajes: 12
Re: pwm´s desfasados t/4
« Respuesta #4 en: 28 de Junio de 2007, 05:38:03 »
ya he intentado hacerlo con un solo micro, seteando y resetando pines, el problema es que el ciclo de sevicio debe ser variable, esto es, que tengo que hacer un barrido con los cuatro pwm´s, y esto hace que el empleo de un solo micro sea "practicamete imposible", segun el profesor que me lleva el poryecto. tambien he intentado usar un micro con 4 pwm´s, pero al llegar el timer 2 al overflow, se me resetan todos los pwm´s, con lo que tampoco me sirve...
La opcion de los monoestables tambien la habiamos contemplado, pero como el valor de la fracuencias debe ser variable, el tiempo de disparo de los  monoestables tambien debe serlo. tambien intentamos hacerlo con biestables y comparadores, de modo que generabamos el pwm a partir de una señal triangular, vamos, como toda la vida, pero tambien fue desestimada por el profesor.
Por esto necesito ayuda, por que todas las ideas que se me ocurren son desestimadas y empiezo a que darme sin ideas.

PD: tambien me dijeron que usara una eeprom externa en la que almacenar valores y luego simplemente leerlos, pero volvemos a lo mismo, con frecuencia y ciclo de servicio variables, ¿cuantas posiciones de memoria tengo que escribir?, me parece que son muchisimas, ¿que os parece esta idea?

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: pwm´s desfasados t/4
« Respuesta #5 en: 28 de Junio de 2007, 10:22:10 »
si  pues, tienes un programa muy interesante por hacer, dime cual es el rango de variacion de la frecuencia de los pwm en tu aplicación?
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado empeco

  • PIC10
  • *
  • Mensajes: 12
Re: pwm´s desfasados t/4
« Respuesta #6 en: 29 de Junio de 2007, 05:33:55 »
Creo que el problema no es la fraucencia, dado que esto tomará valores discretos; 10kHz, 20Khz, 40Khz, 80Khz, y creo que no mas. Pienso que el problema es mas el ciclo de servicio, que debe hacer un barrido para todos los valores desde el 0% hasta el 100%, y viceversa; aunque tampoco veo esto muy claro, por que para configurar la frecuencia del pwm se cargan ciertos valores en el PR2, y el barrido del ciclo de servicio tendra una precision que depende de este valor. Me explico, para un reloj de 4MHz, con una division en el prescaler del timer 2 de 4, se precisa un valor de 99 en el registro PR2, creo recordar, segun la ecuacion del data sheet del micro, por tanto el barrido se hara incrementando el ciclo de servicio desde 0 hasta 99; por otro lado, para una frcuencia mayor con el mismo prescaler se precisa un valor mayor en el PR2, de forma que ahora el barrido sera en tre cero y este valor, por tanto la precision del mismo sera menor en este caso.
En todo caso, no termino de ver claro lo de escribir valores en la eeprom y lerlos segun el estado.
PD: no os he cometando nada pero este proyecto se usara para conectarlo a cuatro convertidores para estudiar el rendimiento de una pila de combustible.
Gracias por vuestra ayuda

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: pwm´s desfasados t/4
« Respuesta #7 en: 29 de Junio de 2007, 08:49:48 »
Creo que la clave está en conocer la resolución máxima que vas a exigir a tu circuito.

Mi propuesta es que hagas una interrupción del timer que desborde muy rápidamente y en su ejecución compruebes los 4PWM para levantar o bajar el que corresponda.

Si lo programas bien, es una interrupción que debe pesar poco y ejecutarse muy rápido, por lo que podrás obtener una resolución aceptable.

Algo parecido a lo que describí aquí: http://www.todopic.com.ar/foros/index.php?topic=17136.msg120576#msg120576

Una solución con 4 micros me parece antieconómica y mucho más complicada.

Desconectado empeco

  • PIC10
  • *
  • Mensajes: 12
Re: pwm´s desfasados t/4
« Respuesta #8 en: 02 de Julio de 2007, 08:20:38 »
Gracias nocturno por tu respuesta. La he implementado, pero la frauecia maxima que consigo es de 2.5KHz; a mas frecuencia el micro no escapaz de seguir los datos del timer; la frecuecia minima que me exigen es de 10KHz.

Por cierto he visto un proyecto que contorla el momento de disparo del pwm; esto es, yo solo uso el pwm de forma que se inicia a nivel alto; pues bien en este proyecto, el autor controla el momento que se dispara el pwm, de forma que en lugar de iniciar el ciclo a nivel alto, lo hace a nivel bajo poniendo se a nivel alto al haber transcurrido un 35%, por ejemplo, del periodo. creo que con esto y un micro con 4 pwm´s podria valer ,no? el problema es que no tengo ni idea de como hacer esto.

Un saludito desde el sur de España.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: pwm´s desfasados t/4
« Respuesta #9 en: 02 de Julio de 2007, 12:37:43 »
No sé, en principio debería dar lo mismo empezar a nivel bajo y finalizar a nivel alto.
Si pegas tu programa quizás podamos concretar algo más.

P.D.: ¿de dónde eres?

Desconectado empeco

  • PIC10
  • *
  • Mensajes: 12
Re: pwm´s desfasados t/4
« Respuesta #10 en: 03 de Julio de 2007, 04:50:03 »
Muy buenas compañero, este es el programam que he usadopara generar los pwm que necesito:



//---------------------------------------------------------INICIO---------------------------------------------------------------------------
#byte porta=05//definicion del puerto a
#byte portb=06//definicion del puerto b
#byte ccpr1l=0x15
byte T,ton,toff,tiempo;//declaracion de variables globales
#int_RTCC
RTCC_isr() {
portb=~portb;//controla si entra en la intrrupcion
 if(tiempo<t){
      tiempo++;
   }else{
      tiempo=0;
   }
   set_rtcc(450);//carga en registro del timer un valor para que sea mas rápido
      /*cuanto mas alto sea el valor, mas rapido se llega al overflow en el timer*/
}


#int_TIMER2
TIMER2_isr() {
 
   if(tiempo<=ton){
      output_high(pin_C0);
   }
   if(tiempo>ton){
       output_low(pin_c0);
   }
   if(tiempo<t/4){
      output_low(pin_c1);}
   else{
      if(tiempo<=(ton+t/4)){
         output_high(pin_C1);
      }
      if(tiempo>(ton+t/4)){
         output_low(pin_c1);
      }
   }
}



void main() {

   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DIV_BY_1,62,2);
   setup_ccp1(CCP_off);
   enable_interrupts(INT_RTCC);
   enable_interrupts(INT_EXT);
   enable_interrupts(INT_TIMER2);
   enable_interrupts(GLOBAL);


   set_tris_a(0x00);
   set_tris_b(0x00);


   t=100; //valor que establece el periodo
   ton=5;//valor del ciclo de servicio
 
   while(true){
           
   
     }
}

//----------------------------------------------------------------------FIN------------------------------------------------------------

Bueno, pues este es mi programa, y lo cierto es que funciona, pero lo dicho, hasta 2.5KHz. La velocidad del timer 0 la controlo con la instruccion "set_rtcc(450);". El valor de 450 es el mayor que he podido escribir en el timer obteniendo la señal de salida. Para valores superiores a este, he comprobado que el timer 0 (lo he comprobado porque me cambia el valo del puerto b ), pero por alguna razon, a partir de este valor no entra en la interrupcion del timer 2.


Un saludo desde Huelva, Andalucia, España

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: pwm´s desfasados t/4
« Respuesta #11 en: 03 de Julio de 2007, 13:38:31 »
He estado haciendo pruebas, incluso lo he simulado, pero no acabo de pillar lo que has hecho  :?

Desconectado jfh900

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: pwm´s desfasados t/4
« Respuesta #12 en: 03 de Julio de 2007, 14:11:17 »
Yo lo que veo es que complicas un poco el programa innecesariamente. Me explico: llevas un cuenta de tiempo mediante la variable "tiempo", el timer1 y la interrupción correspondiente. Por que no llevas la cuenta directamente sombre el timer1, osea lo pones en marcha y lo lees con con la instrucción get_timer0() o get_rtcc() si utilizas un cristal de 4MHz y pones el pre escalar a 1 tendrás una cuenta por micro segundo o lo que es lo mismo si get_rtcc te devuelve 120 habrán pasado 120 us (lo estoy diciendo de cabeza y habría que hacer los cálculo según el datasheet). Por otra parte no es conveniente hacer los cálculos dentro de una interrupción y mas si son complicados (como es la división), utiliza 2 variables para t/4 y ton+t/4, las calculas en el main fuera del bucle y las utilizas en la interrupción del Timer2.

Un saludo.
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús


 

anything