domingo, 15 de julio de 2012

MATERIAL:

1-L293D. 
driver para cambio de giro

1- Motor Bipolar 24v.

Motor bipolar 24v
1- PIC 16f84a.
1- Crystal 4Mhz.
2- Capacitores cerámicos de 22pf.
2- Resistores de 10k.
2- Push button.

Un motor paso a paso gira en función de una  secuencia de pulsos aplicados a sus devanados. El eje del motor gira un determinado ángulo por cada impulso de entrada. Los incrementos de rotación o pasos se miden en grados.

Motor Bipolar
De este motor salen cuatro hilos conectados al circuito del control, que realiza la función de cuatro interruptores electrónicos dobles, se pueden obtener las secuencias para que el motor gire de un lado o del otro.

L293D 
Vccs2 es el voltaje del motor, EN 1,2,3,4 poner a 1.

Circuito simulado en proteus:


Giro a la derecha 
Half step
Modo medio paso, el rotor avanza medio paso por cada pulso de exitacion. presenta como principal ventaja una mayor resolucion de paso.

control de un motor bipolar

Al presionar los dos pushbutton se activa este modo.

Giro a la izquierda 
Modo paso completo, avanza un paso por cada pulso de exitacion.


Al presionar el primer pushbutton se activa este modo.

Video de la simulación Proteus:


 


Programa en asm.

__CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC

        LIST P=16F84A

        INCLUDE<P16F84A.INC>

cblock

endc

status  equ  0x03

porta   equ  0x05

portb   equ  0x06

trisa   equ  0x85

trisb   equ  0x86

org 0

inicio

     bsf   status,5

     bsf   porta,0

     bsf   porta,1

     clrf  portb

     bcf   status,5

  

activar

     btfss porta,0

     goto  giro

     clrf  portb

     goto  fin

giro

     btfsc porta,1   

     goto  izq_z

     call  der

     goto  fin

izq_z

     call  izq

fin

     goto  activar

izq

     movlw b'00000101'

     movwf portb

     call  Retardo_20ms

     movlw b'00000110'

     movwf portb

     call  Retardo_20ms

     movlw b'00001010'

     movwf portb

     call  Retardo_20ms


     movlw b'00001001'

     movwf portb

     call  Retardo_20ms

     return

   

der

     movlw b'00001001'

     movwf portb

     call  Retardo_20ms

     movlw b'00001000'

     movwf portb

     call  Retardo_20ms

     movlw b'00001010'

     movwf portb

     call  Retardo_20ms

     movlw b'00000010'

     movwf portb

     call  Retardo_20ms

     movlw b'00000110'

     movwf portb

     call  Retardo_20ms

     movlw b'00000100'

     movwf portb

     call  Retardo_20ms

     movlw b'00000101'

     movwf portb

     call  Retardo_20ms

     movlw b'00000001'

     movwf portb

     call  Retardo_20ms

     return

     INCLUDE <retardos.inc>

    end

Para aumentar o disminuir el tiempo del disparo utilizar los tiempos de la librería de retardos.

DESCARGAR SIMULACION,  ASM Y HEX:



REFERENCIAS:  

  • Microcontrolador 16f84 desarrollo de proyectos, pag.  481-504
 

24 comentarios:

Anónimo dijo...

y como agrego las librerías de retardo

microcontroladores-ing-elec-rh dijo...

por lo regular si estan los archivos en la misma carpeta se compilan ambos, tambien si empiezas un proyecto wizard desde alli puedes agregar la libreria de retardo

Unknown dijo...

olle amigo y si quiero contar las vueltas del motor y ponerlas en un display o en una lcd como le puedo hacer

microcontroladores-ing-elec-rh dijo...

por lo regular se utiliza un sensor de efecto hall y se tendria que hacer un contador mediante el pic para que cuente las vueltas. en el blog hay dos ejemplos de contadores uno con pic otro con integrados.

Unknown dijo...

