jueves, 19 de mayo de 2016

SI5351A, DDS de bajo coste. Descripción simplificada y aplicación en TRX de HF y VHF...



SI5351A, DDS-PLL

La generación de frecuencias para un TRX es un problema que nos da innumerables quebraderos de cabeza. Los osciladores a cristal son estables pero no tienen margen de variación de frecuencia, suficiente, para cubrir una banda de radio y los OFV son inestables y sensibles a la temperatura. Los sintetizadores convencionales tiene un paso mínimo de 1KHz y mejorar esto complica enormemente los circuitos.



Desde hace unos años están disponibles circuitos sintetizadores directos (DDS) como el AD9850 o el SI570. Estos circuitos tienen algunos inconvenientes que limitan su empleo, el 9850 genera gran cantidad de frecuencias espurias, cuanta más alta es la frecuencia de salida peor espectro y queda limitado su uso a unos 40MHz. Otros modelos para frecuencias más altas suben enormemente de precio por lo que su aplicación no se ha generalizado. El 570 genera desde 3,5MHz hasta 180MHz, en la versión más barata, pero consume 100mA y mientras se calienta la frecuencia está variando ya que su estabilidad es de 50ppm. Que la salida del chip sea senoidal o cuadrada no es un problema, aunque esto ha generado ríos de tinta y más adelante hablaremos de este asunto.
Recientemente ha salido al mercado un chip nuevo, el SI5351A que es un DSPLL (DSP - PLL) tipo al SI570 pero con triple salida y oscilador de referencia externo a un décimo de precio que el SI570. Además el consumo de corriente es moderadamente bajo, menos de 30mA, lo que le da unas posibilidades tremendamente interesantes para QRP portátil mochilero con las ventajas de estabilidad, resolución y excursión de frecuencia que permiten los DDS.

Arquitectura

Para entender lo que se puede hacer con este componente vamos a echar un vistazo a su arquitectura.
 
Fig 1: Arquitectura SI5351A

En la figura 1 podemos ver los bloques en los que está dividido el chip. Se han eliminado detalles no esenciales para clarificar el circuito.
La idea es muy simple pero efectiva a la vez. El PLL genera una frecuencia muy alta, partiendo del oscilador de referencia. Posteriormente esta frecuencia se divide para obtener la frecuencia final que nos interesa. Más adelante veremos ejemplos de cómo se hace esto.

Oscilador

Este circuito permite conectar un cristal de 25 o 27 MHz para generar la frecuencia patrón. Se pueden conectar cristales de otras frecuencias, pero no está garantizado por el fabricante que vaya a funcionar correctamente. Para cargar el cristal, caso de usar esta opción, el chip dispone de tres valores de capacidad programables, 0, 6, 8 y 10 pF. Externamente se puede añadir algo más de carga, pero eso dependerá del cristal usado.
Por la patilla XA se puede conectar un  oscilador externo cuya frecuencia puede estar entre 10MHz y 40MHz. La señal se conecta mediante un condensador de 100nF y con una aptitud de 1Vpp. Este oscilador puede ser un TCXO o incluso un VXO estabilizado por GPS.
La estabilidad de frecuencia que se genere con el SI5351 depende exclusivamente de la estabilidad del oscilador de referencia. Los cristales estándar tienen unas 10ppm a 50ppm de estabilidad, los cristales con corte AT están en 4ppm y para una mayor estabilidad no queda otra opción que usar un oscilador compensado en temperatura (TXCO). Esto nos da una idea de la estabilidad y precisión de frecuencia que se puede obtener con este chip gracias a tener el oscilador externo.
Con un cristal de 10ppm tenemos garantizado un error de frecuencia menor a 10Hz por cada MHz, por tanto en 30MHz con una FI de 9MHz necesitamos un OL de 39MHz y por tanto podemos tener un error de frecuencia de ±390Hz. Por supuesto, si la temperatura es estable y se calibra el sistema para esa temperatura, este error será mucho menor, dependiendo de la precisión del sistema de calibración usado. No obstante, cuando varíe la temperatura por un cambio de estación o por calentamiento del paso final,  va a variar la frecuencia del oscilador y por tanto esto en algunos casos puede ser un problema a tener en cuenta, especialmente si se trabaja en VHF.

PLL

Hay disponibles dos PLL independientes, la frecuencia de trabajo de cada uno de los PLL estará entre 600MHz y 900MHz. Cada uno de los PLL dispone de un divisor programable fracional que permite programar divisiones no enteras y por tanto se puede fijar la frecuencia del PLL A o B con una resolución extremadamente alta, 0,001Hz en la mayoría de los casos. Disponer de dos PLL nos aporta una gran flexibilidad y como veremos más adelante esto es esencial para un TRX de doble conversión.
La programación del PLL se hace mediante una ecuación, en la que cada uno de sus términos se carga en el chip para obtener la frecuencia deseada.
 
