WSPR TX beacon ( ESP32 + Si5351 ): versión GPS/GNSS

 

Esta entrada como las del resto del blog son mis apuntes de mi "cuaderno de laboratorio" por loq eu encontrará comentarios y el proceso seguido incluyendo los errores y dudas que se me han planteado, no es un manual al uso, pero con el aprenderá mas cosas.

Para construir y poner en funcionamiento una baliza WSPR TX necesitamos:

Autorización

  • Las emisiones en bandas de radioaficionado, como es el caso de las balizas WSPR, precisan, en todo el mundo, disponer de una licencia de radioaficionado. Si no la tiene, piense que es mas fácil y económico de obtener que una licencia o permiso de conducir y le permitirá disfrutar de la afición a la radio como nunca antes lo habia hecho.

Hardware

  • Un procesador que sea capaz de definir un mensaje WSPR con el indicativo y la posición y lo transmita de forma síncrona: para esta función utilizaremos placa de desarrollo con Arduino /ESP32
  • Un patron de tiempo: para eso usaremos un chip GPS que en principio puede estar o no integrado en la placa. Elegiremos una placa ESP32 con GPS
  • Un generador de RF: para ello usaremos una placa SI5351, que es un modulo generador de reloj de 8 kHz a 160 MHz con una potencia de salida de 8 dBm (6mW) que trabaja con un cristal de 25 a 27 MHz se puede adquirir en Aliexpress por menos de 2€ si bien hay placas mas completas que incluyen pantalla TFT por unos 30€ por unos 

Resumiendo, nos basta en principio con estas dos placas:

  • Lilygo ESP32 LoRa GPS 433MHz (T-Beam) 
    • Lilygo ESP32 LoRa GPS es una placa de desarrollo compatible con Arduino que entre otras funcionalidades incorpora un  receptor GPS que permite obtener la posición y el patrón de tiempo, por lo que es un buen candidato como controlador de un TX WSPR. El GPS es un poco perezoso en el arranque si quiere una respuesta mas rápida elija la placa con GNSS

El Si5351 dispone de 3 salidas de RF con conectores SMB (CLK0, CLK1 y CLK2) ademas de 7 pines (0,1,2,SCL, SDA, GND y VIN)


Es muy conveniente disponer de :

  • Un receptor de RF (p.e. SDR) para comprobar que el WSPR TX transmite y en que frecuencia lo hace
  • Un receptor WSPR para monitorizar las transmisiones WSPR o SPOTS
  • Una analizador de espectros como tinySA para comprobar la calidadd dee la señal de RF generada

Adicionalmente podriamos necesitar:

  • Un amplificador lineal de potencia, para aumentar la potencia de saldia del WSPR TX
  • Un filtro pasa bajos para disminuir los armónicos que genere el conjunto 


Software

He hecho una pequeña búsqueda de proyectos de WSPR TX  disponible en Internet y he encontrado el siguiente software:


WSPRBEACON 

Después de analizar brevemente cada uno de ellos hemos elegimos este proyecto que requiere las siguientes librerías:

Antes de continuar debe leer SI5351: primeros pasos

