Posterior a de una larga selección de datos hemos podido resolver este inconveniente que tienen muchos de nuestros lectores. Te dejamos la solución y esperamos serte de mucha ayuda.
Solución:
Los servos del modelo Radio Control (RC) utilizan un PPM de modulación de posición de pulso.
Existe cierta confusión sobre la terminología. Algunas personas lo llaman Modulación de ancho de pulso (PWM). Es muy comprensible, porque el ancho del pulso codifica información. Además, el hardware del temporizador utilizado para generar una señal PWM también se puede utilizar para crear una señal PPM.
La frecuencia PPM base para un servo RC es 50Hz, es decir, una señal al servo cada 20ms. Los servos de modelo son bastante tolerantes a los errores en este momento, y 15-25ms pueden funcionar, incluso tan cortos como 5ms funcionan con algunos.
Cuando el pulso varía en ancho, el servo barrerá entre 0 y 180 grados. Existe alguna variación en la duración recomendada del pulso PPM, intente entre 1 ms y 2 ms, y si eso no da 180 grados, intente de 0,5 ms a 2,5 ms. Es posible que deba hacer algunos experimentos para hacerlo bien.
Un pulso largo de 1.5ms mandará al servo a la posición ‘central’ de 90 grados.
Puede obtener una versión simple de esto usando retrasos. Si la longitud de la posición del pulso se mide en microsegundos y se almacena en pos
, este código Arduino conduciría el servo
int servoPin = 9; // pin attached to servo
int pos = 1500; // initial servo position
void setup()
pinMode(servoPin, OUTPUT);
void loop()
digitalWrite(servoPin, HIGH); // start PPM pulse
delayMicroseconds(pos); // wait pulse diration
digitalWrite(servoPin, LOW); // complete the pulse
// Note: delayMicroseconds() is limited to 16383µs
// see http://arduino.cc/en/Reference/DelayMicroseconds
// Hence delayMicroseconds(20000L-pos); has been replaced by:
delayMicroseconds(5000-pos); // adjust to 5ms period
delay(15); // pad out 5ms to 20ms PPM period
ADVERTENCIA: Este código ha sido compilado, pero no probado.
Nota: delayMicroseconds()
está limitado a 16383 µs.
Por lo tanto, delayMicroseconds (20000L-pos); fallará y ha sido reemplazado por dos retrasos: delayMicroseconds(5000L-pos);
para retrasar una duración conveniente, seguido de un fijodelay(15);
.
Algunos servos están contentos con un ciclo más corto, por lo que pueden funcionar bien si el delay(15);
esta borrado
Este diagrama puede ayudar:
PPM frente a PWM
La diferencia entre PPM y PMW puede parecer bastante sutil. Sin embargo, el ancho del pulso PPM directamente codifica posición información. Si se cambia el ancho del pulso, significa una posición diferente. El hardware PWM se puede utilizar para generar una señal PPM, pero eso no significa que PPM sea lo mismo que PWM.
Editar: @ Adam.at.Epsilon escribió una explicación clara y concisa en los comentarios a continuación:
PPM codifica información solo en el ancho de pulso positivo, mientras que PWM codifica información en todo el ciclo de trabajo
Dicho de otra manera, una señal PWM codifica un proporción. los proporción de sobre para apagado es necesario para obtener toda la información; sobre solo no es suficiente.
PPM es no codificar una proporción. los activo La duración de la señal (puede ser positiva o negativa) está codificando una posición ‘absoluta’, y la muerto la duración de la señal (sentido opuesto a la parte activa) es simplemente “completar el tiempo”. los muerto la duración se puede variar significativamente sin cambiar el significado de la información en la señal. Por ejemplo, algunos ‘servos digitales para pasatiempos’ pueden funcionar de forma fiable con el muerto la duración de la señal varía desde aproximadamente 5 ms hasta más de 20 ms, un factor del 400%. Sin embargo, se moverá con un cambio en activo duración de la señal del 1%.
Una señal PWM es típicamente potencia de ‘codificación’. Piense en la señal PWM como una fracción de la potencia total. Cuanto más ciclo esté encendido (y menos apagado), mayor será la fracción de potencia total. En todo el ciclo es 100%, en 60% (y por lo tanto, en 40%) es 60% de potencia, en 0% y en 100% es 0% de potencia, etc.
Como ejemplo concreto, PWM podría estar funcionando a una frecuencia de 200 Hz, o un período de 5 ms. Un 50%, o 0,5, de la señal de potencia máxima estaría encendida durante 2,5 ms y apagada durante 2,5 ms.
Ese pulso de 2.5ms podría ser decodificado por un servo RC esperando una señal PPM como 180 grados, digamos.
Cambie la frecuencia a 1000 Hz y, por lo tanto, el período se convierte en 1 ms. La señal del 50% ahora estaría 0,5 ms activada y 0,5 ms desactivada. Esa señal PWM todavía codifica la misma información de potencia del 50%.
Sin embargo, el servo RC que espera un pulso PPM decodificará ese ancho de pulso como una posición diferente, y cambiará su posición o se ‘rendirá’ y no rastreará la señal.
El HS-645MG es un servo “analógico”, por lo que debe mantener la frecuencia de pulso (tasa de repetición) entre 30 Hz y 60 Hz.
El circuito en un servo analógico incluye un generador de pulso interno cuyo ancho es controlado por el potenciómetro de retroalimentación (que está conectado al eje de salida). Compara este pulso de referencia con el pulso de comando entrante, produciendo un pulso de ‘error’ cuyo ancho es proporcional a la diferencia entre la posición ordenada y la posición actual del servo. Este pulso de diferencia se ‘estira’ para producir un pulso más largo que impulsa el motor en la dirección requerida. Luego, el motor gira el eje de salida y el potenciómetro de retroalimentación hasta que el pulso de referencia interno coincide con el pulso de comando entrante.
El pulso de diferencia se estira para aumentar la cantidad de tiempo que el motor está encendido entre pulsos de comando. Si la frecuencia del pulso de comando es demasiado alta, el motor se sobrecargará y sobrepasará su posición objetivo. ¡Esto hará que el servo tiemble y posiblemente se queme!
las frecuencias más bajas son seguras, pero el servo responderá más lentamente. Incluso puede reducir la frecuencia a cero (sin pulsos) y el servo no alimentará su motor en absoluto (esto es útil para reducir el consumo de energía cuando se mantiene una posición).
El HS-645MG está especificado para un recorrido de salida de 90 ° cuando se controla mediante un ancho de pulso de 1.05ms a 1.95ms. Sin embargo, su circuito analógico aceptará un rango más amplio, y el límite real se establece mediante topes mecánicos en ~ 180 ° con un ancho de pulso de aproximadamente 0,6 ms a 2,4 ms.
PPM frente a PWM
Pulsos de servo están una forma de PWM, pero la información se codifica solo en el ancho del pulso (nominalmente de 1 ms a 2 ms, con ‘50% ‘a 1,5 ms). Esto es equivalente a PWM ‘normal’ con una proporción de 5% ~ 10% a 50Hz.
PPM (Modulación de POSICIÓN de pulso) se usa entre el transmisor y el receptor para enviar comandos para múltiples servos a través de un solo cable. El primer pulso marca el inicio de una trama, el siguiente pulso es el final del servocanal 1 y el inicio del canal 2, etc. Esto continúa hasta que se envían todos los canales, luego se requiere un espacio de al menos 2.5ms para marcar el final del marco. Los pulsos suelen tener aproximadamente 0,4 ms de ancho. Si la velocidad de fotogramas es de 50 Hz y cada canal puede ser de hasta 2 ms, se pueden enviar de forma fiable un máximo de 8 canales durante el fotograma de 20 ms. Antes de enviarse a los servos, este flujo de pulsos debe decodificarse en pulsos PWM individuales de 1 ~ 2ms, con la tasa de repetición que coincida con la tasa de cuadros de la señal PPM.
La mayoría de los sistemas de control de radio de los modelos actuales utilizan PCM en el aire y es posible que no tengan ninguna señal PPM interna. Sin embargo, todos los receptores reproducen la señal PWM de 1 ~ 2ms que se requiere para controlar un servo estándar. Algunos pueden enviar los pulsos de servo a una velocidad de fotogramas más alta (por ejemplo, 11 ms) y luego debe utilice servos ‘digitales’ que puedan procesar correctamente la frecuencia más alta.
Más adelante puedes encontrar las notas de otros desarrolladores, tú igualmente eres capaz mostrar el tuyo si lo crees conveniente.