Linealización del empuje del motor

Estoy trabajando con un vehículo acuático que usa cuatro motores para moverse. Se colocan en la esquina y son fijos. De ahí que los movimientos se obtengan cambiando la velocidad de cada uno.

El vehículo puede moverse a lo largo de tres ejes: Y (adelante, atrás), X (izquierda, derecha), Z (guiñada, CW y CCW). Recibo el setpoint para cada uno, ejemplo:

  • Eje Y: 50%
  • Eje X: 0%
  • Eje Z: -20%

Esto significa que el vehículo debe avanzar al 50 % de la velocidad máxima permitida y, al mismo tiempo, debe girar en sentido antihorario al 20 %.

Mi código asigna a cada motor un valor basado en el valor anterior, utilizando el principio de superposición. Ejemplo:

  • Eje Y -> #1: 50%, #2: 50%, #3: 50%, #50%
  • Eje X -> #2: 0%, #2: 0%, #3: 0%, #4: 0%
  • Eje Z -> #3: -20%, #2: -20%, #3: 15%, #4: 15%
  • Total: -> #1: 30%, #2: 30%, #3: 65%, #4: 65%

Funciona, pero para mejorar el comportamiento debemos tener en cuenta que el empuje que ejerce el motor no es lineal. Y si gira al revés la curva es diferente.

Ya midí e interpolé las curvas y terminé con dos funciones que describen el comportamiento: f(x)_fwd y f(x)_bck.

Pregunta

Debido a que el empuje depende tanto de la velocidad como de la dirección, no entiendo cómo compensar eso. Quiero decir, no puedo simplemente poner el valor de velocidad final en la variable 'x' porque este valor es la suma de diferentes contribuciones (ejes x, y, z) y cada uno requiere una compensación diferente.

Tampoco puedo aplicar esta corrección al principio, antes de sumar cada contribución porque aún no sé la velocidad final y la dirección del motor, por lo que no puedo saber qué ecuación usar.

Un pensamiento es el siguiente:

  1. Haga los cálculos como se describe arriba y encuentre la velocidad de trabajo estimada de cada motor
  2. Repetir el cálculo para cada eje esta vez con la corrección aplicada en función de la velocidad de trabajo estimada

No es óptimo porque terminará con diferentes velocidades (debido a la corrección) que cambiarán nuevamente el punto de trabajo e incluso la ecuación (es decir, si un motor inicialmente se configuró en -5%, después de la corrección se puede cambiar a + 5%!).

¿Cuál es el enfoque correcto en tal caso? Estoy seguro de que es un problema muy común, pero no sé las palabras exactas que se deben usar para buscar literatura al respecto.

EDITAR

Agrego algunos detalles para mejorar la pregunta. Primero, el vehículo es como una pequeña plataforma (1 x 2 metros) con cuatro motores en cada esquina. Los motores se colocan a 45° grados de esta manera:

ingrese la descripción de la imagen aquí

Donde la flecha indica el empuje que se ejerce cuando se aplica un voltaje positivo al motor.

lo que no me interesa

  • No quiero controlar la velocidad, la velocidad u otros parámetros de navegación del vehículo
  • la interfaz de los motores no es significativa: siempre pienso en términos de ±100%. Entonces la interfaz puede ser voltaje, 4-20 mA, PWM, línea serie, etc... no importa en absoluto
  • El vehículo no tiene ningún sensor adecuado para medir su velocidad o velocidad actual

lo que ya he hecho

  • Puse el motor en una piscina conectada a una celda de carga y medí el empuje para más de 50 valores de punto de referencia (es decir, 0 %, 10 %, 20 %,..., -10 %, -20 %,... )
  • Estos valores dan dos curvas (cuadrantes positivo y negativo) en forma de A x^P + B x, donde x es la señal de control

cual es el objetivo

Necesito proporcionar movimientos manuales básicos (adelante/atrás, traducir izquierda/derecha, girar CW/CCW) solamente .

Mirando la imagen de arriba, está claro que tengo que controlar cada motor de una manera diferente para obtener el movimiento deseado. Por ejemplo, para avanzar, cada motor debe configurarse con el mismo valor X. Para rotar los motores CW, 1 y 2 (abajo a la izquierda y arriba a la izquierda) deben ser negativos, mientras que 3 y 4 (arriba a la derecha y abajo a la derecha) deben ser positivos.

