Interfaz y consola auxiliar para un rotor Yaesu G-450DC

Descripción y prestaciones.-

En este trabajo se describe la construcción de una interfaz digital para el control de un rotor G-450CD de Yaesu. El procedimiento puede ser extensible a otros modelos de la misma u otra marca con algunas variantes.

Panel frontal

Muchos rotores para antenas de VHF o HF ligeras utilizan consolas de control analógicas. Por otra parte, la mayoría del software moderno para radioaficionados que integra la gestión del logbook y el CAT, incluye la posibilidad de gestionar el rotor desde el propio programa. En el mercado, existen diversas ofertas de interfaces que posibilitan el control de las consolas analógicas por medio de software. Se pueden destacar, entre otras, el excelente producto ARS-USB de EA4TX , el Visual Rotor de EA7HG y la placa de ERC que se puede alojar en el interior de la consola analógica que se suministra con algunos rotores.

La interfaz propuesta en este trabajo es una alternativa que, además del ahorro económico, permite satisfacer el espíritu de auto formación que se le supone a un radioaficionado. Se basa en una placa de Arduino 2560 MEGA PRO. El programa (sketch), está diseñado por el equipo que lidera Anthony Good, K3NG. Este software está escrito para adaptarse a cualquier tipo de características de la mayoría de los rotores e incluye los protocolos de comunicación con el PC Yaesu GS-232 A/B. Se trata de un software libre, cuyo código se puede modificar sin restricciones. Existe una comunidad de usuarios muy activa que mantiene una lista de correo.

Una gran parte de los sistemas de orientación acimutal, se basan en un rotor que orienta la antena e incluye un potenciómetro sincronizado con el motor de giro. Este potenciómetro se alimenta en un extremo con una tensión conocida y devuelve a través del cursor una tensión proporcional al rumbo. En lugar de un potenciómetro, algunos rotores pueden utilizar otros dispositivos como encoder, brújula digital, GPS, sensor de efecto Hall, etc.

La consola de control es un instrumento tan importante como el rotor, se ocupa de dirigir el giro e informar de la posición de la orientación de la antena. En los dispositivos de orientación basados en un potenciómetro, se inserta una tensión conocida en el extremo que devuelve la tensión variable resultante de la posición a través del cursor, para interpretar el rumbo. También incluye, al menos, un par de conmutadores que habilitan el giro a derecha, en el sentido de las agujas de un reloj (CW en adelante) o a izquierda, en el sentido contrario a las agujas del reloj (CCW). Algunas consolas pueden tener además un preselector de giro y algunos indicadores de posición o giro.

Consola analógica

El sistema de indicación de la orientación en una consola analógica, varían. Generalmente, utilizan un instrumento (voltímetro) calibrado con los 360ᵒ del círculo acimutal o una aguja movida por un motor sincronizado con el rotor que indica la posición en una esfera graduada. Las consolas digitales indican el rumbo y el sentido o destino del giro en grados numéricos y algunas pantallas gráficas disponen además de diferentes formas de indicación por imágenes como la de Visual Rotor.

En este trabajo, se describe la forma de construir un mando suplementario con indicador digital matricial, preselector, indicadores luminosos de giro y sobregiro y una interfaz USB para la comunicación remota entre el mando y un PC. La alimentación del rotor se realiza a través de la consola analógica original; dos relés en paralelo con los conmutadores consola analógica se ocupan de habilitar la orientación. En el apartado del software incluye la descripción de las líneas del código que se deben modificar para la gestión del G-450DC desde la placa de Arduino.

En el mercado, existen también diferentes ofertas en forma de kits para montar el hardware necesario con el mismo propósito que el descrito en este trabajo y para el mismo código. Las más conocidas pueden ser las del ARS-Shield de EA4TX con la placa Arduino UNO o el Single Rotator Interface de RemoteQTH con la placa Arduino NANO.

La placa MEGA 2560 PRO.-

Arduino MEGA es la placa utilizada para este trabajo. Se trata de una placa basada en el microprocesador ATmega 2560 de tecnología TTL (5V). Las características permiten utilizar todas las prestaciones del software diseñado por K3NG, sin las limitaciones que originan las placas UNO y NANO ; en especial el uso del depurador.

PlacaM.FlashI/O AnalógicasI/O Digitales
MEGA256 Kb1654
UNO y NANO32 Kb6/814
Placa Arduino Mega 2560 PRO

El mercado chino ofrece una nueva placa MEGA, que han denominado PRO, totalmente compatible con la MEGA oficial. Las únicas diferencias consisten en el tamaño, que pasa a ocupar una superficie inferior a la mitad, un puerto USB con el bus CH340G y un conector tipo micro B. Su costo medio en el mercado chino es de 5€.

