La mejor manera de multiplexar líneas de botones en un circuito existente

3

Tengo un dispositivo de destino que tiene botones pulsadores que cuando se presionan envían una señal constante de 3.3v al botón MCU que ingresa en GPIO hasta que se suelta. Externamente desde un dispositivo diferente (tal vez una Raspberry Pi) Me gustaría estimular la entrada de GPIO en los botones de la MCU y permitir que funcionen los botones originales.

¿Es seguro simplemente conectar un control pin 3.3v a la misma línea de botones MCU que el botón?

    
pregunta gesell

1 respuesta

2

EDITAR:

Ahora que ha agregado información en los comentarios de que ni siquiera son botones en realidad, se necesita más, porque también desea no destruir el otro IC. Debe ser 100% claro y 100% preciso en la descripción de su problema o no podremos o no desearemos ayudarlo.

Solución original (ya no se aplica, pero se deja para la posteridad, por así decirlo):

El bloque de guiones está dentro de su propio controlador, es un interruptor que le permite elegir entre + 3.3V o 0V. Tiene una resistencia en serie, efectivamente, que se calentará. Ahora, si es realmente 5mW, o realmente es capaz de 100mW por un tiempo sostenido, no lo sabemos. Pero si resulta que es 'débil' y solo 5 mW, volará el puerto IO en su propio procesador cuando quiera generar 0 V y presione el botón. Porque el botón es muy fuerte. (A menudo menos de 0,1 ohmios de resistencia de contacto).

Así que debes asegurarte de que eso no pueda suceder. Lo más fácil es así:

simular este circuito : esquema creado usando CircuitLab

Ahora, en el mismo escenario, la diferencia de 3.3 V entre su salida y el forzado de 3.3 V del botón caerá principalmente (redondeado puede decirlo todo) a través del Resistor de 5.1k externo, porque es muy grande que cualquier otra resistencia. en el sistema. Eso significa que a lo sumo solo:

I = V / R = 3.3V / 5100 Ohm = 0.00065A = 0.65mA

Estará fluyendo. Casi cualquier dispositivo que esté disponible para usted, si no todos, podrá generar y hundir 2 mA o más en un pin GPIO sin ningún daño. Es habitual en estos días que sean más de 10 mA y una hoja de datos del dispositivo o procesador generalmente le dirá cuánto es. Así que no hay daño.

La nueva solución:

Usted ahora necesita proteger ambos chips. Puede hacerlo agregando una resistencia para ambas, pero eso no funcionará demasiado bien, ya que cualquiera de ellos es el jefe, o dividen la tensión entre esas resistencias, creando efectivamente una tensión de tres niveles, observe:

simular este circuito

Si SW1 está activado y SW2 está activado (es decir, conectado a 3.3V), ambos chips concuerdan y la tensión de línea será de 3.3V, todo está bien, suponiendo que la entrada GPIO es de alta impedancia, lo cual es muy probable.

Si ambos están apagados (conectados a 0V), concuerdan de nuevo y el voltaje será de 0V. Bien!

El riesgo es que cuando no se presiona ningún botón, pero su dispositivo envía una señal, que es un escenario probable, o posiblemente al revés, que uno está encendido y el otro está apagado. El voltaje de línea será exactamente la mitad del VCC.

Eso no es lo que quieres y una situación muy mala. La mitad de VCC es, de hecho, la peor situación posible que puede tener, ya que muchos chips de nivel lógico obtendrán la entrada en un estado "indeterminado", donde la electrónica del chip podría incluso comenzar a oscilar, o simplemente comenzar a consumir mucha energía para nada. Malo.

Por lo tanto, debe introducir un par de diodos para crear un puerto OR:

simular este circuito

Aquí, cuando uno de los interruptores es alto y el otro no, el diodo para el que está encendido se realizará, pero el diodo en el camino del que está apagado bloqueará cualquier exceso de corriente que ingrese a la salida de ese chip.

Por supuesto, eso significa que ya no puede bajar la línea de forma activa, y cuando ambos intentan establecer 0V, la entrada GPIO flotará por un tiempo antes de que las fugas determinen un nivel alto o bajo. Esto también es malo. Por lo tanto, necesitas una resistencia que baje esa línea para hacerla bajar en ese caso. Ahora básicamente has hecho un diodo pequeño O puerto.

Utilicé el BAT54 en el ejemplo, porque son diodos Schottky con un voltaje directo muy bajo a bajas corrientes, por lo que no desperdician casi nada, pero también se puede usar 1N4148 para un sistema de nivel lógico de 3.3V o 5V, ya que toma solo unos 0,6 V en esta configuración y eso sigue bien. Con un sistema de 1.8V, solo advirtiéndole para el futuro, puede que sea mucho mejor obtener un puerto OR real, ya que quitar 0.6V de 1.8V lo pondrá demasiado cerca del peligroso voltaje medio. Incluso el despegue de solo 0.3 V podría estar cerca de un límite garantizado en esos rangos de bajo y bajo voltaje.

    
respondido por el Asmyldof

Lea otras preguntas en las etiquetas