Cómo usar dos temporizadores simultáneamente para controlar 2 servomotores

-1

soy muy nuevo en PIC. Estoy tratando de controlar 2 servomotores para la rueda de mi robot. Estoy usando la MCU PIC16f877A, servo motor y un oscilador de cristal de 4 mhz. Yo uso el compilador mikroC.

En realidad, ya tengo un código aquí mediante el sondeo con retrasos:

 while(1)
 {
     //right wheel rotate clockwise;
     PORTC.F1 = 1;
     delay_us(1748);
     PORTC.F1 = 0;
     delay_us(18252);

     //left wheel rotate counter-clockwise
     PORTC.F2 = 1;
     delay_us(1458);
     PORTC.F2 = 0;
     delay_us(18542);
  }

Esta línea de código realmente funciona, pero a veces la otra rueda corre primero, lo que hace que el robot funcione en una posición incorrecta. ¿Puede sugerir algún método aparte de la encuesta? Muchos dicen que usar la interrupción es mejor y más preciso que el sondeo. Gracias.

    
pregunta Hokage Sama

1 respuesta

1

Eso no es polling , solo está alternando las salidas con retrasos de software.

Los servos RC esperan ver pulsos a una velocidad de aproximadamente 50 veces por segundo. El bucle While(1) debería tomar 20 ms, así que elimine el delay_us(18252) y cambie el delay_us(18542) a delay_us(16794) . Ahora el bucle tomará un poco más de 20 ms y el segundo servo recibirá su pulso inmediatamente después del primero, en lugar de 20 ms después.

Si no hay interrupciones activas, este código debería producir pulsos muy estables. Si todavía tienes movimientos inesperados, entonces la causa es externa, por ejemplo. Respuesta servo inconsistente o mala fuente de alimentación.

    
respondido por el Bruce Abbott

Lea otras preguntas en las etiquetas