También usa
  • Wire (en el programa #include "Wire.h )

Hay que descargar y poner en la misma carpeta del proyecto 
  • WSPR_beacon_ESP32.ino
  • GPS.ino
  • Messages.ino
  • settings.h (En el programa #include "settings.h") es un fichero de parámetros de funcionamiento, solamente pongo los que modifique por que sabia que hacian
    • #define MYCALL "MYCALL" => Poner nuestro indicativo
    • #define DBMPOWER 8 => Es la potencia que entrega Si5351
    • #define SI5351FREQ  => poner 0 pues  la frecuencia del SI5351 comprado en aliexpress es de 25 MHz, debe comprobar cual es la del suyo
    • #define SI5351_CORRECTION => Atención hay que calibrar el SI5351 en caso contrario no funcionara, el valor está en centesimas de HZ Ver SI5351: primeros pasos
Adjunto esta tabla, obtenida para una placa en concreto y unicamente como ejemplo de la variabilidad que presenta tanto la frecuencia y su correspondiente ajuste así como  la potencia entregada en cada caso (valor relativo)
Recuerde que el ancho de la banda de WSPR es de tan solo 200 Hz por lo que es muy importante esta variable


    • static const unsigned long long freqArray[6] => es la tabla con el ciclo de trabajo, en principio no la toco pero se pueden incluir mas bandas y ajustarla al International WSPR Projct) en cada entrada hay que poner la frecuencia en Hz
  • Si va usar la pantalla OLED necesitará:
    • Adafruit_SSD1306.cpp
    • Adafruit_SSD1306.h
    • Fixed8x16.h
Por ultimo deberá seleccionar la placa ESP32 que use, en nuestro caso  Lilygo T-Beam y el puerto al que está conectada en ARDUINO IDE, compilar, cargar y cruzar los dedos

El programa original está escrito para el procesador del tipo AVR (como el ATmega328P) y dado que se va usar un procesador del tipo ESP32, se reescribieron los programas que están disponibles en Github https://github.com/joanpao/WSPR_beacon_ESP32


Pruebas

1 - La primera prueba es que el GPS funciona y se comunica con la placa lilygo T-beam sin problemas y eso lo podemos hacer con  el programa GPS_displa

En caso de que deje de funcionar el GPS puede necesitar su inicialización o RESET que es posible hacerlo con el programa resetGPS (se ha incluido en la versión del programa). Si el GPS no va el WSPR no emitirá

2 - La siguiente prueba es que el modulo Si5351 funciona y se comunica correctamente con la placa Lilygo esto se comprueba de forma indirecta con el programa de calibración

3 - La siguiente prueba es  comprobar que se ejecuta el flujo del programa, pasa ellos se han puesto mensajes para que aparezcan  por el puerto serie que nos sirven como traza (En un futuro se sacaran por la pantalla para evitar la necesitada de que esté conectado a un ordenador con Arduino IDE).

Mensaje del programa que indica que está esperando captar un primer paso de GPS, cuando lo haga el led rojo parpadeará. Mientras no lo haga no comenzará a emitir



4 - Lo siguiente es comprobar que emite y que lo hace en la frecuencia esperada, para ello usamos en un receptor (p.e. SDR-RTL & SDR++). 

En este punto se vio que la calibración hecha no acababa de funcionar y se uso el método de prueba y error partiendo de la banda de 18m y sabiendo que la corrección aumentaba a medida que aumentaba la banda y disminuia a medida que disminuía la banda (en un par de horas queda calibado). Además se decidió hacerlo directamente sobre la frecuencia de la tabla  y no como frecuencia WSPR  +/- corrección pues la correccción no es constante para todas las bandas.

Ajuste de frecuencia con SDR-RTL 6 SDR++

Tabla de los ajustes finales, con la frecuencia leida en SDR-RTL 
y la leida con openWSPR cuando es leida y decodificada 


Para las bandas de 160m, 80m y 60m la señal recibida por el SDR estaba a nivel de ruido por lo que no se pudo ajustar y se decidió no usarlas de momento.

Con una analizador de espectros TinySA ULTRA provisto de una atenuador de 30 dB (No conecte nunca una fuente de RF directamente al analizador pues podría destruir su paso de entrada) procedimos a medir la potencia real de salida para las distintas bandas corregida la atenuación:

  •  7 MHz -53 dBm (se observa armonico en 21 MHz de potencia similar)
  • 10 Mhz -49 dBm 
  • 14 MHz -46 dBm
  • 21 MHz -43 dBm
  • 24 MHz -37 dBm
  • 28 MHz -36 dBm

Descubriendo el problema de la potencia de emisión con TinyAS

Esto nos plantea una duda ¿Qué está ocurriendo para que saque tan poca potencia cuando esperábamos de 8 a 10 dBm?

Cambiamos la salida a CLK1 y a CLK2 y obtenemos un valor parecido por lo que pensamos que debe ser un problema de soldadura del conector SMA (la tiene que hacer el usuario, si no tiene una puede pensar en Estación de soldadura:  QUICKO T12-952 que es la opción que elegí despues de variso fiascos con soldadores tradicionales y viejunos).

Cambiamos en el en el programa CLK0 por CLK1, conectamos el TinyAS al CLK1 y comprobams que nuestras sospechas estaban fundadas era una mala soldadura en el CLK=, pues ahora los valores son:

  •  7 MHz  -8 dBm (se observa armonico en 21 MHz -18 dBm ,35 y 49 MHz)
  • 10 Mhz  -7,9dBm (se observa armonico en 20 MHz -24 dBm)
  • 14 Mhz  -7,9dBm (se observa armonico en 28 MHz -22,7 dBm)
  • 18 MHz  -7,6 dBm
  • 21 MHz  -7,5 dBm (se observa armonico en 42 MHz -20 dBm)
  • 24 MHz  -8,2 dBm (se observa armonico en 49,8 MHz -20,5 dBm)
  • 28 MHz  -8,2 dBm (se observa armonico en 56 MHz -20,5 dBm)
Señal de 21 Mhz, el armónico esta fuera de banda
 que escanea en este momento el TinyAS


Señal de 7 MHz, con los armonicos que ahora si que
se ven pues estan dentro  de la banda
 que escanea en este momento el tinyAS

Como se ve un filtro pasabajos a 30 MHz puede ayudar a mantener el espectro mas limpio. Por ejemplo por unos 6 € puede disponer de un filtro pasa bajos en aliexpress que:

  • Admite hasta 2 W de potencia (sobrado)
  • presenta unas perdidas inferiores a 2 dB
Ya puestos he hecho unas pruebas rápidas, pues WSPR es ideal para probar antenas, filtos y amplificadores:

Es dificil concretar el efecto real de un filtro como el indicado en la propagación, de estas 3 entradas la primera es sin y las dos ultimas con, la diferencia sería de -1 dB para 14MHz

 La primera es SIN y la segunda CON , no habría diferencias para 14MHz

Las dos primeras son SIN y la ercera es CON, para la banda de 18 MHz. Tenemos la paradoja de que la señal es mejor con el filtro 8algo imposible) y esto se debe a la variabilidad de la propagación

