niveles de entrada digital basados ​​en otro circuito (¿usando un interruptor de transistor?)

Me gustaría controlar un código de microcontrolador¹ basado en el estado de un interruptor de botón en un circuito externo de 3,3 V a través de una entrada digital.

El circuito externo tiene un poco menos de 3,3 V CC que pasa por un interruptor de botón SPST, normalmente abierto. No tengo acceso al resto del circuito (está completamente sellado herméticamente y me gustaría evitar destruir el dispositivo), pero puedo empalmarlo en la línea del interruptor, ya sea paralelo al interruptor o en serie con el cambiar.

ACTUALIZACIÓN: mediciones de voltaje del interruptor:

  • a través del interruptor abierto: 3,15 V (± 0,01 V)
  • tierra común para abrir el interruptor, lado +: 3,25 V (±0,01 V)
  • terreno común para abrir el interruptor, - lado: -0.01V (parece variar entre -7mV y -11mV dependiendo de lo que esté haciendo el microcontrolador)
  • tierra común a ambos lados del interruptor cerrado: 3,25 V (±0,01 V)

El interruptor no se puede conectar en serie directamente a una entrada digital, ya que parece haber demasiada resistencia en el microcontrolador para que el interruptor complete el circuito externo. Sin embargo, una resistencia de 330 Ω en serie con el interruptor parece no interferir con el funcionamiento del circuito externo. También debo señalar que el circuito externo y mi circuito en la mayoría de las configuraciones compartirán un terreno común .

He logrado que el código responda como quiero con el interruptor conectado en paralelo a una entrada analógica (con una resistencia en serie). Sin embargo, me gustaría aprovechar las interrupciones (en lugar de hacer un bucle para leer la entrada analógica), por lo que me gustaría usar una entrada digital en su lugar.

Mi enfoque inicial para cambiar el nivel de la entrada digital basado en el interruptor del circuito externo ha sido a través de un interruptor de transistor . He intentado un interruptor basado en NPN y PNP, pero no he logrado obtener los valores correctos de la resistencia para incluso encender y apagar completamente un LED con el circuito externo (los intentos más recientes han sido en serie con el interruptor, pero también lo he intentado en paralelo).

Si un interruptor de transistor es realmente un buen enfoque, me gustaría recibir orientación sobre cómo hacerlo bien. ¿Es mejor un interruptor NPN o PNP (supongo que NPN va a ser más problemático, dado que ya comparten un terreno común?)? ¿Cómo debo calcular los valores de la resistencia para obtener la salida adecuada para los niveles 0/1 adecuados en una entrada digital del microcontrolador y también permitir que el circuito externo responda correctamente cuando el interruptor está cerrado? ¿Debo usar el lado negativo o positivo del interruptor del circuito externo para controlar el interruptor del transistor?

¹ Actualmente estoy trabajando con una placa ATmega328P, pero planeo cambiar a una placa ATmega32U4 a medida que continúo con el desarrollo para usar algunas de las funciones adicionales disponibles con esa placa.

