Autor Tema: generar pwm por software  (Leído 11075 veces)

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

Desconectado xootraoox

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 248
generar pwm por software
« en: 23 de Enero de 2006, 02:06:00 »
bueno eso necesito generar un pwm por software ya que necesito al menos 9 fuentes independientes de pwm

si alguien tiene idea de como seria lo mas efectivo.... agradesco enormemente

desde ya muchas gracias
-==XooTRAooX==-

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
RE: generar pwm por software
« Respuesta #1 en: 23 de Enero de 2006, 17:02:00 »
Hola xootraoox, seria interesante que nos especifiques que frecuencia necesitas para el PWM, ya que no es lo mismo para una de 500 Hz que para otra de 100 KHz.

Puffffffffff si que son mucho ) salidas de PWM, yo creo que deberías de trabajar con el TMR para que en el momento de la interrupción por desborde se coloquen todas las salidas en alto, y luego a medida que determinado BIT dentro del TRM se coloque en 1 se genere una rutina que compare el valor actual del TMR con el valor del registro de la salida correspondiente, después de la comparación se decide si a esa salida le colocamos un 0 o continua en 1.

Sé que este método es algo complicado y lento de procesar pero por el momento es lo único que se me ocurre.

Suerte

Atte. CARLOS

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado xootraoox

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 248
RE: generar pwm por software
« Respuesta #2 en: 23 de Enero de 2006, 17:23:00 »
La verdad es que no se bien la frecuencia que he de necesitar.... lo que si es para controlar la intensidad de iluminacion de leds rgb....  Uds. me podrian aconsejar la mejor frecuencia del pwm para controlar leds???

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
RE: generar pwm por software
« Respuesta #3 en: 23 de Enero de 2006, 18:11:00 »
Hola xootraoox, en realidad los LED no son tan exigentes como algunos otros componentes a la hora de seleccionar una frecuencia para el PWM

Si partimos de que el LED con una frecuencia de 50 Hz ya no se le nota el parpadeo, podemos decir que a partir de esta frecuencia podemos seleccionar cualquiera, pero mi consejo seria que selecciones una entre las 100 Hz y los 500 Hz, porque teniendo en cuenta que tu debes generar el PWM por software esta frecuencia te permitirá no tener tan ocupado el micro para esta función.

Atte. CARLOS

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado xootraoox

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 248
RE: generar pwm por software
« Respuesta #4 en: 23 de Enero de 2006, 20:16:00 »
muchas gracias Chaly29 espero alguien tenga una idea de como inplementar una buena rutina para este proposito ya que no se me ocurre de como poder controlar los 9 pwm"s al mismo tiempo, se agradece de antemano


-==XooTRAooX==-

Desconectado xootraoox

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 248
RE: generar pwm por software
« Respuesta #5 en: 24 de Enero de 2006, 10:36:00 »
locolocoloco esto de controlar un par de leds se me esta complicando mas de la cuenta......

alguien a tratado de controlar leds RGB que me pudiese hechar un cable, ya que me esta volviendo loco este asunto........

todo lo que necesito es generar un pwm por software, por lo cual he leido bastante y lo que mas se asemeja es al contol de varios servos pero no he podido crear la rutina adecuada aun... si alguien tiene idea de como quenerar un pwm por software que pueda variar su duty cycle de 0% a 100%, se lo agradeceria enormemente que me diera una pista

desde ya me despido agradecido en espera de un Byte caritativo

Desconectado lovando

  • PIC16
  • ***
  • Mensajes: 193
RE: generar pwm por software
« Respuesta #6 en: 24 de Enero de 2006, 12:16:00 »
Microchip tiene una app de generacion de pwm por software, pero en asm.

La cantidad de canales pwm por software creo necesariamente requiere que los pwm esten desfasados  unos con otros.....ahora, sobre la frecuencia, habria que considerar el tiempo de retencion del ojo humano...unos 1/20 seg creo que es...

Si no se usan los timers por hardware, habria que considerar necesariamente registros por decremento para cada pwm y los registros de estado de cada timer para recordar los valores previos y determinar los valores de recarga....

