Entrada de 12V en el pin del microcontrolador

Estoy tratando de contar pulsos/seg. en un pin de microcontrolador en el rango de ~ 5 a 100 Hz. El µC puede funcionar con una entrada de 5 V, por lo que tengo que bajar el nivel de voltaje de forma segura.

Me viene a la mente una resistencia simple, pero eso deja cualquier sobretensión abierta directamente al pin µC - meh .

Me encontré con esta respuesta, pero la pregunta sigue siendo si ese circuito es capaz de cambios "rápidos" de 100Hz.

¿Existe una forma comprobada y confiable (¿por medio de un IC tal vez?) De contactar pines de 5V o 3.3V a entradas de 12V "sucias" ? Tengo 12V y 5V disponibles para manejar cualquier IC "preparado".

divisor resistivo + zener/diodos de sujeción?
¿Es esta realmente una pregunta que no se puede responder con una simple búsqueda en Google?
Se puede responder, pero me gustaría mucho una respuesta de calidad antes de destruir mi equipo por mi propia estupidez. ¿Decidámonos por la "tranquilidad"?
@AliChen stackexchange pretende ser un repositorio canónico de preguntas y respuestas. Incluso las preguntas simples pueden ser buenas si recopilan respuestas útiles.
100Hz no es rápido.

Respuestas (9)

Usa un circuito como este:

esquemático

simular este circuito : esquema creado con CircuitLab

R1 y R2 determinan el rango de voltaje y realizan la división inicial. Estas resistencias deben ser capaces de generar cierta potencia. Típico es MELF 0.4W. Todos los demás pueden ser resistencias de chip/condensador.

R3 evita que las sobretensiones causen daños al gatillo Schmitt. R4 y R5 son opcionales para evitar señales flotantes.
Sin embargo, la combinación R3/R4 también se puede utilizar para ajustar el umbral, si es necesario.

C1 y C2 determinan la velocidad máxima. La combinación R3/C2 puede filtrar lentamente. C1 filtra transitorios.

Se usa un gatillo Schmitt separado ya que puede obtenerlos realmente pequeños y baratos. Y evita el enrutamiento de una señal débil en pistas largas. Mientras que también es una parte de sacrificio en grandes oleadas.

He diseñado este circuito basado en lo que he visto dentro de los PLC. El circuito anterior es para 24V. Ajuste las resistencias para que coincidan con 12 V según IEC61131-2.

CEI 61131-2
El concepto del estándar es garantizar que la entrada tenga que absorber una cantidad mínima de corriente antes de considerarla un '1'. Los tres tipos especifican cuánto y se aplican en función del ruido ambiental. Esto evita que los fallos lo toquen o los relés cercanos. El inconveniente es que R1/2 tiene que tener una potencia nominal decente y baja resistencia.

Guau. Una respuesta muy completa a lo que inicialmente parecía una pregunta simple. Gracias.
Tengo mucha curiosidad acerca de R4 y R5: ¿cuándo harán algo útil? R2+R3 > R4 de todos modos. ¿Es en caso de que alguno de los componentes de "servicio pesado" se descomponga?
@pipe R3 y R4 pueden ayudar a configurar el umbral, mientras proporcionan una ruta de alta impedancia a la lógica. R5 es superfluo la mayor parte del tiempo, pero en el diseño que se usó, no se pudo usar el menú desplegable mcu. Si por alguna razón el búfer fallara, la entrada mcu no leería 50 hz hum. (Nota: se solicitó confiable)

Probaría una solución de divisor de resistencia como se muestra a continuación.

ingrese la descripción de la imagen aquí

Seleccione la relación de resistencia para que el voltaje dividido esté en el nivel adecuado para la MCU cuando la entrada esté en su voltaje nominal. El voltaje del diodo zener se selecciona para sujetar la entrada de MCU cuando la entrada supera la entrada máxima. El zener también protegerá la MCU si la entrada se vuelve negativa.

