Problema para manejar paso a paso un motor a pasos

#1
Saludos

Nuevamente recurro a ustedes en busca de un poco de sabiduria, bueno estoy realizando un proyecto en el cual debo de controlar 4 motores a pasos unipolares o bipolares, no importa mucho, ya eh podido realizar la secuencia de un motor a pasos q gire cada 45° , pero quisiera
saber como puedo aumentarle la resolucion (En la simulacion en proteus) es decir moverlo
1.8° cada vez que le llegue un caracter por el puerto serial, quisiera que me ayudaran un poco en el codigo, lo estoy realizando en ccs estoy utilizando un pic16f877 y unos drivers l293.
Anexo imagenes y el codigo que estoy utilizando:

#include<16f877a.h>
#fuses XT,NOPROTECT,NOWDT,PUT
#use delay (clock=4000000)
#use fast_io(b)
#use fast_io(d)
#byte portb=0x06
#byte portd=0x08
#use RS232(BAUD=9600,BITS=8,PARITY=N,XMIT=PIN_C6,RCV=PIN_C7)
#define MAXPASOS 8

void ControlMotoresPasos(void);
/* grados a mover 45°,90°,135°,180°
225°,270°,315°,360° */
unsigned int const secuencia[MAXPASOS]= {0b00001001,0b00001000,0b00001010,0b00000010,
0b00000110,0b00000100,0b00000101,0b00000001};
void main()
{
set_tris_a(0xff);
set_tris_b(0x00);
set_tris_d(0x00);
set_tris_e(0b11101111); //Configuramos el puerto D como I/O y el puerto E como entrada
portb=0;
portd=0;
disable_interrupts(GLOBAL);
ControlMotoresPasos();
}
void ControlMotoresPasos(void)
{
char caracter_recibido;
int i;
while(TRUE)
{
if(kbhit())
{
caracter_recibido=getc();
if(caracter_recibido=='1')
{
for(i=0; i<MAXPASOS; i++) //Realiza la secuencia Modificar
{
portb=secuencia;
delay_ms(30);
}
}
}
}
}

Agradeceria si me ayudaran con este problema, ya que lo q realmente me interesa es poderlo mover 1.8° cada ves que llegue un caracter=1 este es apenas un prototipo rapido del programa falta agregarle muchas cosas pero primero quiero resolver este dilema.
 

Adjuntos

#2
Hi yeaa,
las specs del motor dicen que cada paso es 1.8°?
si el programa tal cual, avanza 45° con 8 pasos cada paso seria de 5.65°.
:)
 
#3
No dice nada proteus sobre las caracteristicas de los servomotores, pero yo eh visto simulaciones
en las cuales lo van moviendo poco a poco y quisiera saber como lograrlo tambien en la vida real existen motores a pasos de 200 pasos, el problema es q no se manejarlos, debe de haber algun algoritmo para manejarlos paso a paso

jajajaj me ekivoque en el post anterior puse servomotores, pero son motores a pasos
 
Última edición:
#4
Seria mas facil de resolver si lo mandas en mismo archivo ISIS con su codigo en un rar o zip para verlo si que consuma mucho tiempo. Si ya lo tienes echo.
Así las personas que te ayudan no tenga que darse el trabajo de armar el circuito y configurar todo.
 
Última edición:
#6
Cada secuencia da medio paso. El isis el motor esta configurado que cada paso gire 90 grados asi que lo cambias a 1.8.
Entonces para que gire un paso debe pasar dos secuencias; la modificación seria algo así.

void ControlMotoresPasos(void)
{
char caracter_recibido;
int i,p=0;
while(TRUE)
{
if(kbhit())
{
caracter_recibido=getc();
if(caracter_recibido=='1')
{
for(i=0; i<2; i++,p++)
{
if(p>7)
p=0;
portb=secuencia[p];
delay_ms(30);
}
}
}
}
}

Solo en esta función ice la modificación.
 
Arriba