Ecuación 1
De esta ecuación, los términos que se cargan en el chip son a, b y c. Hay que tener en cuenta que el resultado de la frecuencia programada FVCO tiene que estar entre 600MHz y 900MHz. Cualquier valor fuera de estos es desechado.
Otra restricción que tiene el PLL es que el divisor fraccional tiene que estar comprendido entre 15 y 90. La razón es simple, para un oscilador de rteferencia de 40MHz la división necesaria para obtener 600MHz es 15 y con un oscilador de referencia de 10MHz la división necesaria para obtener 900MHz es 90. Las divisiones intermedias se hacen mediante el cociente  “b/c” que nos dará un número comprendido entre 0 y 1, aunque puede dar valores mayores no se necesita.
Supongamos que tenemos un TRX con el oscilador de portadora en 4,917MHz y queremos trabajar en 18,100 MHz, con el OL por encima de la frecuencia de trabajo. El OL tendrá que estar por tanto en 18,1 + 4,917 = 23,017 MHz. Supongamos que el oscilador a cristal tiene una frecuencia de 25,000175 MHz. Es decir tiene un error de +7ppm.
Una posible solución es que la frecuencia del PLL A sea de 736,544000000 MHz y para ello el divisor a = 29, b= 461557 y c=1000007. Por tanto en la ecuación [1] ponemos los valores y vemos que sale la frecuencia deseada.
 
Como podemos ver, la frecuencia exacta del cristal de referencia no es un problema. Matemáticamente se puede calibrar al introducir en el proceso de cálculo el valor de esta frecuencia.

Divisor de salida

Antes de obtener la frecuencia final de salida hay que asociar cada una de las salidas a uno de los PLL y programar los divisores que van a producir la frecuencia definitiva.
Por cada salida hay un selector de PLL, podemos elegir entre el PLL A o el B. Normalmente usaremos como fuente de señal uno de los dos PLL. La razón es que para obtener una señal limpia el divisor posterior al PLL debe ser un entero. Por tanto, salvo excepciones, se ajustará el PLL a la frecuencia necesaria para que el divisor posterior sea un entero.
Por cada salida hay un divisor entero fijo que llamamos Rx y un divisor fraccional programable. Por tanto frecuencia de salida se obtiene dividiendo la frecuencia del PLL seleccionado por el valor del divisor Rx*DVISORx.
 
Ecuación 2
El divisor racional puede tomar valores comprendidos entre 6 y1800. No obstante para minimizar el ruido generado por el chip hay que usar divisiones enteras. De lo contrario se obtiene un espectro cargado de frecuencias espúreas.
 
Fig 2: Espectro divisor racional no entero.
El divisor R puede tener valor de 1, 2, 4 ,8 16, 32, 64 o 128. Para frecuencias por debajo de 1MHz se programa este divisor que combinado con el divisor fraccional permite generar frecuencias de unos pocos KHz.
Como cada salida se puede conectar a un PLL, en el caso de necesitar tres frecuencias, inevitablemente, dos de ellas se obtendrán a partir de un mismo PLL y por tanto una de ellas tendrá una división no entera. El resultado es que una frecuencia de las generadas estará cargada de espúreos. Este problema hay que tratarlo adecuadamente para evitar tener un espectro de transmisión/recepción “sucio” de frecuencias espurias.
Siguiendo con el ejemplo que estábamos haciendo, la frecuencia del PLL A de 736,544000000 MHz, la tenemos que dividir para obtener la frecuencia final de salida. Esta frecuencia dividida por 32 nos proporciona una salida de 23,017000000 MHz. El divisor R estará en 1. Si programamos una división por 2, el divisor fraccional de salida deberá estar en 16. Como vemos, hay múltiples combinaciones que proporcionan una misma frecuencia de salida.

Buffer de salida

El último elemento que hay entre la patilla de salida y el divisor de salida es un amplificador que se puede apagar, ahorrando un par de mA, si no es necesaria esta salida. Además se puede programar la impedancia de salida en 50Ω, 80Ω, 4mA y 2mA. Con la salida de 50Ω puede entregar una señal de 3Vpp o un voltio rms. Esta señal es suficiente para atacar a un mezclador a diodos, por ejemplo.
En el caso de conectar con otro circuito digital o un mezclador de baja señal como pueda ser un SA612 o similar, se puede programar la corriente de 2mA, reduciendo la potencia absorbida por el chip. Esto es interesante para aplicaciones mochileras alimentadas por pilas.

Aplicaciones

Como ya hemos dicho, el SI5351 puede generar simultáneamente hasta tres frecuencias, dos de ellas se pueden generar mediante divisiones enteras a partir de los PLLA para una de ellas y PLLB para la otra.  La tercera frecuencia inevitablemente se tiene que generar a partir de uno de los dos PLL  y aceptar que esta salida no sea lo suficientemente limpia como para un equipo de comunicaciones ¿o si?.
Vamos a suponer que tenemos un TRX con doble conversión, una primera FI bastante alta, por ejemplo 50MHz, una segunda FI de 9 MHz. Necesitaremos una frecuencia de OFV que va desde 50MHz hasta 80Mhz para cubrir toda la HF desde 0Mhz hasta 30Mhz. Como las frecuencias de portadora, 9 MHz y de conversión de la primera FI a la segunda son fijas, estas dos frecuencias se pueden obtener del mismo PLL, por ejemplo el B y dejamos la frecuencia del PLLA para el OFV.