Características de la nueva consola.-

  • Display de dieciséis dígitos por dos líneas, que presenta el rumbo (rosa de los vientos y grados), e indicación de giro.
  • LEDS de dirección de giro.
  • LED indicador de sobregiro.
  • Preselector de rumbo por encoder.
  • Giro manual por botones.
  • Interfaz USB para control por software.
  • Emulación Yaesu GS-232-A y B

Componentes.-

  • Caja Minibox 31040011 (125 x 155 x 75 mm)
  • Display 1602 con interface serie I2C
  • Regulador de tensión de 5 Vcc regulada y 12V
  • Módulo para la placa Arduino (shield)
  • Módulo para los relés.
  • Módulo para el encoder y diodos LED

Display.-

Se trata de un estándar de 16 caracteres por dos líneas (1602) que incorpora un adaptador de puerto serie I2C. Esta configuración permite utilizar únicamente cuatro cables, incluyendo la alimentación, en lugar de los ocho necesarios con el bus de 4 bit.

He seleccionado este display matricial por su sencillez y porque tiene espacio suficiente para ofrecer la información necesaria. Las opciones que ofrece el programa de K3NG, permiten elegir entre una importante gama de pantallas, desde la más sencilla hasta una pantalla gráfica táctil Nextion.

Placa del regulador de la fuente de alimentación.-

Se monta en un circuito impreso perforado estándar de 52 X 46 mm con orificios de 2,54mm de separación. Las tensiones de 12 Vcc para los relés, y los 5 Vcc para alimentar la placa Arduino y display, se obtienen de una fuente de alimentación externa. Se utiliza un regulador L7805 provisto de un generoso disipador. El consumo previsto de la placa Arduino y display es de 150 mA máximo y los relés 54 mA.

Módulo para la placa Arduino.-

Se monta en una placa de circuito impreso con perforación estándar (2,54 mm) del mismo tamaño que la placa MEGA. Los pines de conexión le dan la forma de un “shield” con las salidas para conectores Dupont. En esta placa se sueldan los escasos componentes discretos necesarios para adaptar las E/S y la alimentación. Las pistas se sueldan con hilo plateado de 0,25mm por ambas caras.

Módulo para los relés.-

Se monta en un circuito impreso estándar de 24 X 10 orificios (70 X 30mm). En esta placa se incluyen dos relés Finder 41.61.9.012, uno por cada sentido de giro, y un circuito integrado UDN2981AT que es un dispositivo que puede conmutar hasta ocho canales suministrando alimentación de hasta 50V y 500mA.

He utilizado estos relés porque son los que tenía a mano. Pueden utilizarse relés con menor capacidad de conmutación como los pequeños Finder de la serie 32. La tensión que debe conmutar es de 8V máximo y la corriente de unos pocos mA.

Otra opción son los módulos económicos de dos relés que incluyen el controlador basado en un optoacoplador.

Módulo para el encoder y los LEDS.-

Esta placa perforada soporta los pines para las conexiones del encoder y los LEDS.

Instalación en la caja.-

Todo el conjunto se monta en una caja Minibox 3104011 de 155 x 125 x 75 mm.

En el panel frontal se sitúan el display, los pulsadores que actúan sobre los relés de giro, el encoder, los LEDS indicadores de giro derecha e izquierda y el LED indicador de sobre-giro (Overlap – OVL).

En el panel posterior se coloca un conector tipo micrófono de cinco pines para las salidas de alimentación del rotor (3) y las entradas del indicador de orientación (2) desde la consola analógica.

En el costado derecho se abre una ranura para insertar el conector USB. Los cables de la entrada de la tensión AZ se bobinas 4 espiras en una perla de material #31.

Interconexionado de los módulos

Conexiones entre la consola analógica y digital.-

En el panel posterior de la consola analógica se coloca un conector macho tipo micrófono de seis pines para dar salida a las siguientes conexiones:

  • 1 – Salida del conmutador izquierdo CCW
  • 2 – Salida del conmutador derecho CW
  • 3 – Polo negativo de la tensión acimutal
  • 4 – Entrada tensión acimutal
  • 5 – Entrada de tensión de los conmutadores de dirección (7V)

Yaesu no facilita el esquema de la consola del G-450CD. El motor del rotor es de corriente continua que varía el sentido del giro por inversión de la polaridad. La tensión de alimentación es de 20V y el consumo 250mA (polímetro Fluke 115) El conmutador de giro CW recibe en el conector central una tensión de 7V que, en situación de reposo, la dirige al conector central del conmutador CCW; de esta forma, si se pulsan simultáneamente ambos conmutadores sólo actúa el de CW.

