Tire hacia arriba del transistor NPN (durante el encendido del microcontrolador)

Estoy usando un ESP8266-01 para controlar un relé de 3.3v a través de un transistor NPN 2N2222A. Los GPIO ESP8266 usan un nivel lógico de 3.3v.

ingrese la descripción de la imagen aquí

La idea es que al configurar GPIO2 en hi/lo puedo saturar/cortar el transistor y controlar el relé. Esto funciona bien, siempre que conecte GPIO2 al transistor después del inicio, porque GPIO2 debe mantenerse alto durante el encendido para arrancar normalmente desde flash ( http://robertoostenveld.nl/esp-12-bootloader-modes/ ). Tengo una idea de que probablemente necesito tener un pull-up en el pin, pero estoy confundido con la forma en que GPIO2 se puede mantener alto sin tener siempre el transistor en estado saturado (es decir, ¿cómo puedo entonces hacer que GPIO2 sea bajo?... ). ¿Cuál es el mejor enfoque aquí?

Además, en una nota no relacionada, noté que en muchos diagramas de circuitos de controladores de relé que usan transistores, hay una resistencia entre GPIO y transistor. ¿Alguna buena razón para esto? Todo funciona como está, pero tal vez hay algo que me estoy perdiendo.

EDITAR: Para aclarar, el problema es que el circuito funciona según lo previsto si dejo que el ESP arranque y luego conecto GPIO2 a Q1. El problema ocurre si trato de iniciar mientras GPIO2 está conectado (es decir, como se muestra en el diagrama que proporcioné), en cuyo caso, presumiblemente, el GPIO2 se está reduciendo, lo que resulta en un modo de inicio incorrecto.

Es probable que GPIO2 esté alto en algún lugar de ese módulo (para operaciones normales). Por lo tanto, tendrá que vivir con ese hecho. Si desea usar ese pin para conducir un BJT, tendrá que planificar el hecho de que es "inactivo alto" y "activo bajo". Por lo tanto, debe organizar las cosas para que al pasar a BAJO se active el relé. Puede usar un PNP para lograr eso. Sería útil saber qué tipo de pull-up utilizan. Pero puede agregar una resistencia a tierra y medir la corriente en ella (o el voltaje a través de ella) para resolver los detalles allí.
Bueno, la solución más simple es usar el otro polo del relé. OP ha mostrado el relé SPDT, así que solo utilícelo "al revés".
Consulte mi edición, el primer problema es el modo de arranque wrt.
manera simple + efectiva: reemplace el cable con un diodo

Respuestas (3)

Debe agregar una resistencia entre la salida GPIO y la base del transistor. Si la base del transistor se condujera a 3,3 V, consumiría unos pocos amperios y el transistor o la MCU explotarían. Si no explotó, probablemente signifique que algo está limitando la corriente en la salida GPIO, pero no lo recomendaría dependiendo de esto.

Si su MCU lo necesita, ciertamente puede agregar una resistencia pull-up a GPIO2. Siempre que su valor sea lo suficientemente alto (10k es estándar para mí), la MCU puede reducir fácilmente el pin cuando se lo solicite.

El esquema sería algo así:

esquemático

simular este circuito : esquema creado con CircuitLab

Editar: R2 debería ser mucho más bajo que R1, pero aún alto, así que arreglé los valores y reemplacé el transistor único con una estructura similar a Darlington para tener una ganancia lo suficientemente alta como para controlar correctamente el relé.

esquemático

simular este circuito

Sospecho que su problema es que el relé se dispara solo por un momento mientras se inicia la CPU. Es un módulo que permite diferentes modos de operación si un circuito externo controla algunas líneas durante la secuencia de encendido. Entonces, creo que el módulo incluye una resistencia externa a Vcc para garantizar que GPIO2 esté alto en operaciones normales. (GPIO2 se enciende como una entrada y es monitoreado por la CPU para determinar los modos). Puede cambiarlo en el software. Sin embargo, ese no es su problema, según lo leí. Es antes de que pueda tomar el control que está teniendo problemas.
@jonk Puede que tengas razón, pero no es así como leo la pregunta del OP. Veamos cómo reacciona a tu comentario y a mi respuesta...
Fui a sus enlaces y miré. Sospecho que tengo razón, volviendo a leer las palabras del OP con más cuidado ahora. Pero sí, podría estar proyectando.
Oye, con el circuito configurado según tu ejemplo, sigo teniendo el modo de arranque incorrecto. Entonces, de alguna manera, GPIO2 se baja en este circuito, ¿supongo? También observo que conectar GPIO2 directamente a Vcc (3.3v) también da como resultado un arranque correcto, por lo que seguramente se supone que es hola.
En realidad... con R1 presente, no puedo activar el relé. Si conecto el GPIO2 directamente a la base, puedo hacerlo. La corriente de los GPIO es ~ 12 mA, creo. Esto es nuevamente cuando coloco R1 después del arranque para ingresar al modo de arranque correcto.
Haga que r1 sea de 200 ohmios para una unidad de 12 ma.
@guywhoneedsahand Como dijo Passerby, R1 puede ser demasiado alto para que el transistor controle el relé. Con 1kΩ, obtiene alrededor de 2,6 mA de corriente base, lo que debería permitir alrededor de 200 mA de corriente de colector. Si eso no es suficiente para impulsar el relé, debe usar una resistencia más pequeña o (mejor) usar una configuración de darlington (similar).
@guywhoneedsahand En cuanto al modo de arranque, ¡estúpido! R2 debería ser (significativamente) más pequeño que R1. Pero R2 también debería ser algo alto, para limitar la fuga de corriente cuando GPIO2 es bajo. Entonces, lo correcto es usar una amplificación de 2 transistores, ya sea en una configuración Darlington (similar) o en una configuración de inversor, como lo sugiere Michael Karas.

Lo que quieres hacer es conectar tu GPIO2 al relé con este circuito. Esto permitirá que GPIO2 alcance cerca de 3,3 V en el momento del encendido, pero no haga clic en el relé. Luego, cuando el software en la MCU esté listo para activar el relé, haga que envíe un '0' al pin GPIO2. El par de resistencias R1/R2 debe dimensionarse en la proporción que se muestra para que el GPIO2 realmente pueda elevarse. (El circuito en la otra respuesta los tiene al revés y no permite que GPIO2 se acerque a un máximo válido).

ingrese la descripción de la imagen aquí

Voy a intentar esto pronto. Entonces, ¿los transistores dobles básicamente 'invierten' la señal GPIO? ¿En el sentido de que GPIO baja hace que Q1 se corte, lo que significa que Q2 se satura? ¿O estoy malinterpretando?
Estás entendiendo exactamente. El transistor adicional invierte la señal del GPIO para que la condición de encendido con el pullup actúe como el estado del relé inactivo.
Protoboard el circuito. El arranque funciona bien, pero no puedo hacer que el relé cambie. ¿El hecho de que Vcc en el relé = +3.3v hace que Q2 no funcione correctamente...?
No puedo adivinar lo que está mal. Parece que tendrás que arremangarte y depurar el circuito. Existe la pequeña posibilidad de que la salida GPIO2 de la MCU o el 2N2222 original que usó en el circuito original se haya comprometido o quemado debido a que no tiene una resistencia base para limitar la corriente. Además, el número de pieza del relé en su esquema parece indicar una bobina de relé de 9V que es poco probable que funcione correctamente si intenta operarla con 3.3V.
El relé es de 3.3v, simplemente no tengo la parte real en los esquemas de Eagle, así que elegí un relé similar con las mismas dimensiones de pin. Buen punto sobre el agotamiento: intentaré cambiar tanto el MCU como los 2n2222.
Es bueno saber que es una bobina de relé de 3,3 V. ¿Alguna idea de cuál es el consumo de corriente de la bobina en 3.3V? Buena suerte con las pruebas continuas.
@MichaelKaras Me gusta mucho este circuito, ya que tengo el mismo problema que OP. Pero no lo entiendo. ¿Podría decirme por qué Q1 "invierte" la señal de entrada? Entonces, ¿por qué satura Q2 cuando Q1 se corta? Mejor gracias!
@ alve89: Q1 se invierte porque cuando el GPIO está alto, enciende Q1 y el colector de Q1 bajará cerca de GND. En el estado opuesto, cuando el GPIO está bajo, el Q1 se apaga y el colector se eleva a través de R3. Dado que la base de Q2 está directamente conectada al colector de Q1, el voltaje en la parte inferior de R3 no alcanzará lo que normalmente se considera un nivel de voltaje "alto"; es decir, la unión base-emisor Q2 sujeta el voltaje a alrededor de 0,7 V a 0,8 V. (continuado)
(continuación de arriba) Sin embargo, la oscilación del colector Q1 entre cerca de GND y el nivel "alto" fijado es más que adecuado para encender y apagar Q2.

Claramente, la unión Base-Emisor {leer diodo} de la NPN está jalando GPOI2 a tierra. Y si la salida GPIO es alta, no hay un límite de corriente adecuado para esa salida.

Incluso con un pullup de 10k, la resistencia de la serie 1k solo tendría aproximadamente 0.3v a través de ella {suponiendo que esté conectada a tierra}; sin embargo, también habrá alrededor de 0.5v de voltaje del emisor de base, por lo que el resultado final seguirá siendo de alrededor de 0.8v en el pin IO. ¿Eso seguirá creando el problema de arranque? Ciertamente no es lo que yo llamaría detenido.

La sugerencia de usar un transistor PNP podría ser buena si tiene más voltaje para jugar, pero aún desea incluir una resistencia en serie para limitar la corriente, lo que significará menos voltaje para controlar el relé.

Al final, sería mejor usar un FET ya que no habrá corriente de puerta y no se necesitará una resistencia en serie. Solo necesita decidir si usar la conmutación de lado alto o bajo y, por lo tanto, el FET de tipo de canal P o N.

Dado que desea que el pin GPIO sea alto al principio, pero el relé no está activado, debe usar un FET de canal P en la configuración de conmutación del lado alto y bajar la puerta para activar el relé. No olvides la resistencia pullup

De acuerdo. No he usado un FET antes. ¿Puedes vincular un ejemplo apropiado o un recurso donde pueda aprender a usarlo como un interruptor? ¡Gracias!
¿Sería esta: cdn.sparkfun.com/datasheets/Components/General%20IC/… una parte apropiada para usar? Consulte el circuito: imgur.com/TGPP0Te . ¿Es necesaria una resistencia en serie entre GPIO2 y la puerta? ¿Y sigue siendo necesario el diodo flyback?
(Obviamente, suponiendo que invierta mi programación de la MCU st GPIO2 permanece alta hasta que quiera encender el relé)
Las resistencias de compuerta en serie en los MOSFET pueden ser necesarias para los FET de gran potencia que tienen una gran capacitancia de compuerta para limitar los picos de corriente que ocurren cuando se intenta cambiar la compuerta entre diferentes niveles de voltaje de manera rápida. Los MOSFET de señal pequeña a menudo se pueden usar sin resistencias de puerta en serie. Todavía necesita el diodo flyback para evitar los picos inductivos rápidos que pueden matar los transistores.