Requisitos para que una microcomputadora de un solo chip controle motores paso a paso: botones de aceleración, desaceleración, parada, avance y retroceso. El motor es un sistema de cuatro fases y cinco cables que controla dos motores paso a paso, programa en lenguaje C.
#include
#define uchar unsigned char
#define uint unsigned int
//uchar table[]={0x18,0x30,0x60,0x48,0x48,0x60,0x30,0x18 }; //excitación bifásica
uchar table[]={0x08,0x10,0x20,0x40,0x40, 0x20,0x10,0x08}; //excitación monofásica
uchar num =0,maichong,zhengfan;
sbit add_key=P3^2; //tecla de aceleración
sbit reduce_key=P3^3; //tecla de reducción
sbit zhengfan_key=P3^4; //tecla de avance/retroceso
void delay(uint z) //retraso 1ms
{
uint x, y;
for(x=z;x>0;
for(y=114;y>0;y- -);
}
void only_key() //manejo de claves
{
static uchar flag; //definido como estático solo definido una vez
if( zhengfan_key= =0) //detecta si se presiona tecla positiva o negativa
{
delay(5);
if(zhengfan_key= =0 )
{
flag=~flag; //Invertir
if(flag==0)
zhengfan= 0; /Rotación hacia adelante, toma los primeros cuatro dígitos de la matriz
else
zhengfan=4 //Reversa, toma los últimos cuatro dígitos de la matriz
p>while(!zhengfan_key);
}
}
if(add_key==0) // Compruebe si la clave para agregar es presionado
{
delay(5);<
if(add_key==0) // Reducir la fluctuación
{ p>
num++; // Presione la tecla del acelerador, la marca de velocidad aumenta en 1
if(num==4) // Se ha alcanzado el valor máximo de 3
núm=3; p>
mientras(! add_key);
}<
}
if(reduce_key==0) //Detecta si se presiona la tecla de reducción
{
demora(5);
if(reduce_key==0)
{
if(num!=0)
num--; //Presiona la tecla de desaceleración, la marca de velocidad disminuye en 1
else
num=0 //Reduzca la velocidad a 0 y manténgala; < /p
>
while(!reduce_key);
}
}
}
}
nulo reparto() //Procesamiento de datos basado en bandera de velocidad
{
switch(num)
{
caso 0: P0= 0x06; // La canalización de datos muestra 1
maichong=5; //La velocidad más lenta
se rompe;
caso 1: P0=0x5b; la canalización muestra 2
maichong=4;
break;
caso 2: P0=0x4f //La canalización de datos muestra 3
maichong=3;
break;
caso 3: P0=0x66; //La canalización de datos muestra 4
maichong=2;
break;
}
}
void start() // Velocidad del motor y procesamiento de control de avance y retroceso
{
uchar i,j;
for(i=zhengfan;i<4+ zhengfan;i++)
{
P1=table[i];
for(j=0;j retraso( 2); } } void main() { mientras(1) { only_key(); trato(); inicio(); } p> } }