No he podido ver qué tipo de actuador conecta la alimentación del rotor invirtiendo la polaridad según el sentido de giro. No hay relés, por lo que deduzco que es de estado sólido. En cualquier caso, el nuevo conector de salidas instalado en el panel posterior de la consola analógica, permite conectar dos relés exteriores en paralelo que actúan sobre los propios conmutadores. Para ello, es necesario soldar sendos cables desde el centro y las salidas de los conmutadores hasta los pines 1, 2 y 5 del conector tal como se indica en rojo en el esquema. También es necesario cortar los dos cables de la entrada de tensión del potenciómetro del rotor en los pines 2 y 3 del conector de la consola y sacar sendos cables a los pines 3 y 4 del nuevo conector tal como se indica en azul en el esquema para obtener la tensión de referencia acimutal.

Esquema de las conexiones entre los conectores
Conectores de mando de giro
Conector de la consola analógica, detalle de las salidas acimut

De esta forma, nos permite conectar la consola analógica a la nueva consola digital mediante una manguera con cinco cables. La consola se duplica y se añaden las funcionalidades de la pantalla digital con indicación de giro, el preselector de dirección y la interfaz para la conexión con el PC. Se podría añadir una fuente de alimentación suplementaria de 20Vcc para la alimentación del rotor y así, suprimir la consola analógica; sólo habría que cambiar los contactos de los relés para el control de rotación con inversión de polaridad.

Software.-

Arduino es una compañía de desarrollo de software y hardware libres, así como una comunidad internacional que diseña y manufactura placas de desarrollo de hardware para construir dispositivos digitales y dispositivos interactivos que puedan detectar y controlar objetos del mundo real. (Wikipedia)

Arduino dispone de un entorno de desarrollo integrado (IDE) que incluye todos los elementos necesarios para generar programas ejecutables; editor de texto, depurador, compilador, biblioteca de librerías y las opciones necesarias para cargar el programa en la memoria del microprocesador. El lenguaje de programación está basado en C++. Un programa para Arduino se conoce como “Sketch”. El IDE se puede descargar de la página oficial

El proyecto de un controlador e interfaz para rotores de antena que lidera Anthony Good, K3NG, se inició hace más de cinco años. La primera revisión de la versión 2 documentada en el código data en 2015 y posteriormente, hasta finales de agosto de 2020, se han publicado más de cien revisiones para corregir bugs o para añadir prestaciones. En los créditos figuran veintidós contribuyentes. Es un proyecto veterano, consolidado y ambicioso plasmado en un código peculiar que, aunque denota una cierta anarquía en lo relacionado con el estilo y ortodoxia desde un punto del desarrollo ágil del software, pone en valor el trabajo de radioaficionados que a la vez son buenos programadores pro bono.

El código resultante se compone de 32 archivos. El archivo principal es k3ng_rotator_controller.ino y dispone de casi 18.000 líneas. La mayoría de las líneas son llamadas al compilador para su selección en base a las características activadas. Se puede descargar desde el repositorio de GitHub. Los archivos de código, librerías y documentación se pueden consultar o descargar desde el mismo repositorio en un archivo comprimido.