Fig 3: Diagrama de bloques de TRX doble conversión.
Conectamos el divisor 0 al PLL A que vamos a usar como OFV. La salida tiene que generar una frecuencia comprendida entre 50,000000 MHz y 80,000000 MHz para que al restarle la frecuencia intermedia de 50, 000000 MHz nos permita generar/recibir cualquier frecuencia comprendida entre VLF y 30,000000 MHz.
La frecuencia intermedia de 50,000000 MHz tenemos que pasarla a 9000000 ±1500 KHz. Por tanto necesitaremos generar dos frecuencias, una para LSB y otra para USB, de  41,0015 MHz y 40,9985 MHz. Este divisor lo conectamos al PLL B e igualmente conectamos al PLL B el divisor 3 que generara las frecuencias del BFO de 9,0015 MHz y 8,9985 MHz. Además para TX CW, AM y FM se generarán las frecuencias de 9,000MHz, y 41,000 MHz. En RX se puede modificar el tono de la señal detectada en CW cambiando la frecuencia del BFO  y reajustando la frecuencia de 41 MHz al valor adecuado para cada caso. Vamos viendo las muchas posibilidades que tiene este chip. Vamos a suponer que como antes el oscilador a XTAL está ligeramente desplazado a 25,000175 MHz.
Con estos datos calculamos los divisores para los PLL’s y los divisores de salida para obtener cada frecuencia pueden quedar como sigue:

PLLA
PLLB
a
b
c
A
B
C
80,000000
640

25
599825
1000007
8
0
1
41,001500

738,027
29
520877
1000007
18
0
1
8,9985000





82
16669
100007
Tabla 1: Divisiones para BLI.
Frecuencia del PLL A y salida 1 (FOL ):
 
Frecuencia del PLL B y salidas 2 (F1FI)  y 3 (FBFO):
 
La frecuencia de 8,8895 MHz se obtiene a partir del PLLB. La parte entera será el valor del divisor “A” y la parte fraccionaria se multiplica por el denominador, que hemos fijado en 1000007 para “C”  y con ello obtenemos el valor para “B”.
La frecuencia de 8,9985 va a tener un error de frecuencia de 0,061 Hz que es despreciable. Esta frecuencia además va a tener unas componentes espurias producto de tener un divisor no entero. Bien, como esta frecuencia se va a filtrar con el filtro a cristal de banda lateral o CW si lo hubiera, las frecuencias espurias van a eliminarse por debajo de -60dBc. Posteriormente el filtro de 50MHz limpiará también la señal y por tanto la emisión será perfectamente limpia. En recepción el filtro de banda lateral elimina las frecuencias no seleccionadas, por tanto, el BFO si tiene espurias no van a afectar en nada a la recepción. Este es el caso peor, doble conversión. En el caso de conversión directa o conversión simple cada frecuencia estará asociada a un PLL de tal forma que el divisor posterior será entero y el espectro estará libre de frecuencias espurias.
 
Frecuencia de transmisión/recepción:

¿Senoidal o cuadrada?

Este asunto ha generado mucha confusión. Tradicionalmente se usa un oscilador local filtrado para obtener una señal de oscilador libre de armónicos. Por tanto siempre se tiende a usar frecuencias libres de armónicos cuando se llevan a un conversor o directamente al TX. Bien, esto no siempre tiene sentido y se dedica un esfuerzo innecesario a filtrar la señal del oscilador cuando no  es necesario.
Supongamos que vamos a manipular directamente la señal del oscilador para un TX de CW. Como en este caso se usa un paso final en clase C, filtrar la señal del oscilador para eliminar armónicos es una pérdida de tiempo y gastos en material que no sirve para nada. El paso final al trabajar en clase C va a generar los armónicos que le hemos quitado previamente al oscilador, por tanto una onda cuadrada para CW directa va muy bien ya que se filtra en el paso final.
Otro caso es cuando vamos a mezclar dos señales, por ejemplo la FI modulada en BLU para obtener la frecuencia final de salida. La señal de BLU es una señal libre de armónicos ya que al llevar la modulación tiene que ser lineal. Esta señal va a una de las puertas del mezclador y a la otra va la señal del oscilador. Aquí tampoco es necesario usar una señal senoidal. En realidad los mezcladores se excitan con señales suficientemente grandes como para hacer que el circuito actúe como un conmutador. Por tanto, el mezclador va a generar internamente los armónicos de la señal del oscilador local y por tanto no merece la pena filtrarlos previamente. Esto es especialmente cierto en el caso de usar un mezclador doble balanceado a diodos o un mezclador tipo H y sus variantes. La salida del mezclador no va a cambiar por usar una señal senoidal en lugar de una  señal cuadrada.

 










Fig 4: Espectro de salida mezclador a diodos. Izquierda OL con onda cuadrada, derecha OL con onda senoidal.
En la figura 4 se puede observar como la salida de un mezclador a diodos es prácticamente idéntica independientemente de la forma de onda del oscilador local. En ambos casos el oscilador local está rechazado 20 dB, los productos de mezcla no deseados están atenuados en 40 dB y en ambos casos el tercer armónico del oscilador local aparece con fuerza. En el caso del oscilador local con onda cuadrada es ligeramente más potente que en el caso del oscilador local senoidal. La diferencia es de unos 4 dB solamente.
Los productos de mezcla se tiene que limpiar, como siempre, con el adecuado filtrado de la salida del mezclador. En RX el filtrado como es normal se coloca entre la antena y el mezclador.
Tampoco hay mayor problema en usar una onda cuadrada para el modulador/demodulador de SSB por las mismas razones ya expuestas. Un modulador de SSB no es más que un mezclador ajustado para el máximo rechazo de la señal portadora.

Conclusiones

