RaspberryPi + TowardPro MG996R DIGI HI TORQUE + PWM

0

Estoy tratando de controlar este servo desde un RaspberryPi.
enlace

Me di cuenta de que un servo necesita un pulso específico para un grado específico. www.youtube.com/watch?v=ddlDgUymbxc

Estoy usando este enlace para PWM.
Ya confirmé que este PWM funciona como se esperaba al encender un LED, pero no importa qué pulso le dé a mi servo, simplemente se vuelve salvaje. Va como si siguiera moviéndose de izquierda a derecha o agite en un punto continuamente.

El servo del youtube se mueve +/- 90 grados, pero mi servo hace +/- 60 grados. ¿Entonces tal vez el pulso que necesito dar es diferente de 0.5ms / 1.5ms / 2.5ms?

¿Alguien ha usado este servo con RaspberryPi? ¿Qué son los pulsos para dar?

actualizaciones

Cambié el código fuente para tener una frecuencia de 50Hz.

diff --git a/pi-blaster.c b/pi-blaster.c
index 2e15ee1..d7d8af2 100644
--- a/pi-blaster.c
+++ b/pi-blaster.c
@@ -70,8 +70,8 @@ static uint8_t pin2gpio[8];
 // will use too much memory bandwidth.  10us is a good value, though you
 // might be ok setting it as low as 2us.

-#define CYCLE_TIME_US          10000
-#define SAMPLE_US              10
+#define CYCLE_TIME_US          20000
+#define SAMPLE_US              20
 #define NUM_SAMPLES            (CYCLE_TIME_US/SAMPLE_US)
 #define NUM_CBS                        (NUM_SAMPLES*2)

y ahora pi-blaster muestra esto.

$ sudo /usr/sbin/pi-blaster
Using hardware:                   PWM
Number of channels:                 9
PWM frequency:                  50 Hz
PWM steps:                       1000
Maximum period (100  %):      20000us
Minimum period (0.100%):         20us

pero mi servo todavía se vuelve loco. Desde Minimum period (0.100%): 20us , para tener 0.5ms , hice esto.

Período 0.5ms (500us) / min (20us) = 25
0,1% * 25 = 2,5% = 0,025

$ echo "17=0.025" > /dev/pi-blaster

Parece que siempre está volviendo a 0 grados, cualquiera que sea el% que le dé.

Va así.
Para 180 grados, es de 2,5 ms. Cuando doy

$ echo "17=0.125" > /dev/pi-blaster
El servo

va al punto de 180 grados, y pronto vuelve al punto de 0 grados. Va así de un lado a otro, de un lado a otro, siempre y cuando le dé el poder. Lo mismo va en cualquier grado.

¿por qué?

    
pregunta kukrt

1 respuesta

2

Los servos de hobby están controlados por un ancho de pulso, pero este no es el mismo tipo de modulación de ancho de pulso que se realiza mediante pi-blaster .

Los servos de hobby usan un pulso periódico a una frecuencia relativamente baja (50 Hz es típico, pero la frecuencia no es crítica). Cada cuadro contiene un impulso nominal de 1,5 ms para configurar el servidor en su posición nominal de 0 °. Variando el ancho de pulso de 0.5ms a 2.5ms, el servo se mueve en toda su gama mecánica. Si el servo puede moverse 90 ° en cada dirección variando el ancho del pulso hasta 1 ms, es igual a 11.1 µs por grado.

El control tan preciso de ese servo requiere un control de alta resolución de ese pulso y un tiempo muerto relativamente largo para el siguiente pulso.

El PWM realizado por pi-blaster está diseñado para controlar la potencia mediante el ajuste de un pulso del 0% al 100% del ciclo de trabajo de un reloj de 100 Hz. Para usar esto para controlar un servo de pasatiempos, debes comenzar por bajar la frecuencia del reloj base a algo en el estadio de 50 Hz. Algunos servos pueden aceptar el control tan rápido como 100 Hz, pero esa no es la práctica habitual.

A continuación, debe limitarse al rango de PWM de 0.025 a 0.125, suponiendo un reloj PWM de 50 Hz.

El límite posterior significa que de la precisión predeterminada de 1000 pasos de 0% a 100% de servicio, solo puede usar 100. Para un movimiento de 180 °, eso le dará una precisión de 1.8 ° por paso.

La mejor respuesta es utilizar un software diseñado para controlar los servos de hobby. pi-blaster señala que se derivó de ServoBlaster . Usa eso. Será un poco más complicado interactuar con él porque es solo un controlador del kernel y no proporciona el ASCII FIFO.

Otra precaución: no conecte un servo de hobby directamente a su RPi. El RPi tiene 3.3V I / O, pero el servo de hobby querrá ser manejado a 5V o más. Debe usar un cambiador de nivel adecuado para obtener el voltaje de transmisión correcto y para introducir algo menos costoso que todo su RPi para quemarse cuando algo sale mal.

    
respondido por el RBerteig

Lea otras preguntas en las etiquetas