Multiplexación de dispositivos I2C con MOSFET

3

Bien, entiendo que se han hecho preguntas similares en el pasado, por favor, tengan paciencia. Aquí está mi problema, tengo 2 dispositivos I2C para estar conectados a un solo bus I2C. Pasan a ser el mismo componente y tienen la misma dirección de hardware. La dirección no se puede cambiar. Mi aplicación requiere la mínima latencia posible. Mi plan es usar MOSFET en la línea SDA para que pueda controlar cuándo cada uno de esos dispositivos está activo. Para cada dispositivo habrá un MOSFET y, al activarlo y desactivarlo, debería poder habilitarlos e inhabilitarlos.

¿Esto funcionaría? Si no, ¿qué haría?

ACTUALIZACIÓN: Ok, así que tengo mis manos en MOSFETs (IRF520). Conecté un pin digital de mi arduino a la puerta y las líneas SDA a la fuente y el drenaje (extremo Arduino para drenar y dispositivo del extremo a la fuente). La cosa no parecía estar funcionando, me dio valores erróneos y simplemente se detendría por completo en valores más grandes. Así que reduje la frecuencia I2C a 100kHz desde 400kHz y funcionó. Sé que el problema está en el FET porque funciona bien a 400 kHz cuando el sensor está conectado directamente. El problema es que lo necesito para trabajar a 400kHz. ¿Qué causa este problema y cómo puedo rectificarlo? Estaba considerando cambiarme al IRL540, ¿esto ayudaría?

Mi diagrama desordenado es el siguiente (planeo repetirlo para cada sensor):

    
pregunta Dr Coconut

4 respuestas

3

Está bien, he resuelto mi problema. ¡Gracias a todos por su ayuda!

Mi solución es la siguiente. Bajé a Farnell y recogí unos 2N7000 y algunos MOSFET BS170. Luego reemplacé el IRF520 en mi circuito (diagrama en cuestión) con los nuevos MOSFET y he aquí que obtuve resultados fabulosos con ambos a 400kHz I2C.

Así que eso se resuelve, ¡gracias a todos una vez más!

    
respondido por el Dr Coconut
4

Use un "interruptor de bus" (es decir, NC7SZ384 ). Son más confiables para la conmutación I2C y tienen una capacidad parásita más baja que un MOSFET discreto, y no mucho más caros.

    
respondido por el Jason S
2

Este es posiblemente el motivo por el que inicialmente no funcionó para usted, y el motivo por el que la gente debería tener cuidado al utilizar MOSFET para este tipo de aplicación (I2C y todo lo relacionado con capacitancia / tiempo de subida):

RecuerdequelacapacitanciadesalidadelMOSFETesCgd+Cds.Esa250pFesextremadamentealta,considerandoquelaespecificaciónI2Clolimitaa400pFengeneralenelbus,másbajoparacumplirconciertosrequisitosdetiempodesubida.Paraserjustos,estoesmáscomounasesinocuandotieneselMOSFETconectadocomouncambiadordenivel,peroaúnpodríaserunproblemaaquí.

Alternativamente(comosemencionaacontinuación),hayqueconsiderarundiodocorporal.ParalapartedeIRF,tieneunvoltajedirectomáximode2.5V.

TuBS170esmejor:

Nosepudoencontrarunaespecificacióndevoltajedediododecuerpo,peropodríaserlosuficientementediferentecomoparaverporquéestástrabajando.UsandounMOSFETaquí,recuerdequesucircuitoseveasí:

EldispositivoseguiráviendoSDAatravésdeesediododelcuerpo,yrecordandoqueI2Cesuncolectorabierto,sidecidebajarse,hundirálacorrienteatravésdeesediodo.ElsensoractivarásucontroladorinternodecanalN,bajaráelniveldeSDAyahoralacorrientepuedefluiratravésdeldiododelcuerpo(asumiendoqueunbusde3.3Voalgoporencimadesucaída)yenlaparte,destruyendoelbus.

Mealegrodequeestéfuncionandoenestemomento,peroenelfuturo,esposiblequedeseeconsiderarnoutilizarMOSFET,comosedescribeen esta respuesta aquí. Un interruptor analógico IC o un dispositivo multiplexor I2C sería la forma" limpia ", pero es ciertamente más cara de hacerlo (en el caso del mux, de todos modos). Con el interruptor analógico, consideraría colocar una resistencia de PU muy débil (tal vez 100K) en el SDA en el IC, ya que he visto partes donde es más probable que las entradas flotantes I2C oscilen y quemen la corriente.

    
respondido por el Krunal Desai
1

Hacen repetidores de bus i2C para este propósito.

    
respondido por el John R. Strohm

Lea otras preguntas en las etiquetas