Red de conocimiento informático - Problemas con los teléfonos móviles - Utilice el temporizador para controlar el microcontrolador sTC del controlador del motor paso a paso L298 y solicite el código fuente de velocidad ajustable

Utilice el temporizador para controlar el microcontrolador sTC del controlador del motor paso a paso L298 y solicite el código fuente de velocidad ajustable

/*----------------------------------------- ------ Nombre: Experimento con motor paso a paso Escritor: shifang Fecha: 2013.12 Revisión: Ninguna Contenido: ¿Este programa se utiliza para probar el accionamiento convencional de dos motores paso a paso de cuatro fases y utilizar un teclado matricial para ajustar la velocidad?

Medición de velocidad del sensor de infrarrojos

La pantalla LCD 1602 muestra la velocidad del 1 al 30. Cuanto mayor sea el número, mayor será la velocidad------------- ---- ----------------------------------*/

#include lt ;reg52.hgt;

p>

#include "LCD1602.h"

#include "jzhjp.h"

sbit cesu1=P3^2;

sbit cesu2= P3^3;

tabla de códigos de caracteres sin firmar[11]=" 0123456789."; // Mostrar valores de código de segmento 0~9

tabla de códigos de caracteres sin signo1[]="A: "; ?//Nivel de aceleración/deceleración hacia adelante del motor 1

tabla de códigos de caracteres sin signo2[]="B: "?//Aceleración/desaceleración en retroceso; nivel del motor 1

uint count=0?//Variable de definición de conteo de pulsos de interrupción externa 0

uchar temp1=0?//Variable de definición de conteo del temporizador 1

long int v1; //Velocidad del motor 1

void Init_Timer0(void);//Función de inicialización de interrupción del temporizador

/*----- --------- ----------------------------------

Función principal

----------------------------------------- ------ ----*/

void main()

{

unsigned char num1, num2

Init_Timer0(); ?// Inicialización de interrupción del temporizador

LCD_init(); ?//Inicialización de LCD1602

write_com(0x80); p> for(num1=0; num1lt; 2 ; num1 )

{

write_data(table1[num1]);

retraso(5); /p>

}

write_com(0x80 0x40);//mostrar B:

for(num2=0;num2lt;2;num2)

{

write_data (table2[num2]);

delay(5);

}

Coil_OFF //inicializar todo apagar<

mientras (1) ?

{?

write_com( 0x8

2); // Muestra el valor de aceleración hacia adelante del motor 1

write_data(table[Speed/10]);

write_data(table[Speed10]);

write_com( 0x80 0x42); // Muestra el valor de aceleración inversa del motor 1

write_data(table[Speed1/10]);

write_data(table[Speed110]);

write_com(0x80 11); // Muestra el valor de velocidad del motor 1

write_data(table[v1/100]);

write_data(tabla[v1100/10]);

write_data(tabla[10]);

write_data(tabla[ v110]);

keyscan(); ?//keyscan de matriz

}

}

/*--------- - ----------------------------------

Subrutina de inicialización del temporizador

-------------------------------- ----------------- -- ---*/

void Init_Timer0(void)

{

TMOD |= 0x11 //Usa el modo 1, temporizador de 16 bits, usando el El símbolo "|" no se ve afectado por el uso de múltiples temporizadores

//TH0= 0x00; // Valor inicial dado

//TL0=0x00;

TH1=(65536-100000)/256; //El valor inicial dado es 50ms

TL1=(65536-100000)256;

ET1=1; la interrupción está activada

PT0=1; //La prioridad está activada

EA=1 ?//Interrupción total en IT0=1; //1 para el disparador de flanco

IT1=1; //1 para disparador de flanco

}

/*------------------ -- -----------------------

?Subrutina de interrupción del temporizador 0

-- -----------------------------------------------* /

void Timer0_isr(void) interrupción 1? //reasignar 0,5 ms

TL0=(65536-500)256

if( flag==1) ?//motor 1 positivo

{

if(times==(50-Speed))

{

veces=0;

switch(i)

{

caso 0: Coil_a1; p>

caso 1: Coil_ab1; i ; romper

caso 2: Co

il_b1; i; romper;

caso 3:

caso 4: bobina_c1; p> p>

caso 6: bobina_d1; i;

caso 7: i; p>

Predeterminado.

romper

}?

}

más

veces ;

}

if(flag1==1) //motor1 invertido

{

if(times1==(50-Speed1))

{

times1=0;

switch(j)

{

caso 0: Coil_da1; 1:

caso 2: Coil_cd1; j ; romper;

caso 3: Coil_c1; j ;

caso 5: Coil_b1; j; romper;

caso 6: Coil_ab1; 8: j=0; romper;

predeterminado: romper

}

}

}

else

veces1;

}

}

}

/*----------- -------------------------------

?Programa de subrutina de interrupción del temporizador 0

------------------------------------------- -- ------*/

tiempo nulo1() interrupción 3

{

TH1=(65536-10000)/256; Recargar valor inicial 10ms

TL1=(65536-10000)256;

temp1 ;

if(temp1==100) ?//muestra 1 vez en 1s

{

temp1=0;

v1=count*3 ?//Unidad de velocidad: rpm

recuento; =0 ?//v=(cuenta/20/1)*60=cuenta*3 ?

}

}

/*------------------------------- -- ------------------

Subrutina de interrupción externa 0

------------ --------------------------------------*/

void ISR_INT0 (void) ¿Interrupción 0?

{

if(cesu1==0)?//código del motor 1 recuento de impulsos del disco

{

demora(5);

if(cesu1==0)

{

cuenta ;

}

while(!cesu1);

}

}

Hazlo tú mismo