Una gran parte del código escrito se destina a instrucciones del compilador para que integre diferentes prestaciones específicas para el rotor que vamos a utilizar. Las líneas del código con instrucciones para el compilador están precedidas por el signo “almohadilla” (#).

Además de familiarizarnos con en IDE; editar, depurar, compilar y cargar el código en la memoria de la placa Arduino; lo más importante que debemos conocer para adaptar el programa a las características del rotor, es la forma de ajustar las características (FEATURES) del programa. Ésto se consigue habilitando o inhabilitando las líneas de código que las definen, poniendo dos barras de fracción al principio de la línea para inhabilitar la instrucción o borrando las dos barras de fracción para habilitarla. El compilador procesará todas las instrucciones que no estén “comentadas” es decir: que no se inicien con dos barras de fracción (//)

Por ejemplo, una instrucción como:

#define LANGUAGE_SPANISH

indicará al compilador que seleccione de la lista de textos en español, el texto que debe mostrar en la pantalla del display; el resto de las listas de otros idiomas contenidas en fichero rotator_language.h deberán estar inhabilitadas (comentadas) como por ejemplo:

//#define LANGUAGE_ENGLISH

Las características que se deben tratar están en fichero rotator_features.h que, para el rotor G-450DC son las siguientes:

InstrucciónObservaciones
#define FEATURE_YAESU_EMULATION
#define OPTION_GS_232B_EMULATION
#define LANGUAGE_SPANISH
#define FEATURE_AZ_POSITION_POTENTIOMETERIndica que el sensor de orientación es un potenciómetro
#define FEATURE_RFROBOT_I2C_DISPLAYActiva la librería e inicia el objeto LCD para el puerto I2C
#define FEATURE_AZ_PRESET_ENCODERIndica que el preselector de dirección es un encoder
#define OPTION_ENCODER_HALF_STEP_MODE
#define OPTION_ENCODER_ENABLE_PULLUPSHabilita las resistencias PULLUP internas de Arduino
#define OPTION_DISPLAY_STATUSIndica los datos que muestra el display
#define OPTION_DISPLAY_HEADINGIndica los datos de cabecera del display
#define OPTION_DISPLAY_DIRECTION_STATUSActiva la indicación de giro en el display

Para el G-459DC se pueden habilitar más prestaciones, por ejemplo; posición de parking y velocidad progresiva de inicio y parada (mediante puertas I/O PWM).

Los ajustes se realizan en el archivo rotator_settings.h, principalmente la capacidad de giro del rotor que en caso del G-450DC es de 450º

#define AZIMUTH_ROTATION_CAPABILITY_DEFAULT 450 // o 360

y el inicio de giro que puede estar en 180º o en 360º

#define AZIMUTH_STARTING_POINT_DEFAULT 180 // o 360

La antena se debe instalar en la dirección que apunta el rotor cuando se instala en la torre o en el mástil, que puede estar en el SUR o en el NORTE

También las características del display matricial; número de columnas (16) y filas (2).

#define LCD_COLUMNS 16 // o 20

#define LCD_ROWS 2 // o 4

Es necesario, además, definir las indicaciones del display, su posición y el tamaño máximo de la cadena.

  • #define LCD_HEADING_ROW 2
  • #defina LCD_STATUS_ROW 1
  • #define LCD_DIRECTION_ROW 1

La librería para el adaptador del puerto I2C debe estar incluida, el objeto LCD definido así como las variables globales que definen las características en el archivo rotator_k3ngdisplay.cpp

  • #include <LiquidCrystal_I2C.h> //Incluye la librería
  • LiquidCrystal_I2C lcd (0x27 , 16, 2) //Crea el objeto lcd, se debe comprobar que la dirección hexadecimal 0x27 es correcta. Para esta función existe un sketch (scan port I2C) que detecta los componentes y dirección que están conectados al puerto I2C.
  • int display_columns = 16; // o 20
  • u_int8_t display_rows = 2; // o 4

Por último es necesario definir los pines correctos que corresponden al montaje del hardware en el archivo rotator_pins.h que en este trabajo son:

  • #define rotate_cw 29 //Relé derecho
  • #define rotate_ccw 31 //Relé izquierdo
  • #define button_cw 9 //Pulsador de giro a la derecha
  • #define button_ccw 7 //Pulsador de giro a la izquierda
  • #define az_preset_rotary_pin1
  • #define az_preset_rotary_pin2
  • #define az_preset_start_button 40
  • #define rotator_analog_az A0
  • #define pin_led_cw 14
  • #define pin_led_ccw 12
  • #define pin_led_overlap 10

Una vez instalado el mando se debe calibrar el indicador, para esto es necesario mantener la conexión con el PC vía USB,

  • abrir el monitor serie en el IDE,
  • girar el rotor hacia la izquierda hasta el final,
  • teclear la letra O en la ventana de entrada del monitor y pulsar “Enter”
  • el monitor indicará que pulses “Enter” otra vez; el dato se guardará en la memoria EEPROM.
  • Ahora gira el rotor hasta el final de la derecha,
  • teclea la letra F en la ventana de entrada de datos del monitor y pulsa la tecla “Enter”,
  • el monitor indicará que pulses “Enter” otra vez; el dato se guardará en la memoria EEPROM.

Con esta operación se guardan los valores que el Arduino lee al principio y al final del giro y podrá realizar las operaciones de cálculo necesarias para interpretar la orientación de la antena.

Debes asegurarte de que los datos de inicio de giro, capacidad de rotación y los valores de inicio y fial de giro están almacenado en la EEPROM. Para ello, en el archivo rotator_debug_log_activation.h debes

  • desactivar la opcion #define DEBUG_EEPROM,
  • compilar de nuevo y cargar el programa
  • activar el monitor serie

Cuando arranque el programa de nuevo, en la ventana del monitor serie se mostrarán los datos almacenados en la memoria EEPROM

Los datos, en este caso, indican que el rango de lectura de orientación azimutal van de 0 a 273 RAW (0 a 1,334 V – ADC 10bit). Punto inicial de arranque 360º y capacidad de giro 450º.

El depurador dispone de mucha más información que se puede mostrar en la ventana de lectura del monitor serie comentando o descomentando las instrucciones para el depurador contenidas en el archivo rotator_debug_log_activation.h

Hay un juego de comandos para leer o cambiar algunos datos del programa desde la ventada de escritura del monitor serie.

\Ix[x] [x] //\I [enter] lee el valor almacenado correspondiente al punto de arranque; \I180 [enter] graba 180º para el punto de arranque

\Jx[x] [x] lee o graba la capacidad máxima de giro, 360º o más según la capacidad real de rotor.

Hay un juego de comandos extendido que se puede consultar en la documentación.

Enio, EA2J, julio de 2020

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s