Autor Tema: Motor paso a paso  (Leído 3253 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado ajkite

  • PIC10
  • *
  • Mensajes: 23
Motor paso a paso
« en: 13 de Marzo de 2006, 10:14:00 »
Hola, queria saber si me podeis echar una mano en el control de un motor paso a paso bipolar, el cual lo e cogido de una impresora

Este motor lo quiero controlar mediante un pic 16F876 y un driver L293D

Gracias

Desconectado poi5on

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 127
RE: Motor paso a paso
« Respuesta #1 en: 13 de Marzo de 2006, 10:29:00 »
hola amigo, y el codigo? q lenguaje vas usar? q problema tienes?

Salu2

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Motor paso a paso
« Respuesta #2 en: 14 de Marzo de 2006, 06:03:00 »
Escrito originalmente por poi5on
hola amigo, y el codigo? q lenguaje vas usar? q problema tienes?

Salu2


Jeje, poi5on al parecer nuestro amigo ajkite no quiere que lo guien sino más bien que le den la solución llave en mano.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado ajkite

  • PIC10
  • *
  • Mensajes: 23
RE: Motor paso a paso
« Respuesta #3 en: 15 de Marzo de 2006, 10:37:00 »
Perdon x la tardanza

utilizo el MPLAB y el programa esta en el archivo que adjunto, utilizo 3 ldr, uno en un lado, otra en otro lado y otra en medio
Lo que ago es comparar las de los extremos y la que tngo mayor luz se mueve asia esa direcion y despue la comparo con la del medio y cuando tenga la misma luz se para

Mi problema es que el motor solo se me mueve un paso pequeño y se hay se queda cogido, no se si sera xq no le mand suficiente potencia

TB le tengo conectado unos led para q me indique para que posicion se me mueve, pero no se enciende ninguno, solamente se me encendieron la primera vez q los conecte y creo (no estoy seguro)q x error lo conecte el circuito a12v pero el pic funciona correctamente lo e comprobado con otro progama

gracias

Desconectado ajkite

  • PIC10
  • *
  • Mensajes: 23
RE: Motor paso a paso
« Respuesta #4 en: 15 de Marzo de 2006, 10:38:00 »
no puedo adjuntar el archivo, como lo ago????

Desconectado ajkite

  • PIC10
  • *
  • Mensajes: 23
RE: Motor paso a paso
« Respuesta #5 en: 15 de Marzo de 2006, 11:18:00 »
BUENO PUES COMO NO PUEDO ADJUNTAR EL ARCHIVO DEL PROGRAMA AY LO LLEVAIS  

LIST P=16f876
         include "P16f876.INC"

         RADIX HEX
         WREG EQU 0x00
         Z          EQU     0x02
         TEMP1      EQU     0x20 ; Registros de propósito general.
         TEMP2      EQU     0x21
         CONTA0     EQU     0x22
         VALORA0    EQU     0x23 ; Valor de la conversion de los sensores
         VALORA1    EQU     0x24
         VALORA2    EQU     0x25
         CONTADE    EQU     0x26 ; Contador para limitar el giro
         CONTAIZ    EQU     0x27


;*****************************************************************
            org 0x00
         
            goto inicio
         
            org 0x05
         
inicio:     clrf INTCON          ;Se anulan las interrupciones.
            movlw 0X04
            movwf CONTADE        ; Limita el giro a la derecha.
            movwf CONTAIZ        ; limita el giro a la izquierda.
         
            bcf STATUS,RP1
            bsf STATUS,RP0       ; Seleccionamos el banco 1
            movlw b"00000000"
            movwf TRISB          ; Puerto B de salida
         
            movlw b"00000000"   ; Puerto C de salida
            movwf TRISC
         
            movlw b"00000111"   ; RA0,RA1 y RA2 como entradas
            movwf TRISA
         
         
            movlw b"10000000"   ; Configuramos entradas analogicas
            movwf ADCON1        ; Resultado justificado en ADRESH.
            bcf STATUS,RP0      ; Seleccionamos banco1
         
            clrf PORTA          ; PORTA <- 0
            clrf PORTC
           
            movlw b"00110101"   ; Secuencia de inicializacion del motor.
            movwf PORTB         ; Sincroniza las bobinas con una secuencia inicial
            call TEMPO          ; para evitar un comportamiento anómalo la
                                ; primera  que recibe una secuencia de giro
           
            movlw b"00110101"
            movwf PORTB
            call TEMPO
         
            movlw b"00110101"
            movwf PORTB
            call TEMPO
         
            movlw b"00110101"
            movwf PORTB
         
         
            movlw b"00000000"; Se selecciona RA0 para realizar la conversion
            movwf ADCON0
            bsf ADCON0,0     ; Activa el convertidor A/D
         
convertir:  call espera20u
            bsf ADCON0,2     ; Inicia la conversion
espera:     btfsc ADCON0,2   ; Espera a que termine la conversion
            goto espera
         
            bsf STATUS,RP0
            movf ADRESL,0
            bcf STATUS,RP0
            movwf VALORA0
            movf ADRESH,0
            sublw b"00000000" ; Si ADRESH es 0x00, VALORA0=ADRESL
            btfsc STATUS,Z
            goto convertir2
         
            movlw b"11111111"  ; Si ADRESH <> 0x00, VALORA0=0xFF
            movwf VALORA0  
convertir2: bsf ADCON0,3      ; Seleccionamos RA1
            call espera20u
            bsf ADCON0,2      ; Inicia la conversion
espera2:    btfsc ADCON0,2    ; Espera a que termine la conversion
            goto espera2
         
            bsf STATUS,RP0;
            movf ADRESL,0
            bcf STATUS,RP0
            movwf VALORA1
            movf ADRESH,0
            sublw b"00000000" ;Si ADRESH es 0x00, VALORA1=ADRESL
            btfsc STATUS,Z
            goto convertir3
         
            movlw b"11111111"
            movwf VALORA1      ; Si ADRESH <> 0x00, VALORA0=0xFF
                 
convertir3: bcf ADCON0,3 ;
            bsf ADCON0,4      ; Seleccionamos RA2
            call espera20u
            bsf ADCON0,2      ; Inicia la conversion
   espera3: btfsc ADCON0,2    ; Espera a que termine la conversion
            goto espera3
         
            bsf STATUS,RP0;
            movf ADRESL,0
            bcf STATUS,RP0
            movwf VALORA2
            movf ADRESH,0
            sublw b"00000000" ;Si ADRESH es 0x00, VALORA1=ADRESL
            btfsc STATUS,Z
            goto comparar
         
            movlw b"11111111"
            movwf VALORA2     ; Si ADRESH <> 0x00, VALORA0=0xFF
         
         
comparar:   movf VALORA0,0
            subwf VALORA2,0   ; Comparamos los extremos
            btfsc STATUS,Z
            goto configura    ;Si los extremos son iguales, vuelve a coger valores
         
            btfss STATUS,0    ; Vemos cual es el que ha detectado mas luz
            goto compara2     ; RA2 Detecta mas luz
         
compara1:   movf VALORA0,0    ; RA0 Detecta mas luz
           subwf VALORA1,0    ; Restamos RA0 - RA1 (Central y extremo con mayor luz)
           btfsc STATUS,0
         
           goto derecha       ; RA0 es el sensor que detecta mas luz
           goto configura     ; RA1 es el central y es el que tiene mas luz
compara2:  movf VALORA2,0
           subwf VALORA1,0    ; Restamos RA2 - RA1 (Central y extremo con mayor luz)          
           btfsc STATUS,0;
         
           goto izquierda     ; RA2 es el sensor que detecta mas luz

configura: movlw b"00000000"  ; Se selecciona RA0 para realizar la conversion
           movwf ADCON0
           bsf ADCON0,0       ; Activa el convertidor A/D
           goto convertir
         
derecha:  decfsz CONTADE,1    ; Comprobamos que no ha llegado al tope
          goto derechaok      ; Si llega al tope que no gire
          incf CONTADE,1      ; y vuelva a tomar valores
          movlw 0x04
          movwf PORTC
          goto configura
derechaok: movlw 0x00
          movwf PORTC
          incf CONTAIZ,1
          movlw b"00110101"    ; primer paso
          movwf PORTB
          call TEMPO           ;Temporización antes de realizar el siguiente paso
         
          movlw b"00110110"    ;segundo paso.
          movwf PORTB
          call TEMPO
         
          movlw b"00111010"    ;tercer paso.
          movwf PORTB
          call TEMPO
         
          movlw b"00111001"    ;cuarto y último paso
          movwf PORTB
          call TEMPO
         
         
          goto configura

izquierda: decfsz CONTAIZ,1    ; Comprobamos que no ha llegado al tope
          goto izquierdaok     ; Si llega al tope que no gire
          incf CONTAIZ,1       ; y vuelva a tomar valores
          movlw 0x08
          movwf PORTC
          goto configura

izquierdaok: movlw 0x00
             movwf PORTC
             incf CONTADE,1
             movlw b"00111001"  ; Primer paso para el giro hacia la derecha.
             movwf PORTB
             call TEMPO         ;Temporización antes de realizar el siguiente paso
         
         
             movlw b"00111010"  ;Segundo paso.
             movwf PORTB
             call TEMPO
         
             movlw b"00110110"  ;Tercer paso.
             movwf PORTB
             call TEMPO
         
             movlw b"00110101"  ;Último paso.
             movwf PORTB
             call TEMPO
            goto configura
 
;******************************************************************************************
;TEMPO Subrutina de temporización para poder enviar          otra secuencia al motor.
 
TEMPO      movlw 0xFF        ;carga FF en TEMP1
           movwf TEMP1
           clrf TEMP2        ;Carga 0 en TEMP2
TEMPO_1   decfsz TEMP2,1     ;Decrementa TEMP2 y si es 0 salta          
          goto TEMPO_1       ;volver a TEMPO_1
          decfsz TEMP1,1     ;Decrementa TEMP1 y si es 0 salta
          goto TEMPO_1       ;volver a TEMPO_1
          RETURN
         
;**********************************************************************************
; espera20u Subrutina de espera para poder volver a tomar otro valor del          conversor
         
espera20u  movlw 0x05
           movwf CONTA0
           ret1 decfsz CONTA0,1
           goto ret1
           
            return
         
         
         end

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Motor paso a paso
« Respuesta #6 en: 15 de Marzo de 2006, 20:13:00 »
Escrito originalmente por ajkite
Perdon x la tardanza

utilizo el MPLAB y el programa esta en el archivo que adjunto, utilizo 3 ldr, uno en un lado, otra en otro lado y otra en medio
Lo que ago es comparar las de los extremos y la que tngo mayor luz se mueve asia esa direcion y despue la comparo con la del medio y cuando tenga la misma luz se para

Mi problema es que el motor solo se me mueve un paso pequeño y se hay se queda cogido, no se si sera xq no le mand suficiente potencia

TB le tengo conectado unos led para q me indique para que posicion se me mueve, pero no se enciende ninguno, solamente se me encendieron la primera vez q los conecte y creo (no estoy seguro)q x error lo conecte el circuito a12v pero el pic funciona correctamente lo e comprobado con otro progama

gracias


Antes que nada, si lo expusiste a 12V... puede que el pic siga andando pero que se le haya quemado algo importante dentro y justo este andando las partes que tu testeaste en el otro software.

Ahora bien,  suponiendo que anda bien, porque no haces un programa bien simple que solo encienda los leds? y vas verificando si el problema es de la rutina del motor o del pic?

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado poi5on

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 127
RE: Motor paso a paso
« Respuesta #7 en: 16 de Marzo de 2006, 09:18:00 »
Hola amigo

Te recomiendo que quites los leds, haz una pequeña rutina que solo mueva el motor. Chequeando tu codigo me parece que esta mala la parte que mueve el motor, ya que utilizas dos veces 110101 y dos veces 1110101 bueno aunque eso depende del motor que usas. Tambien deberias utilizar unos darlintong nte261 para que se la conectes a las bobinas para que haya suficiente corriente, otra cosa que debes chequear es el cableado porque debes energizar las bobinas en forma ordenada, al tenerlo desordenadas el motor puede que avance pero se devuelve o queda en una posicion fija.

Saludos


 

anything