Condicionamiento de entrada del microcontrolador

3

Tengo el siguiente circuito para condicionar las señales que llegan a los pines de mi microcontrolador.

Este circuito lee tanto las señales digitales en el rango de 0 a 30 V como las señales analógicas en el rango de 0 a 3.3 V.

Explicación de los componentes

  • R2 y R3 nunca se llenan al mismo tiempo. Son resistencias pull-up / down para señales digitales.

  • R1 tiene una doble función. Por un lado, es parte del filtro RC junto con C1, y por otro lado es un limitador de corriente para el D1.

  • D1 solo se asegura de que la tensión (en señales superiores a 3.3V) se fije, protegiendo la unidad de medida.

Sin embargo, el diodo zener D1 crea un problema. Si elijo un zener 3V6, entonces un voltaje más alto que el deseado alcanzará el uC. Si elijo un zener 3V3, entonces las señales analógicas débiles tienden a ser más rápidas (es decir, el zener comienza a conducir una pequeña corriente antes que su voltaje nominal). Para empeorar las cosas, incluso si de alguna manera pudiera asegurarme de que la tensión se fije a exactamente 3V3, y por cualquier motivo, Vcc, incluso sea un poco menor que 3V3, el ADC informará el resultado incorrecto.

Lo que necesito aquí es un circuito que sujetará el voltaje exactamente a Vcc, con una transición brusca para que no afecte el rango ADC.

¿Alguna idea?

    
pregunta user3634713

4 respuestas

5

Los zeners de bajo voltaje tienen rodillas muy suaves y no son adecuados para este propósito. Además, nunca podrá hacer una pinza de circuito exactamente a un voltaje determinado; debe definir una tensión mínima en la que la pinza comience a afectar la entrada (en un grado específico, como .2%), y una tensión máxima que ocurrirá después de la sujeción (a un voltaje de entrada máximo). Cuanto más cerca están los números (y cuanto más alto es el voltaje de entrada máximo) más difícil se vuelve. Si su referencia de ADC es significativamente menor que la tensión de alimentación (como suele ser en un sistema de precisión), puede haber un margen razonable.

También se debe considerar dónde fluirá la corriente cuando se conecte (todas las entradas simultáneamente, si es posible). El método obvio de sujetar al riel positivo puede causar problemas al hacer que el riel se salga de la regulación y, como resultado, dañar las piezas.

Por ejemplo, 4 entradas con 30 V requieren una fijación de más de 100 mA, lo que es más probable que cause problemas graves.

Sugiero considerar la posibilidad de sesgar un regulador de derivación (por ejemplo, TL431 ) a aproximadamente 3.2 o 3.3 V (p. Ej., Desde una fuente de 5 V > = 1 mA con una polarización de 1,6 K) y el uso de diodos Schottky para sujetar la tensión del regulador y 0V. Es posible que aún tenga problemas con que afecte la entrada cerca de la escala completa o que la tensión de entrada sea inferior a (digamos) 3.6 V: el Vf de un diodo Schottky cambia con la corriente.

Editar:

Ejemplo:

Puede compartir el suministro de la pinza con más de una entrada, sujeto a la corriente máxima que el TL431 puede manejar (100 mA o menos, dependiendo de las consideraciones térmicas).

simular este circuito : esquema creado usando CircuitLab

Si desea cambiar C1, asegúrese de consultar la hoja de datos y evitar la región de inestabilidad del "túnel de la muerte" en todas las condiciones.

    
respondido por el Spehro Pefhany
2

Una forma alternativa y más confiable (y más rápida, creo) de protección contra la sobretensión es usar un diodo schottky en la parte delantera, después de la resistencia limitadora de corriente (R1 en mi ejemplo a continuación).

Este arreglo protegerá contra el máximo de entrada de 30 V que sugieras:

simular este circuito : esquema creado usando CircuitLab

Este circuito tiene un limitador de extremo delantero por R1, que cuando la tensión de entrada es de 30 V como máximo, la corriente se limita a través de D1, que se fija a 3.3 V (VCC) a ~ 10 m. D1 y D2 son diodos Schottky, con bajas caídas hacia delante para ayudar a sujetar lo más cerca posible de VCC y al mismo tiempo proteger las pinzas de diodos CMOS de entrada del microcontrolador.

El condensador C1 está ahí para el filtro RC que deseaba. No necesita ser cargado, o podría ser reemplazado en la misma huella con una resistencia desplegable. Siempre se podrían agregar resistencias de subida / bajada discretas cerca de C1.

La mayoría de los microcontroladores tienen una opción para los modos de pin de entrada con pull-up interno para que pueda guardar un componente si tiene esta opción.

Si tuviera la opción de NO interactuar con 30V directamente, me gustaría recomendarle que lo haga en lugar de intentar conectarse directamente al pin MCU, incluso a través de este circuito de protección. Vea esta pregunta y respuesta / s para alto voltaje a 3.3V interfaz: ¿Cómo es este circuito para interconectar la señal de 20V con el microcontrolador 3v3

Es posible que tengas que encontrar una forma astuta de pasar la señal analógica, tal vez un búfer analógico con un pin de "habilitación" y un circuito de protección similar al de esta entrada.

    
respondido por el KyranF
0

Ya tiene diferentes valores de componentes para analógico frente a digital (no hay resistencias de pull-up o pull-down en configuración analógica), por lo que no está buscando un cambio de software entre los dos modos.

¿Por lo tanto parece razonable tener dos opciones Zener diferentes?

En el modo digital, el Zener forma parte de un divisor de voltaje, por lo que debe seleccionarlo para obtener el voltaje resultante en el rango de operación normal, que es \ $ V_ {IH} \ $ hasta \ $ V_ {CC} PS Un Zener de 3,3 V o 3 V debería funcionar de manera admirable, posiblemente incluso a 2,5 V (consulte la hoja de datos de su microcontrolador para ver el valor de GPIO \ $ V_ {IH} \ $).

En el modo analógico, va a usar la protección contra sobrecargas y no tiene ningún efecto cuando la entrada está dentro del rango. Por lo tanto, el voltaje resultante debe estar dentro de los valores máximos absolutos, no del rango operativo. Revise su hoja de datos, pero es casi seguro que 3.6 V es aceptable (está protegiendo el exceso de corrientes que fluyen en diodos parásitos dentro del semiconductor, lo que activa una caída de diodo por encima de \ $ V_ {CC} \ $).

Para proteger los pines de entrada contra las señales que se aplican cuando la alimentación está apagada (o simplemente queda la energía residual atrapada en C1 cuando se desconecta la alimentación), también debe paralelizar Zener con un diodo de bajo voltaje de avance (puede encontrar 0.2V - 0.3V) conectado al \ $ V_ {CC} \ $ rail.

    
respondido por el Ben Voigt
0

No creo que esta sea la mejor solución (más amplia y más costosa), pero si puede implementar la lógica siguiente con 2 opAmps y un controlador, habrá terminado.

if(Vin > 3.3) {

     if(Vin > 3.3) {
          Vout = Vcc;
     } else {
          Vout = -Vcc;
          //never reaches here.
     }

} else {

     Vout = Vin;
     //Driver needed here
}
    
respondido por el user2807874

Lea otras preguntas en las etiquetas