Autor Tema: Generar distintas señales PWM  (Leído 6552 veces)

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

Desconectado neron

  • PIC10
  • *
  • Mensajes: 5
Generar distintas señales PWM
« en: 09 de Junio de 2008, 12:03:47 »
Por favor amigos, tengo un pequeño problema.. Necesito generar varias señales PWM con diferentes anchos de pulsos con el 16F877. El caso es que por medio de un pulsador dependiendo de la cantidad de pulsos que le introduzca este genere dicha señal PWM.. Me explico, si le doy dos pulsaciones necesito que salga una señal PWM con un ciclo util de 1,21ms, si le doy 4 pulsaciones necesito obtener en la salida una señal con un ciclo util de 0,7 ms.

# pulsos                         2   3   4   5   6   7   8   9   10
Tiempo en alto(ms)       1,2   0,91   0,7   0,5   0,47   0,4   0,35   0,33   0,31
 
espero que ma halla explicado.. porfavor si alguien cree que esto se pueda hacer me darian una ayudita, es urgente, gracias. otra cosa lo estoy intentando hacer con  lenguaje C.  estoy utilizando un cristal de 20mhz y el pic 16F877.

Una de las formas que estoy tratando de resolver este problemilla es guardar estas diferentes señales PWM en una parte de la memoria y luego de ingresar los pulsos este de la direccion de donde se encuentra la señal PWM correspondiente, si alguien lo a hecho antes mucho mejor pero si tiene otra idea no hay problema para mi seria de gran ayuda.. :-/

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Generar distintas señales PWM
« Respuesta #1 en: 09 de Junio de 2008, 12:14:08 »
Saludos neron, bienvenido al foro!
Te recomiendo que uses el buscador del foro, me parece que ya alguien antes hizo algo muy similar.
Con el compilador CCS hay una instrucción que te permite usar la PWM del propio pic y ajustar el duty a tu gusto.
Pero como te dije usa el buscador y seguro conseguirás muchos códigos que te serán útiles.
Ok nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado poseidon20

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 762
Re: Generar distintas señales PWM
« Respuesta #2 en: 09 de Junio de 2008, 21:18:18 »
Como te dijo firepic, usar el buscador. pero a mi se me ocurre que lo podiras hacer de la siguiente manera. primero generar una interrupcion por timer con el tiempo minimo seteable 1.2ms, luego haciendo unas variables que lleve la cuentas de las señales, luego vas comparandolas y asi vez si falta para que llegue a debordarse y el tiempo que demore en llegara a ser = sera los DC diferentes que quieres :D. Espero haberme explicado :D.

Desconectado neron

  • PIC10
  • *
  • Mensajes: 5
Re: Solo 4 pulsos en un periodo establecido ¿ TIMERS?
« Respuesta #3 en: 11 de Junio de 2008, 21:17:58 »
.... gracias por su ayuda revise el buscador y de veradad me fue muy bien consegui una informacion muy buena... Pero ahora necesito generar 4 pulsos en un periodo de 8333us (120hz).. lo que tengo planteado es lo siguinete como el periodo va a ser de 8333us lo dividido entre la cantidad de pulsos en alto y en bajo es decir tengo un total de 8 pulsos (o a lo que yo le llamaria tiempos en bajo y tiempos en alto )entonces tengo que:

Como la onda es simentrica el tiempo en alto debe ser igual que el tiempo en bajo pero tomado en cuenta que la suma de estos tiempos debe ser exactamente igual a 8333us o que da una frecuncia de 120 hz

    ___    ___     ___    ___
    |   |   |    |    |    |   |   |
__|   |__|    |__|    |__|   |   
             
 
ton=tiempo en alto
toff=tiempo en bajo

entonces tenemos que:

ton= Periodo/Cantidad de tiempos
ton = 8333us/8 tiempos(ton+toff)
ton=1041.66667us..
   "ton=toff" eso se debe a que la onda es simetrica...

Alguien menciono que  esto se logra con los timers.Yo estoy trabajndo con ep Pic  16F877, este posee 3 timers Timer0, Timer1 y Timer2, con lenguaje c y utilizo el copilador PCW C copiler.

 Pero en realidad yo no tengo mucha experiencia trabajando con los timers..

 :-/favor si alguien a trabajado con estos times o realizo alguna vez este trabajo o algo  parecido le estare bien agradecido por su colaboracion ya que de verdad la necesito de urgencia..!!!!!!!! :-/

 :)Saludo a todos los que conforman este foro... hasta pronto
 :)

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Generar distintas señales PWM
« Respuesta #4 en: 11 de Junio de 2008, 22:43:13 »
Nero no es que no te quiera ayudar, pero usa el buscador viejo.
Encontrarás mucha información relacionada con lo que tú quieres hacer.
Y hay muchísimos códigos con el uso de los timers... si quieres revisa el "Microcursillo en C" que está en el subforo de C.
Entonces toma uno de esos códigos y lo modificas de acuerdo a tus necesidades, y aquí expones tus avances y se te ayudará.
Verás que el uso de los timers no es nada del otro mundo, simplemente al principio lo configuras con un setup_time (pre-escalador, etc), luego lo 'seteas' a un valor con el que quieres que arranque la cuenta, con la instrucción set_timer... y después evalúas el valor del timer con get_timer para hacer alguna condicional o mejor aún, habilitas interrupción por timer0,1,2 o el que vayas a usar.
Ok saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: Generar distintas señales PWM
« Respuesta #5 en: 12 de Junio de 2008, 01:15:42 »
Nero debes ser tú quien empiece a colocar líneas de código.

