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.
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.