Estado automotriz de voltaje amplio a la entrada del microcontrolador

Necesito monitorear el estado de un cable en una aplicación automotriz que puede tener 10-40 V CC en cualquier momento. ¿Cuál es un buen enfoque para limitar el voltaje a la entrada de un microcontrolador en un rango tan amplio? Planeo usar un límite de 10nF y TVS para ESD y otros transitorios, pero no estoy seguro de cuál es el mejor enfoque para limitar el voltaje esperado. Si puedo detectar de manera confiable 10 V, 40 V pueden quemar las resistencias de entrada (¿o la resistencia y el zener?) O puedo limitar a 40 V y no detectar 10 V.

La señal es una simple línea de estado de apagado a la que estoy accediendo. No transportará ningún dato ni cambiará de estado muy a menudo. Lo probaré ocasionalmente en el micro para determinar si es alto (1V a 40V) o bajo (GND a menos de 1V).

Gracias.

Editado para agregar que mi microcontrolador funcionará a 3.3V y una lógica baja debe estar por debajo de 1V. Cualquier solución que use debe incluir un límite de valor bajo entre la entrada y GND y abrazaderas de diodo a Vdd y GND o Transil.

Probablemente deberías definir algo de histéresis. Un umbral simple puede ser ruidoso, aunque supongo que si no está muestreando tan a menudo... Pero aún así... Probablemente debería tener algo.
¿Puedes confirmar que la señal es realmente 1-40V y no 10-40V? Es decir, ¿necesita garantizar que 1V le dará una lógica alta?
@Selvek Vea la nueva publicación de mrJand: Barra LED de atenuación y conducción con controlador interno de 10-40 V CC . Puede ser una cosa XY, otra vez.
La señal es de 10-40 V, pero mi microcontrolador ve cualquier cosa por encima de 1 V como un nivel lógico alto.
Dividir / 12 está bien?

Respuestas (3)

Usar una resistencia y un diodo Zener funcionará bien. La siguiente simulación muestra lo que obtienes con un zener de 4,7 V.

Puede usar una resistencia muy grande, porque el pin de E/S del microcontrolador prácticamente no consume corriente. Con una resistencia de 100kOhm y un voltaje de salida de aproximadamente 5V, la disipación de energía es (40-5)^2 / (100,000) = 12mW, dentro de lo que puede manejar la resistencia.

esquemático

simular este circuito : esquema creado con CircuitLab

No tiene una definición de lo que es un 0 o un 1 lógico, y 100k Ohm como menú desplegable puede no funcionar. Debe definir la resistencia pullup o pulldown para el GPIO. Aquí, para cualquier voltaje cercano al voltaje Zener, el pin GPIO no está bien definido.
Para cualquier voltaje menor que el voltaje zener, el pin uC verá aproximadamente el mismo voltaje de entrada, es decir, si el voltaje es de 1 V, el pin uC verá 1 V y se aplicarán los umbrales lógicos de uC. Para cualquier voltaje por encima del umbral lógico uC, obtendrá la lógica 1. No estoy seguro de por qué dice que un voltaje cercano al voltaje zener no está definido, ya que solo obtendrá un voltaje hasta, pero sin exceder, el voltaje zener .
Evitaría habilitar el pull up o down dentro del uC, para evitar que luche con la resistencia de 100k. No necesita una resistencia pull-up/down adicional porque la línea de estado siempre es alta o baja.
Con una resistencia en serie de 100k Ohm y sin pullup o pulldown, tiene una entrada muy propensa al ruido. No es una configuración aconsejable. El OP define 1 como 1-40 V CC, por lo que 0 es <1 V CC ... su circuito no proporciona eso.
No estoy seguro de cómo un tirón hacia arriba o hacia abajo tendría algún impacto en el ruido; por lo general, tienen alrededor de 100k. El ruido, por supuesto, dependerá de cuánto tiempo/dónde estén funcionando los cables conectados. Ya dijo que incluirá un límite que ayudará, y también está muestreando lentamente, por lo que si es realmente, REALMENTE ruidoso, lo suficiente como para inducir múltiples voltios de ruido, aún podría resolver la respuesta correcta mediante el sobremuestreo. Pero podemos reducir la resistencia a 5K y aún estar dentro de una resistencia de 1/4W.
Tiene razón en que este circuito no garantizará que 1V devuelva la lógica 1 (suponiendo umbrales uC típicos). Agregué un comentario arriba pidiéndole al OP que aclare que eso es realmente lo que necesitan, ya que la pregunta se formuló para enfatizar los altos voltajes.
¡Está usando un puerto GPIO, no un puerto A/D! Entonces, el ruido simplemente significa que obtienes los datos incorrectos.

Me inclinaría a usar algo simple y sucio como este.

esquemático

simular este circuito : esquema creado con CircuitLab

Varíe el valor de R3, u omítalo, según desee que sea el umbral inferior.

Tenga en cuenta que las uniones del emisor base son bastante resistentes y tienden a fallar en cortocircuito cuando lo hacen. Si muere, salvará el circuito protegido y se puede reemplazar fácilmente.

D1 es para proteger del voltaje negativo. Se supone que los sistemas eléctricos de los automóviles pueden tolerar la conexión inversa de una batería de arranque sin daños, así como descargas de carga de 160 V y arranques de batería de camión de 24 V, ¡bastante duros!

La respuesta de Selvek debería funcionar. Agregaría que otra alternativa simple al zener es sujetar el voltaje a VDD usando un diodo.

esquemático

simular este circuito : esquema creado con CircuitLab

De hecho, la mayoría de los circuitos integrados ya incluyen un diodo de este tipo internamente, por lo que si obtiene la resistencia correcta, ni siquiera necesita agregar un diodo.

Una cosa que debe tener cuidado cuando usa este método es que el consumo mínimo de energía de su circuito siempre debe ser mayor que la corriente a través de D1 a 40v. En este caso, la corriente es 0.7ma. R2 en este caso crea una carga mínima de 1ma, lo que protegerá el suministro para que no se eleve por encima de 5v.