¿Por qué algunas de mis señales 'tiemblan' (tienen fluctuaciones)?

9

Tengo un bus SPI de 2 MHz, pero una cosa que he notado es que algunas de mis señales a menudo "tiemblan". Sí, mi activador está configurado correctamente, así que no creo que el problema esté ahí.

Puedes ver lo que quiero decir aquí: (esto es con el modo de persistencia activado). Este es el reloj de mi bus SPI.

El SPI funciona bien. He transferido cientos de megabytes en varias tarjetas y no he visto ningún problema hasta ahora. Pero todavía estoy interesado en saber cuál podría ser el problema aquí. Además, ¿debería molestarme en arreglarlo aunque funcione?

Las mediciones se tomaron directamente en la fuente con un clip de tierra MUY pequeño.

Este es un esquema simplificado de mi circuito. Por supuesto, la placa tiene más dispositivos SPI, pero para los propósitos de esta pregunta esto es correcto porque la placa no tiene nada soldado aún excepto la unidad uC y la tarjeta SD.

Elmaestro(AVRMega128)seestáejecutandoensuosciladorRCinterno.Nosésiestoseríarelevante,perocomolasseñalescambianeneltiempo,esposiblequelafluctuacióndefasedelosciladorRCtambiénestéterminandoenelbusSPI..Solopenséquelomencionaría.Tambiénsemeocurrióqueduranteestasmedicionesejecutéelcontroladorenunbucleinfinito.Aquíestáelcódigo:

while(1) { setFirstBitOnDriver(driver); // this sends a 8-bit command on the SPI bus. GLCD_SetCursorAddress(40); // Change cursor position on the display. GLCD_WriteText("LED: "); for(wire=0;wire<72;wire++) { itoa(wire+1,str,10); GLCD_WriteText(str); GLCD_SetCursorAddress(44); _delay_ms(10); shiftVectorOnDriver(driver); // another command on SPI. 8-bit wide. } }

El jitter / shiver puede ocurrir cuando el interno se ejecuta 72 veces y luego sale. Dado que la ejecución de las primeras tres líneas requiere un tiempo adicional, es posible que cada 73a forma de onda llegue en un momento ligeramente diferente debido al tiempo de procesamiento adicional. Si tuviera que apostar, supongo que esta es la causa de mi problema (si pudiera, lo confirmaría en este instante, ¡pero mis tablas en el trabajo y la próxima semana está apagada!) Pero todavía me gustaría recibir opiniones / Respuestas de SE sobre este asunto.

Pero teniendo en cuenta que la unidad de control de temperatura se está ejecutando a 8 Mhz, no me preocupo por el software porque en nanosegundos, sino en microsegundos. Pero en la segunda figura se ve una línea plana. Esto ocurre durante un breve segundo, donde todas las formas de onda cambian en el tiempo y son invisibles en la pantalla. Supongo que esto se debe al bucle y el jitter en la primera imagen se debe al oscilador RC.

    
pregunta Saad

4 respuestas

6

Lo que muestra su alcance es un ejemplo clásico de jitter , que significa un error en el tiempo de un evento (flanco ascendente o descendente), independientemente de si hay algún ruido de voltaje en la señal.

Pero, ¿qué puede causar el jitter en tu sistema?

  • Como especulas, si el reloj principal de uC está inquieto, lo más probable es que el jitter se transfiera directamente a la salida del reloj desde el periférico SPI.

    El desvío inadecuado (debe tener un desvío masivo adicional en su placa además de los dos capacitores de 100 nF que ha dibujado) podría provocar fluctuaciones en el circuito del reloj de la UC.

    El ruido de la fuente de alimentación introducido por otros circuitos en su tarjeta también podría tener este efecto (pero se reduciría si se pasa por alto).

  • El jitter podría ser inherente al rendimiento del periférico SPI de la uC. Tiene que generar el reloj SPI con referencia al reloj del sistema. Si usa un divisor simple (4-a-1 en el caso del reloj del sistema de 8 MHz y el reloj SPI de 2 MHz), no esperaría ver mucha fluctuación adicional (aunque la fluctuación del reloj del sistema pasaría a la derecha). Pero si utiliza un esquema más complejo, como un PLL, ese circuito podría variar los anchos de pulso del reloj SPI para mantener la sincronización con el reloj del sistema, y lo vería como inestable. Un circuito PLL también podría ser particularmente sensible al ruido de la fuente de alimentación.

Si la amplitud de la fluctuación de fase se limita a una pequeña fracción del período de reloj, como parece estar aquí, no hay razón para que esta fluctuación cause errores en el bus SPI (de acuerdo con su observación, el bus SPI parece funcionar como se esperaba).

    
respondido por el The Photon
6

Esto me parece una señal de jitter. El período de reloj varía minuciosamente, lo suficiente como para que la persistencia del alcance haga que el borde se vea "manchado".

No sé si su alcance de Rigol tiene la capacidad de calcular estadísticas cuando mide. Si lo hace, puede ajustar su punto de activación para que su borde de activación aparezca en el borde izquierdo de la pantalla, ajustar la base de tiempo para mostrar un período completo y medir la variación de frecuencia a lo largo del tiempo para obtener una idea de la variación. (La fluctuación de fase puede verse peor de lo que es cuando el borde de activación está fuera de la pantalla).

Si desea reducir las fuentes de jitter, comenzaría con el oscilador RC. Vea si tiene una opción para usar un método de reloj diferente (como un cristal), implementarlo y volver a medir el jitter.

    
respondido por el Adam Lawrence
6

Las imágenes de alcance pueden ser engañosas, y hay que mirar todos los parámetros para interpretar los datos correctamente. La primera imagen muestra una fluctuación de 10 ns, y eso no sería tan bueno si el disparador estuviera en la pantalla izquierda. Pero abajo a la derecha dice disparador + 1.78 µs, de modo que 10 ns es en realidad solo el 0.5% del intervalo de tiempo. Ese nivel de jitter puede deberse al oscilador RC. Espere que la fluctuación de fase se reduzca al menos en un orden de magnitud con un oscilador de cristal.

Dice que aún no ha encontrado ningún problema en la transferencia de datos SPI. Eso es gracias a la relatividad del 0,5%. Si desea MOSI 1 µs antes del pulso CLK, el jitter del 0.5% causará un jitter de 5 ns, esto no violará los tiempos de configuración y de espera.

Si necesita seguridad, simplemente configure la base de tiempo de modo que pueda ver un tiempo de bit completo, tanto en el canal MOSI como en el canal CLK. Notará que la fluctuación de fase no será visible y que los bordes sucesivos permanecerán bien separados.

    
respondido por el stevenvh
1

Jitter es una forma de ruido. Si considera que los tiempos de llegada entre los bordes de los pulsos son un tipo de señal, entonces, si esos bordes no tiemblan en absoluto, significa que su sistema muestra una señal sin ruido.

Las ondas cuadradas a menudo se generan mediante el umbral en una onda más continua, con algún circuito de tipo Schmidt-trigger que tiene un comportamiento de histéresis. Los osciladores de cristal o RC no emiten "de forma nativa" ondas cuadradas.

Entonces, si esa onda de entrada tiene algo de ruido de voltaje, ese ruido se traducirá en leves cambios en el disparo, ya que el voltaje llega a veces a cualquiera de los umbrales más temprano y más tarde.

Y, por lo tanto, el ruido de un tipo (ruido de voltaje) se convierte en un ruido de otro tipo (ruido de temporización).

    
respondido por el Kaz

Lea otras preguntas en las etiquetas