Documentos de Académico
Documentos de Profesional
Documentos de Cultura
https://learn.adafruit.com/adafruit-si5351-clock-generator-breakout
Tabla de contenido
Visión general 3
distribución de pines 5
• Pines de alimentación 5
• Pines I2C 5
Asamblea 7
código arduino 9
• Referencia de la 12
biblioteca • ¡Comienza! • 12
Configurar el PLL • 12
divisor de reloj 13
• Divisor R adicional 14
• Software 14
Documentos de Python 24
Descargas 25
• Software 25
• Hoja de datos 25
• Impresión esquemática y PCB 25
Visión general
¡Nunca vuelvas a buscar otro cristal con el generador de reloj Si5351 de Adafruit! Este chip
tiene una referencia de cristal de precisión de 25 MHz y PLL y divisores internos para que
pueda generar prácticamente cualquier frecuencia, desde <8 KHz hasta más de 150 MHz.
Las salidas son de 3 Vpp, ya sea a través de un encabezado apto para placa de pruebas o, para trabajo
de RF, un conector SMA opcional.
Colocamos este pequeño y práctico chip en su propia placa de circuito impreso, con un regulador LDO
de 3,3 V para que pueda alimentarse con 3-5 VCC. También colocamos circuitos de cambio de nivel en las
líneas I2C para que pueda usar este chip de manera segura con lógica de 3V o 5V.
¡Lo mejor de todo es que incluso tenemos un excelente tutorial y una biblioteca para que comiences! Nuestro
código está diseñado para usarse con el microcontrolador Arduino y el IDE, pero se transfiere fácilmente a su
plataforma favorita con soporte I2C
distribución de pines
Pines de alimentación
El generador de reloj en el desglose requiere una potencia de 3V. Dado que muchos clientes tienen
Microcontroladores de 5V como Arduino, lanzamos un regulador de 3.3V en el tablero. Su caída ultra baja para que pueda
• Vin: este es el conector de alimentación. Dado que el chip usa 3 VDC, hemos incluido un
Pines I2C
• SCL - Pin de reloj I2C, conéctese a la línea de reloj I2C de sus microcontroladores. este pin es
el nivel cambió para que pueda usar una lógica de 3-5V, y hay un pullup de 10K en este pin.
• SDA - Pin de datos I2C, conéctese a la línea de datos I2C de sus microcontroladores. este pin es
el nivel cambió para que pueda usar una lógica de 3-5V, y hay un pullup de 10K en este pin.
Pasadores de reloj
Los pines de reloj también se llevan a los conectores de lanzamiento de borde SMA en el
otro lado de la PCB. Puede comprar y soldar en algunos conectores SMA de lanzamiento de
borde (https://adafru.it/dPr) si desea canalizar la señal a un cable RF.
Asamblea
Si tiene la versión de placa de prueba de este sensor, querrá soldar algunos encabezados
en el sensor para que pueda ser utilizado en una placa de prueba.
¡Y soldadura!
Asegúrese de soldar todos los pines para una conexión confiable.
contacto eléctrico.
Soldadura (https://adafru.it/aTk)).
código arduino
solo asegúrese de que tenga capacidad I2C, luego transfiera el código: ¡es algo bastante simple!
(https://adafru.it/dPs)
adafruit_products_wiring.jpg (https://adafru.it/pBC)
• Conecte Vin a la fuente de alimentación, 3-5V está bien. Use el mismo voltaje en el que se basa la lógica del
microcontrolador. Para la mayoría de los Arduinos, eso es 5V Conecte GND a tierra común de alimentación/datos
• Conecte el pin SCL al pin SCL del reloj I2C en su Arduino. En un Arduino basado en UNO y '328, esto también se
• conoce como A5, en un Mega también se conoce como digital 21 y en un Leonardo/Micro, digital 3 Conecte el pin
SDA al pin SDA de datos I2C en su Arduino. En un Arduino basado en UNO y '328, esto también se conoce como A4,
Descargar Adafruit_Si5351
Para comenzar a leer los datos del sensor, deberá descargar la biblioteca Adafruit Si5351 del administrador de la biblioteca
Arduino.
Luego abra la consola Serial a 9600 baudios para verificar la salida. Deberías ver lo siguiente:
¡Eso es todo! Si desea cambiar las frecuencias, ajuste el boceto de ejemplo y vuelva a cargar.
Referencia de biblioteca
La biblioteca que tenemos es simple y fácil de usar.
¡Empezar!
Para inicializar el chip, llame a clockgen.begin() que comprobará que se puede encontrar.
Begin() devuelve verdadero/falso dependiendo de estas comprobaciones. Le sugerimos que envuelva
begin() en una declaración que verificará si se localizó el chip:
if (relojgen.begin() != ERROR_NONE) {
Configurar el PLL
El chip usa dos subsecciones para generar salidas de reloj. Primero multiplica el reloj de
referencia de 25 MHz por una cierta cantidad (configurando el PLL), luego divide ese nuevo reloj por
otra cantidad (configurando el divisor de reloj)
Hay dos multiplicadores PLL (A y B), por lo que si desea tener tres salidas, dos
las salidas tendrán que compartir un PLL.
Esto establece que PLL_A o PLL_B sean 25 MHz * m y m (el multiplicador de enteros) puede variar
de 15 a 90!
Cada salida tiene su propio divisor. Puede usar el divisor de solo entero más limpio:
Nuevamente, la salida entera le dará el reloj más limpio. Si necesita más flexibilidad, utilice
el generador/divisor fraccionario:
Divisor R adicional
Si necesita dividir aún más, para llegar a las frecuencias de < 100 KHz, hay una
divisor R adicional, que divide la salida una vez más por un número fijo:
clockgen.setupRdiv(salida, SI5351_R_DIV_x);
• SI5351_R_DIV_1
• SI5351_R_DIV_2
• SI5351_R_DIV_4
• SI5351_R_DIV_8
• SI5351_R_DIV_16
• SI5351_R_DIV_32
• SI5351_R_DIV_64
• SI5351_R_DIV_128
Software
Como puede ver, la parte molesta aquí es descubrir la mejor opción para PLL
multiplicador y divisor! SiLabs tiene una aplicación de escritorio llamada ClockBuilder (https://
adafru.it/dPj) que puede hacer algunos cálculos del divisor/multiplicador PLL por usted. Es
solo Windows, pero solo necesita usarlo una vez para el cálculo.
Habilite la salida que desee y establezca la frecuencia como coma flotante o fracción
Configure el cristal para que sea de 25 MHz (el valor predeterminado es 27 MHz)
¡Haga clic en Crear plan de frecuencia para ver las configuraciones de PLL y divisor!
Las versiones anteriores de este chip solo aceptan un divisor de 900 o menos, y nuestra biblioteca no
le permite seleccionar > 900 para el div entero. Entonces, si obtiene un valor más alto de la
calculadora, ¡es posible que deba ajustarlo!
Es fácil usar el generador de reloj Si5351 con Python o CircuitPython, y Adaf ruit CircuitPython Módulo
SI5351 (https://adafru.it/C5C). Este módulo le permite escribir fácilmente código Python que controla la
salida del reloj de la placa.
Puede usar este sensor con cualquier placa de microcontrolador CircuitPython o con una
computadora que tenga GPIO y Python gracias a Adafruit_Blinka, nuestra compatibilidad CircuitPython-
for Python biblioteca (https://adafru.it/BSN).
Primero conecte un Si5351 a su tablero exactamente como se muestra en las páginas anteriores para
Arduino usando una conexión I2C. Aquí hay un ejemplo de cableado de un Feather M0 al
sensor con I2C:
Dado que hay docenas de computadoras/placas Linux que puede usar, le mostraremos el cableado para
Frambuesa Pi. Para otras plataformas, visite la guía de CircuitPython en Linux para
ver si su plataforma es compatible (https://adafru.it/BSN).
A continuación, deberá instalar las bibliotecas necesarias para usar el hardware; siga cuidadosamente los
pasos para encontrar e instalar estas bibliotecas desde el paquete de bibliotecas CircuitPython de Adafruit.
(https://adafru.it/zdx). Nuestra guía de introducción tiene una excelente página sobre cómo instalar el paquete
de la biblioteca (https://adafru.it/ABU) para tableros rápidos y no rápidos.
Recuerde que para tableros no express como el, deberá instalar manualmente las bibliotecas
necesarias del paquete:
• adafruit_si5351.mpy
• adafruit_bus_device
Antes de continuar, asegúrese de que la carpeta lib o el sistema de archivos raíz de su placa tengan copiados
los archivos y carpetas adafrui t_si5351.mpy y adafruit_bus_device.
Una vez hecho esto, desde su línea de comando ejecute el siguiente comando:
•
sudo pip3 instalar adafruit-circuitpython-si5351
Si su Python predeterminado es la versión 3, es posible que deba ejecutar 'pip' en su lugar. Solo
asegúrese de no estar tratando de usar CircuitPython en Python 2.x, ¡no es compatible!
Para demostrar el uso del sensor, lo inicializaremos y controlaremos los relojes desde Python REPL
de la placa. Ejecute el siguiente código para importar los módulos necesarios e inicializar la conexión
I2C con el sensor:
importar tablero
importar busio
importar adafruit_si5351 i2c =
busio.I2C(tablero.SCL, tablero.SDA) si5351 =
adafruit_si5351.SI5351(i2c)
Ahora está listo para configurar los PLL y las salidas de reloj en el chip. El SI5351 es algo complejo y
permite muchas configuraciones para equilibrar la precisión y el rango de los valores de salida del reloj.
Querrás revisar el hoja de datos (https://adafru.it/ C5E) para comprender las capacidades y
características del chip.
Primero deberá configurar uno de los dos PLL (bucles de bloqueo de fase, hardware especial
que puede 'multiplicar' el cristal de 25 MHz a velocidades mucho más rápidas) que se utilizará como
fuente de cualquiera de las salidas de reloj. El objeto Si5351 tiene dos objetos PLL que puede
manipular:
•
pll_a Este es el hardware PLL A en el chip. pll_b Este
•
es el hardware PLL B en el chip.
si5351.pll_a.configure_integer(20)
¡No lo olvide, si lee la hoja de datos, verá que el Si5351 solo admite un PLL múltiplo de 15-90!
Si tiene curiosidad, puede leer la propiedad de frecuencia del PLL para leer qué frecuencia está
configurada para usar:
La otra forma de configurar un PLL es con un multiplicador fraccionario. Esto le permite establecer
tanto el múltiplo entero como un múltiplo fraccionario (especificado por un numerador y un
denominador). Los multiplicadores fraccionarios pueden permitirle especificar un rango de frecuencias
aún mayor, pero pueden no ser precisos y pueden ser susceptibles a fluctuaciones con el tiempo.
Por ejemplo, para configurar PLL B a 512,5 MHz, puede especificar un multiplicador de 20,5
llamando:
si5351.pll_b.configure_fractional(20, 1, 2)
Observe que la función configure_fractional toma nuevamente el múltiplo entero (20) pero también
agrega un valor de numerador (1) y denominador (2). El multiplicador real será la combinación del
multiplicador entero más el numerador/denominador. En este caso 20,5 o 20 1/2 es el multiplicador.
Nuevamente, puede leer la propiedad de frecuencia para confirmar el valor que se estableció.
•
clock_0 La salida del reloj 0.
•
clock_1 La salida del reloj 1.
•
clock_2 La salida del reloj 2.
Al igual que configurar los PLL, puede configurar el divisor de reloj con una función configure_integer
y configure_fractional . Nuevamente, se aplica la misma compensación de precisión frente a rango
para divisores de enteros frente a fraccionarios. Por ejemplo, para configurar el reloj 0 para usar
PLL A como fuente (funcionando a 500 MHz como se configuró anteriormente) y un divisor de 4,
podría llamar:
si5351.clock_0.configure_integer(si5351.pll_a, 4)
Observe que le dice a la función configure_integer tanto el PLL a usar como el valor del divisor de
enteros. Puede apuntar a cualquiera de los objetos pll_a o pll_b en el Si5351 para usar un PLL
específico como fuente.
Al igual que la configuración de PLL, también puede establecer un divisor fraccionario con la función
configure_fractional en el reloj. Configuremos el reloj 1 para que tenga PLL B como fuente y un
divisor de 4.5:
si5351.clock_1.configure_fractional(si5351.pll_b, 4, 1, 2)
Si hace los cálculos, debe esperar que un PLL fuente de 512,5 MHz dividido por 4,5 produzca una
salida de reloj de 113,8889 MHz. Compruebe la propiedad de frecuencia para estar seguro:
Habilitación de salidas
Hay una última cosa que hacer antes de que las salidas de reloj realmente funcionen, debe
habilitarlas. Puede habilitar todas las salidas de reloj configurando la propiedad outputs_enabled en
True :
si5351.outputs_enabled = Verdadero
Ahora, las salidas del reloj 0, 1, 2 deberían emitir una onda cuadrada a la frecuencia
configurada en función de su PLL y multiplicadores y divisores. ¡Es posible que necesite usar un
osciloscopio que sea muy rápido para medir algunas de estas salidas, ya que el Si5351 puede
generar velocidades de reloj bastante altas, muy por encima de los 100 MHz!
¡Eso es todo lo que hay que hacer para usar el generador de reloj Si5351 con CircuitPython! Aquí
hay un ejemplo completo que configurará los 3 relojes de varias maneras. Guarda esto como código.
py en su tablero y lea los comentarios para ver cómo configura cada reloj.
importar adafruit_si5351
# Cristal de referencia de 25mhz. Por ejemplo, configure PLL A a 900 MHz multiplicando # por 36. Esto
utiliza un multiplicador de números enteros que es más preciso con el tiempo # pero permite un rango de
frecuencias menor en comparación con un multiplicador fraccionario # que se muestra a continuación.
si5351.pll_a.configure_integer(36) # Multiplica 25mhz por 36 print("PLL A frecuencia: {0}
mhz".format(si5351.pll_a.frequency / 1000000))
# Y luego configure PLL B a 616.6667mhz multiplicando 25mhz por 24.667 usando # la configuración del
multiplicador fraccional. Tenga en cuenta que especifica el multiplicador de número entero y luego un
numerador y un denominador como valores separados, es decir, el numerador 2 y el denominador 3
significan 2/3 o 0,667. Esta configuración fraccional # es susceptible a cierta fluctuación con el tiempo,
pero puede establecer un rango de # frecuencias más grande. si5351.pll_b.configure_fractional(24, 2, 3)
# Multiplica 25mhz por 24.667 (24 2/3) print("PLL B frecuencia: {0}mhz".formato(si5351.pll_b.frecuencia /
1000000))
# Ahora configure las salidas del reloj. Cada uno es impulsado por una frecuencia PLL como entrada # y
luego lo divide aún más en una frecuencia específica.
# Configure la salida del reloj 0 para que sea impulsada por PLL A dividido por 8, por lo que una
salida # de 112,5 mhz (900 mhz / 8). Nuevamente, esto usa la división de enteros más precisa # pero no
puede establecer un rango de valores tan amplio. si5351.clock_0.configure_integer(si5351.pll_a, 8)
print("Reloj 0: {0}mhz".format(si5351.clock_0.frecuencia / 1000000))
# Luego configure el reloj 1 para que sea controlado por PLL B dividido por 45.5 para obtener
# 13.5531mhz (616.6667mhz / 45.5). Esto usa la división fraccionaria y nuevamente # observe que
el numerador y el denominador se especifican explícitamente. Esto es menos # preciso pero permite una
amplia gama de frecuencias. si5351.clock_1.configure_fractional(si5351.pll_b, 45, 1, 2) # Dividir por 45,5
(45 1/2) print("Reloj 1: {0}mhz".format(si5351.clock_1.frecuencia / 1000000))
# Finalmente configure el reloj 2 para que sea manejado por PLL B dividido una vez por 900 para bajar
# a 685.15 khz y luego dividido por un divisor R especial que # divide 685.15 khz por 64 para obtener
una salida final de 10.706 khz. si5351.clock_2.configure_integer(si5351.pll_b, 900)
Documentos de Python
Descargas
Software
SiLabs tiene una aplicación de escritorio llamada ClockBuilder (https://adafru.it/dPj) que puede hacer
Ficha de datos
• si5351 Hoja de datos (https://adafru.it/dPk)