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.
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.
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:
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.
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:
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:
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:
Pero de todos modos yo estaba muy feliz de conseguir trabajo y gracias a todos por la ayuda.