TODOPIC

Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: dieg11 en 22 de Octubre de 2011, 14:11:51

Título: Rampa de aceleracion para motor paso a paso con pic16f628a
Publicado por: dieg11 en 22 de Octubre de 2011, 14:11:51
hola!! buenas escribo porque tengo un problema para diseñar un programa que me permita mediante un pulsador lograr una rampa de aceleracion de 15rev/min
y que cada revolución son 48 pasos lo he pensado con un un tabla ir variando el valor del tmr0 pero no he podido, es un proyecto y se me viene arriba la fecha de entrega
los pasos del motor son
avance retroceso
0101         0101
1001         0110
1010         1010
0110         1001
agradezco si alguien le surge una idea muchas gracias!
Título: Re: Rampa de aceleracion para motor paso a paso con pic16f628a
Publicado por: Suky en 22 de Octubre de 2011, 14:48:22
Lo de la tabla y variar el periodo del timer me parece adecuado. Porque no te funcionó? Como lo implementaste?
Título: Re: Rampa de aceleracion para motor paso a paso con pic16f628a
Publicado por: dieg11 en 22 de Octubre de 2011, 18:48:27
Lo de la tabla y variar el periodo del timer me parece adecuado. Porque no te funcionó? Como lo implementaste?
te mando el programa disculpa que no tenga comentarios pero los nombres son orientartivos, la idea es de que acelere a 15rev/min2 a eso de o,2seg/paso2
lo q se vea para mejorarle al prog estare mas que agradecido
;*************************************************
;pic 16f628A
;proyecto motor paso a paso
;*************************************************

;************************
;paso   A   B   C   D   *
;1      1   0   1   0   *
;2      1   0   0   1   *
;3      0   1   0   1   *
;4      0   1   1   0   *
;************************

   
        list p=16f628A

       __config 0x2171
       __idlocs 0x0001
        errorlevel -302   ; quita las advertencias tipo 302
      include <p16f628a.inc>


AUX    EQU 0X29
AUX1   EQU 0X2A
AUX2   EQU 0X2B
OPCION  EQU 0X81
Z      EQU 2
C      EQU 0
W      EQU 0
F      EQU 1
K      EQU 0X28
AUX3   EQU 0X2D
AUX4   EQU 0X2D
AUX5   EQU 0X2E
AUX6   EQU 0X2F

      ORG 0X00

RESET
      GOTO   INICIO

VECTOR_INTERRUPCION
SUBRUTINAS
ACELERAR
      MOVLW 0X64
      MOVWF TMR0
   
      MOVLW 0X02
      MOVWF PCLATH

      MOVF  AUX,W
      CALL  TABLA
      CLRF  PCLATH
      MOVWF AUX3
      MOVWF AUX4

DESBORDO?
      BTFSS  INTCON,2
      GOTO   DESBORDO?
      BCF    INTCON,2
      BCF    STATUS,Z
      DECFSZ AUX3,F
      GOTO    CARGA
      MOVLW  D'250'
      BCF    STATUS,Z
      SUBWF  AUX,W

      BTFSS  STATUS,Z
      GOTO   AUMENTO
      GOTO   RETORNO

CARGA
      MOVLW  0X64
      MOVWF  TMR0
      GOTO   DESBORDO?

AUMENTO

      INCF   AUX,F
      GOTO   RETORNO

RETORNO   
      RETURN

DESACELERAR
         MOVLW   0X64
         MOVWF   TMR0
   
         MOVLW   0X02
        MOVWF   PCLATH

         MOVF    AUX,W
         CALL  TABLA
         CLRF    PCLATH
         MOVWF AUX3
   
         MOVWF AUX4

DESBORDO1 
      BTFSS   INTCON,2
       GOTO    DESBORDO1
       BCF     INTCON,2
       BCF     STATUS,Z
       DECFSZ  AUX3,F
       GOTO      CARGA1
       BCF      STATUS,Z
       MOVF    AUX,F
       BTFSS   STATUS,Z
       GOTO    DECREMENTO
      GOTO    RETORNO1
