Story Transcript
Capítulo 6: Interfaz PC a Bordo-Servomotores y Conmutación de Modo
Blanca Rubio Díaz
6 INTERFAZ ORDENADOR DE A BORDO-SERVOMOTORES Y CONMUTACIÓN MODO MANUAL/AUTOMÁTICO 6.1 Justificación Tal como explicamos en el Capítulo 1, el principal objetivo del proyecto Hermes es el logro del vuelo autónomo de un helicóptero de radiocontrol. Esto implica que, a partir de las medidas de los sensores, el computador de vuelo debe ser capaz de calcular las acciones de control necesarias y aplicarlas sobre los servos correspondientes. Puesto que la radio sirve exclusivamente para ejercer un control manual sobre la aeronave, cuando queramos pasar a control automático necesitamos una alternativa a la radio que actúe como intermediaria entre el ordenador de a bordo y los servos. Si el ordenador de a bordo tuviera suficientes salidas PWM (al menos tantas como el número de servos), no tendríamos más que calcular las señales PWM y aplicárselas a los servos a través de una mera conexión física. Sin embargo, ya adelantamos en el Apartado 3.1 la imposibilidad de encontrar una placa con más de 4 salidas PWM, por lo que la solución adoptada ha sido recurrir al dispositivo Mini Maestro 12-channel USB servo controller de Pololu, que no es más que un controlador de servo de 12 canales mediante puerto USB. Lo que haremos será comunicar al Mini Maestro 12 mediante USB cómo deben ser las señales PWM concretas que queremos aplicar, y él se encargará de generarlas.
Figura 38: Mini Maestro 12-channel USB servo controller de Pololu
Mediante el Mini Maestro 12 tenemos resuelto el problema del control automático sobre el helicóptero. Ahora bien, conviene disponer de un modo de paso a control manual de forma rápida para evitar accidentes de la aeronave en caso de que haya algún error en el cálculo de las señales de control o los parámetros de configuración de los controladores no sean adecuados. Para conmutar de control automático a manual y viceversa utilizamos el dispositivo RC Servo Multiplexer 4 Channel de Pololu. Este dispositivo recibe dos conjuntos de 4 señales PWM distintas y, en función de una señal PWM de entrada adicional, decide poner a su salida uno u otro de los dos conjuntos. Como nosotros precisamos de 5 señales PWM para los servos, utilizamos dos de estos dispositivos, que compartirán la señal de selección.
55
Capítulo 6: Interfaz PC a Bordo-Servomotores y Conmutación de Modo
Blanca Rubio Díaz
Figura 39: RC Servo Multiplexer 4 Channel de Pololu
6.2 Pololu Mini Maestro 12-channel USB servo controller 6.2.1 Introducción Con tres métodos de control (USB para conexión directa a PC, TTL serie para uso con sistemas empotrados y scripting interno para aplicaciones de control autónomas) y canales que pueden configurarse como salidas tipo servo para uso con servos de radiocontrol o como controles de velocidad electrónicos (ESCs), salidas digitales o entradas analógicas/digitales, el Maestro es un controlador de servo muy versátil y una placa de E/S con formato altamente compacto. Los pulsos de servo que genera tienen alta resolución, son muy precisos y tienen un jitter de 200 ns; el control de velocidad y aceleración incorporado facilita movimientos suaves y exactos sin necesidad de computar y enviar constantemente actualizaciones de las posiciones intermedias al Maestro. El Maestro permite configurar tasas de pulsos (hasta 333 MHz) y puede generar un amplio rango de pulsos para posibilitar la mayor instantaneidad y el mayor rango posibles en servos modernos. Las unidades se pueden conectar en serie con controladores de Pololu para servo y para motor en una línea serie única. Se dispone de un programa para su configuración y control, tanto en Windows como en Linux, que facilita la configuración y las pruebas de la placa mediante USB, así como la creación de secuencias de movimientos de los servos para aplicaciones de robótica y escribir, revisar y ejecutar scripts almacenados en el controlador. La memoria interna del Maestro para scripts permite el almacenamiento de posiciones de servos que pueden reproducirse automáticamente, sin necesidad de conectarse a ningún otro ordenador o microcontrolador. Los canales del Maestro pueden emplearse como salidas digitales de propósito general o como entradas analógicas o digitales, lo que constituye un medio muy simple para leer sensores y controlar periféricos directamente desde un PC conectado por USB. Estas entradas pueden usarse con el sistema de script para permitir la creación de animaciones que respondan a estímulos externos. La Tabla 19 resume las características del Mini Maestro 12.
56
Capítulo 6: Interfaz PC a Bordo-Servomotores y Conmutación de Modo
Blanca Rubio Díaz
Mini Maestro 12 Canales
12
Canales de entrada analógicos
12
Canales de entrada digitales
0
Ancho
2.79 cm
Longitud
3.61 cm
Peso
4.2 g
Tasa configurable de pulsos
1–333 Hz
Rango de pulsos
64–4080 μs
Tamaño de script
8 KB Tabla 19: Características del Mini Maestro 12
La interfaz USB del Maestro ofrece acceso a todas las opciones de configuración, así como soporte para control en tiempo real, realimentación y depuración. Las operaciones que hemos realizado con el Mini Maestro 12 pueden dividirse en dos categorías:
Primeros pasos y configuración. A esta categoría pertenecen las pruebas iniciales con el dispositivo para familiarizarse con él, así como su configuración, que lo preparará para desempeñar su función de acuerdo con nuestras necesidades. Para esta fase inicial de utilización del Mini Maestro se ha optado por emplear el programa Maestro Control Center, suministrado por Pololu. Los pasos llevados a cabo con dicho programa no son específicos del objetivo que se plantea en el proyecto Hermes, por lo que se ha considerado más adecuado describirlos en el Anexo A. No obstante, las elecciones tomadas durante la configuración que se reflejan en dicho Anexo se han particularizado para nuestro caso.
Integración en la aplicación. En el marco del proyecto Hermes, nos interesa ser capaces de hacer uso de las distintas funcionalidades que ofrece el Mini Maestro desde la aplicación de vuelo. Para ello, no tendremos más que enviarle comandos serie que lo insten a realizar las labores que requiramos, tal como se detalla en el Apartado 6.2.4.
6.2.2 Pinout El controlador de servo Mini Maestro 12 puede conectarse al puerto USB de un PC mediante un cable mini USB. La conexión USB se emplea para enviar los comandos al controlador de servo, obtener información sobre su estado actual y enviar y recibir bytes serie TTL en las líneas TX y RX. En la Figura 40 se muestra la distribución de pines del Mini Maestro 12.
57
Capítulo 6: Interfaz PC a Bordo-Servomotores y Conmutación de Modo
Blanca Rubio Díaz
Figura 40: Vista superior del Mini Maestro 12
El procesador y los servos pueden tener fuentes de alimentación distintas.
La alimentación del procesador debe proceder bien del USB o de una fuente externa de 5-16 V conectada a las entradas VIN y GND situadas a la izquierda de la placa. Es seguro conectar una fuente de alimentación externa a la vez que el USB; en ese caso, el procesador se alimentará a través de la fuente externa. Las conexiones para alimentación de los servos se sitúan en la esquina inferior derecha de la placa. La alimentación se transmite directamente a los servos sin pasar por ningún regulador, por lo que los únicos requisitos que debe cumplir la fuente son que esté dentro del rango de operación de los servos y que suministre suficiente corriente para la aplicación.
Es posible alimentar el procesador del Maestro y los servos mediante una única fuente conectando la línea positiva de potencia tanto a VIN como al positivo de la alimentación de los servos (la conexión de tierra puede ser única por estar todos los pines de tierra cortocircuitados). Se recomienda conectar la fuente de alimentación a los pines dedicados a la alimentación de los servos en la esquina inferior derecha de la placa y emplear el jumper azul incluido para conectar los pines etiquetados como “VSVR-VIN”. La salida de potencia 5V (out) permite alimentar con el Mini Maestro dispositivos externos que funcionen a 5 V, bien desde el regulador de 150 mA incorporado en la placa o bien directamente desde el USB. El regulador se emplea siempre que el pin VIN esté alimentado; en ese caso, puesto que el Maestro requiere 50 mA, hay aproximadamente otros 50 mA disponibles para alimentar otros dispositivos. Las líneas de señal (0, 1, 2, …) se usan para enviar pulsos a los servos, controlar salidas digitales y medir voltajes. El límite total de corriente (de entrada o salida) para estos pins es de 150 mA, pero cuando se usa el regulador la corriente de salida está limitada a 50 mA.
58
Capítulo 6: Interfaz PC a Bordo-Servomotores y Conmutación de Modo
Blanca Rubio Díaz
La línea RX se emplea para recibir bytes serie TTL (0-5 V) no invertidos, tal como aparecen en los microcontroladores tipo UART. Estos bytes pueden ser comandos serie para el Maestro, bytes arbitrarios de envío al PC, o ambos. La línea TX transmite bytes serie TTL (0-5V) no invertidos. Estos bytes pueden generarse en el propio Mini Maestro (como respuestas a comandos serie o a bytes arbitrarios enviados desde el PC a través de la conexión USB), o bien pueden proceder de la línea TXIN. El pin RST puede ponerse a nivel bajo para aplicar un reset en el microcontrolador del Maestro. Esta línea está mantenida a nivel alto internamente, así que es seguro dejar este pin desconectado. La línea ERR es una salida asociada al LED de usuario/error rojo. Se pone a nivel alto cuando el LED rojo se activa y se pone a nivel bajo cuando se desactiva. El LED rojo se enciende cuando ocurre algún error y se apaga cuando las banderas de error se desactivan, y también puede controlarse desde el script de usuario. Puesto que la línea ERR nunca se pone a nivel bajo, es seguro conectarla a múltiples Mini Maestros. La línea TXIN es una línea de entrada serie que facilita la conexión serie de múltiples Mini Maestros. Todos los bytes serie recibidos por esta línea se acumulan en un buffer mediante una puerta AND y son transmitidos por la línea TX.
6.2.3 Modos de Funcionamiento Existen tres modos de funcionamiento serie básicos:
USB Dual Port. En este modo, el Command Port puede usarse para enviar comandos al Maestro y recibir respuestas de él. La tasa de baudios establecida en el programa terminal al abrir el Command Port es irrelevante. El TTL Port puede usarse para enviar bytes por la línea TX y recibir bytes por la línea RX. La tasa de baudios establecida en el programa terminal al abrir el TTL Port determina la tasa de baudios empleada al recibir y enviar bytes por RX y TX. Esto permite al PC controlar el Maestro y usar simultáneamente las líneas RX y TX como puerto serie de propósito general para comunicarse con otros tipos de dispositivos serie TTL.
Figura 41: Modo USB Dual Port
USB Chained. En este modo, el Command Port se usa tanto para transmitir bytes por la línea TX como para enviar comandos al Maestro. Las respuestas del Maestro a estos comandos se enviarán por el Command Port, pero no por la línea TX. Los bytes recibidos por la línea RX se enviarán al Command Port, pero no serán interpretados como comandos por el Maestro. La tasa de baudios fijada en el programa terminal al 59
Capítulo 6: Interfaz PC a Bordo-Servomotores y Conmutación de Modo
Blanca Rubio Díaz
abrir el Command Port determina la tasa de baudios empleada para recibir y enviar bytes por las líneas RX y TX. El TTL Port no se utiliza. Este modo permite que un único puerto COM del PC controle múltiples Maestros, o un solo Maestro y otros dispositivos con protocolo compatible.
Figura 42: Modo USB Chained
UART. En este modo, las líneas TX y RX se emplean para enviar comandos al Maestro y recibir respuestas de él. Cualquier byte recibido por RX será enviado al Command Port, pero los bytes enviados desde el Command Port serán ignorados. El TTL Port no se utiliza. La tasa de baudios en TX y RX puede ser detectada automáticamente cuando se recibe un byte 0xAA por RX, o bien se puede especificar un valor en bps en el mismo Maestro Control Center. Este modo permite controlar el Maestro (y enviar bytes a un programa serie que se ejecuta en un PC) usando un microcontrolador u otro dispositivo serie TTL.
Figura 43: Modo UART
En nuestro caso, el funcionamiento que requerimos del Maestro es el del USB Dual. Esta preferencia deberá especificarse antes de empezar a probar el Mini Maestro en el ordenador de a bordo, durante la fase de configuración, tal como explica el Anexo A.
6.2.4 Comunicación mediante puerto COM virtual Una vez realizadas las primeras pruebas de configuración de los canales y de control de los servos con el Maestro Control Center en un PC con Windows, pasamos a manejar el Mini Maestro desde el ordenador de a bordo, que es nuestro objetivo desde el principio. La comunicación con el Maestro se logra mediante el envío de paquetes de comando consistentes en un único byte de comando seguido por los bytes de datos requeridos por el comando en cuestión. Los bytes de comando siempre tienen el bit más significativo activado (128-255 en decimal, o 0x80-0xFF en hexadecimal), mientras que los bytes de datos tienen desactivado su bit más significativo (0-127 en decimal, o 0x00-0x7F en hexadecimal). Esto
60
Capítulo 6: Interfaz PC a Bordo-Servomotores y Conmutación de Modo
Blanca Rubio Díaz
significa que cada byte de datos sólo puede transmitir 7 bits de información. La única excepción es el protocolo Mini SSC, donde los bytes de datos pueden valer entre 0 y 254. El Maestro responde a tres subprotocolos:
Compact Protocol. Es el protocolo más simple y más compacto. Debe utilizarse si el Maestro es el único dispositivo conectado a la línea serie. Pololu Protocol. Este protocolo es compatible con los protocolos usados por otros controladores de servo y motores. Como tal, permite la conexión del Maestro en una única línea serie, junto con otros controladores (inclusive otros Maestros). El envío de comandos por la línea mediante este protocolo permite distinguir entre el Maestro al que se dirigen dichos comandos y el resto de dispositivos. Mini SCC Protocol. Este protocolo permite controlar hasta un máximo de 254 servos diferentes mediante su conexión serie a múltiples controladores de servo.
El Compact Protocol es el más simple de los tres y cubre perfectamente nuestras necesidades, así que será el que empleemos en nuestra comunicación con el Maestro. El paquete de comando de este protocolo está formado por un byte de comando con el MSB activado y un conjunto de bytes de datos. Así, por ejemplo, si queremos que el servo conectado al canal 0 del Maestro se mueva hasta la posición correspondiente a un ancho de pulso de 1500 μs (1500x4=6000= 01011101110000 en binario), debemos enviar la siguiente secuencia de bytes:
En hexadecimal: 0x84, 0x00, 0x70, 0x2E En decimal: 132, 0, 112, 46 En binario: 10000100, 00000010, 01110000, 00101110
El byte 0x84 es el comando para envío de objetivos, el primer byte de datos 0x00 es el número de servo, y los últimos dos bytes contienen el objetivo en unidades de cuarto de microsegundo. En la Tabla 20 mostramos un ejemplo de código C que generará la secuencia de bytes correcta para lograr que el servo del canal 0 se desplace hasta la posición dada por 1500 μs. #include #include #include #include #include #include … int main() { struct termios options; int fd = open("/dev/ttyACM0", O_RDWR | O_NOCTTY); char serialBytes[]={0,0,0,0} int target=6000; int channel=0; … if (fd == -1)
61
Capítulo 6: Interfaz PC a Bordo-Servomotores y Conmutación de Modo
Blanca Rubio Díaz
{ fprintf(stderr, "Error de apertura"); exit(1); } else printf("\nEstablecida comunicacion con Pololu.\n"); tcgetattr(fd, &options); options.c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN); tcsetattr(fd, TCSANOW, &options); serialBytes[0] = 0x84; // Command byte: Set Target. serialBytes[1] = channel; // First data byte holds channel number. serialBytes[2] = target & 0x7F; // Second byte holds the lower 7 bits of target. serialBytes[3] = (target >> 7) & 0x7F; // Third data byte holds the bits 7-13 of target if(write(fd,command,4) == EOF) { fprintf(stderr, "Error de escritura"); exit(1); } … } Tabla 20: Código C para envío de objetivos al Mini Maestro con Compact Protocol
6.3 Pololu RC Servo Multiplexer 4 Channel 6.3.1 Introducción El dispositivo RC Servo Multiplexer 4 Channel de Pololu puede usarse con sistemas de radiocontrol y dispositivos como el Mini Maestro 12 para permitir una fácil conmutación entre dos fuentes de control (denominadas maestro y esclavo) para los servos, usando un quinto canal de entrada que actúa como selector. Esto lo convierte en un dispositivo ideal para aplicaciones en las que existan dos posibles fuentes de control y se desee conmutar entre una y otra en tiempo de vuelo. Un posible escenario es precisamente el que nosotros nos hemos planteado, puesto que tenemos la necesidad de conmutar entre las señales PWM recibidas de la radio (control manual) y las generadas por el Mini Maestro (control automático).
6.3.2 Pinout Los pines del multiplexor están especialmente diseñados para facilitar las conexiones con cable de servo: la columna situada a la derecha corresponde a la tierra, la de la izquierda es para la alimentación (que debe ser suministrada por el maestro), y la interior es la de señal. La alimentación suministrada por el maestro debe estar comprendida entre 2.5 y 15 V y debe ser capaz de aportar suficiente corriente para el consumo de los servos conectados a la salida. La tensión lógica usada en el multiplexor se regulará a 5 V si la tensión de entrada es superior a esta cantidad; en caso contrario, se aproximará a la tensión de alimentación.
62
Capítulo 6: Interfaz PC a Bordo-Servomotores y Conmutación de Modo
Blanca Rubio Díaz
Los pines S1-S4 corresponden a las cuatro entradas de señal del esclavo y los pines M1-M4 a las del maestro. Los pines OUT1-OUT4 son salidas multiplexadas, y su origen se determina por la señal recibida en el pin SEL. Si el ancho del pulso del selector está por debajo del umbral de 1.6 ms, por los pines OUT1-OUT4 saldrán las señales recibidas por las entradas M1-M4, respectivamente; en caso contrario, por OUT1-OUT4 saldrán las señales recibidas por las entradas S1-S4, respectivamente. Si la señal de selección es inválida, un jumper opcional entre los pines etiquetado como J1 determina el comportamiento de la salida. Si el jumper se desconecta, los canales de salida se ponen a nivel bajo y permanecen así mientras la señal de selección siga siendo inválida. En muchos servos y controles de velocidad electrónica (ESCs), una constante a nivel bajo en su línea de señal puede provocar su apagado, lo que puede ser deseable si se conoce que las señales de control son erróneas. Si, por el contrario, el jumper está instalado, en caso de que la señal de selección sea inválida, por los canales de salida se sacarán las señales del maestro. El multiplexor considera válidas señales de RC con tasa de pulso entre 10 y 100 Hz y ancho comprendido entre 0.5 y 2.5 ms.
Figura 44: Vista superior del RC Servo Multiplexer 4 Channel
Por último, queremos explicar el significado de los LEDs indicadores de la placa. Si las salidas proceden del maestro, sólo se enciende el LED verde; si proceden del esclavo, se enciende el LED amarillo; si las salidas se desactivan por la invalidez de la señal de selección, se encienden los LEDs rojo y verde.
6.3.3 Configuración del escenario Una vez introducidas las placas de Pololu en nuestro problema, nos queda un escenario como el que se representa en la Figura 45. En ella podemos observar, por un lado, las dos fuentes de control: la emisora (control manual) y el ordenador de a bordo (control automático). Las señales correspondientes a un tipo y otro de control siguen caminos diferentes hasta llegar a los multiplexores:
63
Capítulo 6: Interfaz PC a Bordo-Servomotores y Conmutación de Modo
Blanca Rubio Díaz
Control manual. Los comandos indicados por el piloto mediante la radio se transmiten a la receptora mediante modulación PPM en la banda de 35 MHz. A la salida de la receptora tenemos cinco señales PWM correspondientes a los cinco servos. Las tres primeras (canales CH1, CH2 y CH3 de la receptora) se conectan a los canales de entrada correspondientes al maestro (M1, M2 y M3) del primer multiplexor; las dos restantes (CH4 y CH6) se llevan hasta los canales M1’ y M2’ del segundo multiplexor. Control automático. En función de las medidas de los sensores, nuestro ordenador de a bordo calcula las acciones de control necesarias para los cinco servos y las envía mediante el Compact Protocol al Mini Maestro 12, que está conectado por el puerto USB. Automáticamente, el Mini Maestro 12 saca por sus canales CH0-CH4 las señales PWM correspondientes a dichas acciones de control. Los tres primeros canales se recibirán como canales del esclavo en el primer multiplexor (S1, S2 y S3); con los dos restantes se hace lo análogo, pero en este caso se llevan al segundo multiplexor (S1’ y S2’).
Por otro lado, el canal CH5, asociado a un mando de la radio que puede tomar dos posiciones, se ha configurado para poder utilizarse como señal de selección en los multiplexores de la siguiente manera:
Cuando el mando está en una posición, en el canal CH5 de la receptora tenemos una señal PWM con ancho de pulso inferior a 1.6 ms. Cuando el mando está en la otra posición, en el canal CH5 de la receptora tenemos una señal PWM con ancho de pulso superior a 1.6 ms.
Por último, se conecta la señal PWM del CH5 de la receptora en la entrada de selección de ambos multiplexores (SEL y SEL’). De esta manera, podremos seleccionar el conjunto de señales (correspondientes al control manual o al automático) que se asociarán a los cinco servos ubicados en el helicóptero (O1, O2, O3, O1’ y O2’).
6.4 Integración en la aplicación En el Apartado 2.2.2 ya adelantamos brevemente la estructura del software en el ordenador de a bordo; vimos que el usuario puede instar al programa principal a que inicie una serie de interrupciones temporales, dentro de las cuales se realizan las funciones que requieren periodicidad dentro de nuestra aplicación. Las primeras de estas acciones periódicas serán las que realizan las lecturas de los sensores; una vez ejecutadas, seremos conocedores de la altura a la que se encuentra el helicóptero, el ángulo de paso colectivo y la velocidad de rotación de las palas del rotor principal. Es a partir de este punto cuando podemos ejercer acciones sobre los servos del helicóptero que modifican su posición para llevar a cabo el vuelo axial: el servo correspondiente al throttle y el del colectivo. Así pues, incluiremos una llamada a una función dentro de la interrupción periódica que, según la configuración indicada por el usuario de la aplicación, aplicará acciones manuales o automáticas sobre dichos servos. La función de envío de objetivos a los servos del throttle y el colectivo tiene un código completamente análogo al mostrado en la Tabla 20, con la salvedad de que serán dos los 64
Capítulo 6: Interfaz PC a Bordo-Servomotores y Conmutación de Modo
Blanca Rubio Díaz
servos a los que se envíe un objetivo de forma simultánea. Previamente al envío, deberán decidirse dichos objetivos, bien directamente a partir de una posición fijada por el usuario, o en como resultado de las funciones que aplican un controlador sobre la altura del helicóptero y la velocidad del rotor principal.
CH1-CH3
O1-O3
CH4,CH6
Emisora
Servo 1
M1-M3
S1-S3
Receptora CH5
Servo 2
SEL
CH0-CH2
RC Servo Mux 1
CH3,CH4
M1´-M2´
Servo 3 O1´-O2´
Ordenador de a bordo
S1´- S2´
Mini Maestro 12 SEL´
RC Servo Mux 2 Servo 4
Servo 5
Figura 45: Escenario tras inclusión de las placas de Pololu
65