7 votos

Sonando en la onda cuadrada SPI y otros problemas SPI

Acabo de empezar a aprender este material no hace mucho tiempo y necesitan un poco de ayuda. Estoy tratando de comunicarse con SPI de un AD7124-4 ADC IC a un ESP32.

El primer problema que estoy teniendo es que estoy recibiendo una gran cantidad de la señal de llamada en la plaza de las ondas, que se muestra en la foto en un osciloscopio. La señal es de alrededor de 1V y mayor de 2V en la parte superior de la señal y creo que está interfiriendo con las altas y bajas de las señales, causar errores de lectura. Ya he compensado las cuatro sondas perfectamente. Ver el esquemático y también pic del circuito en una protoboard (caso omiso de las partes que no se ve en el esquema) si algo destaca. Alguna idea sobre lo que puede estar causando el zumbido o cómo solucionarlo? Yo estoy usando la sonda x10 y valores en el ámbito de aplicación son para el x10. He puesto los valores del SPI en el ámbito de aplicación de acuerdo con el manual (correctamente, creo). Todo se ve muy bien en todas las conexiones de soldadura y el chip parpadea muy bien.

enter image description here

enter image description here

enter image description here

El segundo problema es la lógica de los niveles no parecen el voltaje correcto.

\begin{align*} g'(m)&=\frac{d}{dm} \int_a^b\sqrt{(m-f(x))^2}\,dx \\ &=\int_a^b\frac{\partial}{\partial m}\sqrt{(m-f(x))^2}\,dx \\ &=\int_a^b\frac{m-f(x)}{\sqrt{(m-f(x))^2}}\,dx \\ &=\int_a^b\operatorname{sgn}(m-f(x))\,dx. \end--------------------

He conectado de la siguiente manera:

ADC ---- ESP32


DIN --> MISO

DOUT --> MOSI

SCLK --> SPICLK

CS# --> SPICS

-------------------------

En el osciloscopio:

SONDA 1 -> MISO LA SONDA 2 -> MOSI LA SONDA 3 -> CLK LA SONDA 4 -> CS

-------------------------

En el ADC:

IOVDD = 3.3 V

ENTRADAS LÓGICAS: BAJA = 0.35 × IOVDD ALTO = 0.7 × IOVDD

LA LÓGICA DE LAS SALIDAS: BAJA (MAX) = 0.4 V ALTO (MIN) = IOVDD − 0.35

-------------------------

En el ESP32: VDD = 3.3 V

NIVELES LÓGICOS:

BAJA = 0.25 * 3.3 = 0.825 V

ALTO = 0.75 * 3.3 = 2.475 V

-------------------------

He 3.3 V de alimentación de la ESP32 y el ADC así que la lógica de los niveles debe coincidir supongo que de acuerdo a las especificaciones, pero ¿por qué son MOSI y CS inferior a las otras 2? Y MOSI y CS son también parece que están en 4 niveles diferentes que no es bueno en todos me imagino. Todas las sondas están en 2V / división. Estoy tratando de decodificar la señal también en un Siglent SDS 1104X-E, pero las señales no se ven legible aún. Gracias y realmente agradecería cualquier ayuda o sugerencia.

Añadir nota: aquí está el ejemplo original que he seguido de Analog Devices del circuito nota CN0381. En primer lugar tuve un 1.8 V LDO para la IOVDD junto con el de 3.3 V para AVDD pero cambió a un 3.3 V para ver si se podía arreglar la diferencia de la lógica de los voltajes, pero eso no cambiaba nada.

enter image description here

EDIT: Bueno, yo tuve los niveles derecho, tuve la CS en el mal (no SPI) pin y cambié el MISO y MOSI, yo creía, equivocadamente, que la documentación dice que ESP32 fue de tiempo completo esclavo (me doy cuenta de que no tiene sentido ahora). Aquí hay algunas capturas de pantalla:

enter image description here

enter image description here

enter image description here

Se puede ver que el largo de la cadena de comunicación varía en los diferentes lecturas en la misma escala de tiempo, que no parece correcto, pero soy nuevo en el SPI.

He utilizado un dev kit de ESP32 de la junta en lugar de utilizar el ESP32 montado sobre un tablero de arranque y el ruido parece lo suficientemente bajo para que funcione correctamente, he intentado torcer terrenos alrededor de los cables de señal y eso ayudó, pero no mucho. Aquí está la foto.

enter image description here

Pero todavía no puede hablar correctamente, estoy usando este código: https://github.com/epsilonrt/ad7124/tree/master/examples/ad7124-thermometer

En la salida de depuración simplemente muestra "ERROR". He utilizado con éxito ESP32 para UART y I2C, pero no con el SPI todavía. Más ideas o sugerencias? Mi principal objetivo es sólo para leer correctamente las señales y voy a limpiar para arriba después de que.

