-


-


-

Controlando 4 steppers desde 2 puertos con atmega32

Es parte del proyecto de la fresadora, todavia esta sin terminar pero en el programa pueden probarse varias secuencias

0- medio paso a la derecha
1- medio paso a la izquierda
2-paso a la derecha
3-paso a la izquierda

La siguiente funcion es la encargada de todo


void mover (int edge,int sel,double pulseq)
void mover ( SELECCIONA EL EJE A MOVER ,SELECCIONA LA SECUENCIA ,CANTIDAD DE PULSOS A REALIZAR)

He aqui la funcion completa, aunque pueden descargar el zip de las fuentes en Proteus+AVRstudio mas abajo.

void mover (int edge,int sel,double pulseq){
pulseq--;
int k;
switch(sel){
case 0: k = last_x;break;
case 1: k = last_y;break;
case 2: k = last_z;break;
case 3: k = last_a;break;
}
//k++;
if (k==8){k=0;}
int pq;
int temp;
 for (pq=0;pq<=pulseq;pq++)
{
LCDWriteStringXY(4,0,"            ");
LCDWriteIntXY(4+k,0,  seq[sel][k],1);
switch (edge)
{
case 0:
temp= PORTC & 0XF0;
temp= temp | seq[sel][k];
PORTC = temp;
break;
case 1:
temp= PORTC & 0X0F;
temp= temp | (seq[sel][k]<<4);
PORTC = temp;
break;
case 2:
temp= PORTA & 0XF0;
temp= temp | seq[sel][k];
PORTA = temp;
break;
case 3:
temp= PORTA & 0X0F;
temp= temp | (seq[sel][k]<<4);
PORTA = temp;
break;
}
k++;
if (k==8){k=0;}
switch(sel){
case 0: last_x = k; break;
case 1: last_y = k; break;
case 2: last_z = k; break;
case 3: last_a = k; break;
}
_delay_ms(10);
}
}

Una cosa que me costo bastante (para lo que es) fue hallar la secuencia de medio paso  en el grafico a continuacion se observa, primero una vuelta entera y despues 180º de giro. Como puede apreciarse a continuacion de este parrafo, las secuencias han sido alojadas en un array multidimensional con el fin de ahorrar espacio y dinamizar el acceso a las mismas.


int seq[4][8] = {
    { {0x04}, {0x0c}, {0x08} , {0x0a},{0x0b}, {0x03}, {0x07} , {0x05}},  // half step right
    {  {0x07}, {0x03} , {0x0b},{0x0a}, {0x08}, {0x0c} , {0x04},{0x05}},// half step left
    { {0x0c}, {0x0a}, {0x03} , {0x05},{0x0c}, {0x0a}, {0x03} , {0x05}},  // full step right
    {  {0x03}, {0x0a} , {0x0c},{0x05}, {0x03}, {0x0a} , {0x0c},{0x05}} // full step left
};




Y bueno, como siempre dejo aqui las fuentes por si alguien las necesita Descargar Proteus+AVRstudio



No hay comentarios:

Publicar un comentario

Cualquier critica, propuesta idea o sugerencia sera bien recibida