FT8 TX BEACON: arduino / ESP32

 

No es el protocolo ideal para usarlo como baliza de propagación por varias razones:

  • WSPR tiene un margen adicional de 5dB sobre FT8 
  • No dispone de la infraestructura de receptores y base de datos como WSPRnet limitándose al pskreporter para su monitorización.
  • No es puede codificar el hecho de que el TX sea una baliza al no admitir /B o el texto TEST en la llamada CQ

El proyecto de diseñar una baliza para FT8 presenta varias diferencias con respecto a WSPR:

  • WSPR es un protocolo unidireccional y FT8 es bidireccional. Este punto no es relevante pues solamente usaremos una llamada "CQ".
  • Como ya hemos avanzado los mensajes WSPR pueden ser decodificados con una relación S/N de 5dB peor que los mensajes de FT8 con un programa como WSJT-X.
  • Las redes que centralizan los mensajes recibidos son distintas WSPRnet para WSPR y pskreporter para FT8
  • Los mensajes de WSPR son de 162 símbolos que se transmiten dentro de un intervalo de 110,6" mientras que los de FT8  son 79 símbolos que se transmiten en apenas 12,74", a consecuencia de ello el ancho de banda de WSPR es de 6 Hz, mientras que el de FT8 es de  50 Hz (Requiere mas ancho de banda, a mayor velocidad de transmisión mayor ancho de banda)
  • WSPR usa la modulación de 4-FSK mientras que FT8 usa 8-FSK (mas tonos) 
  • WSPR requiere de una precisión en la frecuencia  +/- 1 Hz mientras que la de  FT8 es de +/- 1,5 Hz (mas tolerante)


Un mensaje con formato para ser monitorizado sigue el siguiente esquema

CQ <indicativo 6> <locator 4>


PRUEBAS

ESp32+SI5351

Una primera prueba se realizó aprovechando una ESP32 y una Si5351. Una vez depurado el programa al ejecutarse se observó que no generaba una transmisión correcta, por lo que no era decodificable.

El posible motivo es que Si5351 no es capaz de responder a la velocidad que le exige la transmisión en FT8 por ello se decidió probar con un DDS como AD9850.

También se pensó en prepara una nueva versión que usara los datos precodificados con el fin de aligerar el procesado por si ese era el problema pero se obtuvo el error:

E (19736) i2c.master: I2C hardware timeout detected
E (19740) i2c.master: s_i2c_synchronous_transaction(945): I2C transaction failed
E (19747) i2c.master: i2c_master_receive(1268): I2C transaction failed

que sugiere que los cambios de frecuencia son demasiado rápidos.

Todo eran hipotesis que no se confirmaron pues con un nuevo código si consiguieron los resultados esperados.

ESP32 + AD9850  

Como consecuencia del fracaso de la primera prueba se decidió conseguir una placa de desarrollo DDS AD9850 0-70MHz 0-40MHz capaz de generar 2 ondas sinusoidales y 2 ondas cuadradas concretamente la "HC-SR08 DSS_AD9850" (Disponible en Aliexpress por unos 10 €)

Aprovechando el tiempo muerto se buscó una placa de reloj de precisión del tipo DS3231 AT24C32 IIC  dada la mayor exactitud demandada por FT8. Con este módulo ademas de disponer de una mayor precisión aunque haya fallos NTP y/o wi-fi  se le da mas autonomía al no necesitar ni GPS, ni NTP de forma continua (Disponible en Aliexpress por unos 2€).


AD9850 0-70MHz 0-40MHz



Conviene calibrarlo  con un programa de test y recibiendo la señal con un SDR

/ Programa de TEST
#include <Arduino.h>
#include "AD9850.h"
// Pines conectados al AD9850 (ajusta según tu módulo)
#define W_CLK 14
#define FQ_UD 25
#define DATA 26
#define RESET 13
// Crear instancia del DDS
AD9850 dds;
void setup() {
Serial.begin(115200);
Serial.println("Prueba mínima AD9850...");
// Inicializar DDS con pines
dds.begin(W_CLK, FQ_UD, DATA, RESET);
// Establecer frecuencia de prueba
double testFreq = 10000000.0; // 10 MHz
dds.setfreq(testFreq, 1); // 1 = activar salida
Serial.print("Frecuencia configurada: ");
Serial.print(testFreq);
Serial.println(" Hz");
}
void loop() {
// Nada más, la señal sigue generándose en SINE OUT
delay(1000);
}

Segun el modelo:

  • AD9850: Banda de frecuencias 0-40MHz; reloj de 125 MHz
  • AD9851: Banda de frecuencias 0-70MHz ;reloj 30 MHz

Dispone de 4 salidas

  • QOUT1 / QOUT2 Señales cuadratura (I/Q) TTL
  • ZOUT1/ ZOUT2 Señales diferenciales internas del DAC TTL

Especificaciones

PLACA DE DESARROLLO ESP32

Se usa la placa ESP32 LiLYgo LORA32 T3 V1.6.1 con pantalla OLED, si bien este proyecto no usa LORA32 y es opcional usar la pantalla OLED. En cualquier caso se necesita el pinout de la placa de desarrollo ESP32 usada


Conexiones LILYGO T3 - AD9850

AD9850 LILYGO T3 GPIO PIN   Comentario
W_CLK         14      14    señal de reloj de palabra
FQ_UD         25      25    actualización de frecuencia
DATA         19 19    datos serie
RESET        26      26    reset DDS
VCC         5V      VCC   alimentacion +5V del módulo
GND         GND     GND   alimentación -5V del modulo tierra común
OUT1                                             salida RF

Frecuencias FT8

160m:  1840000  Hz 
 80m:  3573000  Hz 
 40m:  7074000  Hz 
 30m: 10136000  Hz
 20m: 14074000  Hz 
 17m: 18100000  Hz
 15m: 21074000  Hz 
 12m: 24915000  Hz 
 10m: 28074000  Hz 
  6m: 50313000  Hz

COMPILACION

Descargar https://github.com/F4GOJ/AD9850 y desde Sketch de IDE Arduino incluir biblioteca ZIP

 

PRUEBAS

La configuración final fue ESP32+SI5351 con sinconización mediante NTP de Wi/Fi. El código estará disponible en GitHub:


Referencias

  • VK3PGO FT8 Player
  • https://github.com/pengowray/ft8play
  • https://github.com/kholia/ft8_encoder_web
  • Emulating a full FT8 band for 'real'
  • Easy-Digital-Beacons-v1

  • Prohibida la reproducción parcial o total de este artículo sin permiso previo del autor

    No hay comentarios:

    Publicar un comentario

    Cacharreando con señales horarias.

      (En construcción) En una entrada anterior hemos visto que todavía se mantienen activas  emisoras de patrones de tiempo y frecuencia ,  y e...