Red de conocimiento informático - Material del sitio web - Cómo usar PWM para controlar un motor de CC para que el automóvil arranque y se detenga lentamente. Para los programas C51, es mejor usar la matriz de curvas PWM S.

Cómo usar PWM para controlar un motor de CC para que el automóvil arranque y se detenga lentamente. Para los programas C51, es mejor usar la matriz de curvas PWM S.

Ajuste la velocidad, ajuste el ciclo de trabajo instantáneamente y ajuste t para ajustar la duración del período

/*El oscilador de cristal es 11,0592 M y la frecuencia PWM generada es de aproximadamente 91 Hz*/

#includelt;reg51 .hgt;

#includelt;math.hgt;

#define uchar unsigned char

#includelt;math.hgt;

#includelt; math.hgt;

#define uchar unsigned char

#define uint unsigned int

sbit en1=P1^0; / * Habilitar A de L298 */

sbit s1=P1^2 /* Entrada de L298 1 */ <

sbit s2=P1^3 ; /* Entrada de L298 2 */

uchar t=0; /* Contador de interrupciones*/

uchar m1=0; /* Valor de velocidad del motor 1*/

uchar tmp1 , tmp2; /* Valor de velocidad actual del motor*/

/* Índice de función de control del motor-número de motor (1, 2) * /

motor vacío(índice uchar, velocidad char)

{

if(speedgt;=-100 amp; amp; speedlt;=100)

{

if(index==1) /* procesamiento motor1*/

{

m1=abs(velocidad); tomar el valor absoluto de la velocidad* /

if(speedlt; 0) /* Invertir el valor de velocidad negativo*/

if(speedlt; 0) /* Invertir el valor de velocidad* /

if(speedlt; 0) /* Valor de velocidad de marcha atrás*/

{

{

s1=0

s2 =1;

}

else /* no negativo entonces inverso */

{

s1= 1;

s2=0

}

}

}

}

}

}

}

}

void delay(uint j) /* Función de retardo simple*/

{

for(j;jgt;0;j--

}

void main()

{

uchar i;

TMOD=0x02; /* set T0 TL0=0x9B;

TH0=0x9B; / Temporizador 101us

TL0=0x9B;

EA=1 /* Activar interrupción */

ET0=1; /* Permitir interrupción del temporizador 0*/

TR0=1; /* Iniciar temporizador 0 */

while(1) /* Demostración real del control del motor*/

{

for(i=0; ilt; =100; i ) /* Aceleración de rotación hacia adelante*/

{

motor(1,i);

retraso(5000);

}

for(i=100; igt ;0; i--) /* Desaceleración hacia adelante*/

{

motor(1,i

retraso(5000); > p>

}

for(i=0;ilt;=100;i) /* Aceleración inversa*/

{ }

.

}

}

void timer0() interrupción 1 /* Rutina de servicio de interrupción T0*/

{

if(t==0) /* Completa 1 ciclo PWM antes de aceptar un nuevo valor*/

{

tmp1=m1

tmp2 =m2; ;

}

if(tlt;tmp1) en1=1; else en1=0; /* Genera señal PWM para el motor 1*/

t;

if(tgt;=100) t=0; /* Genera 1 señal PWM a través de 100 interrupciones*/

}