Control del motor paso a paso hacia adelante y hacia atrás basado en 51 microcomputadoras de un solo chip
Esta vez, el módulo uln2003 se utiliza para vincular el motor paso a paso;
## El principio de funcionamiento del
motor paso a paso El motor paso a paso es un motor que convierte las señales de pulso eléctrico en el correspondiente desplazamiento angular o desplazamiento lineal. Cada vez que se ingresa una señal de pulso, el rotor gira un ángulo o un paso hacia adelante. El desplazamiento angular de salida o el desplazamiento lineal es proporcional al número de pulsos de entrada y la velocidad es proporcional a la frecuencia del pulso.
Los motores paso a paso tienen muchas formas estructurales y métodos de clasificación. Generalmente, se dividen en tres tipos: tipo de reluctancia, tipo de imán permanente y tipo de imán mixto según el modo de excitación; según el número de fases, se pueden dividir en monofásicos, bifásicos, trifásicos y múltiples iguales. .
Por lo tanto, podemos controlar el nivel del puerto de E / S de la microcomputadora de un solo chip para controlar el motor paso a paso.En este diseño, se adopta el modo de trabajo de cuatro fases de un solo disparo. Cambie tres veces, el campo magnético gira una vez y el rotor gira hacia adelante en un ángulo de inclinación. Por lo tanto, este método de activación se denomina trabajo de cuatro tiempos de cuatro tiempos.
- Tabla de códigos de caracteres no firmados del código de avance del motor Z [8] = {0x08,0x0c, 0x04,0x06,0x02,0x03,0x01,0x09};
- Tabla de códigos de caracteres sin signo F [8] = {0x09,0x01,0x03,0x02,0x06,0x04,0x0c, 0x08};
el código se muestra a continuación
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
unsigned char code tableZ[8]={
0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};
unsigned char code tableF[8]={
0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};//²½½øµç»úzheng
void delay(unsigned int t);
sbit S3=P3^4; //反转
sbit S4=P3^5; //反停
sbit S5=P3^6; // 正停
//正转写入数据
void motor_z()
{
unsigned char i,j;
for (i=0; i<8; i++)
{
if(S5==0){
break;}
for(j=0;j<8;j++){
P1 = tableZ[i]&0x1f;
delay(50);
}
}
}
//反转写入数据
void motor_f(){
unsigned char i,j;
for (i=0; i<8; i++)
{
if(S4==0){
break;}
for(j=0;j<8;j++){
P1 = tableF[i]&0x1f;
delay(50);
}
}
}
void delay(unsigned int t)//延时函数
{
unsigned int k;
while(t--)
{
for(k=0; k<60; k++)
{
}
}
}
void main()
{
while(1){
motor_z();
if(S3 == 0){
motor_f();
}
}
}