Supongo que, dado que dice que puede poner algo en serie con el interruptor o en paralelo, tiene acceso a ambos extremos del interruptor. ¿Puede tomar medidas de voltaje de ambos extremos para nosotros? ¿Sería una medida para cada extremo cuando el interruptor está abierto y una medida para cada extremo (pero no ambos) cuando el interruptor está cerrado? Estas deben ser medidas con respecto al voltaje de tierra compartido.
Ajá, no había pensado en medirlo de esa manera. Lo haré mañana y publicaré una actualización de la pregunta.
Suena bien. Eso contribuirá en gran medida a ayudarlo.
@jonk, actualicé la pregunta con medidas.
Parece que todo lo que necesita hacer es monitorear un punto: el punto (-) que mencionó. Ese es el que está cambiando. Si usa un comparador de alta impedancia, debería estar bien generando una señal digital a partir de él. Puede hacer esto con un IC comparador real, o un opamp (con histéresis), o dos BJT y algunas resistencias. Hay muchos ejemplos comparativos en EESE. Tengo algunos métodos solo de BJT que he colocado aquí (al menos tres formas diferentes de hacerlo). El comparador IC probablemente producirá bordes más afilados. ¿Qué tan importante es un retraso para ti?
Cuanto más receptivo, mejor; esa es parte de la razón por la que estoy migrando a un enfoque basado en interrupciones con la codificación. Unos pocos milisegundos no son el fin del mundo, pero cuanto menos retraso, mejor.
Me preocupaba por debajo de unos pocos microsegundos, eso es todo. Por debajo de un milisegundo es pan comido. ¿Hay alguna razón por la que prefieras BJT en lugar de un IC? ¿O sería mejor para usted un IC simple?
Sí, unos pocos microsegundos no son un problema :) Mi instinto inicial de usar transistores fue solo porque pensé que sería más fácil, pero estoy igual de feliz de usar un IC simple si eso tiene más sentido. Tengo una buena colección de transistores a mano, pero no creo que tenga ningún comparador a mano; en cualquier caso, no es un problema adquirir uno o dos circuitos integrados.
Para empezar: a , b , c , d , e , f , g , h , i , j .
Por supuesto, necesitarás un diseño personalizado. Pero esos le dan cuatro o cinco topologías básicas a considerar, en términos generales.
Tengo un montón de BJT genéricos a mano, por lo que los circuitos que usan dos transistores NPN serían geniales, aunque ciertamente no me importa obtener un amplificador operacional. De cualquier manera, todavía me vendría bien un poco de ayuda para calcular los valores de resistencia. Editar: acabo de ver tu respuesta; mirando ahora!
He agregado una respuesta.

Respuestas (1)

En primer lugar, hagamos algunas suposiciones sobre el esquema interno que usted desconoce. Hay un interruptor, dado. Y ha medido algunos voltajes, con el interruptor cerrado y abierto. Estos me sugieren algo como esto:

esquemático

simular este circuito : esquema creado con CircuitLab

En otras palabras, parece que hay una resistencia desplegable y que un lado del interruptor está conectado a un punto casi ideal. + 3.25 V Fuente de voltaje. La razón por la que sugerí 33 k Ω para el menú desplegable interno se debe a sus medidas. (Lo que puede no ser perfectamente preciso, pero probablemente suficiente). Midió el voltaje a través del interruptor, cuando estaba abierto, como 3.15 V . Entonces, suponiendo que su voltímetro presente 1 METRO Ω impedancia (una suposición común, que carece de mejor información) esto solo significa resolver 3.25 X X + 1 METRO Ω = 3.15 V . y obtengo X 31.7 k Ω . El menú desplegable podría ser 10 k , aunque. No sé mucho acerca de su medidor. Pero la idea básica sigue siendo la misma. Parece que hay una resistencia desplegable del lado bajo con el botón conectado al lado alto. El punto medio probablemente se usa internamente (se muestra con la flecha) para cualquier propósito, que puede ser simplemente alimentar el circuito interno.

Ahora, antes de continuar, es posible que no haya ninguna resistencia desplegable. Puede ser que esta sea la resistencia que presenta el circuito al que apunta la flecha, cuando la resistencia en serie de su voltímetro se inserta entre la fuente de alimentación y el circuito. Y si hay una resistencia desplegable, entonces en paralelo con el circuito, presenta algo del orden de lo que estoy mostrando arriba. Solo quiero asegurarme de que no asumas que tengo razón. Este es solo un "modelo" que estoy usando para ilustrar sus medidas.

El hecho de que un 330 Ω La resistencia se puede agregar en serie con SW solo significa que el circuito señalado por la flecha probablemente no consuma más de 1 mamá . Podrías jugar con muchos valores diferentes. Pero no creo que sea necesario.

Lo principal es esto:

esquemático

simular este circuito

El signo de interrogación gigante ahora se completará para usted:

esquemático

simular este circuito

Eso debería usar casi cualquier par NPN de caja de chatarra. NO necesitan ser emparejados para β o I SE SENTÓ o mucho de cualquier otra cosa y también debería funcionar bien en un amplio rango de temperatura ambiente.

