Cambio de nivel de voltaje

Sé que hay preguntas similares en el sitio, pero quería hacerlas desde una perspectiva algo diferente.

  • Tengo un dispositivo de 5 V (Dispositivo A) que puede funcionar a 3,3 V.
  • Tengo un dispositivo de 3,3 V (Dispositivo B) que no tiene entradas tolerantes a 5 V.
  • Quiero conectar estos dos dispositivos para comunicarse a través de una interfaz SPI.
  • Quiero poder operar el dispositivo A de forma selectiva a 5 V o 3,3 V.
  • El dispositivo B se alimenta de forma independiente y siempre funciona a 3,3 V.

Sé que puedo usar (y he usado con éxito) un búfer (por ejemplo, 74HCT125) alimentado por el mismo voltaje que el Dispositivo A para aumentar las señales del Dispositivo B hasta 5V. Sin embargo, no estoy tan seguro del mejor enfoque para la otra dirección (es decir, dejar caer las salidas del Dispositivo A a un nivel apropiado para el Dispositivo B).

He leído el Tutorial de Sparkfun sobre el tema. Ofrecen algunas formas de abordar el cambio de nivel "hacia abajo". ¿Cuál es la forma preferida de manejar este aspecto? Como estoy usando SPI aquí, la solución MOSFET clásica para I2C me parece exagerada ya que no necesito bidireccionalidad. Me gusta el enfoque de resistencia en línea por su simplicidad, pero no estoy seguro de cómo dimensionar la resistencia. Los pines CLK y MOSI del dispositivo B se especifican con V_IH_min = 0,7 * V_cc = 2,31 V, V_IH_max = V_cc + 0,3 = 3,6 V y con una corriente de fuga de entrada de 0,5 uA como máximo.

Según mis cálculos, esto significa que debo bajar entre 1,4 V y 2,6 V en el caso (1) en el que el Dispositivo A funciona a 5 V y no más de 1 V en el caso (2) en el que el Dispositivo A funciona a 3,3 V. Si asumo que la corriente de fuga de 0.5 uA es responsable de la caída de voltaje, entonces el caso (1) requiere una resistencia entre 1.4/0.5e-6 = 2.8 MegOhm y una resistencia de 2.6 / 0.5e-6 = 5.2 MegOhm (!). Y el caso (2) requiere una resistencia no menor de 2 megaohmios. Por lo tanto, el caso (2) está dominado por el caso (1), y debería elegir una resistencia en algún lugar entre el rango calculado, como 3,3 megaohmios, por ejemplo.

Ese valor me parece enorme (especialmente cuando el tutorial de SF muestra valores como 10 kOhm) ... y eso es solo para la corriente máxima de fuga de entrada (no se especifica un valor mínimo o típico) ¿Hay una falla en mi razonamiento o cálculos? ¿O no es esta la forma preferida de interconectar los dispositivos (por ejemplo, el método de diodo)?

Si importa, un caso del Dispositivo B en el que estoy pensando es una SRAM 23K256 , pero estoy tratando de dar cuenta de una variedad de dispositivos.

La corriente de fuga es la corriente más baja que puede manejar diseñando un divisor. Puede y debe tomar muchas veces eso como "corriente de carga". Esto entonces anulará los efectos de la corriente de fuga.

Respuestas (1)

La corriente de fuga es la corriente más baja que puede (teóricamente) salirse con la suya diseñando un divisor para manejar. Puede y debe tomar muchas veces eso como "corriente de carga". Esto entonces anulará los efectos de la corriente de fuga.

Los valores de resistencia gigantescos darán lugar a constantes de tiempo de subida y bajada prolongadas (cuando se combinan con la capacitancia de entrada del IC y las capacitancias parásitas) que no desea.

Si solo desea una conducción monodireccional y una reducción de nivel, entonces un divisor de resistencia funcionará bien.

ingrese la descripción de la imagen aquí

"Todo" lo que se requiere es asegurar que

  • Vout_high_max cuando se divide no excede Vin_high_max del IC accionado. (Mejor, los límites de entrada alto y bajo en el peor de los casos producen voltajes de salida también en los rangos requeridos).

  • Las constantes de tiempo generales son pequeñas en comparación con las velocidades de conmutación de su señal O

    • Si no puede hacerlos pequeños, deben ser aceptables. por ejemplo, cuando se escriben datos en una sola dirección, puede ocurrir un retraso significativo aceptable en las líneas de datos y de retraso siempre que sea consistente y casi igual en todos los cables de señal relevantes. Pueden surgir problemas cuando se maneja de forma bidireccional, como por ejemplo, un reloj de salida retrasado puede hacer que los datos se devuelvan mucho después de que el reloj haya muestreado los datos "con éxito".

1 megaohmio x 1 picofaradio da una constante de tiempo de 1 uS.
Puede escalar desde allí según sea necesario.

por ejemplo, si tuviera 20 pF de capacitancia de entrada y de fuga y estuviera usando una resistencia divisoria de 100 kOhm (que sería alta), entonces la constante de tiempo 20 pF x 0,1 megaohmios =~~~2 uS.

Refiriéndose a su RAM 23A256 solo como ejemplo

Capacitancia de entrada = 7 pF.
Tiempo máximo de subida y bajada del reloj = 2 uS
PERO la velocidad máxima del reloj puede ser de 20 MHz (difícil) o 50 Ns de tiempo de ciclo total.

Si toda la capacitancia se toma como 10 pF (7 pF de entrada + 3 dispersos), entonces
- 100k de resistencia de accionamiento le da 1 uS de constante de tiempo en la línea impulsada (!),
- 10 k de resistencia de accionamiento da 100 Ns y
- 1k da 10 Ns .

Para lograr una resistencia equivalente a 1k con un divisor de 3.3V a 5, puede tener Rupper = 1.4k y Rlower = 2.7k. Resistencia paralela. = 0,92 K y serie res = 4,1 K, por lo que la corriente a 5 V ~= 1,2 mA.

La constante de tiempo de 10 nS con resistencias en el rango de 2k se traduce en tiempos de subida y bajada de varias constantes de dientes, por lo que se acercan a los tiempos involucrados por medio ciclo a la velocidad máxima. Como estos retrasos se incluirán en todas las líneas convertidas hacia abajo, las diferencias en los retrasos deberían ser mucho menores. Si usa transferencia bidireccional, esto puede causar un problema, por ejemplo, con la configuración de datos o los tiempos de espera. Mirar la ficha técnica en cada caso concreto es fundamental.

es decir, esperaría que un simple divisor resistivo de bajo valor funcione en muchos casos monodireccionales, pero será necesario tener cuidado a velocidades de reloj más altas. Refiriéndose al diagrama anterior.

  • Reeficaz para cálculos de contenido de tiempo = R1//R2

  • La comprobación de mA del variador RseriesDC es R1 + R2.

  • Vsal = Vin x R2 / (r1+r2)

  • -
Esta respuesta es bastante completa, ¡gracias! Entiendo el concepto del divisor de voltaje. ¿Podría ampliar su respuesta para abordar lo que sucede con las resistencias en serie en MOSI y SCK en el tutorial de Sparkfun? ¿Hay un divisor implícito dentro del dispositivo de 3,3 V en ese caso?