Como continuación a ESC Parte 1 escribo esta entrada para comentar una incidencia que he tenido. Probablemente es algo obvio para aquellos que vienen del aeromodelismo pero lo anoto por sí alguien se encuentra en la misma situación que yo.
Yo adquirí dos ESC para ir realizando diversas pruebas. Cuando el proyecto estaba más adelantado fui a comprar los otros dos ESC pero me encontré con que ya no estaban. Así qué tubería que adquirir dos unidades muy parecidas. En principio la única diferencia es que los primeros traían el conector para la "Monitorización de descarga balanceada" y los segundos no.
Tiempo después haciendo pruebas con los cuatro ESC y motores comprobé que no todos tenían la misma respuesta. Con el mismo pulso unos iban a una velocidad y otros a otra. Lo primero fue pensar en que fueran distintos los ESC comprados en dos veces pero no había una correlación. Tras muchas pruebas, estudios y búsqueda de información encontré la respuesta y con ella la solución. Los ESC se pueden calibrar y de hecho será una rutina para un aeromodelista. Se trata simplemente de indicar al ESC los puntos mínimo y máximo para los pulsos. Con una emisora de RC se hace con la correspondiente palanca llevándola al máximo y mínimo recorrido. Yo lo he hecho con el programa de control de los motores estableciendo el mínimo en 1000 µs y el máximo en 2000 µs. Llevando este procedimiento de la misma manera en los cuatro ESC desaparece el "problema". Y yo que me veía estableciendo linealizaciones particulares para cada ESC en la programación en Arduino...
Mostrando entradas con la etiqueta brushless. Mostrar todas las entradas
Mostrando entradas con la etiqueta brushless. Mostrar todas las entradas
sábado, 8 de junio de 2013
ESC Parte 2
Etiquetas:
Arduino,
BEC,
brushless,
control brushless,
Cuadricoptero,
Cuadricóptero,
DIY,
ESC,
motores,
Multicopter,
Multirotor,
Quad,
Quadcopter,
Quadrotor,
SBEC,
UBEC
martes, 28 de agosto de 2012
Control motores Parte 2
Como continuación a Control motores Parte 1 escribo esta entrada en la que explico el cambio en la concepción del código que permite tener una gran precisión en los tiempos, sumamente importantes para que las señales enviadas a los variadores produzcan una regulación suave y precisa. Es tan grande el cambio en la concepción del programa y su precisión que paso a la versión 2.0.
El código está preparado para el control de los 4 motores si bien su estructura permite de forma fácil ampliarlo para el control de más motores o servos.
Para no aburrir con todo el largo proceso de prueba y error de las distintas formas que se me ocurría y que finalmente no funcionaban, paso a describir el funcionamiento de la opción adoptada.
Hay que tener en cuenta que donde necesitamos gran precisión es en el tiempo que están activadas (en HIGH) las salidas. El tiempo de ciclo de 20 ms no tiene gran importancia que tenga pequeñas variaciones, de hecho las hay de una emisora a otra (en mi emisora Turnigy TGY 9X tengo calculado unos 19 ms) y si movemos varias palancas de la emisora a la vez el tiempo de ciclo de cada canal puede variar en algún milisegundo. Es más, podéis hacer la prueba en el código a cambiar el tiempo de ciclo en
if (micros() - TiempoControlCiclo >= 20000)
y en lugar de los 20000 µs poner valores mayores o inferiores. Si lo probáis con un servo con tiempos inferiores (por ejemplo 5000) veréis que al intentar mover la palanca del servo su respuesta es más limpia y no tiembla tanto ya que está actualizando su posición más veces por segundo (el cuádruple para un tiempo de 5000). En cambio si hacemos la prueba con valores más grandes, por ejemplo 50000, comprobamos que podemos mover más fácilmente la palanca de su posición ya que el servo está actualizándose menos veces por segundo, en nuestro ejemplo 2,5 veces más lento.
Para conseguir la mayor precisión en tiempo en el HIGH tenemos que utilizar la instrucción delaymicroseconds() que tiene una precisión de 1 µs. Si utilizamos la función micros() su precisión es de 4 µs. La idea es ordenar los pulsos de menor a mayor, activar todas las salidas e ir desactivándolas con los delay. El tema es que esas instrucciones llevan un tiempo ejecutarlas además de que no se puede utilizar el delay si queremos que sea de 0 segundos. La solución es decalar los pulsos, es la constante "Retardo" que establezco en 10 µs. Así siempre podemos utilizar la instrucción delaymicroseconds() cuyo valor para cada salida se calcula según el pulso, el retardo y el tiempo de ejecución de las instrucciones que ha sido calculado empíricamente. Los cálculos de ordenar los pulsos y recalcular los tiempos de delay se calculan antes de establecer los HIGH de modo que conseguimos tener unos tiempos muy precisos para los pulsos. Además todo el código es ejecutado en un tiempo reducido, unos 32 µs los primeros cálculos más el decalaje (para 4 motores son 30 µs) más el tiempo del mayor pulso que en el caso de motores es de unos 2000 µs y para servos 2500 µs.
Aquí tenéis el código con algún comentario que espero sea suficiente para entenderlo. Mi idea a medio plazo es sacar otra versión preparada para manejar algunos servos además de los 4 motores.
Archivo para Arduino 1.0.1: Control motores v2.0
El código está preparado para el control de los 4 motores si bien su estructura permite de forma fácil ampliarlo para el control de más motores o servos.
Para no aburrir con todo el largo proceso de prueba y error de las distintas formas que se me ocurría y que finalmente no funcionaban, paso a describir el funcionamiento de la opción adoptada.
Hay que tener en cuenta que donde necesitamos gran precisión es en el tiempo que están activadas (en HIGH) las salidas. El tiempo de ciclo de 20 ms no tiene gran importancia que tenga pequeñas variaciones, de hecho las hay de una emisora a otra (en mi emisora Turnigy TGY 9X tengo calculado unos 19 ms) y si movemos varias palancas de la emisora a la vez el tiempo de ciclo de cada canal puede variar en algún milisegundo. Es más, podéis hacer la prueba en el código a cambiar el tiempo de ciclo en
if (micros() - TiempoControlCiclo >= 20000)
y en lugar de los 20000 µs poner valores mayores o inferiores. Si lo probáis con un servo con tiempos inferiores (por ejemplo 5000) veréis que al intentar mover la palanca del servo su respuesta es más limpia y no tiembla tanto ya que está actualizando su posición más veces por segundo (el cuádruple para un tiempo de 5000). En cambio si hacemos la prueba con valores más grandes, por ejemplo 50000, comprobamos que podemos mover más fácilmente la palanca de su posición ya que el servo está actualizándose menos veces por segundo, en nuestro ejemplo 2,5 veces más lento.
Para conseguir la mayor precisión en tiempo en el HIGH tenemos que utilizar la instrucción delaymicroseconds() que tiene una precisión de 1 µs. Si utilizamos la función micros() su precisión es de 4 µs. La idea es ordenar los pulsos de menor a mayor, activar todas las salidas e ir desactivándolas con los delay. El tema es que esas instrucciones llevan un tiempo ejecutarlas además de que no se puede utilizar el delay si queremos que sea de 0 segundos. La solución es decalar los pulsos, es la constante "Retardo" que establezco en 10 µs. Así siempre podemos utilizar la instrucción delaymicroseconds() cuyo valor para cada salida se calcula según el pulso, el retardo y el tiempo de ejecución de las instrucciones que ha sido calculado empíricamente. Los cálculos de ordenar los pulsos y recalcular los tiempos de delay se calculan antes de establecer los HIGH de modo que conseguimos tener unos tiempos muy precisos para los pulsos. Además todo el código es ejecutado en un tiempo reducido, unos 32 µs los primeros cálculos más el decalaje (para 4 motores son 30 µs) más el tiempo del mayor pulso que en el caso de motores es de unos 2000 µs y para servos 2500 µs.
Aquí tenéis el código con algún comentario que espero sea suficiente para entenderlo. Mi idea a medio plazo es sacar otra versión preparada para manejar algunos servos además de los 4 motores.
Archivo para Arduino 1.0.1: Control motores v2.0
Etiquetas:
Arduino,
brushless,
control brushless,
Cuadricoptero,
Cuadricóptero,
DIY,
ESC,
motores,
Multicopter,
Multirotor,
Quad,
Quadcopter,
Quadrotor,
servo
martes, 24 de julio de 2012
Control motores Parte 1
Tal y como ya se ha comentado en Motores el tipo de los mismos es brushless y su control se realiza mediante los ESC. La forma de controlar un ESC es la misma que la de un servo ya que los dos elementos están pensados para ser manejados directamente desde una emisora RC.
La forma más sencilla de manejarlos desde Arduino es con la libraría Servo.h. Sin embargo esta librería funciona mediante interrupciones y en mi código quiero evitarlas. ¿Por qué? Porque las interrupciones afectan a la precisión en la medición de tiempos algo que es vital en el cuadricóptero. Por un lado estoy tratando de eliminar al máximo el rizado que se produce en la lectura de los canales de la emisora RC, si se produce una interrupción en un momento cercano a la toma de tiempos éstos varían produciendo rizados mayores.
Por tanto el código que estoy desarrollando tendrá un tiempo de ciclo de 20 ms que es el que tiene las señales de la emisora RC y por tanto el de los ESC (para los motores). Las lecturas del AHRS también se realizan cada 20 ms. En cada ciclo realizaremos todas las operaciones de forma secuencial y no será necesario utilizar interrupciones.
Esta primera versión del código es poco eficiente ya que adolece de los mismos fallos que se producen en Leer emisora RC en cuanto a la precisión de tiempos y el rizado que se produce sobre el que también estoy trabajando. Sin embargo lo expongo para que se vea el proceso básico de programación y así también será más fácil seguir la programación del código mejorado para cuando lo tenga implementado.
Archivo para Arduino 1.0.1: Control motores v1.0
Tenéis una nueva entrada en Control motores Parte 2 en donde he desarrollado un nuevo código muy preciso.
La forma más sencilla de manejarlos desde Arduino es con la libraría Servo.h. Sin embargo esta librería funciona mediante interrupciones y en mi código quiero evitarlas. ¿Por qué? Porque las interrupciones afectan a la precisión en la medición de tiempos algo que es vital en el cuadricóptero. Por un lado estoy tratando de eliminar al máximo el rizado que se produce en la lectura de los canales de la emisora RC, si se produce una interrupción en un momento cercano a la toma de tiempos éstos varían produciendo rizados mayores.
Por tanto el código que estoy desarrollando tendrá un tiempo de ciclo de 20 ms que es el que tiene las señales de la emisora RC y por tanto el de los ESC (para los motores). Las lecturas del AHRS también se realizan cada 20 ms. En cada ciclo realizaremos todas las operaciones de forma secuencial y no será necesario utilizar interrupciones.
Esta primera versión del código es poco eficiente ya que adolece de los mismos fallos que se producen en Leer emisora RC en cuanto a la precisión de tiempos y el rizado que se produce sobre el que también estoy trabajando. Sin embargo lo expongo para que se vea el proceso básico de programación y así también será más fácil seguir la programación del código mejorado para cuando lo tenga implementado.
Archivo para Arduino 1.0.1: Control motores v1.0
Tenéis una nueva entrada en Control motores Parte 2 en donde he desarrollado un nuevo código muy preciso.
Etiquetas:
Arduino,
brushless,
control brushless,
Cuadricoptero,
Cuadricóptero,
DIY,
ESC,
motores,
Multicopter,
Multirotor,
Quad,
Quadcopter,
Quadrotor,
servo
lunes, 30 de abril de 2012
ESC Parte 1
Probablemente ya sabes lo que es un ESC. En cualquier caso lo explico de forma rápida. Un ESC (Electronic Speed Control) es un equipo que lee la señal PWM de salida de una emisora RC y la convierte a la señal de potencia necesaria para alimentar un motor brushless. El ESC también nos permite el control de la velocidad del motor. La señal de control al ESC, típicamente la salida de los canales de una emisora RC, es la que reproduciremos desde nuestro Arduino.
Dos son las características principales que hay que tener en cuenta para la elección de un ESC.
En primer lugar el rango de tensión con el que está preparado para funcionar, normalmente expresado en las celdas de baterías lipo. Lo más común es un ESC para un rango entre 2S y 4S. En el caso de cuadricópteros lo más normal es con baterías lipo de 3S. Proyectos más ambiciosos de cuadricópteros de mayores tamaños para llevar más peso pueden proyectarse con baterías 4S.
La segunda característica es la intensidad capaz de suministrar. Este dato va directamente relacionado con las características de los motores seleccionados. Como es lógico nuestro ESC tiene que ser capaz de suministrar como mínimo la intensidad máxima del motor elegido, siempre teniendo en cuenta un pequeño margen de seguridad.
En mi caso como expliqué en Motores el consumo de los Turnigy 2209 a máxima potencia en continuo es de 12 A y el máximo puntual de 15 A. Por tanto mi elección de ESC es el Turnigy Sentry 18 A, con capacidad de 18 A en continuo y un pico puntual de hasta 22 A.
Siento no poder poner el enlace de este modelo de ESC pero es que Hobbyking ha dejado de fabricarlos, al menos no se encuentran en su catálogo de la web. Tal es así que yo había adquirido dos unidades de este modelo para hacer las primeras pruebas y al ir a comprar los otros dos tuve que coger el modelo Turnigy Plush 18 A. La diferencia es mínima, referente a otra característica de los ESC que explicaré un poco más adelante.
Otro aspecto de los ESC es que pueden llevar integrado un BEC, Battery Eliminator Circuit, traducido Circuito Eliminador de Batería. Así es, para nuestros motores necesitamos una batería por ejemplo de 3S que da 11,1 V. Sin embargo la alimentación de los servos y la electrónica de control se hace con 5 V. Pues bien, en lugar de poner otra batería que nos suministre esos 5 V la eliminamos y el BEC es quien nos los va a proporcionar.
Una última opción que puede llevar un ESC es el conector para la "Monitorización de descarga balanceada". Este conector está estandarizado y se denomina JST-XH. Es el mismo conector que traen las baterías lipo para la carga balanceada. Así conectaremos ESC y lipo con esta conexión de modo que el ESC estará midiendo continuamente la tensión de cada una de las celdas de la lipo. Cuando cualquiera de las celdas baje hasta los 3 voltios el ESC reducirá potencia a los motores protegiendo nuestra lipo de una descarga mayor que la haría inservible sin opción de recuperarla.
Los ESC de intensidades bajas y para tensiones sobre 3S o 4S como mucho el BEC suele ser lineal, es decir, lleva un regulador de tensión que hace que la diferencia de tensión de la lipo con los 5 V que suministra por la intensidad que circula la disipa en forma de calor. Sin duda es pérdida de energía que estamos sufriendo aunque no sea mucha comparada con la potencia consumida por los motores. Para evitar esta pérdida de energía están los BEC conmutados (en inglés switch). Su función es la misma pero su rendimiento energético está cercano al 100%. Muy útil cuando el consumo a través de los 5 V empieza a ser importante y sobre todo cuando la lipo es de 4S o superior.
Si nuestro ESC no tiene BEC o si es lineal y por las características de nuestro montaje nos supone una pérdida de energía a tener en cuenta podemos hacernos con un BEC externo. Comercialmente se denominan SBEC o UBEC, depende de fabricantes. En los dos casos son un BEC de conmutación.
Tenéis una nueva entrada en ESC Parte 2.
Dos son las características principales que hay que tener en cuenta para la elección de un ESC.
En primer lugar el rango de tensión con el que está preparado para funcionar, normalmente expresado en las celdas de baterías lipo. Lo más común es un ESC para un rango entre 2S y 4S. En el caso de cuadricópteros lo más normal es con baterías lipo de 3S. Proyectos más ambiciosos de cuadricópteros de mayores tamaños para llevar más peso pueden proyectarse con baterías 4S.
La segunda característica es la intensidad capaz de suministrar. Este dato va directamente relacionado con las características de los motores seleccionados. Como es lógico nuestro ESC tiene que ser capaz de suministrar como mínimo la intensidad máxima del motor elegido, siempre teniendo en cuenta un pequeño margen de seguridad.
En mi caso como expliqué en Motores el consumo de los Turnigy 2209 a máxima potencia en continuo es de 12 A y el máximo puntual de 15 A. Por tanto mi elección de ESC es el Turnigy Sentry 18 A, con capacidad de 18 A en continuo y un pico puntual de hasta 22 A.
Siento no poder poner el enlace de este modelo de ESC pero es que Hobbyking ha dejado de fabricarlos, al menos no se encuentran en su catálogo de la web. Tal es así que yo había adquirido dos unidades de este modelo para hacer las primeras pruebas y al ir a comprar los otros dos tuve que coger el modelo Turnigy Plush 18 A. La diferencia es mínima, referente a otra característica de los ESC que explicaré un poco más adelante.
Otro aspecto de los ESC es que pueden llevar integrado un BEC, Battery Eliminator Circuit, traducido Circuito Eliminador de Batería. Así es, para nuestros motores necesitamos una batería por ejemplo de 3S que da 11,1 V. Sin embargo la alimentación de los servos y la electrónica de control se hace con 5 V. Pues bien, en lugar de poner otra batería que nos suministre esos 5 V la eliminamos y el BEC es quien nos los va a proporcionar.
Una última opción que puede llevar un ESC es el conector para la "Monitorización de descarga balanceada". Este conector está estandarizado y se denomina JST-XH. Es el mismo conector que traen las baterías lipo para la carga balanceada. Así conectaremos ESC y lipo con esta conexión de modo que el ESC estará midiendo continuamente la tensión de cada una de las celdas de la lipo. Cuando cualquiera de las celdas baje hasta los 3 voltios el ESC reducirá potencia a los motores protegiendo nuestra lipo de una descarga mayor que la haría inservible sin opción de recuperarla.
Los ESC de intensidades bajas y para tensiones sobre 3S o 4S como mucho el BEC suele ser lineal, es decir, lleva un regulador de tensión que hace que la diferencia de tensión de la lipo con los 5 V que suministra por la intensidad que circula la disipa en forma de calor. Sin duda es pérdida de energía que estamos sufriendo aunque no sea mucha comparada con la potencia consumida por los motores. Para evitar esta pérdida de energía están los BEC conmutados (en inglés switch). Su función es la misma pero su rendimiento energético está cercano al 100%. Muy útil cuando el consumo a través de los 5 V empieza a ser importante y sobre todo cuando la lipo es de 4S o superior.
Si nuestro ESC no tiene BEC o si es lineal y por las características de nuestro montaje nos supone una pérdida de energía a tener en cuenta podemos hacernos con un BEC externo. Comercialmente se denominan SBEC o UBEC, depende de fabricantes. En los dos casos son un BEC de conmutación.
Tenéis una nueva entrada en ESC Parte 2.
Etiquetas:
Arduino,
BEC,
brushless,
control brushless,
Cuadricoptero,
Cuadricóptero,
DIY,
ESC,
motores,
Multicopter,
Multirotor,
Quad,
Quadcopter,
Quadrotor,
SBEC,
UBEC
sábado, 7 de abril de 2012
Motores
Tras documentarse un poco se llega enseguida a la conclusión de que los motores a utilizar conviene que sean de baja velocidad. Un cuadricóptero no está pensado para volar muy rápido así que no necesitamos altas r.p.m. que nos producirán vibraciones innecesarias. Por supuesto no me detengo a explicar que los motores tienen que ser de tipo brushless, los mejores para estos usos con diferencia.
Yo compré los Turnigy 2209. Vienen con completos accesorios. Tienen un Kv de 1050 lo que creo no está mal para un motor 3S. Hay que tener en cuenta este punto, nos interesa que el motor sea de baja velocidad para que produzca pocas vibraciones, pero para eso no nos tenemos que fijar únicamente en el dato de Kv, también hay que fijarse en la tensión de alimentación. El Turnigy 2209 puede ir bien para un cuadricóptero con su Kv de 1050 ya que se alimenta a 3S (11,1 V). Esto hace una velocidad máxima de 1050 x 11,1 = 11.655 r.p.m. Siempre es mejor que sea más baja pero en este caso no está del todo mal. Sin embargo un Kv de 1050 en un motor 4S (14,8 V) tendrá una velocidad máxima de 1050 x 14,8 = 15.540 r.p.m. lo que empiezan a ser muchas revoluciones.
En general creo que a la hora de diseñar nuestro cuadricóptero debemos tomar como punto de partida motores con un Kv inferior a 1000 si son 3S y un Kv inferior a 750 si son 4S.
Sobre el empuje que producen, aunque el dato no viene en las características técnicas, si nos guiamos por los datos ofrecidos por algún usuario estos motores están dimensionados para trabajar a máxima potencia en continuo con un consumo de 12 A lo que nos ofrecerá unos 600 gramos de empuje. El pico de intensidad admitido es de 15 A lo que nos dará unos 750 gramos de empuje para momentos puntuales.
Como dato empírico de otros usuarios suele darse como bueno que el empuje de los motores sea el doble del peso del cuadricóptero en orden de marcha. El empuje total en continuo tenemos 600 x 4 = 2,4 kg lo que nos deja un peso para el cuadricóptero en orden de marcha de 1,2 kg. Suficiente para llevar el chasis, electrónica, motores, etc., y algo de peso extra como una cámara de fotos además de una buena batería.
En otro artículo daré explicación más detallada de todos los pesos.
Yo compré los Turnigy 2209. Vienen con completos accesorios. Tienen un Kv de 1050 lo que creo no está mal para un motor 3S. Hay que tener en cuenta este punto, nos interesa que el motor sea de baja velocidad para que produzca pocas vibraciones, pero para eso no nos tenemos que fijar únicamente en el dato de Kv, también hay que fijarse en la tensión de alimentación. El Turnigy 2209 puede ir bien para un cuadricóptero con su Kv de 1050 ya que se alimenta a 3S (11,1 V). Esto hace una velocidad máxima de 1050 x 11,1 = 11.655 r.p.m. Siempre es mejor que sea más baja pero en este caso no está del todo mal. Sin embargo un Kv de 1050 en un motor 4S (14,8 V) tendrá una velocidad máxima de 1050 x 14,8 = 15.540 r.p.m. lo que empiezan a ser muchas revoluciones.
En general creo que a la hora de diseñar nuestro cuadricóptero debemos tomar como punto de partida motores con un Kv inferior a 1000 si son 3S y un Kv inferior a 750 si son 4S.
Sobre el empuje que producen, aunque el dato no viene en las características técnicas, si nos guiamos por los datos ofrecidos por algún usuario estos motores están dimensionados para trabajar a máxima potencia en continuo con un consumo de 12 A lo que nos ofrecerá unos 600 gramos de empuje. El pico de intensidad admitido es de 15 A lo que nos dará unos 750 gramos de empuje para momentos puntuales.
Como dato empírico de otros usuarios suele darse como bueno que el empuje de los motores sea el doble del peso del cuadricóptero en orden de marcha. El empuje total en continuo tenemos 600 x 4 = 2,4 kg lo que nos deja un peso para el cuadricóptero en orden de marcha de 1,2 kg. Suficiente para llevar el chasis, electrónica, motores, etc., y algo de peso extra como una cámara de fotos además de una buena batería.
En otro artículo daré explicación más detallada de todos los pesos.
Suscribirse a:
Entradas (Atom)