Multiplicador de 10MHz

Frontal multiplicador

En el laboratorio cada vez necesito mas señales de 10MHz. Como el GPSDO que construirá hace tiempo solo tiene una salida. Empece a diseñar una placa, lo deje porque los integrados que veía estaban obsoletos y el tiempo me apremiaba, me acorde de los montajes de DF9NP, tiene un Expansor de 2×5, con buffer de salida.

Lo adquirí junto a otros kits, para futuros proyectos.

Para este proyecto, utilice de base otro proyecto mio el GPSDO STP2945FL

Pero añadiéndole la placa de DF9NP. El montaje queda como se muestra en la siguiente figura:

Todos las cables de RF, tiene la misma longitud.

En cada una de las 10 salidas, tengo una tension App de 3,1V, y una señal sinosuidal muy buena.

Aun me falta hacer los frontales definitivos, estoy a la espera de una fresadora.

Y averiguar cual es el pin que indica que que GPSDO esta activo.

Amplificador AH103A.

Ebay es uno de los lugares donde se pueden encontrar cosas interesantes a precios asequibles.

Aunque el AH103A, es un amplificador que ya esta descatalogado, sirve parra el propósito que se va ha utilizar.

La placa PCB1900, esta diseñada para trabajar en la banda de 1,8 a 2,0 GHz.

Solo hace falta alimentarlo con 9V y tenemos 1/2W en esa rango.

Controlador para Baliza con Arduino.

Un compañero me envió una baliza que se componía de un Arduino como controlador y un walkie como emisora,

Estaba averiado y lo repare, Estaba montado sobre un Arduino UNO, con unos componentes adicionales.

Después de repararlo, le diseñe y fabrique una caja con la impresora 3D.

Desde la caja se puede alimentar el walkie.

Una vez terminado, surgió la idea de hacer una placa para que hiciera lo mismo, y su montaje lo mas fácil posible.

Dicho y hecho,

Hecho, he creado el software que correrá en la placa. En las próximas semanas estarán disponible.

Mixer Bidirectional: DC2566A

Mixer biderccional

En algunas ocasiones, es necesario hacer medidas de elevada frecuencia y no tengo instrumental para ello. En estos casos un mezclador nos puede ayudar a obtener una frecuencia que si es medible por el instrumental que poseo.

Mixer biderccional

El datasheet

El funcionamiento del Mixer es bastante simple, mezcla dos frecuencias (F1 y F2), obteniéndose las dos frecuencias resúltantes F1+F2 y F1-F2. Esto lo podemos hacer, dependiendo por donde introduzcamos la señal.

Trabajando como upconverter

Trabajando como Downconverter

Recomendaciones para las pruebas:

  • Alimentar el modulo y después dar la tensión a EN.
  • Antes de quitar la alimentación, quitar antes la tensión en EN.
  • El nivel maximo de entrada de LO es de 0dbm.

Características:

  • Voltaje de alimentación (VCC) ………………………………………..3V3
  • Rango de funcionamiento: desde 3GHz a 20GHz
  • Impedancias 50Ω
  • Voltaje de activación (EN) ……………..–0.3V to VCC+0.3V
  • Nivel Maximo de entrada del OL 0dBm.
  • LO Input Power (1GHz to 12GHz) …………………….10dBm
  • RF Power (3GHz to 20GHz)…………………………….20dBm

WINLINK

Para un proyecto de URE Málaga, en colaboración de EMCOM, necesitábamos un modem par poder activar el sistema.

En la pagina de WINLINK, tenéis mas información.

Modem:

Utilizamos una tarjeta de sonido USB

Algunos vendedores la denominan USB Audio Blue.

La puedes encontrar fácilmente en Amazon o Aliexprex.

Modificaciones.

Hay que hacer las modificaciones que se muestran en la siguiente figura:

Se suelda una resistencia de 10K al pin 13 del microprocesador.

Por ergonomía, en vez de utilizar un conector DB-9, he modificado un de los conectores de audio, para utilizarlo como salida del PTT.

Para ello, desueldo el conector Verde y le recorto las patillas de los contactos centrales.

Para darle consistencia, pongo unas gotas de cianocrilato.

En el otro extremo de la resistencia, lo uno a la base del transistor 2N2222 o equivalente, el emisor a la patilla primera del conector y el colector a la patilla central.

Al otro conector no se le hace nada.

Deposito una gota de silicona caliente, dándole una rigidez a los componentes soldados.

Una vez probada, y funcionado correctamente, me percate de que por una manipulación errónea o que cayera alguna pieza conductora, pudiera producir un corto. Se me ocurrió hacerle una caja protectora con la impresora 3D.

