Múltiples señales PWM desde un solo canal de audio

Este es mi proyecto en pocas palabras: estoy construyendo un cuadricóptero y necesito controlar cada uno de los cuatro motores de forma independiente. Estoy usando un iPhone como el "cerebro" del cuadricóptero, con toda la lógica de control implementada en el software del teléfono.

De alguna manera, necesito conectar mi iPhone con los ESC para cada uno de los motores sin escobillas. No tengo acceso al puerto Lightning (ni al dinero para unirme al programa MFI de Apple), así que me queda el conector para auriculares. Sería razonablemente simple controlar la frecuencia/amplitud de los dos canales de audio y convertir las señales a PWM, pero necesito extraer CUATRO señales de los dos canales.

Mi idea es esta: "codificar" dos señales por canal dedicando dos frecuencias diferentes (por ejemplo, 100 Hz y 1000 Hz) y modulando su amplitud en el software. Luego necesito una forma de dividir las frecuencias en sus propias señales independientes para convertirlas a PWM, antes de llegar a los ESC. ¿Qué podría hacer para que esto funcione?

O, ¿hay una manera más fácil de lograr lo que necesito? Soy ingeniero de software de oficio y aspirante a EE por afición, por lo que mi experiencia en electrónica es limitada. Una Transformada de Fourier sería la respuesta en el mundo digital, pero no estoy seguro de cómo hacer que esto funcione en el mundo analógico. Si alguien tiene una solución mejor, ¡me encantaría escucharla!

Respuestas (1)

parece que quieres usar una señal PPM. En lugar de modular el ancho del pulso, está modulando el tiempo entre pulsos.

Digamos que quiere controlar seis servos usando un solo canal: construirá un 'paquete' con siete pulsos, el tiempo entre los pulsos le indica al receptor la posición deseada del servo, nominalmente 1500uS. Digamos que queremos que los seis servos estén en el punto muerto. En este caso enviarás los siete pulsos, cada uno separado por 1500uS. En el extremo del receptor, asignará cada espacio entre pulsos a un servo donde puede generar una señal PWM continua con el período y el trabajo deseados. Voy a arrojar un poco de código si quieres.

A menos que lea la documentación ESC incorrectamente, tengo entendido que el ancho del pulso es lo que determina la velocidad del motor, independientemente de la frecuencia. Un ejemplo sugirió que 1 ms encendido, 19 ms apagado es bastante típico, pero la frecuencia puede variar sin afectar demasiado al motor. Sin embargo, su solución es interesante, así que me encantaría saber más al respecto.
Tal vez no fui claro. Aún necesitará un PWM para controlar su ESC. ¿Cómo transmite información sobre el ancho de pulso en un solo canal? PPM es una manera. Este es un método típico utilizado en vehículos RC. Hay varias formas de hacer esto, potencialmente usando un BLE SOC ya que podría interactuar con eso muy bien desde su dispositivo iOS; No creo que puedas escapar sin un micro a bordo. Por cierto, el 'deber' o ciclo de trabajo es básicamente el ancho de pulso como porcentaje. Es más general usar esta métrica ya que la frecuencia puede variar, pero el porcentaje de pulso con encendido o apagado será constante.
Vale, creo que ahora te entiendo. Entonces, ¿está diciendo que construyo mi propio "receptor" que acepta una señal PPM sobre BLE, en lugar de intentar convertir una señal de audio a PWM? Todavía no estoy seguro de qué componentes necesitaría para lograr eso.
Acercarse. Puede comprar fácilmente los transmisores y receptores RC y los transmisores que enviarán ppm a través de RF directamente. Si desea seguir la ruta BLE, su dispositivo iOS ya tiene BLE, por lo que solo necesitaría un microcontrolador con BLE para recibir paquetes. En este caso, simplemente crearía un paquete struct, dict o json especificando el deber PWM deseado. No se requieren ppm en este caso.
Bien, eso es muy útil. ¿Necesitaría algo tan complejo/grande/caro como un Arduino o Pi, o hay receptores BLE más simples que se adapten a nuestras necesidades? Si uso algo como un Pi, también podría renunciar al iPhone por completo ... pero estoy tratando de mantener tanto en el teléfono como sea posible :)
Podría usar algo como un rfduino para recibir datos de su iPhone. Es un micro con BLE incorporado. Hay muchos otros SOC con BLE, pero el rfduino puede ser más sencillo para comenzar. También es importante considerar el ancho de banda de BLE VS el ancho de banda de los bucles de control que necesitará para estabilizar el rotor cuádruple. Creo que puede encontrar que un controlador integrado para la estabilización con puntos de ajuste proporcionados por el dispositivo iOS podría ser el camino a seguir. En este punto, podría recomendar comprar algo como el crazyflie que esencialmente tiene todo este hardware listo para funcionar.