TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: lovando en 04 de Julio de 2004, 23:05:00

Título: 16F84-Cómo crear pulsos PWM cuyo ancho varie segun un cursor??
Publicado por: lovando en 04 de Julio de 2004, 23:05:00
hola

La idea es que use un cursor para aumentar o disminuiir el ancho del pulso PWM, el cual se conecta a la entrada de un comparador .....obviamenta la entrada PWM seria de referencia..

Osea, dos pines del 16F84, uno para aumentar el ancho del pulso, y otro pin para disminuirlo.....asi el voltaje a la entrada del comparador varia segun esta indicacion.....

Cómo se podria implementar la parte software.???....necesito asesoria...mi primera idea seria decrementar/incrementar un contador que actue sobre la generacion del pulso.........habría que testar cual pin se activa o desactiva (alto o bajo), y de esa manera decrementar/incrementar el contador???

Favor si me pueden ayudar estaria muy agradecido....


NOTA: no me digan que me cambie al 16F268 o similar, menos al 16F87X, pues no es la idea.....


Mil gracias, y hasta la vista....
Título: RE: 16F84-Cómo crear pulsos PWM cuyo ancho varie segun un cursor??
Publicado por: huro en 05 de Julio de 2004, 09:58:00
 
   Hola pic-chi:    

      Si pones el esquematico, porque quiero tener alguna de lo que tratas de hacer, te puedo ayudar a desarrollar el algoritmo.



Título: RE: 16F84-Cómo crear pulsos PWM cuyo ancho varie segun un cursor??
Publicado por: lovando en 05 de Julio de 2004, 21:44:00
Escrito originalmente por huro

   Hola pic-chi:    

      Si pones el esquematico, porque quiero tener alguna de lo que tratas de hacer, te puedo ayudar a desarrollar el algoritmo.






Bueno..creo que tendremos que "incarle al diente" no mas....la investigacion comienza.....por ahora estoy leyendo el app 654a, trae tres opciones pwm por software......al parecer el desafio no es nada facil.....sin embargo lo de los contadores y/o desvordamiento del tmr0 parecen buenas opciones....el problema me parce mas complicado en el lado del seteo del ancho del pulso....las teclas o cursor...

Podria ser que:

1.- Mantener el cursor up o down presionado, de modo que genere una interrupcion que provoque incremento/decremento del contador. Al momento de soltar el cursor, se activaría el nuevo valor pwm....pero esto tiene una contra==> en la medida que mantengo presionado el cursor el ancho del pulso deberia variar simultaneamente.....(necesito asesoria)

2.- Pulsar o soltar el cursor, por cada cambio el contador se modifica tomando de inmediato un nuevo valor apare el ancho del pulso.....


Seguro habrá otras opciones, solo queda a la imaginacion....aunque 2 cabezas (dicen) piensan mas que 1....


Ya pogh muchachos, no se queden..apoyen por fa....


NOTA: entradas de cursor podrian ser A0 y A1, con sus respectivas pull-up, y el cursor manda a tierra la entrada activandose la interrupcion....o lo que sea....ejejjejejje


Bye
Título: RE: 16F84-Cómo crear pulsos PWM cuyo ancho varie segun un cursor??
Publicado por: huro en 06 de Julio de 2004, 13:17:00

    Como te dije mas arriba pic-chi, si pones el esquematico o un avance del mismo, se me ocurriría de que otra manera implementarlo, no tengo idea de lo que se quiere hacer. La siguiente pregunta es como vas ha activar las interrupciones de los timer exteriormente, si los vas a conectar a A0 y a A1.
  NOTA.-    Donde puedo encontrar el app 654a.
Título: RE: 16F84-Cómo crear pulsos PWM cuyo ancho varie segun un cursor??
Publicado por: lovando en 06 de Julio de 2004, 14:37:00
Hola Huro, gracias or tu apoyo...

Bueno, aunque A0 y A1  nos son entradas de interrupcion directas, se podria usar el B0 o cualquiera de las B4-B7..pues solo una aproximacion lo que estoy ahciedno.....

Si son las A0 y A1 la eleccion,habria que testear continuamente su estado......el esquematico lo pongo apenas lo haga en proteus..esperame unos dias, que ahora poco tiempo tengo....el app lo obtienes de la pagina de microchip.....

gracias por tu apoyo..de paso, si quiers podriamos contactarnos por msn....que te parece????