Interesante proyecto xoox.....si usas un chip tipo 18F452 creo tienes 4 timers y 2 pwm, incluso el 877 trae 3 trmX y 2 pwm tambien creo.....podrias multiplexar estos timers de modo comun para los 9 pwm teniendo los registros de estado para cada pwm...la rutina isr_tmrX debiera chequear cual fue el primer pwm ejecutado y asi sucesivamente, para despues cargar los tmrX con los valores correspondientes. Me imagino que el tmr0 asignado al 1,4,7 pwm, el tmr1 al 2,5,8 y el tmr2 al 3,6,9..

Solo una idea

Cuentanos como te va

Saludos

Desconectado xootraoox

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 248
RE: generar pwm por software
« Respuesta #7 en: 24 de Enero de 2006, 14:41:00 »
Pues si... todos los PWM_SOFT que he encontrado estan en ASM aunque he tratado de comprender algunos no he tennido buenos resultados, el ultimo que trate de hacer trabajar hasta el momento es uno que estaba en ASM y lo he tratado de pasar a C pero sin resultados positivos.... aunque si hubiese trabajado en realidad no me hubiese serbido en realidad ......

lo que si estuvo bien serca de trabajar fue un codigo de RedPic es cual es para manipular un servo por rs232 el cual trabajo en parte, pero estaba de lo mejor cuando me salio humito de la cabeza y lo borre de pura rabia por no poder dominar un simple led.........

bueno estuve conversando un poco por el MSN con el Amigo Chaly29 el cual fue muy agradable la conversacion pero no pudimos llegar a nada ya que el trabaja solo en ASM y yo en C....... pero por lo demas le explique un poco de lo que trata esto.........   lo cual es para controlar una cantidad inmensa de leds RGB para darles la aplicacion de iluminacion ambiental.....

por otra parte agradesco tu comentario amigo piclutor ya que es muy buena tu idea de repartir el trabajo entre los 3 TIMERS disponibles, pero tengo una duda.... que pasa si es que por casualidad llegase a desbordar 2 o los 3 timers al mismo tiempo???? como se comportaria el pic ante las 3 interrupciones pidiendo servicio........ bueno espero no se gran problema y el C se encargue de eso

Una vez mas muchs gracias por los comentarios

Desconectado lovando

  • PIC16
  • ***
  • Mensajes: 193
RE: generar pwm por software
« Respuesta #8 en: 24 de Enero de 2006, 14:55:00 »
Por eso te decia que deben estar desfasados, ahora, si usas los PIC18452, que hay en VICTRONICS, esos traen prioridades en la respuesta a interrupcion, de modo que puedes asignar importancia a un timer respecto de otro.(la programacion en C es absulutamente facil de traspasar de un 16 a un 18, total el compilador se encarga la parte maquina).....por ultimo, me parece que los timers por hadware no se detienen cuando hay una interrupcion, entonces eso significa que si se desbiorda el tmr0, el tmr1 sigue contando, eso te da bastante tiempo...ahora, como CCS redunda un poco en los codigos, quizá debieras contar muy bien los ciclos que genera el C al pasar al ASM, con eso ya debieras tener claro los ciclos que se ocupan entre cada atencion de interrupcion.

El codigo de microchip de pwm por software, es absolutamente copiable y adpatable a otras aplicaciones...si se trata de mas timers, solo habria que hacer la ruitna de ajuste....claro que en ASM la cosa es bastante dura, cierto?......bueno...cuentanos como te va......

Si tengo tiempo vere algo de como hacerlo en C......pero no aseguro nada

Chavela

Desconectado xootraoox

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 248
RE: generar pwm por software
« Respuesta #9 en: 24 de Enero de 2006, 15:11:00 »
muchas gracias piclutor..... tratare de ver si puedo obtener algo.....


NOTA: piclutor te he enviado un PV para hacerte una preguntilla espero lo puedas leer, Gracias

