Capítulo 6: Interfaz PC a Bordo-Servomotores y Conmutación de Modo Blanca Rubio Díaz
55
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.
Capítulo 6: Interfaz PC a Bordo-Servomotores y Conmutación de Modo Blanca Rubio Díaz
56
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.
Capítulo 6: Interfaz PC a Bordo-Servomotores y Conmutación de Modo Blanca Rubio Díaz
57
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.
Capítulo 6: Interfaz PC a Bordo-Servomotores y Conmutación de Modo Blanca Rubio Díaz
58
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.
Capítulo 6: Interfaz PC a Bordo-Servomotores y Conmutación de Modo Blanca Rubio Díaz
59
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
Capítulo 6: Interfaz PC a Bordo-Servomotores y Conmutación de Modo Blanca Rubio Díaz
60
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
Capítulo 6: Interfaz PC a Bordo-Servomotores y Conmutación de Modo Blanca Rubio Díaz
61
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 <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <termios.h>
#include <sys/mman.h>
#include <sys/time.h>
…
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)
Capítulo 6: Interfaz PC a Bordo-Servomotores y Conmutación de Modo Blanca Rubio Díaz
62
{
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.
Capítulo 6: Interfaz PC a Bordo-Servomotores y Conmutación de Modo Blanca Rubio Díaz
63
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:
Capítulo 6: Interfaz PC a Bordo-Servomotores y Conmutación de Modo Blanca Rubio Díaz
64
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
Capítulo 6: Interfaz PC a Bordo-Servomotores y Conmutación de Modo Blanca Rubio Díaz
65
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.
Emisora Receptora
Ordenador de a bordo
Mini Maestro 12
RC Servo Mux 1
RC Servo Mux 2
Servo 1
Servo 2
Servo 3
Servo 5
Servo 4
CH0-CH2
CH3,CH4
S1-S3
S1´- S2´
M1-M3
M1´-M2´
O1-O3
O1´-O2´
CH1-CH3
CH4,CH6
CH5
SEL´
SEL
Figura 45: Escenario tras inclusión de las placas de Pololu
Top Related