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.