La fuga del pin de E/S en el peor de los casos (configurado como una entrada) para el ATmega32U4 es 1 m A . Entonces el 39 k Ω Las resistencias que he usado no deberían verse afectadas por más de aproximadamente 40 mV debido a una fuga en el pin de E/S. Y no veo ningún problema con eso.

El circuito funcionará igual de bien en 3.3 V y 5.0 V rieles de fuente de alimentación desde el lado ATmega. El pin de E/S a la MCU desde este circuito simplemente usará el voltaje del riel dado, por lo que los niveles de voltaje de E/S coincidirán con los requisitos para el pin de E/S de la MCU.

El circuito también tiene una histéresis sustancial. Exceso de temperatura y BJT no coincidentes, debe haber al menos una banda que sea 200 mV de ancho, pero probablemente más que eso por un margen justo.

Hay un filtro RC de la fuente de alimentación ATmega ( C 1 y R 7 ) para ayudar a evitar que el ruido del ATmega ingrese al circuito. También hay un condensador añadido ( C 2 ) desde el lado del interruptor para ayudar a moderar el ruido también desde ese lado.

Hay mucha histéresis en el circuito y, por lo tanto, mucho espacio para ajustar los valores de la resistencia (con el costo de un margen algo menor frente a las variaciones de la pieza). Así que no se preocupe mucho por encontrar los valores exactos.


La idea básica del circuito no es compleja. si solo miras q 1 , q 2 , y R 3 - R 6 , puede ver que el circuito se ve "equilibrado".

Pero fíjate que si q 1 se supone que está encendido entonces q 1 El cobrador tira hacia abajo R 4 causando q 2 estar apagado _ Con q 2 off , su colector está "abierto" y así R 3 y R 5 son libres de suministrar corriente base a q 1 de modo que, de hecho, está **encendido*. En otras palabras, es una suposición estable.

Pero también tenga en cuenta que lo contrario también es cierto, si asumió que q 2 está encendido _ Entonces eso también sería una suposición estable para un razonamiento similar.

Cuando tienes un circuito como ese, no sabes en qué dirección irá.

Ahora, agregué R 1 (que tiene otro propósito del que hablaré más adelante) y C 2 a un lado. Esto significa que al momento del encendido, q 2 está prácticamente garantizado que estará apagado y, por lo tanto, el circuito saldrá del encendido con q 1 en y q 2 apagado _ Dado que la salida se toma de q 1 's coleccionista, y desde q 1 se enciende como encendido , la salida al pin de E/S debe ser "BAJO" y leerse como "0". Ese es el caso sin nada más que perturbe el circuito.

Luego agregué R 2 para hacer un puente entre este circuito y el interruptor de su otro circuito. Cuando el otro circuito se encienda (su interruptor esté encendido), entonces habrá alrededor de un 2500 V s aumento de voltaje en el capacitor C 2 a medida que la corriente se filtra a través R 2 . Así que no pasa mucho tiempo hasta que q 2 La base de se eleva lo suficiente como para comenzar a encenderlo. La corriente a través R 2 comenzará cerca de 33 m A pero como alguna corriente alimenta la base de q 2 y drena a través R 1 , caerá quizás tan bajo como 25 m A . La mitad de eso se hundirá R 1 , pero queda suficiente para activar q 2 . Y como q 2 se activa, su colector se hundirá q 1 suministro base a través de R 5 . Ya que, a lo sumo, R 5 solo puede suministrar sobre 120 m A y dado que incluso completamente saturado y un β 10 la base de q 2 necesidades 12 m A . Y eso se suministra fácilmente. No sólo eso, tan pronto como q 1 es sacado por este proceso, R 6 y R 4 empezar a suministrar corriente de base adicional en q 2 para colocarlo en el estado activado . Y ahí es donde permanece... mientras el circuito externo continúe suministrando algo de corriente adicional.

Una vez que el dispositivo externo esté apagado, R 2 ya no suministra corriente. Incluso podría retirar algunos. Pero eso depende de su dispositivo externo. Supongamos que no hay corriente a través de R 2 . Cuando eso ocurre, y aquí está el otro propósito de R 1 , R 1 comenzará a drenar C 2 y hundirá suficiente corriente para tirar q 2 apagado _ Así que este es el otro propósito de R 2 . Es necesario para permitir que el circuito vuelva a su estado predeterminado.