El problema es que el empuje ejercido por el motor no es lineal con el voltaje de control y cuando se invierte el empuje es mucho menor. Por lo tanto, si quiero girar y aplicar el mismo voltaje ±X a cada uno, no girará sobre su centro, porque los que giran al revés proporcionan mucho menos empuje.

Una primera corrección es controlar las que giran hacia adelante con un 30% menos que las que giran negativamente. Esto mejora mucho la rotación pero no es preciso porque la relación entre empuje positivo y negativo depende del voltaje de control.

Con la ecuación que encontré, ahora puedo establecer con precisión cada voltaje de control teniendo en cuenta el empuje real, pero el principal problema es dónde colocar esta ecuación .

Como decía en la pregunta original, si pongo esta ecuación en el valor final de cada motor no funcionará, porque es la suma de todos los movimientos. Ejemplo: si tengo solo un movimiento de rotación, dos motores girarán hacia adelante y dos hacia atrás. Pero si al mismo tiempo el vehículo debe avanzar, todos los motores girarán hacia adelante, pero unos más que otros (para proporcionar también la rotación).

Por lo tanto, los valores finales de la tensión de control ya no tienen la información sobre cuáles fueron los comandos de los ejes, mientras que el comando de los ejes aún no tiene los valores finales de la tensión de control (para decidir qué ecuación usar: positiva o negativa).

La corriente es aceleración, el voltaje es velocidad de estado estable. La dirección depende de la energía cinética almacenada frente a la potencia aplicada*tiempo. La velocidad máxima depende de la carga (arrastre) en relación con la potencia máxima y si el empuje coincide con la carga.
¿Se puede medir la velocidad con un sensor de presión (tubo de Pitot)? o un espirómetro?
No, no es posible. Los movimientos están en un lazo de control abierto. En realidad no nos interesa la velocidad del vehículo (para eso tenemos un lazo de control superior con otros equipos como GPS o INS). La velocidad de la que hablaba son las consignas de los motores, para proporcionar los movimientos correctos a lo largo de los ejes.

Respuestas (2)

No es una respuesta, más bien un comentario largo:

Esta pregunta está más relacionada con las matemáticas, por lo que debería buscar en algún foro de matemáticas. Suponga que tiene tres motores, entonces debe medir la velocidad precisa para diferentes configuraciones. Ahora obtendrá N ecuaciones con N coeficientes para calcular. Esto se hace por varios métodos. Etiquetas: Eliminación de Gauss, Determinante de Jacobi, Derivadas parciales,... El sistema puede seguir siendo un sistema lineal: más medidas, más puntos de interpolación, más precisión.

Puede tomar, por ejemplo, algunas técnicas de calibración para magnetómetro MEMS, acelerómetro.

Sin embargo, sería la mejor opción para determinar el patrón exacto de medidas, que tendría en cuenta la valiosa información del sistema.

Dado que las RPM frente al voltaje son solo lineales sin carga [kV/RPM]. El efecto de la carga es reducir las RPM en un 20 % si se adapta bien a la tarea. Habrá un voltaje de arranque que puede ser del 15 al 30 % estimado, dependiendo del umbral de fricción estática. El % de reducción de RPM con la carga de agua puede aumentar con las RPM según el diseño de la hélice en comparación con el funcionamiento en seco.

La mejor manera es probar el motor y el impulsor en el agua y medir las RPM, el voltaje, la corriente y el empuje del vehículo [N]. Usaría esta tabla de valores o obtendría una ecuación para usar para la potencia de entrada [W] frente a la fuerza de empuje o PWM. Voltaje vs RPM.

Luego puede acumular los amperios-hora consumidos o los vatios-hora pueden restarse de la capacidad de la batería para el indicador de combustible. La capacidad de la batería debe reducirse para una tasa de consumo inferior a la calificación de 20 h.

Ya he medido en el agua el empuje frente al voltaje y encontré una función para eso. La corriente y las rpm me parecen valores "intermedios", no útiles para el objetivo. Además, ¡nunca hablé de la batería! Sin batería en absoluto. Me disculpo si mi inglés es pobre, pero estoy buscando el lugar correcto en el circuito de control donde poner las ecuaciones.
Depende de lo que quieras controlar. Si es un circuito cerrado, la retroalimentación debe ser RPM o corriente. ¿Cuál es el objetivo?
¡Actualizaré la pregunta con más detalles!
Sea claro en cómo midió el vector de empuje, que no depende tanto de la velocidad del vehículo como de los controles de empuje de la aceleración. Entonces, si desea controlar la velocidad del vehículo, debe integrar el empuje del motor, que no es el voltaje del motor.