Actualmente se encuentra funcionando en la Sede de URE Málaga, su futura ubicación, será en el Cerro del Moro, Mijas Sierra.

Baliza: Pagina web de control

Cuando queremos ver el estado de funcionamiento de la baliza, o nos fijamos en los led de la placa, o accedemos por el puerto serie disponible, para su supervisión.

La forma más fácil, es que la baliza tenga una pagina web, desde la que se pueda supervisar. Nos podremos conectar, con un PC, mediante la pagina de la impresora, por defecto, tendra la IP: 192.168.1.177. En versiones posteriores, se podrá cambiar la IP y otros parámetros de ella.

Nos muestra:

Datos de la Baliza:

  • Indicativo.
  • Locator.
  • Frecuencia de emisión.

Estado:

  • Oscilador: /boqueado / Libre.
  • Temperatura: De la controladora
  • Modo TX: el modo en que esta transmitiendo (Portadora / Opera /CW)

Avisos / Alarmas:

  • IP: La IP en la que esta escuchando
  • Alarma 1: Alarma por definir.
  • Alarma 2: Alarma por definir.

Es una prueba, solo ha servido para saber como se programa en el STM32, con. HTML

Python: Aceder a un servidor FTP

Forma fácil de acceder a un servidor FTP.

Para hacer la pruebas, usaremos el servidor dlptest.com este nos permita probar el programa que realicemos. Hay que tener en cuenta,:

  • No sirve para almacenar datos, ya que se borran cada cierto tiempo.
  • No se pueden subir ni descargar archivos muy grandes, ya que no puede banear nuestra IP.
  • La contraseña varia cada cierto tiempo
  • Recomendable leer las condiciones de uso, ya que pueden variar.

Desarrollo del programa:

Utilizaremos el modelo ftplib

Utilizaremos el fichero «ejemplo.txt» para poder hacer las operaciones, este fichero debe estar en el mismo directorio donde se ejecute el programa.

Definir los parámetros de acceso.

HOSTNAME = "ftp.dlptest.com"
USERNAME = "dlpuser"
PASSWORD = "rNrKYTX9g7z3RgJRmxWuGHbeu"

Nos conectamos al servidor:

ftp_server = ftplib.FTP(HOSTNAME, USERNAME, PASSWORD)

En las siguientes subrutinas, definiremos los comandos mas importantes.

Subir un fichero (Upload):

def subir_fichero():
    filename = "ejemplo.txt"
    # Leemos el fichero en modo binario
    with open(filename, "rb") as file:
        # Comando para UPloading el fichero "STOR filename"
        ftp_server.storbinary(f"STOR {filename}", file)

Bajar un fichero (Download):

def descargar_fichero():
    filename = "ejemplo.txt"
    # Escribimos el fichero en modo binario
    with open(filename, "wb") as file:
        # Comand para Downloading el fichero "RETR filename"
        ftp_server.retrbinary(f"RETR {filename}", file.write)

Crear un directorio:

def crear_directorio(directorio):
    try:
        ftp_server.mkd(directorio)
        print(f"Directorio '{directorio}' creado exitosamente.")
        ftp_server.quit()
    except ftplib.all_errors as e: 
      print(f"Error al crear el directorio: {e}")

Comprobar si existe un directorio:

def comprobar_directorio(directorio):
    """
     Comprueba si un directorio existe en un servidor FTP.
    Argumentos:
        ftp: Objeto FTP conectado al servidor.
        directorio: Nombre del directorio a comprobar.
    Avisos:
        True si el directorio existe
        ,False en caso contrario.
    """
    try:
        # Intenta cambiar al directorio
        ftp_server.cwd(directorio)
        # Si se pudo cambiar, vuelve al directorio anterior
        ftp_server.cwd('..')
        return True
    except ftplib.error_perm:
        # Si lanza error_perm, el directorio no existe
        return False

Progama completo:

# -*- coding: utf-8 -*-
"""
Created on Thu Jul 17 14:06:51 2025

@author: EA7TB
"""
# Import Module
import ftplib

# Fill Required Information
HOSTNAME = "ftp.dlptest.com"
USERNAME = "dlpuser"
PASSWORD = "rNrKYTX9g7z3RgJRmxWuGHbeu"

# Connect FTP Server
ftp_server = ftplib.FTP(HOSTNAME, USERNAME, PASSWORD)

# force UTF-8 encoding
ftp_server.encoding = "utf-8"

def listado():
    # Get list of files
    ftp_server.dir()


#Subir un fichero
def subir_fichero():
    filename = "ejemplo.txt"
    # Leemos el fichero en modo binario
    with open(filename, "rb") as file:
        # Comando para UPloading el fichero "STOR filename"
        ftp_server.storbinary(f"STOR {filename}", file)
        