El SI5351A simplifica enormemente el diseño de un TRX de conversión directa, conversión simple o doble, eliminando todos los circuitos osciladores y concentrándolos en un solo chip.
La posibilidad de ajustar su impedancia de salida permite trabajar desde mezcladores a diodos hasta circuitos de baja señal como el SA612 y similares.
El consumo de 0,1W le hace un candidato muy adecuado para QRP alimentado a pilas. El uP necesario para cargar su frecuencia puede apagarse una vez programado el SI5351A en tanto en cuanto no sea necesario volver a programarlo. Algunos chips pueden conmutar su frecuencia de reloj de forma que el uP sigue operativo pero consumiendo solo unos pocos uAmperios mientras no tengan nada que hacer.
El tamaño del componente con encapsulado SMD MMSOP10 desgraciadamente le hace poco manejable. Una buena idea es usar un módulo soporte con las conexiones en paso 2,54mm que permitan su uso como si fuera un circuito integrado de pinchar y de esta forma se puede integrar fácilmente en nuestros diseños, sean modernos o antiguos.
Fig 5: SI5351 + TCXO.
En la figura 5 podemos ver una posible aplicación de montaje. Incluye el SI5351, un TCXO de 26 MHz y 2ppm o cristal de 25 MHz de 10 ppm. Se ha añadido un regulador de 3,3Vcc y un adaptador de I2C para hacerlo compatible con microprocesadores de 3,3V o de 5Vcc. Hay algunos componentes que cambian dependiendo de a qué tipo de microprocesador se va a conectar. El conector superior tiene las salidas de RF y entre cada dos hay una patilla de masa. El conector inferior tiene la alimentación de 3,3 o 5V y las conexiones de I2C.

La placa tiene unas dimensiones de 30,5 x 20,3 mm. La cara opuesta a los componentes es todo un plano de masa de tal forma que montando la placa con los componentes hacia abajo, sobre el TRX, queda casi totalmente blindada. Si se necesita se puede meter el circuito en un blindaje de Masach Technologies MS323-30, para un mayor aislamiento de señales, especialmente para un TRX de banda corrida.
Fig 6: Circuito de la placa de la figura 5
La resolución de frecuencia es mucho mejor que 1Hz. No obstante es absurdo usar tal resolución si el oscilador de referencia no lo garantiza. Un TCXO puede estar en 0,1ppm por tanto a 30MHz tendríamos ±3Hz de deriva máxima. Una resolución de 10Hz en CW es muy agradable para sintonizar y 25 a 50 Hz en fonía es más que suficiente.

Anexo 1

En este apartado iré añadiendo experiencias y soluciones usadas con este chip.

1.-Frecuencias independientes de salida

La versión A del SI5351 dispone de tres salidas con un divisor cada una de ellas y que se pueden conectar indistintamente al PLLA o PLLB. Ya intuimos ciertas restricciones con esta arquitectura, ver en la figura 3 el diagrama de bloques del chip.

Cada uno de los PLL puede tener una frecuencia cualquiera entre 600 y 900 MHz. Al variara la frecuencia de uno de ellos, esto no afecta al otro. Por tanto tenemos dos fuentes de señal independientes. Podemos conectar la salida 0 al PLLA y la 1 al PLLB, por ejemplo. De esta forma podemos programar la frecuencia que deseemos en cada salida, respetando la restricción que el divisor de cada una de las salidas sea un entero y de esta forma obtendremos una salida cuadrada en cada una de ellas.

Si queremos usar la tercera salida tendremos dos problemas a tener en cuenta:

   a) La tercera salida será dependiente de uno de los dos PLL, por tanto si se usa el PLL como OFV arrastrará la frecuencia de la tercera salida y será necesario reprogramar el divisor de ésta cada vez. Esto nos genera un nuevo problema. Al programar una nueva división se corta la salida hasta que el registro está cargado nuevamente. En audio (SSB) se oye un "poc" cada vez que se reprograma el divisor de salida. Por tanto no es buena idea usar esta salida conectada al PLL que vamos a usar como OFV.

   b) No podrá usarse un divisor entero para la mayoría de los casos, ver tabla 1. Por tanto el espectro de salida será tipo a la imagen de la figura 2. Si este oscilador se usar en una etapa conversora el espectro final de salida estará cargado de frecuencias espureas. En TX supone emitir en varias frecuencias de forma simultánea, prohibido. En RX recibirá en varias frecuencias próximas y el receptor tendrá un pésimo comprotamiento.

Una solución aceptable es la configuración de la figura 3. Para un TRX de doble conversión se puede usar la tercera salida como fuente del BFO. Aunque esta salida esté llena de frecuencias espúreas, el filtro de alta selectividad de SSB, CW, AM o FM limpiará todos estos espureos, pero el filtro deberá actuar tanto en TX como en RX. Este problema hay que tenerlo muy controlado para no echar a perder als prestaciones de nuestro TRX.

2.- OScilador en cuadratura

Además del divisor que tiene cada una de las salidas hay un registro de retardo de fase. Este registro es de 7 bits, por tanto se puede retrasar la salida entre 0 y 127 unidades de tiempo. La unidad de tiempo es 1/4 del periodo de la frecuencia del PLL al que esté conectada la salida en cuestión.

Por ejemplo, si se fija la frecuencia del PLL en 700MHz, el periodo será 1,428571428571e-9 Sg y por tanto la unidad de ajuste de fase será 3,571428571427e-10 Sg. La fase se podrá ajustar entre 0 y 127*3,571428571427e-10 = 4,535714285712e-8 Sg como máximo. Si programanos el divisor de salida para 28MHz, es decir dividir por 25, el periodo de la señal de salida es 3,571428571429e-8Sg.