Desconectado mirazulado

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 142
RE: generar pwm por software
« Respuesta #10 en: 25 de Enero de 2006, 07:27:00 »
yo intentaria programar un timer para que desborde, por ejemplo, cada 100us y con la ayuda de variables y registro iria sumando desbordes hasta alcanzar el tiempo que cada pwm necesite.. seria algo asi:

#int_timer0
pwm1++;
if(pwm1==tiempoprender1) prederpwm1; pwm1=0;
if(pwm1==tiempoapagado1) apagarpwm1              
 
pwm2++;
if(pwm2==tiempoprender2) prederpwm2; pwm2=0;
if(pwm2==tiempoapagado2) apagarpwm2

pwm3++;
if(pwm3==tiempoprender3) prederpwm3; pwm3=0;
if(pwm3==tiempoapagado3) apagarpwm3

entonces si el pwm1 oscila a 50Hz con un duty de 50% es un ciclo de 20ms, 10ms encendido y 10ms apagado.. seteas tiempoprender1=200 (20ms si tengo una base de 100us) y tiempoapagado1=100 (10ms)... con esto arranca el PWM1 a los 20ms inmediatamente el contador se va a cero, cuando este llegue a los 100, o sea 10ms despues, el PWM1 se apaga, este continua apagado hasta los 200 (10ms despues) y asi continua el ciclo..

Con este metodo podes poner todos los PWM que quieras dependiendo de la velocidad del micro y la resolucion o tiempo de desborde del timer.. Este metodo seria una especie de multitarea..

Si no necesitas mas precision creo que seria mejor setar desborde cada 1ms, 2ms o hasta 5ms, para que el micro tenga mas tiempo de ocuparce de otras cosas sin perder desbordes..

Esto se me ocurrio recien asi que no esta probado y solo es para dar un idea !!!!!!!!!
 Saludos Mariano..

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 17764
    • MicroPIC
RE: generar pwm por software
« Respuesta #11 en: 26 de Enero de 2006, 00:02:00 »
Sí, creo que esta solución de mirazulado es la más adecuada, aunque aporto un par de matices:

1) Puesto que todos los PWM funcionarán a la misma frecuencia pero con distinto duty, todos los PWM se podrían encender a la vez, y luego sólo tener en cuenta el momento de apagado.

2) Para llegar hasta 9 distintos, quizás sea bueno manejar un array con los duty y hacer la comparación en un bucle, en lugar de tener que escribir 9 líneas if
Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ

Desconectado xootraoox

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 248
RE: generar pwm por software
« Respuesta #12 en: 26 de Enero de 2006, 01:23:00 »
ufffff......... bueno despues de tanto probar y probar...... Por fin he dado con una solucion bastante aceptable GiñoGiño .... resulta que buscando y buscando me encontre con un pdf de la microchip el cual aparte de estar bastante interesante para aplicaciones con motores DC, hay un diagrama de flujo (pag. 21) el cual trata de un pwm por soft.... la cosa es que lo vi y me puse a programarlo.... y en menos de 7 minutos ya estaba trabajando a la perfeccion lo que yo necesitaba, bueno despues de 10 minutos adaptando algunas cosillas ya tengo el pwm por soft de 100 pasos de intensidad osea de 0% a 100% con resolucion de un 1%, mas que ideal para lo que yo lo necesito.

adjunto el pdf asi como el soft que dio la conclusion de todo esto asi como tambien 10 kilos de agradecimientos para todos los que aportaron su granito de arena....

Enlace al PDF Mensionado



Enlace al codigo


Desconectado xootraoox

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 248
RE: generar pwm por software
« Respuesta #13 en: 26 de Enero de 2006, 03:02:00 »
bueno aqui coloco un par de fotitos del resultado de la aplicacion de los 3 PWM"s, espero les gusten......









Desconectado lovando

  • PIC16
  • ***
  • Mensajes: 193
RE: generar pwm por software
« Respuesta #14 en: 26 de Enero de 2006, 07:29:00 »
Que bueno, me alegro, se ve espectacular.
Te recomiendo amigo tambien postees tus resultados y codigos, puesto que todos tratamos de apoyarnos unos con otros, de modo que la ayuda es colaborativa. Si no es asi, este foro no tiene sentido.

Saludos