saludos desde Chile

NOTA: pronto comienza la copa américa, que gane el mejol....

Bye
Título: RE: 16F84-Cómo crear pulsos PWM cuyo ancho varie segun un cursor??
Publicado por: Chile_irc en 07 de Julio de 2004, 07:32:00
Hola Colega veo que te estas metiendo bien a fondo en la cosita esta jajaj
A ver vi algo por ahi que no c si sera lo mismo

lo que hacia era esto:

el circuito en si encendia y apagaba un led la gracia que vi en el
era que con dos interruptores uno incrementaba el tiempo de apabgado y con el otro el tiempo de encendido, viendo esto, si le agregamos dos interruptores mas podriamos disminuir el apagado y con el otro el encendido, o con uno agrandar un estado con el otro achicar elijiendo ya sea el alto o el bajo. no c si me explico.
Esto lo hacia con una rutina de tiempo y cuando se ativaba el interruptor incrementaba o decrementaba un valor con esto prolongaba o acortaba los tiempos de pulso.


si es algo asi alomejor taria medio solucionado el problema.
Saludos

Jorge Lezana
Título: RE: 16F84-Cómo crear pulsos PWM cuyo ancho varie segun un cursor??
Publicado por: lovando en 07 de Julio de 2004, 08:16:00
Jorge

Podrias indicar la url donde esta ese circuito o algun archivo...paleteese please.....

Gracias..Lucio
Título: RE: 16F84-Cómo crear pulsos PWM cuyo ancho varie segun un cursor??
Publicado por: Chile_irc en 07 de Julio de 2004, 10:28:00
Voy a buscarla en un rato de tiempo dentro de mis mil link jaja  y pillandola te digo o te mando el codigo op en asm

Bye
Título: RE: 16F84-Cómo crear pulsos PWM cuyo ancho varie segun un cursor??
Publicado por: huro en 07 de Julio de 2004, 11:21:00


    Bien pic-chi, espero tu esquematico, y con respecto a tu ofrecimiento de comunicarnos sería mejor que me envíes mensajes a mi e-mail, es el siguiente: huro79@hotmail.com  ,y te respondo de inmediato apenas esté disponible, tambien esperemos que nuestro amigo Chile-irc nos apoye con algunas ideas y por supuesto el circuito que encontró, espero nos sirva sus rutinas para aplicarlas en lo que se quiere hacer.

    Y con respecto a la copa américa, pues que gane el mejor!!!!      pero parece que mi pais empezó mal......       nooooo.................




Título: RE: 16F84-Cómo crear pulsos PWM cuyo ancho varie segun un cursor??
Publicado por: Amarice_BA en 08 de Julio de 2004, 10:38:00
Qué coincidencia. Estoy haciendo un proyecto y tengo que hacer lo mismo que tú. O al menos eso creo.

Si no me equivoco mi PWM va al Multiplicador AD633. Y también tengo que aumentar o disminuir los pulsos con un cursor o algo. Todo esto forma parte de un balastro de potencia.

El caso es que lo tengo que hacer de la manera más barata, y por eso el 16F84 ¿no?.

En media hora he quedado con el responsable de llevar mi proyecto y le preguntaré todo lo que tengo que hacer.

Seguro que necesitaré vuestra ayuda y quisiera poder ponerme en contacto con vosotros.

Gracias.
Título: RE: 16F84-Cómo crear pulsos PWM cuyo ancho varie segun un cursor??
Publicado por: lovando en 08 de Julio de 2004, 14:37:00
Que bueno...asi pensamos mejol...bienvenido....ayer charlamos con jorge, y quedamos en que se pueden establecer, por ejemplo, cuatro cursores....

caso N°1:

2 cursores (up/down) para cambios leves del ancho del pulso PWM, y se puede generar dianámicamente segun el tiempo que se tenga presioando el cursor. Esto significa que el contador/timer debe modificarse a razon de 1 por cada 2 segundos, por ejemplo...(puede ser cualquier combinacion segun el diseño y lo que se quiera hacer)...Si fuera este el caso, se debe contar el tiempo que ha sido presionado el cursor y de esa manera generar los cambios en el timer..pero podriamos mantener la presion por 10 segundos sin ver cambios, cierto?...bueno, por eso se puede establecer que el timer cambie cada 1 segundo, o 2 o 3, como sea...incluso milesimas de segundo (bueno eso queda a criterio de cada cual segun su diseño....) Asi, cuando se cumpla el tiempo minimo, se produce el cambio en el timer con el consecuente cambio en el pulso.......