Para tener dos salidas en cuadratura conectaremos ambas salidas al mismo PLL y programamos sus divisores con el mismo valor, 25 en el ejemplo en curso. El registro de fase de uno de ellos lo dejamos en 0 y en el otro programamos la fase de 90º. El tiempo a programar es por tanto 1/(4*28e6) = 9,928571428571e-9Sg, un cuato del periodo de la frecuencia de salida (28MHz). Para conseguir este retardo de tiempo (90º) programamos X*3,571428571427e-10 = 9,928571428571e-9, por tanto  X=25. Este es el valor a programar en el registro de ajuste de fase. Al ser un número entero esto nos indica que la fase estará justo en 90º. El ajsute posible es por tanto 90º/25=3,6º lo que nos limita el ajuste de cuadratura a lo que de de sí el propio SI5351A ya que no se puede hacer un ajuste fino de la fase mejor que 3,6º. Si en lugar de 28MHz la frecuencia de salida fuera 7MHz, el valor a programar es de 100. En este caso el ajuste de fase es de 0,9º. Como podemos ver, cuanto mayor es el valor del divisor de salida mayor es la resolución de ajuste de fase, pero si la división es mayor a 127 ya no será posible ajustar la fase a 90º.

Disponer de oscilador en cuadratura simplifica bastante el circuito para hacer un receptor/emisor IQ y aprovechar tanto los circuitos analógicos conocidos como de rotación de fase o las modernas aplicaciones SDR con la tarjeta de sonido de un PC.

3.-Salida en contrafase

Además del registro de fase, cada salida se puede programar normal o invertida. Si dos salidas, por ejemplo la 0 y 1, las conectamos al mismo PLL y las cargamos con la misma división, una de ellas (0) la programamos normal y la otra (1) invertida, tendremos la misma frecuencia pero en contrafase.

Esto nos permite excitar a un amplificador en "push-pull" y si controlamos las dos salidas simultáneamente ON/OFF, podemos hacer un sencillo transmisior de CW sin más.

Anexo 2: SW

Estos componentes pensados para manejarlos con un uP presentan el problema de la necesidad de un SW para poder usarlos y que dicho SW corra en alguna plataforma. Para Arduino y alguna otra plataforma ya se han publicado aplicaciones y librerías. Yo uso PIC por lo que con unas pequeñas adaptaciones es fácil pasar a PIC cualquier SW escrito en ANSI C. Solo la parte que iteracciona con el HW, el puerto I2C, necesita de modificaciones.

Inicialización


Yo uso el siguiente código de inicialización del chip, antes de hacer nada más con él:

void InitSi5351(uint32_t Correccion)
{
uint8_t ReadStat;
ref_correction = Correccion;

ReadStat = ByteReadI2C (SI5351_BUS_BASE_ADDR,1); //Estado de las interrupciones
ReadStat &= 0x0F;
ByteWriteI2C(SI5351_BUS_BASE_ADDR, 1, ReadStat); //Borrar interrupciones

ReadStat = ByteReadI2C (SI5351_BUS_BASE_ADDR,3); //Salidas
ReadStat  =  SI5351A_CLKOUT_MASK;
//ReadStat |= (SI5351A_CLK1_OFF| SI5351A_CLK2_OFF);
ByteWriteI2C(SI5351_BUS_BASE_ADDR,3, ReadStat);  //Habilita salida 1 por defecto


ByteWriteI2C(SI5351_BUS_BASE_ADDR,9, 0x00);      //OEBB no controla las salidas

ByteWriteI2C(SI5351_BUS_BASE_ADDR,
             SI5351_CRYSTAL_LOAD,
             SI5351_CRYSTAL_LOAD_10PF |
             0b00010010);                        //Carga del XTAL

//Selección de oscilador
ReadStat = ByteReadI2C(SI5351_BUS_BASE_ADDR,15);//Fuente del PLL
ReadStat &= SI5351A_PLL_MASK;
ReadStat |= (SI5351A_PLLA_XTAL | SI5351A_PLLB_XTAL);
ByteWriteI2C(SI5351_BUS_BASE_ADDR,15, ReadStat);//SI5351A solo entrada a XTAL

ByteWriteI2C(SI5351_BUS_BASE_ADDR,16, 0x4C);    //CLK0 PLLA
ByteWriteI2C(SI5351_BUS_BASE_ADDR,17, 0x6C);    //CLK1 PLLB
ByteWriteI2C(SI5351_BUS_BASE_ADDR,18, 0x6C);    //CLK2 PLLB

ByteWriteI2C(SI5351_BUS_BASE_ADDR,24, 0x00);    //SI5351A salida a 0 cuando
                                                //la salida de rejoj esta
                                                //inhabilitada
ByteWriteI2C(SI5351_BUS_BASE_ADDR,149, 0x00);    //Spread spectrun deshabilitado

ByteWriteI2C(SI5351_BUS_BASE_ADDR,165, 0x00);    //Fase 0 de CLK0
ByteWriteI2C(SI5351_BUS_BASE_ADDR,166, 0x00);    //Fase 0 de CLK1
ByteWriteI2C(SI5351_BUS_BASE_ADDR,167, 0x00);    //Fase 0 de CLK2

ByteWriteI2C(SI5351_BUS_BASE_ADDR,187, 0xC0);    //Fanout
}


