Autor Tema: Ayuda con driver bipolar  (Leído 3428 veces)

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

Desconectado maggy

  • PIC16
  • ***
  • Mensajes: 152
Ayuda con driver bipolar
« en: 31 de Julio de 2009, 22:42:46 »
Hola que tal amigos,  les cuento que me construi unas controladoras del amigo Esteka y tenía mis tres 297 y los tres 298,  pero sucede que dañé un 297.   :D
El gran problema es que cuando compre dichos integrados aparentemente yo compré los últimos, por que ya nadie tiene ni los venden ni me dan esperanzas de que vallan a venir algun día.  entonces  como ya llevo un par de meses esperando mejor estoy considerando  hacerme un driver nuevo pero me gustaría hacerlo con pics,  ya que saque de unas impresoras los famosos SLA7024-6  y me gustaría experimntar con ellos,  lo  malo es que son sólo puente H con control de corriente incluido pero no traen el traslator (creo que así se escribe)  entones quisiera versi alguien me puede explicar como l hago para que el pic traduzca el step y dir para sacarlo los 4 bits para mover al motor.  El otro problema es que aca en mi ciudad lamentablemente solo encuentro 3 pics  el 12F675, el 16F648 y el 877, etonces agunos que andan circulando por la red no me quedan en los pics que puedo disponer.

Saludos, y gracias de antemano

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
Re: Ayuda con driver bipolar
« Respuesta #1 en: 01 de Agosto de 2009, 09:23:20 »
No se de donde eres, en Madrid se encuentran facilmente y por la red tambien, mira por ejemplo en Farnel y en Amidata.
Si buscas en google seguro encuentras quien te envie lo que quieras

Desconectado maggy

  • PIC16
  • ***
  • Mensajes: 152
Re: Ayuda con driver bipolar
« Respuesta #2 en: 01 de Agosto de 2009, 21:52:38 »
gracias por responder Algec, soy de Guatemala, y no tengo inconeniente en sacar los cuatro pulsos, pero tengo problemas en detectar el pulso de Step y hacer un paso para cada pulso.  Actualmente  estoy programando en Basic.

Estuve googleando  pero solo hay ejemplos para el 16f84  ese aca vale como US$ 20  por que dicen que es ya muy antiguo.  tambien hay para el pic pequeño 508 pero no se si es compatible con su hermanito mayor el 12 F675. 

gracias por tu pronta respuesta

Desconectado lagruya

  • PIC16
  • ***
  • Mensajes: 204
Re: Ayuda con driver bipolar
« Respuesta #3 en: 01 de Agosto de 2009, 22:19:48 »
hola maggy, para detectar el pulso de sptep, podes usar la interrupcion de RB0 y detectar cada flanco ascendente. Yo use un pic para mi driver, no para reemplazar el L297, pero para reducir el consumo al 50% de los motores, para eso escucho el la señal de clock que viene de la interface, a partir de cada flanco ascendente activo el contador interno, si pasa mas de 1 segundo pongo a 1 RA0, eso exita la base de un transistor que pone en paralelo a Vref una resistencia llevando Vref al 50%, funciona perfecto.
para tu caso me imagino que con solo detectar cada flanco ascendente de clock por interrupcion en RB0 es mas que suficiente.
ahora no estoy en en mi casa, a mas tardar el lunes subo el programa para que te des una idea, yo ya lo probe y funciona de diez.

saludos.

Desconectado maggy

  • PIC16
  • ***
  • Mensajes: 152
Re: Ayuda con driver bipolar
« Respuesta #4 en: 01 de Agosto de 2009, 23:02:22 »
hola que tal Lagruya, fijate que ese es mi problema precisamente,  la programación,  yo muy bien puedo encender un led y apagarlo y  hacer que raccione ante un interruptor,  pero eso de las interupciones me pone muy mal   :x gracias por tomarte la molestia, espero al lúnes para que me dés la idea.

Gracias y buen fin de semana.

Desconectado lagruya

  • PIC16
  • ***
  • Mensajes: 204
Re: Ayuda con driver bipolar
« Respuesta #5 en: 02 de Agosto de 2009, 22:45:43 »
maggy: fijate acá que subi el codigo del que te hablaba. cualquier duda perguntame.
http://www.todopic.com.ar/foros/index.php?topic=23274.msg222224#msg222224
« Última modificación: 03 de Agosto de 2009, 05:06:21 por lagruya »

Desconectado maggy

  • PIC16
  • ***
  • Mensajes: 152
Re: Ayuda con driver bipolar
« Respuesta #6 en: 03 de Agosto de 2009, 20:00:01 »
hola Lagruya,  yo creo que te vas a enojar conmigo,  pero ese programa no se adapta a lo que yo quiero, a pesar de que es muy buena tu voluntad, te voy contar:
necesito  controlar mis motores con el pic 16F648 o el 12F675, además estoy programando en basic,  ya que ese el unico que manejo, y estos bichos son los unicos que consigo aca.

Hasta ahora lo que he hecho es con condicionantes a las entradas, si tal entrada =1 entonces que el motor se mueva y lo hace, pero quiero ver como se hace la parte de las pulsaciones del Step.  y es que lleva interrupts y ahi me cuesta un poquito.

