2 votos

Conectar un circuito de 3,3V a un bus de 5V

Me gustaría conectar un circuito de 3,3V (no tolerante a 5V) (una FPGA Xilinx XC3S200) a un bus asíncrono de 16 bits a nivel TTL de 5V (muy similar a qbus) con unas 30 líneas mayoritariamente bidireccionales. (El bus pertenece a un homecomputer Elektronika BK-0011 con una CPU KM1801VM1 de 4 MHz, similar a las CPUs LSI-11).

Estaba pensando en utilizar el sencillo circuito de cambio de nivel bidireccional FET de NXP/Philips AN97055 . ¿Es una buena idea? ¿Cuál sería un buen MOSFET para utilizar? Muchos de ellos parecen tener capacitancias de entrada/salida bastante altas, lo que podría ser un problema con los tiempos de subida. ¿Hay algún otro circuito que valga la pena considerar?

La FPGA tiene resistencias de pull-up configurables (unos 3 k) y el BK tiene resistencias de pull-up de 2,2 k en cada línea, ¿puedo omitir las resistencias en el circuito de cambio de nivel?

2voto

El cambio de nivel bidireccional en un bus de este tipo normalmente implica buscarse problemas.

La nota que enlazas en tu pregunta habla de "bus I2C y sistemas similares", lo que significa básicamente que habla de líneas de drenaje abiertas. Esto suele ser NO el caso de las líneas paralelas anchas de alta velocidad, en las que el drenaje abierto suele ser demasiado lento para poder operar a esas velocidades. Ambos lados conducen realmente el bus.

Puedes echar un vistazo al TXB0108 de TI y a esa familia de controladores bidireccionales. Son los que más se acercan a lo que quieres hacer, pero tengo la sensación de que no funcionarán. Los busses bidireccionales como este básicamente utilizan el hecho de que el lado que quiere el control de la línea conduce las líneas del bus más fuerte que la fuerza de la unidad de salida del buffer. En la práctica, con un bus paralelo de este tipo, es poco probable que ese sea el caso. Si la memoria no me falla, se necesitan 2mA de fuerza de accionamiento en las líneas IO de ambos lados para que anulen la salida del buffer. Esto no es algo que debas asumir para tus dispositivos. De hecho, yo apostaría que simplemente conectando las líneas pin a pin probablemente no hará el trabajo.

En el mundo real, hay realmente no son muchos autobuses verdaderamente bidireccionales. Deberías mirar cuidadosamente tus líneas (afirmas que hay 30 líneas para un bus de 16 bits de ancho - mira cuidadosamente las otras 14). Muchas de esas líneas pueden no ser realmente bidireccionales. Una vez que decidas qué lado es el Maestro, y cómo está dispuesto el bus, debería ser posible especificar la dirección de la mayoría de esas 14 líneas. Además, utilizando la lógica y una combinación de esas 14 líneas, también deberías poder especificar la dirección de las 16 líneas de datos. Utiliza esta señal, construida a partir de una combinación lógica de tus líneas de control, para cambiar la dirección de un buffer de traducción de nivel regular. Muchos de ellos cambiarán lo suficientemente rápido como para que parezca que la traducción es transparente. Para estar seguro, sugeriría una pequeña resistencia en serie con todas las líneas para hacer frente a las posibles condiciones de carrera en la conmutación - Los controladores de salida de sus CI y los del buffer tomarán diferentes cantidades de tiempo para responder, y a menos que deje un montón de tiempo muerto en el medio, verá alguna contención del bus. Las resistencias en serie limitarán la corriente a través de las líneas del bus a través de estos transitorios. Sin embargo, mantén estas resistencias tan bajas como sea posible, ya que limitarán la velocidad del bus por sí mismas.

0voto

chrisbunney Puntos 228

Me encontré con el ADG3300 mientras investigaba sobre el cambio de nivel. Tiene una baja capacitancia de puerta, una propagación de búfer en las bajas decenas de ns (y puede funcionar a 50Mbps con 5V/3V3), y no requiere ninguna parte externa aparte de los condensadores de bypass.

-1voto

Barry Kelly Puntos 30330

Puede utilizar un simple traductor de niveles, como este SN74LVC2T45 para conseguirlo.

Si sólo llevas líneas de estado, o unas pocas líneas de baja velocidad y tienes NFETs por ahí (posiblemente en otra parte de tu circuito, y quieres usar la misma pieza) puedes usar lo siguiente. El único inconveniente es que quemará algo de energía (a través de la resistencia pull-up) cuando el estado del bus sea bajo. También invierte la lógica, pero puedes compensar eso en una FPGA.

La Vgs de tu NFET debe ser inferior a la menor de las dos tensiones del sistema, en este caso inferior a +3,3V

schematic

simular este circuito - Esquema creado con CircuitLab

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