El código se lee sin problemas. La función tiene una entrada que es la frecuencia en Hz de corrección del cristal. Este valor hay que conocerlo midiendo con un frecuencímetro. Luego se van fijando valores en los registros del chip que afectan a las salidas, oscilador a XTAL, etc. La corrección de frecuencia se almacena en una variable global que será usada repetidas veces a la hora de calcular la división de los PLL en función de la frecuencia que deseemos programar en cada caso.

Hay casos en los que vamos amodificar algunos bits de un registro, pero no todo el registro. En estos casos leemos el contenido del registro, modificamos lo que sea necesario y escribimos nuevamente en el registro. Para eso usaremos la variable temporal ReadStat en la que almacenamos el valor leído, lo modificamos y escribimos nuevamente.

Las funciones ByteReadI2C y ByteWriteI2C están modificadas para funcionar con Arduino. Este código no está probado con Arduino, pero deberá funcioanr sin problemas.

Programar frecuencia

La programación de frecuencia depende de dos divisores, el divisor del PLL al que se haya conectado la salida que queremos programar y el divisor de la salida que estemos usando.

Ya hemos dicho que el divisor de la salida deseada debe ser un entero para que el espectro sea lo más limpio posible. Por tanto hay que seleccioanr una división coherente con la frecuencia de trabajo. Supongamos que estamos haciendo el OFV para un TRX SSB en la banda de 14 MHz con FI de 9MHz. Por tanto el OFV tendrá que estar en 14+9=23MHZ si usamos un OFV por encima de la frecuencia de trabajo, muy recomendable para mejorar el espectro de salida del TX ya que el filtro pasobajo ayudará a mejorar el rechazo de la frecuencia imagen y restos del oscilador local que entra en el mezclador, pero esto es obvio no lo voy a tratar mucho más  aquí. Pues lo dicho, la frecuenca del OFV estará por los 23MHz, por tanto las frecuencias máximas y mínimas del PLL nos darán entre qué limites puede estar este divisor. 600/23 = 26 y 900/23 = 39. Cualquier valor comprendido entre ambos valdrá, pero si elegimos el mayor nuestro OFV no podrá subir de 23MHz y si elegimos el menor no podrá bajar de los 23MHz, por tanto hay que selecioanr un valor intermedio. Yo uso 700/(frecuencia de salida de mitar de banda) es decir 14,250+9=23,250MHz y por tanto 700/23,250 = 30, los decimales del divisor los elimino y redondeo por defecto.

Bien, una vez fijado el divisor podemos programarlo mediante la función:

si5351_set_multisynth(FrecuenciaOFV, PLLA, SI5351_CLK0);    //OFV en la salida 0

FrecuenciaOFV es la frecuencia que queremos a la salida de la patilla CLK0 y PLLA es la frecuencia que tiene que tener el PLLA para que con la división de 30 sea así. Esto es un poco raro, pero la función está hecha de esta forma y no me he dedicado a cambiarla para que programe directamente la división que me interesa, así que le proporciono los datos para que calcule la división a programar y lo haga sin más.

En nuestro caso, FrecuenciaOFV será 23250000Hz y PLLA = 2325000 * 30 = 697500000Hz. Una vez programada la división de salida ya no tendremos que tocarla mientras el OFV se mueva en un margen de frecuencias de 300/30=10MHz, es decir 23+/-5MHz. 

Ahora programamos el PLLA mediante la función:

si5351_set_pll(PLLA, SI5351_PLLA);

PLLA es la frecuencia deseada a la salida de CLK0 multiplicada por 30. Por ejemplo, para USB la frecuencia del BFO será 8,9985 MHz y si deseamos obtener la frecuencia de 14,195MHz en nuestro TRX la frecuencia del OFV será 8,9985 +14,195 = 23,0845 Mhz. Entonces PLLA = 23084500 * 30 = 692535000 Hz. La función programará esta frecuencia con la corrección que se usó en la función de inicialización. 

La resolución para programar el PLLA o PLLB depende de la librería matemática del compilador para el uP empleado. Se necsita usar números en coma flotante con 64 bits, pero el compilador C18 de MPLAB no dispone de esta librería por lo que seá necesaria hacer algunos cambios en los cálculos de esta función para usar 32 bits. Esto limita la resolucion que se puede programar con 7 cifras. Hasta 99,99999 MHz se puede trabajar con una resolución de 10Hz que para HF es más que suficiente. 

La programación sucesiva del PLL no genera ruidos y el efecto es el mismo que si se trabaja con un OFV analógico. Mediante un encoder rotativo se puede variar la frecuencia en saltos de 10Hz y a cada impulso del encoder se programa la nueva frecuencia. Todo esto como es lógico implica hacerse el SW correspondiente que lea los pulsos del encoder, decida el sentido de giro y actualice la frecuencia para cada uno de ellos, además de otras posibles funciones como detección de TX o RX para activar un RIT por ejemplo.

HW PIC

Este HW incluye todo lo necesario para hacer un OFV con hasta tres salidas y que incluye además el HW necesario para disponer de pulsadores y dos encoders, display, salidas OC, entradas analógicas y digitales que nos permitan gestionar un TRX multibanda.

 
Esta placa de 50x150 mm equipa un uP PIC18F46K20 en formato QPF, interfaces de ampliación OC para manejar relés, entradas digitales y analógicas, fuente de alimentación conmutada con encendido y apagado SW, 10 pulsadores de propósito general, un encoder rotativo sin detentor y otro con detentor, puerto serie TTL y un SI5351 con cristal o TCXO y tres salidas con conectores coaxiales y un display 16x2. El consumo a 9 voltios es de solo 30mA.

