PIC control de motor paso a paso para robot

#1
Hola que tal, mi consulta es debida a un problema que me surgió ypor mas que intente no pude solucionar. El caso es que estoy tratando de hacer un robot seguidor de lineas, y despues de mucho buscar fui a dar con un ejemplo de control de paso a paso en los archivos del proteus, este ejemplo tiene marcha y contra marcha de un motor, lo que yo quiero hacer es que lo que hace con un motor, lo haga con dos, osea duplicar, para un motor me llevala mitad del puerto b del pic, y la otra mitad vacia es la que quiero usar para eso, eso ya de por si no me salio, y ahora se complica la cosa, en primera instancia no seria necesario que el motor tenga contramarcha, me basta que si el sensor detecta la linea el motor se prenda y si no se apague para girar, el tema es que dichos motores tienen que ser independientes el uno del otro, osea cada uno con su propio sensor, lo intente por varias semanas pero solamente tengo error tras error, aca esta el código fuente.

LIST p=16F84 ; PIC16F844 is the target processor

#include "P16F84.INC" ; Include header file

CBLOCK 0x10 ; Temporary storage
pos
dc1
dc2
ENDC
LIST p=16F84 ; PIC16F844 is the target processor

#include "P16F84.INC" ; Include header file

CBLOCK 0x10 ; Temporary storage
ENDC

ORG 0
entrypoint goto start

ORG 4
intvector goto intvector

start clrw ; Zero.

movwf PORTB ; Ensure PORTB is zero before we enable it.
bsf STATUS,RP0 ; Select Bank 1
movlw 0xF0 ; Set port B bits 0-3 as outputs
movwf TRISB ; Set TRISB register.

bcf STATUS,RP0 ; Select Bank 0

movlw 3 ; Initialize the motor position
movwf pos
movwf PORTB
call delay
clrf PORTB ; Motor drive off

;Main loop
loop btfss PORTA,0 ; Test clockwise button
call stepcw
btfss PORTA,1 ; Test anti-clockwise button
call stepccw
goto loop

;Rotate one step clockwise
stepcw bcf STATUS,C ; Clear the carry flag
btfsc pos,3 ; Set carry if this bit set
bsf STATUS,C
rlf pos,W ; Pick up and rotate the motor's current position
andlw 0x0F ; Mask to lower nibble
movwf pos
movwf PORTB ; Drive the outputs
call delay ; Wait
clrf PORTB ; Clear the output
return

;Rotate one step counter clockwise
stepccw bcf STATUS,C ; Clear the carry flag
btfsc pos,0
bsf pos,4
rrf pos,W ; Pick up and rotate the motor's current position
andlw 0x0F ; Mask to lower nibble
movwf pos
movwf PORTB ; Drive the outputs
call delay ; Wait
clrf PORTB ; Clear the output
return

; This routine implements the delay between steps,
; and thus controls the motor speed.
delay movlw 18 ; Outer loop iteration count
movwf dc1
dl1 clrf dc2 ; Initialize inner loop
dl2 nop
nop
decfsz dc2,F
goto dl2
decfsz dc1,F
goto dl1
return

END
 
#3
para controlar 2 motores utilizar el integrado L298N, incluye 2 puenstes en H y se controla cada motor con solo 2 pines del micro, aparte d epoder hacer control de velocidad pwm. . .
un saludo
 
#6
los motores paso a paso son bipolares o unipolares? si son bipolares se controla cada uno con un l298N, y cada motor lo controlas con 4 pines,busca el datasheet y lo miras.
un saludo
 
Arriba