Caso N° 2

2 cursores (up/down) para cambios mayores de ancho del pulso PWM. En este caso, el cambio puede producirse a razon de 10 por cada pulsacion (no depende del tiempo pulsado, solo debe haber cambio de estado). Esto sirve cuando se requiere cambios rapidos del ancho del pulso.....



Estas variaciones son una aproximacion rapida, sin mucho analisis de los cambios requeridos en los timer...pero sin embargo sirven para dar luces de como puede manejarse el tema software...

Ya estoy trabajando el el algoritmo y los calculos......espero uds apoyen con ideas sobre el algoritmo......


que hoy gane chile  al menos 1-0...gol del "chapulin chama-gol"


Bye
Título: RE: 16F84-Cómo crear pulsos PWM cuyo ancho varie segun un cursor??
Publicado por: Amarice_BA en 09 de Julio de 2004, 04:42:00
Vale, ya sé lo que tengo que hacer. No es lo mismo pero es parecido.

Mi PWM tiene que entregar niveles de tensión, no son pulsos, es continua. Y lo que yo le indico por medio del cursor (arriba o abajo) es si tiene que dar más o menos tensión.

Según me ha dicho esto sólo lo puedo hacer con un Pic que tenga convertidor A/D, o sea que he pensado en el 16F873.

Y no sé si esto ya es demasiado nivel... podría pone un led de 8"s que me indicase en que nivel de tensión estoy...

La verdad es que no tengo ni idea, por eso espero vuestros consejos.

Gracias.
Título: RE: 16F84-Cómo crear pulsos PWM cuyo ancho varie segun un cursor??
Publicado por: Nocturno en 09 de Julio de 2004, 04:49:00
Mira esta nota de Microchip, te explica cómo obtener una señal analógica desde un pulso PWM o usando 8 salidas digitales.

http://ww1.microchip.com/downloads/en/AppNotes/00655a.pdf

Creo que es lo que necesitas.
Título: RE: 16F84-Cómo crear pulsos PWM cuyo ancho varie segun un cursor??
Publicado por: lovando en 09 de Julio de 2004, 08:07:00
Nocturno66, gracias por tu link

Este app esta super bueno, hace dias que lo vengo leyendo. Otra app note es la "Pic micro mid-range manual reference" donde hay ejemplos pwm y como calcular frecuencias y definicion de bit...se puede consultra las sgtes appnotes


-538c
-539
-654
-655a
-an0150 de zilog, =mente buena
-T. Scott Dattalo tambien tiene unos codigos fuentes interesantes
-Parallax, analogo y digital, tambien bueno
-33023a, Pic micro mid-range reference = tiene calculos pwm
-16F628, en seccion pwm tambien presente buena teoria

Todos estos estoy revisando...para mi, en estos momentos la cuestion es cómo saber que frecuencia pwm es la que necesito???


Chaolin....
Título: RE: 16F84-Cómo crear pulsos PWM cuyo ancho varie segun un cursor??
Publicado por: huro en 10 de Julio de 2004, 14:18:00

    Que te parece lo siguiente, trabajando con un cristal de 4Mhz y por lo tanto usando un ciclo de instrucción de 1uS, y con el timer corriendo sin preescala, usando interrupción del timer tendríamos una frecuencia aproximadamente de 3.9Khz, en este caso tendríamos una resolución de un paso por cada uS. Aconsejaría trabajar con los pulsadores para incrementar y decremnetar cada vez que se pulse para variar los contadores que afectarán al ciclo de tarea.
Título: RE: 16F84-Cómo crear pulsos PWM cuyo ancho varie segun un cursor??
Publicado por: lovando en 10 de Julio de 2004, 20:39:00
Huro, exactamente....

El tema es que, necesitas esos 3,9 Khz realmente???.....aunque el tmr0 da la libertad de ejecutar codigo independiente de su incremento/decremento, = puede ser que necesite menos e 3,9 Khz, y en eso estoy, analizando cuanto es lo que en realidad necesito....en todo caso, estamos uper bien con el tema codigo, apenas tenga una demo te aviso.....

