Cómo controlar la velocidad de un motor paso a paso con un microcontrolador
#include
typedef unsigned char uint8;
typedef unsigned int uint16;
typedef unsigned long uint32;
#define P_DIR 0
#define N_DIR 1
código uint8 FFW[8]={0xF1,0xF3,0xF2,0xF6,0xF4,0xFc,0xF8 ,0xF9};
retraso nulo(uint16 i)
{
while (i--);
}
void motor_turn(uint16 ángulo, uint8 dir)
{
uint32 n=4096;
uint8 i;
n /= 360;.
n *= ángulo; //Número de instrucciones requeridas para el ángulo
if (dir == P_DIR) //Rotación hacia adelante
{
i = 7;
while (n--) //N número de instrucciones de bucle
{
P1 = FFW[ i];
if (i == 0)
i = 7;
else
i--; /p>
demora(200);
}
else if (dir == N_DIR) //reverse
{
i = 0;
mientras (n--)
{
P1 = AFFW[i];
si ( i == 7)
i = 0;
else
i++;
delay(200); /// Velocidad de ajuste
}
}
}
main()
{
mientras (1)
{
giro_motor(360, P_DIR);
giro_motor(180, N_DIR);
giro_motor(90 , P_DIR);
motor_turn(360, N_DIR);
}
}
El enfoque de este programa es el procesamiento de datos motor_turn parte. Debido a que el motor necesita girar una vez, la cantidad de instrucciones requeridas es 8*8*64 = 4096, por lo que la cantidad de instrucciones requeridas para girar un grado es 4096/360. Luego, si quiero girar N grados, la cantidad de instrucciones. que hay que enviar es N*4096/360. Ver si es igual a lo que está escrito en el programa. Por supuesto, si aproximas la división, N acomodará más ángulos sin desbordarse.