Calcular su valor es importante. Demasiado pequeño de un valor y se mantendrá q 2 apagado sin importar lo que suceda con el circuito externo. Un valor demasiado grande y no puede absorber suficiente corriente para que el circuito funcione correctamente y se reinicie. Entonces el valor de R 2 es importante, su valor determina la posición central de la histéresis, y dado que hay variaciones en las partes del transistor y detalles de la temperatura ambiente de los que preocuparse, no quiere meterse demasiado con su valor.

Sin embargo, puede reducir la histéresis aumentando los valores de R 3 y R 4 . Una histéresis más estrecha proporcionará menos rechazo de ruido pero permite más espacio para el cambio con R 2 , también.

Con el circuito anterior, hágalo funcionar a temperaturas por debajo de la temperatura ambiente y hasta 55 C y sobre variaciones parciales de β de 100 a 300 y un factor de variación de 5 en las corrientes de saturación para los BJT, el siguiente gráfico de histéresis se simula como:

ingrese la descripción de la imagen aquí

(En la simulación, R 7 tiene el papel de R 2 en el esquema que se muestra arriba).

Este cuadro sugiere que es bastante seguro usar piezas de la caja de chatarra. Y si aumentaste R 3 y R 4 a 560 k Ω la parte inferior de la banda de histéresis cambia de centrada alrededor 6 m A a estar centrado alrededor 9 m A . Un montón de histéresis, todavía.

