Servo de control: ¿cómo determinar el ángulo y el ancho de pulso necesario?

1

Soy algo nuevo cuando se trata de usar servo con una Raspberry Pi. Aunque tengo algo de experiencia, me gustaría entender las cosas un poco mejor. Por lo tanto, me gustaría compartir algunas preguntas con ustedes y espero obtener una mejor perspectiva sobre cómo trabajar con los servos.

Las preguntas con las que estoy luchando actualmente:

1. Dadas las especificaciones del servo, ¿cómo puedo deducir los valores mínimo y máximo (ángulos) del servo?  
2. Utilizando el Sombrero PWM que se describe a continuación, y la biblioteca de python que viene con él, ¿cómo calculo exactamente el tiempo que el pulso PWM debe configurarse en Alto para lograr un cierto ángulo? ? Por ejemplo: ¿cuál sería la longitud alta del pulso PWM para enviar al servo para que esté en una posición de 90 grados? ¿Y qué sería para una posición de 120 grados?

¡Cualquier comentario, comentario o comentario es muy apreciado, gracias de antemano!


Especificaciones de hardware y software

El servo

El servo que tenemos es éste , el Power HD LF-20MG

Par (4.8V): 16.5 kg-cm
Par (6.6V): 20 kg-cm
Velocidad: 0.18sec (4.8V) | 0.16sec (6.6V)
Voltaje de operación: 4.8 - 6.6 DC Volts
Peso: 60g
Frecuencia de trabajo: 1520us (= 1.52ms) a 333Hz
Viaje máximo: 165 grados

El controlador PWM

Para controlar el Servo usando una Raspberry Pi usamos el thi s PWM / SERVO HAT de Adafruit para una sincronización precisa. El HAT debe controlarse utilizando su biblioteca de Python en la que las siguientes funciones controlan el servo:

El controlador de software PWM

Primero, configurando la frecuencia. Basado en las especificaciones del servo supongo que debería ser 333.

pwm.setPWMFreq(333)

En segundo lugar, hay una función que realmente controla el pulso PWM. Esto es lo que realmente estoy dudando (ver la segunda pregunta más arriba).

var port = 15
var tickHigh = 0
var tickLow = 1400 #For example; range from 0-4096
pwm.setPWM(port, tickHigh, tickLow)

Como se indica en los documentos (consulte este enlace ), los valores a utilizar se calculan en función del ancho de pulso necesario en microsegundos. Pero realmente estoy luchando aquí: parece que no puedo determinar cuál es el ancho de pulso necesario para este servo (de ahí las preguntas).
Si lo supiera, el cálculo del software se vuelve mucho más sencillo:
(1 / frecuencia) / 4096 = tiempo por tick
Para la frecuencia de este servo sería: (1/333) / 4096 = 0,00000073315503 Entonces podría usar la siguiente fórmula, dada la longitud de ancho de pulso necesaria necesaria:
longitud de pulso necesaria / tiempo por tic = tickHigh

> If you need to calculate pulse-width in microseconds, you can do that
> by first figuring out how long each cycle is. That would be 1/freq
> where freq is the PWM frequency you set above. For 1000 Hz, that would
> be 1 millisecond. Then divide by 4096 to get the time per tick, eg 1
> millisecond / 4096 = ~0.25 microseconds. If you want a pulse that is
> 10 microseconds long, divide the time by time-per-tick (10us / 0.25 us
> = 40) then turn on at tick 0 and turn off at tick 40.
    
pregunta Dennis Hunink

2 respuestas

2

Tu pregunta fue demasiado larga para leerla.

Este tipo de servomotores hobby son controlados por el ancho de un pulso. El rango estándar es de 1 a 2 ms, y debe repetirse cada 20-50 ms. El ancho de pulso de 1,5 ms pondrá el servo en el centro de su rango, con 1 ms en un extremo y 2 ms en el otro. Algunos servos pueden ir un poco más lejos en respuesta a valores un poco más allá del rango de 1-2 ms.

La mayoría le dirá el rango de ángulo en el que están destinados a trabajar, por lo que le da una idea del cambio de ángulo por incremento de ancho de pulso en su extremo.

Al final, recuerda que estos son los servos de hobby , así que no esperes una hoja de datos real con todo correctamente explicado. La mejor manera de saber qué puede hacer un servo de pasatiempo en particular es medirlo. Configure una plantilla que pueda variar el ancho de pulso de 500 µs a 2,5 ms y vea qué hace la unidad en respuesta.

    
respondido por el Olin Lathrop
0

Suponiendo que desde esta línea - " Frecuencia de trabajo: 1520us (= 1.52 ms) a 333Hz ", 1.52 ms es el ancho de pulso requerido para la rotación máxima de su servo, es decir, 165 grados.

en ese caso:

Como ya calculó, el período de tiempo de su pulso será 1/333 = 0.003003 seg. Su tiempo de alta requerido en el período es 1.52 ms = 0.00152 seg. Como ya ha calculado el tiempo por tic = 1/333/4096 = 0.000000733

Para crear un pulso alto de ancho de 0.00152 segundos, necesitas 0.00152 / 0.000000733 = 2073 ticks

intenta dar tickHigh = 0 y tickLow = 2073

o tickHigh = 4096-2073 = 2023 y tickLow = 4096

    
respondido por el Vysakh TK

Lea otras preguntas en las etiquetas