DECREMENTO
      DECF    AUX,F
       GOTO    RETORNO1

CARGA1
        MOVLW   0X64
        MOVWF   TMR0
       GOTO    DESBORDO1

RETORNO1
       RETURN


FRENAR
      CLRF    TMR0
      MOVF      AUX6,W
      MOVWF   PORTB
      BTFSS   PORTA,1
      GOTO    RETORNO6
      GOTO      FRENAR

RETORNO6
      RETURN

VELCONSTANTE

       MOVLW 0X64
      MOVWF TMR0
      MOVF  AUX4,W

DESBORDO2
      MOVWF  AUX5
      BTFSS  INTCON,2
      GOTO   DESBORDO2
      BCF    INTCON,2
      DECFSZ AUX5,F
      GOTO   CARGA2
      GOTO     RETORNO2
CARGA2
      MOVLW 0X64
      MOVWF TMR0
      GOTO DESBORDO2
RETORNO2
      RETURN


PASOS   BCF    STATUS,Z
       MOVF   AUX6,F
       BTFSS  STATUS,Z
       GOTO   RESTO5
       MOVLW  D'05'
       MOVWF  PORTB
       MOVWF  AUX6
       GOTO   RETORNO3   
RESTO5
      MOVLW  D'05'        ;verifico el paso anterior era 05
      BCF      STATUS,Z
      SUBWF  AUX6,W      
      BTFSS  STATUS,Z
      GOTO   RESTO9       
      MOVLW  D'09'
      MOVWF  PORTB
      MOVWF  AUX6
      GOTO   RETORNO3
RESTO9
      MOVLW  D'09'
      BCF    STATUS,Z
       SUBWF  AUX6,W      
      BTFSS  STATUS,Z
      GOTO   RESTO10       
      MOVLW  D'10'
      MOVWF  PORTB
      MOVWF  AUX6
      GOTO   RETORNO3
RESTO10
      MOVLW  D'10'
      BCF    STATUS,Z   
       SUBWF  AUX6,W      
      BTFSS  STATUS,Z
      GOTO   RESTO6       
      MOVLW  D'06'
      MOVWF  PORTB
      MOVWF  AUX6
      GOTO   RETORNO3
RESTO6
      MOVLW  D'06'
      BCF    STATUS,Z   
       SUBWF  AUX6,W      
      BTFSS  STATUS,Z
      GOTO   RETORNO3   ;si no es ninguno de los posibles       
      MOVLW  D'05'
      MOVWF  PORTB
      MOVWF  AUX6
      GOTO   RETORNO3
RETORNO3
      RETURN

 ORG 0X100

INICIO
       MOVLW 0X07     ;Deshabilito comparadores
      MOVWF CMCON      
      
      BCF STATUS,RP1
      BSF   STATUS,RP0   ;Selecciono banco 01
      MOVLW 0XFF
      MOVWF TRISA
      CLRF  TRISB
      MOVLW 0X86
      MOVWF OPCION    ; Configuro tmr0

      BCF  STATUS,RP0
      BCF  INTCON,2    ; Configuro int
      CLRF AUX
      CLRF AUX1
      CLRF AUX2
      CLRF AUX3
      CLRF AUX4
      CLRF AUX5
      CLRF AUX6
      CLRF PORTB

LEERA
      MOVF PORTA,W
      BTFSS PORTA,1
      GOTO ACELERARE
      GOTO DESACELERAREMAS
      
ACELERARE
      BTFSS PORTA,0
      GOTO CONSTANTE
      MOVLW D'250'
      SUBWF AUX,W
        BCF STATUS,Z      
        MOVWF AUX2
      BTFSS STATUS,Z
      GOTO ACELERO
      GOTO CONSTANTE

DESACELERAREMAS
      BCF STATUS,Z
      MOVF AUX,F
      BTFSS STATUS,Z
      GOTO DESACELERO
      GOTO FRENO
DESACELERO
      CALL DESACELERAR
      CALL PASOS
      GOTO LEERA
      
