Cambio de nivel de voltaje

6

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

  • Tengo un dispositivo de 5V (Dispositivo A) que puede operar a 3.3V.
  • Tengo un dispositivo de 3.3V (Dispositivo B) que no tiene entradas tolerantes de 5V.
  • Quiero conectar estos dos dispositivos para comunicarse a través de una interfaz SPI.
  • Quiero poder operar el Dispositivo A selectivamente a 5V o 3.3V.
  • El dispositivo B tiene alimentación independiente y siempre funciona a 3.3V.

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 seguro de cuál es el mejor enfoque para la otra dirección (es decir, reducir las salidas del Dispositivo A a un nivel adecuado 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? Desde que estoy usando SPI aquí, el clásico solución MOSFET para I2C parece Me sobra 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.31V, V_IH_max = V_cc + 0.3 = 3.6V y con una corriente de fuga de entrada de max 0.5 uA.

Según mis cálculos, esto significa que debo bajar entre 1.4V y 2.6V en el caso (1) donde el Dispositivo A está operando a 5V y no más de 1V en el caso (2) donde el Dispositivo A está operando a 3.3V . 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 a 2 MegOhm. Por lo tanto, el caso (2) está dominado por el caso (1), y debo elegir una resistencia en algún lugar entre el rango calculado, como 3.3 MegOhm, por ejemplo.

Ese valor me parece descomunal (especialmente cuando el tutorial de SF muestra valores como 10 kOhm) ... y eso es solo para la corriente de fuga de entrada max ( no se especifica un mínimo o típico) ¿hay algún error en mi razonamiento o en mis cálculos, o no es esta la forma preferida de conectar los dispositivos (por ejemplo, el método de diodo)?

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

    
pregunta vicatcu

1 respuesta

7

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

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

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

"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 peor y peor entrada de entrada 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 cambio de señal O

    • Si no puedes hacerlos pequeños, deben ser aceptables. por ejemplo, cuando se escriben datos monodireccionalmente, puede producirse un retraso significativo en el retardo y en las líneas de datos siempre que sea consistente y aproximadamente igual en todos los cables de señal relevantes. Pueden surgir problemas al manejar de forma bidireccional, ya que, por ejemplo, un reloj saliente retrasado puede hacer que los datos se devuelvan mucho después de que el reloj haya muestreado los datos "con éxito".

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

por ejemplo, si tenía 20 pF de capacidad de entrada y de capacidad de entrada y estaba usando una resistencia del divisor de 100 kOhm (que sería alta), entonces la constante de tiempo 20 pF x 0.1 Megohm = ~~~ 2 uS.

Refiriéndose a su 23A256 RAM como ejemplo solamente

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

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

Para lograr una resistencia equivalente de 1k con un divisor de 3.3V a 5, puede tener Rupper = 1.4k y Rlower = 2.7k. Resistencia paralela. = 0.92K y la serie res = 4.1 K es tan actual a 5V ~ = 1.2 mA.

La constante de tiempo de 10 nS con resistencias i el rango de 2k se traduce en tiempos de subida y bajada de varias constantes de dientes, por lo que se aproximan 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 utiliza la transferencia bidireccional, esto puede causar un problema con, por ejemplo, la configuración de datos o los tiempos de espera. Mirar la hoja de datos en cada caso específico es esencial.

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

  • Reffectivo para los cálculos de tim contant = R1 // R2

  • La unidad RseriesDC mA chck es R1 + R2.

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

  • -
respondido por el Russell McMahon

Lea otras preguntas en las etiquetas