def descargar_fichero():
    filename = "ejemplo.txt"
    # Escribimos el fichero en modo binario
    with open(filename, "wb") as file:
        # Comand para Downloading el fichero "RETR filename"
        ftp_server.retrbinary(f"RETR {filename}", file.write)
    
def crear_directorio():
    try:
        directorio = "ejemplo"
        ftp_server.mkd(directorio)
        print(f"Directorio '{directorio}' creado exitosamente.")
        ftp_server.quit()
    except ftplib.all_errors as e: 
      print(f"Error al crear el directorio: {e}")


def comprobar_directorio(directorio):
    """
     Comprueba si un directorio existe en un servidor FTP.
    Argumentos:
        ftp: Objeto FTP conectado al servidor.
        directorio: Nombre del directorio a comprobar.
    Avisos:
        True si el directorio existe
        ,False en caso contrario.
    """
    try:
        # Intenta cambiar al directorio
        ftp_server.cwd(directorio)
        # Si se pudo cambiar, vuelve al directorio anterior
        ftp_server.cwd('..')
        return True
    except ftplib.error_perm:
        # Si lanza error_perm, el directorio no existe
        return False


subir_fichero()
listado()
descargar_fichero()
print(comprobar_directorio("ejemplo"))
crear_directorio("ejemplo")
ftp_server.close()

Existen mas comandos, se pueden ver en la documentación de Python

FICHEROS DE CONFIGURACION

Para no modificar el fichero de configuración, podemos generar un fichero INI, donde estén todas las variables del programa.

La librería de Python que usaremos es ConfigParser ( https://pypi.org/project/configparser/ ). Para instalarla,

pip install configparse

FICHERO INI:

Esta estructurado en secciones, indicando en corchetes, y entradas. El nombre dentro del corchete indica la sección de la configuración.

Los valores se muestran especificando primero el nombre y luego el valor. Por ejemplo:

[GESTION]
nombre=“Gesstion de archivos"
versión = 1.0
autor="EA7TB"
locator= “IM76SR”
[ACTIVIDAD]
indicativo = “EH7SCB”
dme = “29078”
referencia = “MVMA-0234”
nombre = “Iglesia Santuario del Pilar”
nombre=“Gesstion de archivos"
version=1.0
autor="EA7TB"
locator= “IM76SR”
[ACTIVIDAD]
indicativo = “EH7SCB”
dme = “29078”
referencia = “MVMA-0234”
nombre = “Iglesia Santuario del Pilar”


Para leer los datos , se pueden ver en el ejemplo siguiente:

#!/usr/bin/env python
#!/usr/bin/env python3 
"""
Created on Tue Jul 15 17:24:34 2025
@author: EA7TB
"""
from configparser import ConfigParser
configfile_name = "config.ini" 
# leemos el fichero de configuración
config = ConfigParser()
config.read("config.ini")
# Imprime el numero de secciones
sections = config.sections()
print("%d secciones:" % len(sections))  # Cantidad de secciones
# imprime todos los valores de todas las secciones del archivo
for section in config.sections():
  print("\n[%s]" % section)
  for item in config.items(section):
      print(item[0], ":", item[1])
#asigna el valor de "indicativo" a call, después se imprime
call = config.get("ACTIVIDAD", "indicativo")
print("\n")
print(call)

Dependiendo del tipo de datos, para leerlos se usara:

  • Texto: config.get(section, option)
  • Boolean: config.getboolean(section, option)
  • Float: config. getfloat(section, option)
  • Integer: config.getint(section, option)

STM32: IDE Arduino.

Hay varios IDEs para programar, como estoy acostumbrado al del Arduino, utilizare este.

Leer más: STM32: IDE Arduino.

Arrancamos el IDE de Arduino y nos vamos a «ARCHIVO» «Preferencias»

Pinchamos en Preferencias:

En la linea «URLs adicionales de gestor de placas. añadimos la siguiente linea:

http://dan.drowm.org/stm32duino/package_STM32duino_index.json

Le damos a «Aceptar».

Aunque no es necesario, recomiéndo que se se cierre y abra el IDE, para recargar la configuración.

Y, a continuación nos vamos a «gestor de Placas»

Buscamos la placa siguiente: STM32F1xx/GD32F1xx

Le damos a instalar, ya se puede trabajar con esta placa.

Como usare un conversor USB/Serie para cargar el programa, hay que configurar en «Herramientas», el modelo de placa y el «Upload method», debe configurarse como muestra la imagen inferior.

Ya podemos trabajar con nuestro micro.

Espero que os sirva.