Yo se que no te puedo pedir que me hagas la tarea pero que me des una idea de como adapatarlo a lo que se y lo que tengo a la mano,
muchas gracias anticipadas

Desconectado lagruya

  • PIC16
  • ***
  • Mensajes: 204
Re: Ayuda con driver bipolar
« Respuesta #7 en: 04 de Agosto de 2009, 01:38:11 »
no me enojo para nada, el codigo que subi te lo mencione porque es un ejemplo que se relaciona con lo que queres hacer y que funciona, basicamente como detectar un pulso ascendente de la señal de clock por interrupcion en RB0, yo lo implemente en un 16f84, pero por lo que estuve viendo (aclaro que mi experiencia en pics es minima, esta es la primera vez que uso interrupciones) el 16F648 tiene tambien una interrupcion en RB0 de las mismas caracteristicas.
yo venia haciendo algunas cositas con la entrenadora que me arme y me decidi usar C (ccs) por primera vez para este proyecto  por la simplicidad que presentaba comparado con assembler, con basic no hice nunca nada.

si te fijas en el programa se ve como usar las interrupciones, la interrupcion es como una sub-rutina que se activa por una causa interna o externa (en este caso), solo hay que activarla (decirle al pic que se va a utilizar) y determinar si es por flanco ascendente o descendente.
En tu caso ademas de detectar el flanco, tenes que generar la secuencia de pasos (full step o halfstep) tendras una secuencia de cuatro pasos u ocho segun el caso, ademas tener en cuenta el sentido de giro (se me ocurre que podes usar la interrupcion por cambio de estado del puerto b RB4-7)
pero lo que es mas importante es el chopeado, para esto me parece que el 12f675 se queda corto, pero el 16f648 tiene comparador, talves se pueda usar para comparar Vref con la caida en Rsense y generar los pulsos del enable para los puentes H del driver.

yo arrancaria de apoco y por poco que sea lo que tengas lo iria posteando, si lo haces en basic, habriria tambien un hilo en el sub-foro de lenguaje basic para pics de todo pic, detallando lo mejor posible el objetivo del codigo. (eso fue lo que hice yo, pero en el sub foro de C, y teniendo muy pocos conocimientos de C y nada de C para pics). no es poco lo que te planteas hacer pero no creo que sea imposible.

acá te dejo el codigo para que detecte por interrupcion flancos ascendentes y por un segundo ponga a 0 RA0


Código: CSS
  1. #include <16F648.h>                             //pic a utilizar
  2. #fuses XT,NOWDT,NOPROTECT               //fusibles (cristal, sin watch dog, sin proteccion)
  3. #use delay(clock=4000000)               //velocidad del cristal
  4. #use fast_io(A)                                 //el compilador no se asegura que los puertos esten asignados
  5.                                                                 //correctamente como entradas o salidas segun corresponda, esto evita
  6.                                                                 //codigo extra, pero se tiene que configurar correctamente los registros
  7.                                                                 //tris segun el uso que se le de a los puertos.
  8. #use fast_io(B)
  9.  
  10.  
  11. #INT_EXT                                                                //interrupcion externa en RB0 (codigo que se ejecutara por cada pulso ascendente)
  12. void interrupcionRB0() {
  13.         output_a(0b00000);                                      //pongo a cero el puerto A
  14.         delay_ms(1000)                                          //por cada interrupcion en RB0 RA0 se apaga 1 segundo
  15.         }
  16.  
  17.  
  18. void main () {                                          // programa principal
  19.  
  20.         delay_ms(333);                                  //pausa mientras se estabiliza el pic
  21.         disable_interrupts(global);             //desabilito todas las instrucciones que voy a usar
  22.         disable_interrupts(int_ext);
  23.         delay_ms(333);                                  //estabilizo y pongo a "cero" el pic
  24.  
  25. ///////////////inicializo las partes a usar del pic///////////////////////
  26.  
  27.         set_tris_a(0b00000);                                            //todo el puero a como salidas
  28.         output_a(0b00000);                                                      //pongo a cero todo el puerto A
  29.         set_tris_b(0b00000001);                                         //selecciono RB0 como entrada
  30.        
  31.         ext_int_edge(0,L_TO_H);                                         //configuro para que detecte flancos ascendentes
  32.        
  33.         enable_interrupts(int_ext);                                     //habilito la interrupcion externa
  34.         enable_interrupts(global);                                      //habilito el uso de interrupciones
  35.        
  36.  
  37.         do {
  38.        
  39.                
  40.                 output_a(0b00001);                      //pongo a 1 RA0
  41.  
  42.                 }
  43.                        
  44.  
  45.         } while (TRUE);                                         //bucle infinito
  46.         }

espero te sirva de algo lo que te comento.
saludos.

Desconectado maggy

  • PIC16
  • ***
  • Mensajes: 152
Re: Ayuda con driver bipolar
« Respuesta #8 en: 05 de Agosto de 2009, 22:32:46 »
gracias Lagruya, intentaré hecharle un vistazo a eso de las interrupts y luego postearé lo que tengo te agradezco el tiempo que te has tomado.
Saludos