Por último y por si le viene a la cabeza el que el voltaje de entrada del Si5351 sea 3,3 o 5V, esto  no influye en la potencia de salida pues cuenta con un regualdor de voltaje interno

En otro momento veremos si este era el problema de las bandas de 160m, 80 y 60m o es la gran cantidad de armónicos que generan.


5- Se comprueba que los spots se reciben por WSPR RX en local 

Monitorización con el RX de openWSPR de remoteQTH

6 - Comprobar que llegan a estaciones receptoras remotas de WSPR y que sean  subidos a WSPRnet 

Esta QUERY SQL puede ejecutada en la web WSPR ROCKS puede ayudarle en su seguimiento
  • SELECT 
  • id AS WSPRnet_id, 
  • formatDateTime(time, '%d/%m/%Y') AS DATE, 
  • replace(formatDateTime(time, '%R'), ':', '') AS TIME, 
  • replace(toString(frequency/1000000), '.', ',') AS f_MHz, 
  • 'WSPR' AS Mode,
  • tx_sign AS Callsign_TX,
  • power AS pwr_dBm,
  • rx_sign AS Callsign_RX,
  • snr AS SNR_dB,
  • distance AS d_km
  • FROM wspr.rx 
  • WHERE  
  •  tx_sign='XXXXX' AND 
  •  time > '2025-09-03' AND 
  •    time < NOW() 
  •    order by time




Spots recibidos en ls bandas de 7, 10, 14, 18, 21 y 24 MHz por 54 estaciones diferentes de 16 territorios DXCC
durante las  primeras 24h horas de trabajo de EA5JTT en WSPR con 7dBm (5 mW)
La distancia máxima alcanzada es 7.339 km por W4HOS en 14 MHz
Fuente: https://wspr.aprsinfo.com/


7 - Mejoras

Una elemento importante es disponer de un interruptor con mando a distancia que permita reiniciar el sistema en caso de qe se vea que se ha podido colgar.

Una posible mejora es incluir un amplificador de potencia para mejorar la señal

Queda pendiente averiguar por que no se han obtenido informes de spots en las bandas de 1,8; 5 y 28 MHZ


He disfrutado mucho con este proyecto que es mas sencillo de lo que parece, aunque reconozco que conceptualmente es complejo.


Para continuar ... 

- Tambien he pensado en reutilizar una raspberry que tengo para el mismo fin dado que no precisaria Si5351 al obtener la señal directamente del puerto GIO, Tengo visto este proyecto https://github.com/JamesP6000/WsprryPi que  usa NTP (con la prueba anterior saldria de dudas si funciona o no) o precisa adquirir un GPS remoto (me da pereza), aunque tambien podemos usar un telefono móvil en desusso apra este fin (ya lo he probado en proyectos anteriores). LA raspberry con un RTL-SDR y openwebSDR ya funciona como receptor sin problemas

. Alguna cosa mas se me ocurrirá

No hay comentarios:

Publicar un comentario

ATS-mini SI4732: lenguaje de script

  El receptor ATS-mini SI4732  cuenta con su propio lenguaje de programación, compatible con CSS y JavaScript, que permite obtener resultado...