CONSTANTE
      BCF STATUS,Z
      MOVF AUX
      BTFSS STATUS,Z
      GOTO SEGUIR
      GOTO FRENO
SEGUIR
      CALL VELCONSTANTE
      CALL PASOS
      GOTO LEERA
ACELERO
      CALL ACELERAR
      CALL PASOS
      GOTO LEERA
FRENO   
      CALL FRENAR
      GOTO LEERA


   
TABLA   addwf PCL,f
      retlw d'250'
      retlw d'50'
      retlw d'42'
      retlw d'37'
      retlw d'33'      
      retlw d'30'
      retlw d'28'
      retlw d'27'
      retlw d'25'
      retlw d'24'
      retlw d'23'
      retlw d'22'
      retlw d'21'
      retlw d'20'
      retlw d'19'
      retlw d'18'
      retlw d'17'
      retlw d'16'
      retlw d'15'
      retlw d'14'
      retlw d'14'
      retlw d'13'
      retlw d'13'  ;la tabla continua tal vez es muy larga
end
      
Título: Re: Rampa de aceleracion para motor paso a paso con pic16f628a
Publicado por: dieg11 en 22 de Octubre de 2011, 19:19:15
un gran tema q tengo es que la tabla me queda de 253 valores muchos de los cuales repito innumerables veces como puedo arreglar ese tema
muchas gracias
Título: Re: Rampa de aceleracion para motor paso a paso con pic16f628a
Publicado por: tapi8 en 25 de Octubre de 2011, 07:31:56
No he mirado todo el programa pero en inicio no configuras bien el TIMER0 para la interrupcion.

Código: [Seleccionar]
INICIO
       MOVLW 0X07     ;Deshabilito comparadores
      MOVWF CMCON     
     
      BCF STATUS,RP1
      BSF   STATUS,RP0   ;Selecciono banco 01
      MOVLW 0XFF
      MOVWF TRISA
      CLRF  TRISB
      MOVLW 0X86
      MOVWF OPCION    ; Configuro tmr0

      BCF  STATUS,RP0
      BCF  INTCON,2    ; Configuro int
      CLRF AUX
      CLRF AUX1
      CLRF AUX2
      CLRF AUX3
      CLRF AUX4
      CLRF AUX5
      CLRF AUX6
      CLRF PORTB


Fijate aqui no estas configurando interrupcion (supongo por el comentario que es lo que quieres hacer)


BCF  INTCON,2    ; Configuro int

Estas borrando el flag del TIMER, para configurar interrupcion por TMR0:

Código: [Seleccionar]
movlw  0xA0
movwf   INTCON

O bien:

Citar
bsf  INTCON,GIE
bsf  INTCON,T0IE

Título: Re: Rampa de aceleracion para motor paso a paso con pic16f628a
Publicado por: tapi8 en 25 de Octubre de 2011, 14:42:39
Le di una vueltecilla en el MPLAB y te digo

Citar
AUX    EQU 0X29
AUX1   EQU 0X2A
AUX2   EQU 0X2B
OPCION  EQU 0X81
Z      EQU 2
C      EQU 0
W      EQU 0
F      EQU 1
K      EQU 0X28
AUX3   EQU 0X2D
AUX4   EQU 0X2D
AUX5   EQU 0X2E
AUX6   EQU 0X2F

AUX3 y AUX4 estan los dos en 0X2D

AQUI YA ME DIRAS QUE HACES:

Código: [Seleccionar]
ACELERARE
      BTFSS PORTA,0
      GOTO CONSTANTE
      MOVLW D'250'
      SUBWF AUX,W
        BCF STATUS,Z     
        MOVWF AUX2
      BTFSS STATUS,Z
      GOTO ACELERO
      GOTO CONSTANTE

Restas 250 con AUX y en vez de mirar si Z esta a 0 lo pones tu a 0, para que ? A lo mejor esta bien pero....

PORTB,0 que es?

Aqui al ir a la tabla se pierde:

Citar
MOVLW 0X02
      MOVWF PCLATH

      MOVF  AUX,W
      CALL  TABLA

Supongo que por el PCLATCH.