domingo, 10 de octubre de 2021

μSDX Das Radio (Parte 1)

 

La historia empieza con un proyecto simple pero revolucionario, el transceptor QCX de QRP-Labs, cuyo propietario Hans Summers (G0UPL) es bien conocido por su talento para desarrollar buenos productos para el mercado de radioaficionados global, mercado dificil si los hay. El transceptor de marras es un kit  para que cada uno se lo arme, su circuito está bien documentado pero tiene aspectos propietarios. En su forma original se trata de un transceptor de CW, aunque nada impide usarlo como receptor de SSB también, que opera en una banda en la gama de HF a elección al momento de comprarlo. En realidad su electrónica es tal que lo que diferencia el funcionamiento de una banda u otra son los filtros. Su potencia de salida está en el entorno de los 3 a 5W dependiendo de varios factores, utiliza una etapa de salida basada en MOSFET baratos operando en clase E lo que aumenta mucho la eficiencia y reduce el tamaño del disipador necesario. Un aspecto fantástico del kit es que el microcódigo contiene la implementación de todos los "instrumentos" necesarios para calibrar la placa ya en funcionamiento. El transceptor usa técnicas SDR (Software Defined Radio) para su funcionamiento, en particular para la cadena receptora. El firmware que controla el funcionamiento de la placa es implementado en un ATMega328P y el firmware que contiene es el encargado de todas las funciones de procesamiento de datos, las de gestión de las distintas funciones de la placa, la interfaz de usuario mediante la cual controlar sus parámetros de funcionamiento y la operación misma del transceiver  y, finalmente, implementar los instrumentación de prueba. La memoria del procesador  ATMega328p viene ya grabada con el microcódigo provisto por QRP-Labs, del que no se dispone source ni es facilmente modificable. El chip suena conocido y lo es, se trata del mismo que contienen las placas Arduino, solo que en vez de operar con un clock de 16 MHz lo hace con uno de 20 MHz. Es por cierto posible explorar un poco ese código con un kit de debugging y un  "disassembler" para recuperar una suerte de "source" que con bastante esfuerzo se puede entender y eventualmente modificar, pero realmente no vale la pena tanto esfuerzo como veremos pues el QCX como transceptor tiene un funcionamiento soberbio y es muy completo. Una función muy interesante en el código original es poder operar como una baliza WSPR autónoma, la que salvo una cierta complejidad para sincronizar el reloj tal como lo requiere ese modo es bastante funcional y útil. Para la operación portatil la utilidad de operar WSPR se desdobla, por un lado se puede evaluar el funcionamiento de la antena y por el otro las condiciones de propagación, ambas monitoreando la red WSPRNet.
El proyecto es muy divertido de ser abordado para la construcción, la placa es densa y compleja, pero el kit está muy bien diseñado y siguiendo estrictamente las indicaciones sale prácticamente en el primer intento.
En el aire se comporta muy bien. Obviamente que quien no se sienta cómodo operando en CW le resultará de uso limitado, aunque para funcionamiento QRP la operación en CW es casi la norma, incluso a velocidades muy modestas. En mi caso disfruto operar en CW y la única limitación seria, si se puede llamar tal es la operación monobanda. 
Con el tiempo he construido dos versiones del kit, el QCX+ para 40 metros y el QCX-Mini para 20 metros, ambos funcionan igualmente bien, aunque el último es un poco mas dificil de construir debido a su tamaño reducido, ambos han sido cubiertos previamente en éste blog.
Entonces aparece Guido (PE1NNZ) con una vieja idea (link) implementada casi una década atrás en las entonces incipientes Raspberry Pi (modelo 1, por entonces) y posteriormente sobre un chip ATTiny45. La idea proviene de un evidente dominio de las técnicas DSP para modular señales, y de algo que casi todos usamos pero muy pocos conocen y es como funciona la "compresión" de voz en SSB.
Sin intentar repetir la teoría, que puede leerse en el ARRL handbook, la modulación humana puede dividirse en dos componentes. Una señal modulada en frecuencia que transporta la gama alta de frecuencias del espectro vocal y que contiene la mayor parte de la información la que es modulada en amplitud por una señal de baja frecuencia que da la entonación. La compresión en SSB consiste justamente en quedarse mayormente con la señal modulada en frecuencia con una amplitud casi constante (no del todo para no generar espurias excesivas), con lo que la potencia media de la señal sube. El resultado es una modulación distorsionada, nasal y sibilante, pero inteligible y con mas "pegada" en condiciones ruidosas pues tiene mas "potencia" (mas potencia media). Mas viejo que la injusticia también, pero efectivo desde siempre como bien lo saben quienes usan el recurso en las condiciones muy exigentes de operación de DX y concursos.
Con técnicas de procesamiento digital de señales se puede entonces capturar el contenido de frecuencia de las señales de audio y modular en fase una señal portadora manteniendo la amplitud casi constante o con poca variación.
La Raspberry Pi permite en sus puertos GPIO manejar hasta 7 niveles de amplitud, por lo cual se puede tener una señal vocal bastante inteligible a pesar de lo discreto de los niveles de modulación. En experimentos reportados en el blog he utilizado ésto en el proyecto Orange Thunder y en particular en el denominado PixiePi. En particular en éste último utilicé un kit de transceptor económico de telegrafía (Pixie) el cual opera su etapa final en clase C, claramente no indicada para señales que requieran amplificación lineal como el SSB. Sin embargo, casi mas útil para la operación QRP que salir en CW lo es salir en los modos digitales de baja señal, en particular FT8, y éstos modos requieren SSB pero la modulación es de amplitud constante. Las pruebas con el hardware PixiePi y el programa Pi4D resultaron una revelación puesto que en definitiva se trataba de un receptor rudimentario de conversión directa, un transmisor de algo menos de 1W y una antena simple random wire alimentada al extremo en 40 metros con el que obtuve alcance regional.
Cuando luego de muchos años de silencio encontré una nueva entrada en el blog de Guido, esta vez refiriendo a su proyecto QCX-SSB no pude menos que estudiarlo con mucha atención. En el mismo cuenta como aplicó el viejo concepto que en su momento exploró a nivel prototipo con una placa Raspberry Pi pero ahora con una placa QCX modificada dotando a la misma la capacidad de operar en ... SSB (!). Desde el punto de vista hardware las modificaciones a la placa no son muchas, despues de todo el QCX es un buen receptor, y como transmisor se elimina el circuito de manipulación y se lo modifica para que permita modular la amplitud usando PWM, con un truco genera una señal modulada en fase para completar la generación. Y vaya truco. Una cosa es realizar el procesamiento de señales necesario en una placa Raspberry Pi, que aún en su versión mas vieja era órdenes de magnitud mas potente en clock de CPU y memoria que el Arduino con reloj "sobrecargado" que es en realidad una placa QCX, en el proyecto PixiePi aprendí que el procesamiento digital necesario tenía lo suyo y también era una placa Raspberry (Zero en éste caso). Como buen mago que es Guido hace sus trucos a la vista de todos, el microcódigo QCX-SSB es abierto y está disponible en GitHub para quien quiera usarlo (y modificarlo). Cuando se lo revisa con cuidado es posible observar que el código tiene tres grandes segmentos, el receptor, la gestión de la placa y el transmisor. Los dos primeros operan mas o menos como lo haría el QCX, ignoro en que medida Hans compartió o liberó parte del microcódigo para que Guido lo usara como base o si éste directamente lo desarrolló desde cero, no hay referencias en el código al copyright respectivo y Hans, que suele ser muy enfático cuando del uso de su material propietario se refiere, participa en el foro de soporte del proyecto y no se ha quejado. Lo cierto es que desde el punto de vista programación de parámetros y operación el QCX-SSB es muy similar al QCX, con menos funciones quizás. Desde el punto de vista de recepción no tiene diferencias significativas.
Desde el punto de vista transmisión en cambio Guido ha realizado una obra de arte de programación para poder procesar las señales de audio con las técnicas SDR adecuadas para obtener la información de fase y amplitud tras lo cual realiza otra obra de arte para programar la frecuencia (fase en realidad) del chip DDS Si5351. No consiste en cambiarle la frecuencia en forma convencional, el chip no reacciona con la suficiente velocidad si se lo hace de esa manera, consiste en manipular muy intrincadamente los registros del chip para lograr que opere con técnicas de acceso DMA de baja latencia, una maravilla para estudiar con detenimiento en una tarde de lluvia, casi como una buena lectura de un gran autor. El sitio GitHub contiene toda la información para modificar el hardware del kit QCX para hacerlo compatible con éste firmware, las modificaciones son simples realmente, sobre todo si se arma el kit desde cero con éste uso en mente puesto que en ese caso se trata de poblar mas o menos la mitad de los componentes y luego realizar media docena de "jumpers" en la placa; las instrucciones de armado hechas por Manuel (DL2MAN) no están tan logradas como sus equivalentes del kit original, pero teniendo cierta experiencia en armado de kits y siendo cuidadoso se llega a buen puerto, los pasos de la construcción fueron en su oportunidad documentados en éste blog (link). La grabación del firmware en el chip ATMega328p requiere de un grabador Arduino ISP (usando otra placa Arduino), el proceso no es terriblemente complejo pero hay que ser prolijo con los pasos pues está lejos del método "plug & play" para grabar una placa Arduino convencional. A diferencia del QCX original el firmware no contiene los instrumentos necesarios para su calibración por lo que hay que recurrir a instrumentos de laboratorio mas convencionales para ajustar un emisor SSB. El comportamiento en el aire es sorprendente, tanto en el uso mas convencional de CW propio del transceptor QCX subyacente como en SSB (!), tanto en operación de voz como en modos digitales (FT8). Los reportes en fonía fueron excelentes, en FT8 la cantidad y calidad de contactos fue totalmente compatible con otros transceivers de 5W o menos en la estación a igual antena. 
Un desafortunado accidente mientras experimentaba derivó en la placa con el Si5351 quemado. Para explorar el firmware con mas detenimiento sin utilizar otro kit QCX construi un prototipo basado en una placa Arduino Uno, un módulo DDS Si5351, un rotary encoder/push y un kit de transceiver Pixie. Tuve que hacer algunas adaptaciones al microcódigo por un lado porque la asignación de puertos no podía ser la misma que en la placa QCX original (especialmente para el display LCD 16x2 y el rotary encoder) y por el otro porque el clock de una placa Arduino es, como comenté antes, de 16 MHz en vez de los 20 MHz que tiene la placa QCX, es por decirlo de alguna forma mas "lento", lo que requiere ajustar un poco el firmware para que le de la talla de hacer el procesamiento que tiene que hacer. Como prueba de concepto funcionó mas que bien, mostrando el potencial del proyecto para continuar desarrollandolo y eventualmente concluir con un transceptor ultra simple como el Pixie para operar modos como FT8 que podrían requerir un transceptor de SSB.
Mientras tanto el proyecto QCX-SSB no se quedó quieto, Manuel (DL2MAN) siguió trabajando sobre el único aspecto criticable del proyecto, la limitación original del QCX de ser monobanda.
Nada en el firmware QCX-SSB lo hace ser monobanda, de hecho es posible configurarlo para cualquier banda, pero para que el nivel de interferencias esté dentro de márgenes tolerables Manuel propuso originalmente un mecanismo para tener filtros "enchufables" para las distintas bandas (si, ¡como en los viejos equipos de AM cuando empezamos!). Pero una vez que el concepto mostró ser viable era necesario llevar el proyecto al siguiente nivel, y ¡Manuel se lo puso al hombro! (Continuará...)

No hay comentarios:

Publicar un comentario