Esta solución funcionará muy bien para el rango de frecuencia relativamente bajo que ha especificado.

¿Por qué elegir zener para ser 4v7? ¿5v2 (5v1?) ¿Sería una mejor solución?
@R.Joshi: Si el microcontrolador de 5 V se alimenta con un suministro tolerante del 10 % (4,5-5,5 V VDD), la aplicación de 5,2 V en el pin podría ser más que el VDD típico + 0,3 V máximo absoluto. La lógica alta se reconoce a 2 V para TTL y 2/3 * VDD para CMOS, por lo que no hay problemas con un zener 4V7 allí.
Realmente desearía poder marcar dos respuestas como "elegidas". Tu camino es el camino a seguir todos los días, pero la respuesta de Jeroen es un poco más profunda. Gracias, sin embargo, por tomarse el tiempo para responder.

Si los niveles de señal son GND y 12V (o >5V), la forma más sencilla y 100% segura es esta:

esquemático

simular este circuito : esquema creado con CircuitLab

Si realmente sirve para su propósito, depende de la impedancia real de la señal de 12 V (debe estar muy por debajo de R1) y de lo que quiere decir con "sucio".

Además, como señala correctamente @MichaelKaras, el nivel bajo en la entrada de µC puede desplazarse hasta el nivel bajo de la señal de 12 V más Vf del diodo (hasta aproximadamente 0,7 V). Debe comprobar si esto es un problema en su caso o no. Si es así, aún puede intentar usar un diodo Schottky con un Vf de aproximadamente 0.35V.

En la mayoría de los µC, uno podría incluso dejar caer la resistencia y activar el pullup interno para ese pin.
La solución de diodo propuesta aquí no siempre es la mejor u óptima. El voltaje de entrada de bajo nivel presentado a la MCU estará por encima de GND por una caída de voltaje directo de diodo más cualquier voltaje de salida de bajo nivel que esté creando la señal de 0 a 12V. Esto puede ser particularmente un problema donde las señales pueden llevar ruido y la entrada de MCU se especifica con niveles de voltaje de tipo TTL para V<sub>IL</sub>. A menudo, esta especificación puede ser de solo 0,8 V. Entonces, si se usa esta solución, tenga cuidado y al menos específicamente un diodo de caída de voltaje directo bajo como un BAT54.
@MichaelKaras Tienes razón sobre el cambio del nivel bajo por el Vf del diodo; esto debe tenerse en cuenta. Para mí, para un µC de 5 V, V[IL] de 0,8 V parece excepcionalmente bajo. Parece que generalmente encuentro 0.3Vcc (~ 1.5V) especificado.
Si su MCU tiene una especificación de tipo CMOS para V<sub>IL</sub>, entonces tal vez funcione bien. Todavía me gusta diseñar de manera que funcione incluso si la especificación fuera mucho más baja que eso solo para obtener el mayor margen operativo posible. Incluso la diferencia de especificar un diodo de baja caída es un buen paso hacia eso si elige usar este tipo de circuito. Su circuito no es particularmente bueno para los casos en los que puede haber excursiones negativas en la entrada de 12V.
Estoy de acuerdo. Diseñar para el margen es algo bueno. Y los voltajes negativos en la señal de 12 V pueden causar estragos en el circuito.

Usaría un divisor de resistencia y luego protegería el uC con un Zener de 5.1v

Si coloca el zener entre el pin y tierra en paralelo con, digamos, una resistencia desplegable de 10k, luego alimenta su señal dividida de voltaje entonces ... zener es más que lo suficientemente rápido y barato / fácil.

A menudo hago esto y divido la señal antes del bit zener con un potenciómetro.

Otra opción es la vinculada, si realmente le preocupa que se pueda usar un opto, si no es un problema de seguridad, iría con lo anterior o tendría el pin normalmente alto de 5V Vcc y lo bajaría con un fet (fuera de la parte superior de mi cabeza 2N7000 debería funcionar), pero es menos simple que la opción zener.