suban de nuevo el archivo porque el link ya esta caido :( porfa

microcontroladores-ing-elec-rh dijo...

ya cargue de nuevo el archivo ya puedes descargarlo

Unknown dijo...

y si quiero que gire "x" numero de vueltas... osea que quede en una posicion especifica lo que pretendo mover con el motor?

microcontroladores-ing-elec-rh dijo...

este programa al activar un 1 daria una vuelta, si dejas presionado el push sigue girando, la opcion mas facil, por ejemplo si quieres que de 3 vueltas al activar un 1 es copiar el codigo tres veces tambien tiene que ver con tu motor bipolar y cuantos grados por paso avanza.

Anónimo dijo...

Que tal apues me gustaria saber si esto me puede servir esoty utilizando igual un l293d para mover el motor paso a paso pero despues nesesito conectarlo al puerto paralelo no se si me puedan ayudar por favor!

microcontroladores-ing-elec-rh dijo...

bueno si quieres una comunicacion serial te recomiendo que utilices otro pic que tenga tx y rx, como el 18f887 (checar el libro de mikro C lo encuentras en este blog), si lo quieres realizar con 18f84a hay un ejemplo de comunicacion serial en el libro del 16f84 desarrollo de proyectos. No se si esta es tu idea o a menos que quieras solo madar pulsos por el puerto paralelo que al oprimir un boton de tu interfaz se active alguno de los pines del puerto paralelo, si este es el caso solo remplaza los pushbutton por los cables del puerto.

Unknown dijo...

Hola amigo, me puedes decir a donde van conectadas los resistores 1 y 2 del diagrama por favor, imagino yo que a +5v, y también quiero saber que aplicacion utilizaste para crear el programa para el micro.

Gracias por tu aporte me esta ayudando mucho

microcontroladores-ing-elec-rh dijo...

las resistencias van a la fuente con que alimentas el pic por lo regular es de 5v no se ve en el digrama porque la alimentacion del pic en proteus ya esta implicita, y el compilador utilizado fue mplab el cual puedes descargar de la pagina de microchip es gratuito

Unknown dijo...

Hola robot gracias por tu pronta respuesta y por tu ayuda.
Una cosa más, quiero corregir que en la imagen del diagrama del L293d tienes los +5v en el pin 8 que es alimentación del motor, y en la alimentación lógica del circuito tenes de 4,5-36v es decir están inversas según el datasheet, puede enredar a alguien.
De nuevo gracias por el aporte.

microcontroladores-ing-elec-rh dijo...

tienes razon lo habia revisado la imagen ya lo corregi lo unico comun es la tierra.

JOSE dijo...

como hago para variar la velocidad a un motor paso a paso 4 cables

Unknown dijo...

Como hago para k el motor gire al otro lado sin dejar apretado el push button

yan dijo...

buenas amigo con este programa y circuito, podria controlar dos motores dc, podria regular la velocidad y sentido de giro

Anónimo dijo...

cuando armo este circuito y le agrego un motor bipolar pm25s-048 no funciona. Sabes a que se debe? Agradecerìa tu respuesta por favor

Anónimo dijo...

Hola, saben como puedo hacer este arreglo a un motor de CD, por favor.
Esta muy bien tu programa, gracias por la aportación.

Unknown dijo...

suban de nuevo el link porfavor

Unknown dijo...

Algun programa en pic 16f84a que realice la funcion de dar 3 seg hacia la izquierda y automaticamente cambie a 5 o 10 segundos hacia la derecha
Se los agradeceria mucho si me lo proporcionaran

Unknown dijo...

Hola Robot,mi nombre es Carlos. No sé di todavía uses este blog, me ayudó mucho tu código y circuito. Pero tengo una duda, cuando lo simulo en Proteus arranca bien pero luego me aparece este error y no sé si sepas o alguien sepa de qué se trata...
-------------------------------------------------------------------------------
[PIC16 MEMORIA] PC = 0x005E. Intentará escribir posición de memoria sin aplicarse 0x006D con 0xF9 ignorado. [U1]

[MEMORIA PIC16] PC = 0x0060. Intentar leer la posición de memoria sin aplicarse 0x006D ignorada. [U1]
-----------------------------------------------------------------------------

Unknown dijo...

por que me marca que no esta las bibliotecas de retard

Anónimo dijo...

EXELENTE GRACIAS

SIGUEME EN FECEBOOK

MI TWITTER

Translate