Desconectado neron

  • PIC10
  • *
  • Mensajes: 5
Re: Generar distintas señales PWM
« Respuesta #6 en: 15 de Junio de 2008, 13:10:18 »
Bueno amigos aquí los traigo un poco de lo q he hecho….

#include <16F877.h>
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES RC                       //Resistor/Capacitor Osc with CLKOUT
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#use delay(clock=20000000
int pulsos;
#define salida Pin_C5
#define Out Pin_C6
#int_rtcc
    void handle_rtcc_int(){
    output_toggle(Out);
    set_timer0(93);//Con este valor ocurre un desbordamiento cada 8,33ms//
    }
void main()
{
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(FALSE);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
   setup_timer_2(T2_DISABLED,0,1);

   // TODO: USER CODE!!
   enable_interrupts(int_rtcc);
   enable_interrupts(global);
while(true)
   {
   do
    {
    pulsos=input_b();
    }
    while(pulsos>10);
   }
 }

En este pequeño programa use el timer0 para generar una onda de referencia de un periodo de 16,667ms esta se mantiene fija, necesito usar el timer1 para dividir el ciclo útil de esta onda dicho ciclo útil tiene un valor de 8,333ms es decir mi onda es simétrica. Estos  pulsos encargados de dividir la onda deben ser ingresados por medio de un pulsador.. el timer1 tiene que mantenerse atento a las variaciones de este pulsador para dividir esta onda de 8,33ms,,
Para mi el problema esta en que no entiendo como hacer para q este timer1 realice este trabajo, no se q comando o que sentencias utilizar..   

Espero haberme explicado,, si alguien me pueda echar un ayudita,, por favor

 :-/Saludos  a todos y gracias….. :-/

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Generar distintas señales PWM
« Respuesta #7 en: 15 de Junio de 2008, 13:58:50 »
No es tan difícil neron, si ya lograste trabajar con el timer 0, pues trabajar con los demás timers es básicamente igual...
Sólo que ahora será setup_timer_1 o setup_timer_2... y set_timer1, set_timer2... y la interrupción #INT_TIMER1, #INT_TIMER2...
Sin embargo no entiendo exactamente tu proyecto... por aquí mencionaste:

Pero ahora necesito generar 4 pulsos en un periodo de 8333us (120hz).. lo que tengo planteado es lo siguinete como el periodo va a ser de 8333us lo dividido entre la cantidad de pulsos en alto y en bajo es decir tengo un total de 8 pulsos (o a lo que yo le llamaria tiempos en bajo y tiempos en alto )entonces tengo que:

Como la onda es simentrica el tiempo en alto debe ser igual que el tiempo en bajo pero tomado en cuenta que la suma de estos tiempos debe ser exactamente igual a 8333us o que da una frecuncia de 120 hz

    ___    ___     ___    ___
    |   |   |    |    |    |   |   |
__|   |__|    |__|    |__|   |  
            
 
ton=tiempo en alto
toff=tiempo en bajo

entonces tenemos que:

ton= Periodo/Cantidad de tiempos
ton = 8333us/8 tiempos(ton+toff)
ton=1041.66667us..
   "ton=toff" eso se debe a que la onda es simetrica...

Dices que la onda tiene una frecuencia fija de 120Hz, y que es simétrica... entonces eso es una sencilla onda cuadrada, no una PWM...  :shock:
Luego mencionas que tienes que generar cuatro pulsos... pero esos pulsos están dentro del período de 8.33ms? Entonces el período no cambiaría? No te entiendo  :?

Ahora bien, si lo que quieres hacer es generar diferentes pulsos y esos "subperíodos" de los pulsos sumen un "macroperíodo" de 8.33ms... así la cosa cambia... y vuelvo y repito, no sería PWM. PWM es que tengas un único pulso que varíe su amplitud en función a alguna variable conocida, y cuyo período permanezca constante.