Última EDICIÓN: yo tengo trabajo por último, lo único que podría conseguir el SPI de trabajo con el AD7124 de la biblioteca cuando se utiliza esta línea de código en la función setup ():

SPI.setClockDivider(SPI_CLOCK_DIV4);

Y sólo el trabajo usando CLOCK_DIV4 o CLOCK_DIV2, no hay otras velocidades de trabajo. He aquí un alcance de tiro de CLOCK_DIV64 que no funciona:

enter image description here

Las señales se ven bastante limpio, pero no pudo comunicarse correctamente a través de SPI. He aquí un alcance de tiro de CLOCK_DIV2:

enter image description here

Era un poco ruidoso, pero funcionó. Creo que Si yo estoy contando la derecha, el DIV64 de la señal es de aproximadamente 260KHz y la DIV2 señal es acerca de 4MHz, se dice en la ESP32 hoja de datos que por defecto velocidad del SPI es 80MHz así que no sé cómo dividir por 2, se obtiene 4MHz. La foto podría haber sido de DIV4, no lo recuerdo. Pero 4MHz es la velocidad por defecto en Arduino y he probado el AD7124 código en un Arduino Pro Mini y funcionó muy bien con ningún cambio en el código.

También me deshice de el largo SPI líneas de transmisión y el ruido se fue de inmediato. También en el primer ámbito disparos en la parte superior, se puede ver que el ruido en el color amarillo de seguimiento es mucho peor y de que el cable es más largo que los demás y se extiende hasta el otro lado de la junta. Girar con un cable de tierra hizo de ayuda y la reducción de ruido por sobre el 20%, pero todavía era malo. También cambió a un ESP32 dev kit de junta en lugar de la placa adaptadora que había más cables que conectan a la placa (yo simplemente no tienen el derecho de longitud con los extremos de los conectores necesarios). Aquí está la nueva configuración:

enter image description here

Pero de todos modos yo estaba muy feliz de conseguir trabajo y gracias a todos por la ayuda.

6voto

TimWescott Puntos 261
ADC ---- ESP32
DIN  --> MISO
DOUT --> MOSI
SCLK --> SPICLK
CS#  --> SPICS

Esto es parte de su problema - "DIN" en el ADC significa que los datos en el ADC. "MISO" que significa maestro enel esclavo (o es una especie de sopa) -- si tienes el procesador configurado como maestro, entonces usted tiene la entrada para la entrada y salida de salida (DOUT --> MOSI).

También, usted necesita proporcionar una decente de retorno a tierra para el SPI señales, y usted está consiguiendo cross-talk entre el reloj y el resto de las señales. Yo no puede ver desde su ámbito de tiro lo que la base de tiempo se establece, pero no va a proporcionar mucho de ninguna de retorno a tierra para el SPI, y mucho menos una buena.

Obtener su innies y outies emparejado correctamente: asegúrese de que las entradas de ir a las entradas y de salidas salidas (y el doble-check-haciendo conexiones en serie conectado a cabo y en el que siempre parece suceder).

A continuación, hacer un retorno a tierra para cada SPI línea. Usted debe ser capaz de salirse con la torsión de cada SPI línea con un cable de tierra. Hacer esto para cada cable con SPI entre el controlador y el ADC. Quieres un extra de cable de tierra trenzado con el original de alambre (y conectado a TIERRA en cada lado). Esto puede parecer excesivo, pero para la alta velocidad de las señales no lo es. Empezar por ahí, y háganos saber cómo funciona. (Próximos pasos son twisted pair cuidando de hacer el giro longitudes diferentes, y después de que se trate de encontrar algunos de alta impedancia del cable coaxial-que es probablemente innecesario, aunque).

2voto

TimWescott Puntos 261

Nueva respuesta, porque creo que tienes la integridad de la señal y los problemas de conexión fija.

En este punto en el proceso, me gustaría ser cuidadosamente la comparación de los bits que se va por sobre el alcance con el ADC hoja de datos. Usted está ejecutando a través de este código de controlador, lo que complica las cosas, pero sospecho que no estás "le dice a" el ADC lo correcto.

También debe revisar cuidadosamente el modo SPI y la polaridad. Cada uno hace su SPI un poco diferente, básicamente implican la polaridad del reloj y el tiempo relativo de reloj y de datos. Usted necesita para comprobar el ADC hoja de datos y asegúrese de que el procesador está configurado para que coincida con.

1voto

edou_art Puntos 1

Los picos podrían deberse también a la longitud del cable de la pinza de tierra de los osciloscopios. Compruebe que 1er. También revise su fuente de alimentación al CHip, si se rebota, debe proporcionar el desacoplamiento adecuado en el CHIP VCC.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X