Usaría un optoaislador, 100 Hz está fácilmente dentro del rango de cualquier decente. 4n25 me viene a la mente como un número de parte común, y sé que es mucho mejor que 100Hz.

El problema con el uso de un optoaislador para resolver este problema es que se supone que puede extraer corriente de la señal de 12V. Podría amortiguar la señal de 12 V, pero eso requeriría un suministro adicional.
Estoy seguro de que puede obtener un opto que sería efectivo casi con la misma corriente que una entrada micro, desde 12v no va a poner mucha carga para encender un LED pequeño.
Una fuga de entrada digital suele estar entre 10 nA y 1 uA (depende de la temperatura y del proceso). Nunca me he encontrado con un optoacoplador que funcione incluso a 1uA. Un optoacoplador típico, comercializado como de baja potencia, por ejemplo, Broadcom ACPL-x6xL, necesita 1,6 mA. Eso es entre 1600 y 160000 veces más corriente. Pero luego, como digo en mi respuesta, depende de los requisitos lo que funcionará, por lo que no estoy descartando una solución opto.

El método seleccionado depende parcialmente de lo que hace la señal de entrada, cómo se comporta y cómo podría afectar eso al circuito de entrada y al código que lo lee.

por ejemplo, ¿siempre es de 12V? ¿Tiene picos o ruido? ¿Cuánta corriente puede conducir? ¿Se puede conducir corriente en él? ¿Tomar corriente de él afectará algo más? ¿Es crítico para la seguridad?....

Debido a esto, nunca puede haber una respuesta universal a esta pregunta, ya que la solución "correcta" depende de lo que haga el resto del sistema. La solución elegida que cumpla con los requisitos tendrá un costo y una complejidad diferentes.

Dicho esto, como nadie más lo ha sugerido todavía, optaré por una entrada FET.

Se puede usar un JFET o un MOSFET y pueden ser modos de fuente común o de drenaje común. Por ejemplo, drenaje común:

esquemático

simular este circuito : esquema creado con CircuitLab

La ventaja del modo de drenaje común es que permite conectar la entrada a un pin analógico (por ejemplo, ADC) o digital. Si la señal es verdaderamente digital, habilitaría el disparador schmitt en la entrada de la CPU (si tiene uno), o agregaría un búfer schmitt externo al pin de entrada de la CPU.

Ventajas

  • Impedancia de entrada muy alta
  • Entrada parcialmente aislada (puede soportar +/- 30 V, dependiendo de la selección de FET)
  • Analógico posible
  • Efecto mínimo en la señal externa

esquemático

simular este circuito : esquema creado con CircuitLab

Figura 1. Interfaz optoaislada. Use pull-up interno en GPIO.

Un optoaislador resuelve varios problemas.

  • Aislamiento eléctrico completo entre el circuito de 12 V y la lógica de 5 V.
  • Maneja la señal sucia de 12 V sin riesgo.
  • Sencillez.

esquemático

simular este circuito : esquema creado con CircuitLab

R1, R2 y C1 forman un divisor de tensión con un filtro de paso bajo de 1 kHz. Cualquier señal de alta frecuencia no deseada que viaje en 12 V puede filtrarse. El cálculo de la frecuencia del filtro es 1/(2 pi R2 C1). Nota: La Base requiere al menos 0,7 V para funcionar correctamente, tenga cuidado al ajustar la resistencia.

BJT se está utilizando porque es muy común en comparación con mosfet. En el caso de que los 12 V todavía estén activos pero los 5 V de su uC estén caídos, el BJT no pasará corriente al pin y causará daños.

Para la programación uC, use un disparador de alto a bajo para contar su pulso. Como este circuito invertirá el pulso.

Puede optar por un regulador de voltaje LM7805/LM7803 para 5 V y 3,3 V respectivamente. Supongo que el uC está aislado de una carga exigente de corriente, si corresponde.

es creativo Pero operará fuera de las especificaciones a alta velocidad. Si fuera todo lo que tenías por ahí, tal vez.