El SW para esta placa está en desarrollo, ya iré contando más... 

Referencias

AN551, AN619 y datasheet SI5351 que se pueden obtener de la web de Silicon Labs.
Clock Builder Desktop SI5351: programa para calcular la programación del SI5351. Se puede descargar de la web de Silicon Labs.

11 comentarios:

  1. Perdona Diego que no haya contestado antes. Llevo tiempo fuera y no he estado atento al blog.
    Referente a lo que preguntas. Hay dos soluciones:
    1.- SI5351B que tiene entrada de control del VCO que se puede usar para modular en FM. Con este chip puedes trabajar directamente en la frecuencia de emisión. Este chip no lo tengo y no lo he probado, así que es una suposición sacada de la documentación del chip.
    2.- Modular por I2C, aunque no lo he probado. Se necesita un microproxcesador muy rápido para procesar todo y una conexion I2C a 1MHz. Si muestreas el audio a un ritmo superior a 8KHz, digamos 8192Hz y programas la frecuencia proporcionalmente a la amplitud, con un máximo de 5KHz de desviación se consigue modular en FM. Si el audio se pasa por un filtro de preenfasis se consigue una modulación equivalente a la de fase que es lo que se usa en VHF. El problema viene que a 8192HZ el tiempo de muestreo es de 122uS, por tanto, cada 122us hay que enviar la nueva frecuencia. Cada frecuencia requiere 8 bytes que al enviar en I2C hay que añadir al direccion del chip y del registro inicial a programar, total 10 bytes. A 1MHz esto gasta más de 80uS. Así que 122-80=42uS. Es decir, en 42uS hay que calcular la frecuencia que corresponde a la amplitud de la señal y calcular los bits de programación de dicha frecuencia. Un uP a 16MHz no es capaz de hacer tanto trabajo, ni siquera calcular los bits de programación de frecuencia. Así que este método solo sería válido con un uP que corra a muy alta velocidad y aún así sería necesario usar técnicas de programación que optimicen el tiempo de proceso.
    3.- Usar una frecuencia muy baja y conectar a un modulador de fase y posteriormente con un multiplicador por 9 obtener la frecuencia de emisión modulada en fase. Cualquier equipo de VHF a cristales lleva un modulardor de fase a la salida del oscilador a cristal. En este caso, reemplazamos el oscilador a cristal por el DDS con el 5351 y listo. Multiplicar por 3 va a ir justo de modulación, pero si ya lo tienes funcionando así, pues no veo razón para que no funcione con el DDS. No obstante yo multiplicaría por 9 o mejor por 12 si se quiere usar 5KHz de desviación para la canalización de 25KHz.

    ResponderEliminar
  2. Gracias, Juan Pablo, por tu respuesta. Es muy probable que vuelva a este tema durante el año. De cualquier manera te comento que probé directamente modular el cristal de 25 Mhz del Si5351 en el transmisor que te comenté, pero en frecuencia fundamental ya que reajusté el transmisor. He realizado varios comunicados. Aunque la calidad del audio no sea "de lo mejor" la experiencia me ha dejado conforme.
    Recién imprimí esta entrada del blog para mantenerla en la carpeta en donde tengo documentación del proyecto. ¡Saludos cordiales!
    Diego Alejandro

    ResponderEliminar
    Respuestas
    1. Es lógico lo que comentas. El PLL del SI5351 está controlado por un filtro pasobajo integrador que genera la tensión de sintonía del VCO. Al modular en la referencia, el VCO debería seguir esta variación de frecuencia, pero aquí interviene la respuesta en frecuencia que tenga este filtro, integrado en el chip.
      Para obtener una buena modulación no hay más remedio que usar otras técnicas y descartada la de programar el DDS a ritmo de la voz, pues veo más sencillo el multiplicador.
      Puedes ver el manual del TR7200 de Keenwood que usa modulación de fase https://www.google.es/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0ahUKEwjenaf7gb_aAhWCtxQKHc-AB38QFggrMAA&url=http%3A%2F%2Fwww.radiomanual.info%2Fschemi%2FTR7200G_user.pdf&usg=AOvVaw0VyRAqo_OyMbzEL4RA92c9
      Es solo una idea. Me gustó tu video de la prueba de la radio de VHF.

      Eliminar
    2. ¡Gracias nuevamente! Descargué el manual del Kenwood TR7200 también.
      Me alegro que te haya gustado el video.
      Saludos, Juan Pablo.

      Diego Alejandro Majluff

      Eliminar
  3. Hola buenas noches, es posible conectarlo a un ft-7b. y donde se conectaría. Gracias.

    ResponderEliminar
    Respuestas
    1. Hola Jesús,
      Me pillas fuera y hace tiempo que no veo las entradas de comentarios.
      Bien, tema del FT7. En plan escueto, sin problemas. El DDS se puede conectar a un FT7 para reemplazar el OFV.
      La cuestión es cómo hacerlo. El FT7 no dispone de entrada para OFV exterior, por tanto hay que hacer algún trabajo extra para conectar externamente el DDS. Puede que lo que quieras es meter dentro del FT7 el DDS, no lo aclaras. Por tanto te doy solo unas ideas iniciales para conectar un DDS al FT7.
      La primera posibilidad y es la menos invasiva, es conectar el DDS a la entrada del oscilador a XTAL fijo. De esta forma, al poner el mando en FIX se desconecta el OFV y se conecta el oscilador a cristal. En nuestro caso lo que sucede es que la señal del DDS pasa por el circuito del oscilador, se filtra de armónicos y ataca al mezclador para obeterner la frecuencia del oscilador local que corresponda en cada banda.
      Solo es necesario sacar un cable coxial desde la patilla 5 de la placa FIX UNIT a un conector trasero (habria que reformar el conector del frecuencímetro o añadir un conector para esta nueva entrada) y hay que colocar un condensador de paso de 1nF para aislar la Vcc de la base del transistor oscilador de la salida del DDS. Tambien habría que sacar un hilo desde la patilla 3 que alimenta el oscilador de tal forma que nos sirva como señal de control del DDS para apagarlo cuando se esté en modo OFV o encenderlo en modo FIX.

      La segunda posibilidad es anular completamente el OFV y los osciladores de banda. Conectar el DDS a la patilla 6 de la placa PREMIX UNIT, la conexion hay que hacerla con un condensador de paso como antes pero es necesario retirar C911 de la placa PREMIX.

      Asdemás se puede eliminar el oscilador de poratadora del módulo MOD/DEMOD y del módulo IF UNIT. Para que todo quede perfecto se sacaría tambien las alimentaciones de USB y LSB que conmutan los cristales del módulo MOD/DEMOD y la señal CW TX del módulo IF UNIT para que el uP del DDS sepa si estamos en USB, LSB o CW, sepa si estamos en RX o TX y con esta información calcule la frecuencia del OFV y del BFO para que la frecuencia seleccionada en el dial coincida con la frecuencia sintonizada en RX o de emisión en TX, además si se quiere se puede monitorizar la tensión de RIT que es la señal CLAR del módulo SW UNIT para meter un desplazamiento en RX. La tensión de varicap de RIT se puede monitorizar y convertirla en un desplazamiento de frecuencia mediante un ADC que haya disponible en la placa del uP.

      Como ves se pueden hacer muchas cosas desde las más simples con sus problemas a las más complejas y sofisticadas con sus dificuiltades añadidas.

      Eliminar
  4. Hola Juan.
    Yo quería utilizar un SI5351A, para generar una frecuencia de 10 MHz
    Tengo una duda, en vez de utilizar los 25 mhz del oscilador del SI5351A, yo quiero utilizar una frecuencia de 12,288 mhz, que provienen de un GPS
    Y estar enfosado.
    Es factible con sus cálculos, generar una frecuencia de 10 MHZ, con la frecuencia de referencia del GPS de 12,288Mhz.
    Como seria el cálculo, o cual es el resultado a programarle SI5351A,
    Así la estabilidad, ya no me la daría el cristal de 25 mhz, me la daría el GPS.
    Gracias, interesante e instructiva página.

    ResponderEliminar
  5. Hola Pedro,

    no hay ningun problema en usar la frecuencia que propones. El SI5351 admite frecuencia de entrada desde 10MHz a 40MHz.
    Si usas la librería de Arduino solo tienes que cambiar la frecuencia de referencia en el constructor si5351.init(0,12288000,0) con esto cambia la referencia estandar de 25MHz por la nueva de 12,288MHz.

    ResponderEliminar
  6. hola buen dia!,soy radioaficionado y en estos momentos se me hace dificil comprar un equipo hf,asi que mi idea es ver la manera de adaptar un si5351 a un equipo comrcial blu,es un equipo nortecom em-1,de 4 canales que tiene abilitados solo dos,la idea seriatratar de configurar en 80 y 40mts y mas adelante si puedo completar lo dos canales restantes pondria 20 y 10mts,el equipo cuenta en uno de sus canales con un cristal de 11.330 y el otro de 9100 mhz,filtro de 2mhz y cristal de fi de 1650mhz,si alguien me puede orientar un poco binvenido sea,dede ya muchisimas gracias Oreste LU1ABV,73s

    ResponderEliminar
    Respuestas
    1. En principio no hay problema en hacer lo que planteas. El SI5351 lo puedes programar entre 1 y 150MHz sin problema.
      El equipo que refieres no hay forma de encontrar el esquema así que no puedo ser preciso. De forma general, el DDS se conecta al oscilador o reemplaza directamente a éste si da el nivel adecuado para que funcione el equipo.
      La librería del SI5351 para Arduino (hay varias fuentes) https://github.com/etherkit/Si5351Arduino permite generar la frecuencia que necesites y por un lado tendrás que programar el DDS y por otro poner en la pantalla la frecuencia de RF que se sintoniza. La diferencia será la suma o diferencia con la primera FI.
      En tiendo que en cada canal el equipo además de seleccionar un cristal también selecciona el filtro de antena TX/RX correspondiente. Una pequeña sofisticación es aprovechar que el conmutador de canales de tensión al cristal o filtro de banda para leerlo con el Arduino (o el uP que vayas a usar) de tal forma que el SW reconozca directamente la banda en la que deseas trabajar según la posición del conmutador de canales. El encoder te permitirá moverte entre las frecuencias de la banda seleccionada...

      Eliminar
  7. Uno de los mejores artículos en español sobre este CHIP

    ResponderEliminar

Espero que te sea útil. Te agradezco la crítica constructiva y todo tipo de comentarios no ofensivos, despectivos o mal intencionados