¿Controlando la velocidad del servo?

0

Sé cómo controlar dónde girará el servo: si envío una señal de servicio de 1 ms en un intervalo PWM, girará en el sentido de las agujas del reloj y si envío una señal de servicio de 2 ms girará en el sentido contrario a las agujas del reloj, ¿cómo puedo controlar la velocidad? Busqué y encontré que se hace con el método "delay ()" para ardunio pero uso FPGA, ¿cuál es la lógica detrás de esto?

    
pregunta Binary Yildirim

2 respuestas

2

En un servo de posición normal, 1 ms lo hará moverse desde donde sea que se encuentre hasta un extremo de su viaje, lo más rápido que el servo puede manejar. 2mS hará que se mueva al otro extremo.

Si pisas entre 1 y 2 ms de pulsos de longitud, lo hará tan rápido como sea posible. Si, en cambio, proporciona una rampa de pulsos de longitud intermedia, digamos 1.0, 1.1, 1.2 ... 1.9, 2.0 ms, entonces se moverá a cada posición intermedia a lo largo del camino, moviéndose de manera más lenta.

Hay servos que se comportan como usted dice, 1mS hace que gire de una manera y 2mS que la otra, pero son pocos y distantes entre sí, y se usan a menudo para tareas de molinete de barco, donde se requiere rotación para muchos giros.

    
respondido por el Neil_UK
0

Lo primero que debes recordar es que los servos no son inherentemente controlados por la velocidad. Está enviando al servo una señal de posición , y el servo está tratando de llegar a esa posición lo más rápido posible.

Sin embargo puede reducir la velocidad del servo enviándole una serie de posiciones que llevan a la posición final.

Aquí hay algunos psudocode que ilustran el método:

int servo_position = 1500; //arbitrary starting values
int target = 1000;
const int speed = 5;

while(True){
    if(servo_position < target){
        servo_position += speed;
    }
    if(servo_position > target){
        servo_position -= speed;
    }
    if(abs(servo_position - target)<speed){
        break;
    }
    pwm_out(servo_position);
    delay_ms(20);
}

Cada 20 ms, este código avanza el servo [velocidad]. El tamaño del paso dependerá de su hardware y bibliotecas pwm.

El último IF, básicamente, solo detiene el bucle una vez que te has acercado lo más posible.

    
respondido por el Drew

Lea otras preguntas en las etiquetas