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.
/*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) p>
{
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 ; p>
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 p>
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*/
}