Chaoilin
Título: RE: 16F84-Cómo crear pulsos PWM cuyo ancho varie segun un cursor??
Publicado por: Chile_irc en 12 de Julio de 2004, 21:59:00
Hola denuevo, compañero aun no he pillado el link pero
estoy moviendo un servo motor de esos de radiocontrol
que usa PWM para funcionar y ya estoy usando rutinas de prueba para posisionarlo en 0° 90° y 180° con dos pulsadoes cuando se encienda el circuito el servo estara en 90° con un boton ira a 0° y con el otro a 180°
el servo para ello nesesita pulsos bien definidos por ejemplo
a 50HZ un pulso de 0,2 milisegundos va a 180° con 1.5 mili a 90° y con 2,2mili a 0° usando 6 rutinas (tanto para el pulso alto como para el bajo) la idea es poder llegar a incrementar el pulso con otro interruptor para asi poder controlar el recorrido total del servo paso a paso asi ke teniendo cualquier avance estaremos posteando aqui lo que pasa..  Saludos compañero.

bye bye.
Título: RE: 16F84-Cómo crear pulsos PWM cuyo ancho varie segun un cursor??
Publicado por: huro en 13 de Julio de 2004, 12:05:00

    Hola pic-chi, la razón por la que te propuse las condiciones anteriores es que es mas fácil hacer el algoritmo con esas condiciones y casi la mayoría de cargas se manejan de esa manera, pero en realidad para desarrollar un progama embebido para microcontrolador necesitamos hacer un modelamiento matematico de la carga, y de esta manera escogeriamos los parametros adecuados para realizar el programa. Recuerdo que hace tiempo realicé uno de estos algoritmos en assembler, voy a ver si lo encuentro, de lo contrario lo vuelvo a construir y apenas lo tenga te comunico.  

     
Título: RE: 16F84-Cómo crear pulsos PWM cuyo ancho varie segun un cursor??
Publicado por: lovando en 20 de Julio de 2004, 22:41:00
Huro, siento aun no entregarte el esquema pues aun estoy modelando mi sistema......lo que si puedo decir, es que 3,9Khz es mucha frecuancia para lo que quiero...y por qué?

Pues porque se trata de lo sgte:

un conversor A/D de 8 bits con salida serial conectado al pic, a su vex el pic debe desplegar el valor corregido de la conbversion en un display 7 segmentos de 4 digitos......

Osea, estoy ocupando en la pura rutina matematica mas de 500 us  (lectura del conversor, aplico calculo matematico de correccion, luego paso a BCD)...osea, que el timer0 corriendo sin preescaler me provoca mucho problema y practicamente hace impracticable mi proyecto....asi...creo que usare un preescaler de 16......ya te cuento mas......

a proposito.....se requiere al menos 3 esquemas distintos de generacion pwm, uno para pequeños porcentajes de duty cicle, uno para valores medios, y otro para valores muy cercanos al overflow del tmr0......y esto se hace critico cuando el timer anda a 1us........en el caso que te comento de un preescaler de 16 la cosa cambia pues queda bastante tiempo mas para calcular los respectivos tiempos de duty cicle......lo que si hay que hacer, es que una vez que el sistema parte, tener el tmr0 cargado con un valor preestablecido que no afecte la aplciacion o al menos la haga funcionar normal....recordemos ue al escribir en el tmr0, su incremento se inhibe en los sgtes 2 ciclos...asi que hay que restar 2 a avalor calculado del tmr0...

Cuentame como has ido en tu algoritmo....

Un saludo
Título: RE: 16F84-Cómo crear pulsos PWM cuyo ancho varie segun un cursor??
Publicado por: Chile_irc en 24 de Julio de 2004, 10:39:00
Hola colega ya estas metido con display.  interesante..
jaja lo que es yo toy mas abajo aun aunque no tengo claro para que es ese circuito o que se deve visualizar en display..

Bueno con respecto al famoso servo que te comente con modulacion de pulsos lo termine
y te dejo este link para ke veas el programa en ASM
esta todo explicado ahi de como funciona, esta probado lo arme y todo y controla el recorrido de un servo usando pwm

son 3 rutinas basicas una para posicionar en 0° otra en 90° y otra en 180°  estas rutinas pueden ser variables para cambiar de  Grados la posicion del servo, oviamente es el primer paso. te lo dejo por si te sirve alguna cosa de el.

Saludos..


http://www.aeromodelistasdechile.cl/otros/Futaba.txt