¿Esto supone algún valor particular de ATmega VCC? Creo que los dos microcontroladores con los que estoy trabajando tienen derivaciones para 3,3 V y 5 V.
@JonathanW. Funcionará bien en 3.3 o 5.0. No hay cambios en absoluto. La salida del pin de E/S rastreará el Vcc.
De acuerdo, buscaré algunas resistencias aceptables y probaré esto en los próximos días. Creo que el circuito del que forma parte el interruptor es lo que da la impresión de que hay una resistencia desplegable, aunque definitivamente podría haber una resistencia desplegable allí. O podría ser una combinación de los dos. En cualquier caso, su modelo parece razonable. Gracias por tu ayuda. ¡Te dejaré saber cómo funciona esto!
@JonathanW. R 2 realmente aísla el circuito y debería ser completamente imperceptible para el circuito cuya posición del interruptor está monitoreando. Y consume solo unos pocos microamperios, como máximo, del suministro del dispositivo externo. Por lo tanto, debería ser bastante seguro de usar. Sin embargo, tenga cuidado. Su dedo probablemente pueda activar la entrada de una forma u otra. De hecho, es posible que desee probarlo colocando un dedo de una mano en su MCU VCC y un dedo de la otra mano en un extremo de R 2 . Y luego cambie la mano de MCU VCC para tocar el suelo. Si el circuito funciona, ya verás. Si no, también verás.
@JonathanW. Tenga en cuenta que un voltímetro tendrá una resistencia cercana a la resistencia de salida del circuito. Por lo tanto, es posible que deba almacenar en búfer la salida si planea usar un voltímetro para medirla. O mida entre la salida y Vcc, en lugar de la salida y la tierra, tal vez. Casi podrías usar esto para detectar superficies mojadas, creo. (O simplemente escriba algún software para monitorear el pin de E/S y encienda un LED, apropiadamente).
je. ¿Qué tan cerca de 1.8MΩ deben estar R3 y R4? Tengo resistencias de 2,0 MΩ, ¿podrían funcionar? Alternativamente, ¿estaría bien 1.4MΩ para cada uno (usando una resistencia de 4.7MΩ en paralelo)? ¿O sería mejor acercarse a 1,8 MΩ?
@JonathanW. 2 METRO Ω debería estar bien. Esto no es ciencia espacial y no equilibré esto en el filo de un cuchillo. Las dos resistencias paralelas de mayor valor probablemente también funcionarían. Pero iría por 2 METRO Ω , ya que los tienes. (Si su Vcc es de 5 V, entonces desea avanzar hacia valores más grandes). Poner dos paralelos 4.7 METRO Ω resistencias para cada uno sería bueno en V CC = 5 V .
De acuerdo, entonces probaré ambos, según sea necesario, en ese orden. También tengo algunas resistencias de 330KΩ y 470KΩ que podría intentar poner en serie con los complejos de resistencias paralelas de 1.4MΩ para acercarlas (no tengo suficientes resistencias de 1MΩ a mano para hacer una picadura de 330KΩ+470KΩ+1MΩ), pero eso está comenzando ponerse en ridículo. Si eso es lo que se necesita para que esto funcione, tendré en mis manos algunas resistencias de 1.8MΩ para la versión final del circuito.
@JonathanW. Ahora que estoy pensando en algo que funcione de 3.3 a 5.0, me iría con 2.2 Megas, creo. Entonces, si está comprando algunos, compre esos. Más seguro. Si tienes unos 2,7 megas, también estarán bien. Incluso 3,3 megas probablemente estaría bien. Así que quédate entre 1,8 Megas y 3,3 Megas, creo.
Está bien, veré qué funciona y volveré a informar. No planeo comprar piezas hasta que tenga un prototipo funcional.
@JonathanW. Se trata del aspecto de la histéresis y cómo varía con la temperatura, las variaciones de las piezas y el riel de voltaje que tiene. La creación de un circuito que se encuentra justo en el medio de los distintos límites le permite "simplemente construirlo" y hacer que funcione. Espero haberlo logrado. Tendría que construirlo y jugar con él un poco para estar seguro. Pero creo que es lo suficientemente sólido.
Bien, he conectado un prototipo de su circuito (con resistencias de 2,0 MΩ). No responde al interruptor. Cuando el VCC del microcontrolador (ya sea 3,3 V o 5 V) se conecta al circuito, el pin de E/S lee 1, y cuando el VCC no está conectado, el pin de E/S lee 0 (parece que el voltaje a través de la resistencia de 100 KΩ es suficiente para desencadenar esto por sí mismo). ¿Qué debo probar o cambiar para depurar esto?
¡Ajá, lo tengo! Los transistores estaban invertidos (hay información contradictoria sobre la orientación de los PN2222...). ¡Ahora funciona maravillosamente!
@JonathanW. bueno escuchar Acabo de asistir al funeral de Barrie Gilbert hoy. (Gilbert Cell Fame.) Por eso me tomó un momento responder.
@JonathanW. Por cierto, sé lo que quieres decir. El pn2222a tiene un pinout diferente al del p2n2222a. Así que hay que tener cuidado.
La información contradictoria es específicamente para el PN2222, por ejemplo, theengineeringprojects.com versus el-component.com . No hay problema con la demora: ¡no espero una respuesta tan rápida en el intercambio de pila como usted participó!
Soldé este circuito (con resistencias de 2 MΩ en lugar de 1,8 MΩ) y obtuve un comportamiento extraño. En primer lugar, tengo que omitir R2 para que responda, pero Q2 se calienta con cambios rápidos de estado. Los valores intermedios de R2 (p. ej., 470 kΩ) también le permiten funcionar (pero no del todo de manera consistente). Me pregunto si es posible que haya dañado (sobrecalentado) un transistor al soldarlo. ¿Eso suena como algo que podría causar el comportamiento que describo?
Debo agregar: cuando omito R2, el circuito del interruptor externo no registra las pulsaciones del interruptor, pero el pin de E/S lee 0 cuando se presiona el interruptor [como se desea]. También tengo problemas para leer directamente cualquier cosa menos 1 del pin de E/S cuando uso una resistencia de valor medio, pero de alguna manera activa interrupciones de cambio de estado alto a bajo en el interruptor externo que se presiona (pero también a veces en se libera), podría ser que los 0 sean solo momentáneos y pasen demasiado rápido para que yo los atrape.
@JonathanW. Este circuito es muy sensible y utiliza resistencias de gran valor. No podrá usar un voltímetro estándar en él. Lo hice de esa manera para evitar interferir con el circuito que estaba monitoreando. Entonces, una posibilidad es reducir los valores de la resistencia. Pero antes de hacer eso, ¿puede intentar insertar una resistencia de 1k Ohm entre el ATmega Vcc y el circuito? (Esto ayudará a aislar el circuito de su suministro de Vcc; me preocupa la oscilación de HF).
De acuerdo, lo intentaré mañana e informaré: tengo un trabajo de desoldar algo complicado por delante para lograrlo (la placa de prueba es económica y no fue fácil de soldar en primer lugar).
@JonathanW. Mientras tanto, también pensaré en otras posibilidades.
@JonathanW. Creo que noté un error en el esquema. Mis disculpas. Arreglaré las cosas y ese esquema en particular y agregaré uno nuevo, en caso de que esté dispuesto a probarlo.
@JonathanW. He agregado los cambios.
Una resistencia de 1kΩ entre VCC y el circuito sugerido originalmente no parece marcar la diferencia. Conectaré la segunda versión en una placa de prueba sin soldadura e informaré.
@JonathanW. Había notado un problema de cableado en ese primer circuito. ¿Lo revisó para encontrar la diferencia de cableado?
Ajá, lo intentaré primero. ¡Gracias!
@JonathanW. El segundo circuito es menos sensible. Antes mencionaste que uno de los BJT se estaba calentando. Eso me preocupa de la oscilación de alta frecuencia, debido a su sensibilidad. Entonces, el segundo circuito incluye algunos cambios para ayudar a lidiar mejor con eso. Por supuesto, podría ser que no conectó correctamente el BJT o que estaba "malo" por alguna razón. Y has hablado de que tu trabajo de soldadura no es tan bueno. Así que es difícil para mí manejar todo esto en el asiento trasero.
Volver a conectar el pin de E/S al colector de Q1 en lugar de Q2 (junto con la resistencia de 1kΩ) da como resultado que la lectura del pin de E/S esté siempre encendida, sin importar si R2 se omite o no. Estoy familiarizado con Manhattan y otros estilos de construcción de tableros (¡leí mis QST!), pero aún no los he probado. Revisé mi trabajo de soldadura varias veces con un multímetro, así que no creo que sea eso, pero bien podría haber dañado el Q2. También es posible que volviera a tener mis BJT al revés, aunque he seguido las "reglas de la mayoría" en las hojas de especificaciones y también lo he comprobado muchas veces. Voy a probar la versión 2 ahora.
El segundo circuito funciona muy bien cableado en una placa de prueba sin soldadura (con transistores nuevos): normalmente lee 0 en el pin de E/S y lee 1 cuando se presiona el interruptor. Tenga en cuenta que no parece que tenga resistencias de 390 kΩ en mi reserva de ahora muchos cientos, por lo que conecté en serie 330 kΩ + 56 kΩ. ¿Cuál es la tolerancia para R3 y R4?
330kΩ parece funcionar bien. Tal vez haga un trabajo de soldadura similar al de Manhattan para conectar algo más permanente... ¡Gracias de nuevo por toda tu ayuda, @jonk!
@JonathanW. Bueno, el primero fue "empujarlo" un poco. Debería haber usado una impedancia más baja y haberte ahorrado el problema. Todo lo que hice con el último fue hacerlo "más razonable" y menos nervioso. Me alegra saber que funciona bien, y sí, 330k también estaría bien. De hecho, calculé 330k como el mejor valor y decidí ser "creativo" y hacer que todo fuera 39... ¡Así que en realidad me leíste la mente, supongo! Voy a eliminar el esquema anterior y limpiar un poco la respuesta. También puede, para evitar confusiones.
Esa explicación es bastante profunda. Probablemente me llevará algunas lecturas más entender algo parecido a todo. Mientras tanto, soldé el nuevo circuito, inspirándome en el diseño de la placa de Manhattan, y funciona maravillosamente.
@JonathanW. Gracias por avisarme que está funcionando. Me siento honrado de que dediques tu tiempo y esfuerzo a seguir las meras palabras que escribí. Así que gracias. Agradezco saber que funcionó para sus necesidades.