Arduino PLL con la minima cantidad de partes


Es común que los proyectos de transceivers para HAM radio usen sintetizadores de onda del estilo AD9850, AD9833, Etc. Si bien estos sintetizadores tienen una resolución en frecuencia excelente y gran estabilidad también tienen varios problemas.

El principal problema es el precio, un buen DDS requiere un muy buen ADC con mucha resolución y alta tasa de muestreo. Incluso teniendo estas características, las frecuencias espúreas emitidas distan mucho del óptimo, lo cual trae aparejado los famosos "birdies" en recepción.
Por otro lado aparte del costo alto (varios U$D) el consumo eléctrico es altísimo en algunas versiones (Ej: AD9850), lo cual se puede apreciar con solo tocarlo (suelen calentar mucho).

Para tratar de solucionar todos estos problemas a la vez se me ocurrió implementar un PLL utilizando solamente un microcontrolador y un VCO que puede ser cualquier oscilador tipico de VFO manual modificado mediante un diodo varicap.

Con lo cual tendríamos lo mejor de los dos mundos, Pureza espectral de un oscilador senoidal y el costo prácticamente nulo de sus componentes (un transistor y algunas cosas mas). Como diodo varicap me resultó muy efectivo utilizar  un LED infrarrojo puesto en inversa, por la gran capacidad que tienen, pero se puede tambien experimentar con los leds que tengan a mano.

Los componentes principales de un PLL y sus implementaciones se pueden ver a continuación:

Clock de referencia: 16Mhz crystal (arduino)
Divisor de referencia: Timer/counter2 (Mega328)
Frecuencia de referencia: 100hz. (puede ser menor, lo cual mejora la estabilidad).
VCO: Cualquier VCO con Fmax=16Mhz/2 (timer1 limit) -CD 4046 en las pruebas-
Divisor de VCO: Timer/counter1 (Mega328)
Vc=pin 9 arduino (tri-state output like CD4046 phase comparator II)

Las prueba de concepto se realizó usando un CD4046 pero mas adelante se fabricará un VCO para la banda de 40m.


El resultado, una vez enganchado el PLL: 

El esquema es el siguiente:

  




Falta bastante depuración en cuanto a software y hardware para lograr un optimo rendimiento pero ya funciona bastante bien. El banco de trabajo se pude ver en la figura siguiente:




La parte que mas limita el buen desempeño en cuanto a software es el comparador de fase, pero puede hacerse casi sin costo de manera externa con una compuerta XOR de igual manera que el comparador I del CD4046 o usar el comparador II de dicho IC.

Para modificar la frecuencia del PLL solamente hay que modificar los registros de los timer, lo cual le otorga una simplicidad gigante.

Para la elección del VCO recomiendo el siguiente recurso:
https://www.qsl.net/va3iul/High_Frequency_VCO_Design_and_Schematics/High_Frequency_VCO_Design_and_Schematics.htm

Material de referencia sobre PLL y el loop filter:
https://www.ece.ucsb.edu/~long/ece594a/PLL_intro_594a_s05.pdf

Para optimizar el filtro en caso de usar el tipo charge pump (Loop filter):https://www.changpuak.ch/electronics/pll_loopfilter_calc.php


Para modificar el código fuente no recomiendo usar la IDE de arduino, PlatformIO es un excelente reemplazo con resaltado de sintaxis, open source y compatible con arduino.

Espero que sea de utilidad para los amantes de la simplicidad y el bajo costo como yo.  Como dicen por acá: "el que sabe sabe, y el que no sabe paga"


Codigo fuente:

https://gitlab.com/pan__duro/arduino-pll


ACTUALIZACIÓN (17/05/2020):

El comparardor de fase con salida de tres estados resultó poco efectivo debido a la alta resistencia de fuga que tienen los pines de entrada del uC, aparte de su complejidad y costo computacional por lo que implementé una versión con el comparador de fase tipo I, una función XOR por software, y resultó en un mejor funcionamiento. Las rutinas de interrupcion nuevas con un comparador XOR estan actualizadas en el repositorio.

Comentarios

  1. La pureza espectral también incluye el ruido de fase, que en tu sintetizador ha de ser bastante alto. El ruido de fase genera mezclas recíprocas que empeoran la selectividad del receptor y no se pueden evitar mediante filtrado como sí se pueden evitar en el caso de los espureos de un DDS.

    ResponderEliminar

Publicar un comentario

Entradas populares