Bueno a ver si me aclaras un poco y síguele dando con la programación... usa el manual de CCS que te puede ayudar mucho.
Saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado miltonmc

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 305
Re: Generar distintas señales PWM
« Respuesta #8 en: 15 de Junio de 2008, 15:23:13 »
saludos a todos
neron mas o menos pensando en la gráfica de lo que quieres hacer podría ser asi
 4 pulsos altos y 4 pulsos bajos 8 total en  8.33ms
                   __     __      __     __       
              __|   |__|   |__|   |__|   |__     __      __     __         
                                                     |__|   |__|   |__|   |__|   
                                           
4 pulsos altos y 4 pulsos bajos 8 total en  8.33ms
   
cada pulso es igual en 1.04125 ms sea alto o bajo con los pulsos iguales en tiempo.
eso es lo que pienso
« Última modificación: 17 de Junio de 2008, 02:58:07 por miltonmc »

Desconectado neron

  • PIC10
  • *
  • Mensajes: 5
Re: Generar distintas señales PWM
« Respuesta #9 en: 16 de Junio de 2008, 10:48:21 »
 :-/

Hola  amigos gracias por prestarle atención a mi proyecto y el amigo firepic tiene razón lo que quiero es generar diferentes pulsos y esos subperiodos de los pulsos sumen un macroperiodo de 8.33ms.

El amigo miltoc también esta en lo cierto pero en realidad esto es lo que quiero:

                                                                                   
    ___     ___    ___     ___                          ___     __     ___     ___
   |    |    |    |   |    |    |    |                        |    |    |   |   |    |    |    |
__|    |__|    |__|    |__|    |______________|    |__|   |__|    |__|    |

|______8.33ms__________|______ 8,33ms_|

|________________16,6667ms____________|


Entonces cada pulso tendría un valor de 1.04125ms.. Y no se en que estaba pensando pero un periodo de 16,666ms corresponde a una frecuencia de 60hz no de 120hz.. je je je me disculpan por favor,,
Entonces genero mi tren de pulsos luego de recorrer los 8,33ms debe generar un tiempo  muerto igual a los 8,33ms,  y vuelve a sacar el tren de pulsos. y así sucesivamente.

 
Bueno la cosa es que no se trabajar muy bien con los timers… ya que el programa tiene que generar la cantidad de pulsos que se ingresan por medio de un pulsador externo. En el grafico anterior el pulsador se pulso 4 veces (serian 4 pulsos altos y 4 muertos) entonces el timer debería desbordarse 8 veces, ¿ Es así o me equivoco? Me corrigen  por favor..  ahora si me explico..

  :-/Me pueden echar una ayudita con ese timer1,,, :-/

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Generar distintas señales PWM
« Respuesta #10 en: 16 de Junio de 2008, 11:20:43 »
Saludos neron!
Ahora sí se entiende más la cuestión.
Bueno yo usaría un sólo timer que contara el tiempo de 1 .04167 ms... luego podrías usar una bandera, cuando esté en 1 haga el output_toogle y cuando esté en 0 coloque en bajo... así podrías generar toda la señal sin tener que usar dos timers... si tengo tiempo trataré de ponerte un ejemplo de lo que digo....
En cuanto a lo del pulsador... hay algo que todavía no está claro... cómo harás para saber que los pulsos son parte de una misma secuencia? O sea, imagina un usuario que pulse cada segundo 4 veces... luego pasan 10 segundos y vuelve a pulsar... se cuentan como 5 pulsos o el último pulso fijaría una nueva configuración?
Ok nos leemos!  :mrgreen:
 
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: Generar distintas señales PWM
« Respuesta #11 en: 16 de Junio de 2008, 15:53:59 »
Sí lo de la toma de datos con el pulsador todavía no está claro del todo.

Yo lo haría así. Con el pulsador iría incrementando un contador (una variable interna), si el tiempo entre pulsación y pulsación sobrepasa un cierto valor significa que la toma de datos a finalizado y entonces el número que haya en el contador será el número de pulsos nuevos que tendrá que sacar.

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Generar distintas señales PWM
« Respuesta #12 en: 16 de Junio de 2008, 16:05:02 »
Yo pienso que esa sería una forma muy elegante, gran pocher...  :P
Ahora bien, no sé si neron tendrá otros planes o tendrá algún otro pulsador estilo "aceptar" o qué se yo...  :D
Esperemos a ver qué nos comenta...
Saludos, nos leemos!  :mrgreen:
« Última modificación: 16 de Junio de 2008, 16:47:10 por firepic »
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado jim_17

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 309
    • Blog personal
Re: Generar distintas señales PWM
« Respuesta #13 en: 16 de Junio de 2008, 16:40:55 »
Lo podrias hacer generando pwm a por software alomejor lo tendiras mas facil.
Share the world !

Blog's

http://www.area0x33.com

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Generar distintas señales PWM
« Respuesta #14 en: 16 de Junio de 2008, 16:48:11 »
Imposible jim... porque en realidad no es PWM lo que está haciendo neron... lee bien todo el hilo y te darás cuenta...
Saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web