Título: RE: 16F84-Cómo crear pulsos PWM cuyo ancho varie segun un cursor??
Publicado por: lovando en 24 de Julio de 2004, 12:24:00
Bueno, el pwm genera voltajes deseado para la salida del tip142 (puede ser entre 5 y 25 volt).....el comparador compara este pwm con el voltaje en la resistencia de .1 ohm....

cuando este voltaje es superior al pwm, el comparador va a tierra y el diodo conduce probocando que el TIP142 se corte y no conduzca......

Esa es la idea, por ahora, el LCD despliega los valores medidos mediante en ADC0832.....

Tres cursores, uno para seleccionar rango de avance (1 bit o 10 bits de incremento para el tmr0)...y los otro dos ejecutan el incremento/decremento del duty)


Estos valores del TMR0 controlan el pwm......(el tmr0 debe cargarse en conplemento a 2 para el pulso bajo y normal para el alto)


Eso es....
Título: RE: 16F84-Cómo crear pulsos PWM cuyo ancho varie segun un cursor??
Publicado por: huro en 26 de Julio de 2004, 15:04:00

  Hola pic-chi:   He estado viendo tu esquemático y me parece interesante la solución que le haces al LCD, usar sólo 3 pines del micro para controlarlo, tambien veo que quieres controlar el motor por lazo cerrado usando CAD serial. Bueno, vamos por partes, lo primero que tenemos que hacer son las rutinas para controlar el LCD y el CAD serial, y lo segundo es que me des los parametros encontrados de tu motor para poder hacer el algoritmo del PWM y controlar tu motor en forma adecuada.
Título: RE: 16F84-Cómo crear pulsos PWM cuyo ancho varie segun un cursor??
Publicado por: lovando en 26 de Julio de 2004, 21:11:00
Hola Huro

Le verdad es que no controlo un motor....por ahora deseo que el TIP142 se corte o sature segun al señal PWM, son solo 2 estados.....lo unico que cambia es el voltaje que permite pasar el TIP142, desde 0 a 25 volts (regulado por el transistor de proteccion)....

La señal es sensada en el extremo de abajo usando un LM358  y luego es comparada con la señal PWM, la cual varia de 0 a 255 pasos.....estoy pensando hacerlo con un preescaler de 16.....asi tengo tiempo para la rutina del ADC, del calculo matematico de la medicion, y del despliegue en el LCD de los resultados


No te he visto en el msn


Saludos
Título: RE: 16F84-Cómo crear pulsos PWM cuyo ancho varie segun un cursor??
Publicado por: huro en 27 de Julio de 2004, 11:00:00

   Me parece que no hay problema si usamos cualquier rango para controlar la carga, aqui vamos a darle prioridad al PWM, por lo tanto a esa parte lo hacemos trabajar por interrupción, las demas rutinas, la del LCD, el CAD serial, el teclado, retardos y los que vengan pueden trabajar en forma lineal. Y para no tener problemas en el control de la carga, porque en esta parte no debe haber errores, en el programa lineal, cada vez que se cambie de banco desactivamos la interrupción, de esta manera evitamos que se pierda la linealidad del programa cuando ocurra la interrrupción.


Título: RE: 16F84-Cómo crear pulsos PWM cuyo ancho varie segun un cursor??
Publicado por: lovando en 27 de Julio de 2004, 22:56:00
Hola Huro

Me parece atinada tu apreciacion......

Debo decirte que aunque PWM s nuestro objetivo.....nod ebo dejar de aldo las otras cosas, pues estan incluidas en mi proyecto y afectan el diseño del PWM....


Pero de todas maneras, usando un factor de 16 permite olgadamente manejar los tiempos dejados por el TMR0 para ejecutar las otras rutinas...

Ya estoy casi terminnado la parte de recuperacion de datos desde el ADC0832...pronto la pingo en el post.....toda vez la tenga probada en mi protoboard   ( o proteus)

Te pido por favor leas el App note N°: 654....es en ese codigo en cual me estoy basando, usa dos esquemas de generacion pwm....uno para pulsos intermedios (29 pasos < duty < 228 pasos) y otro para pulsos cortos , de hasta 29 pasos de duty tanto en HIGH como en LOW..

Es muy inetresante la forma que lo logra....

Estamos en contacto.....y espero tus opiniones respecto de ese paper

Saludos desde Chile