Saturación de salida LM358P alrededor de 6.05V (la causa raíz resultó estar relacionada con los diodos de protección Arduino)

Para un drenaje de corriente constante usando una entrada PWM, estoy usando la siguiente configuración:

esquemático

simular este circuito : esquema creado con CircuitLab

Para corrientes pequeñas, parece funcionar como se esperaba: el amplificador operacional produce un voltaje para el MOSFET que hace que el flujo de corriente sobre la batería sea tal que la caída de voltaje sobre la resistencia de detección de 3,3 ohmios se convierte exactamente en el voltaje configurado, como se esperaba.

Pero debe haber algo que me he perdido, porque la corriente que puedo obtener llega al máximo mucho antes de lo esperado. Esto sucede alrededor de 150 mA correspondiente a un voltaje de entrada a la entrada positiva de los amplificadores operacionales (a través de PWM) de alrededor de 0,45 V. En este punto, la salida del amplificador operacional al MOSFET parece saturarse alrededor de 6,05 V. El problema es que los aumentos adicionales en la entrada positiva de los amplificadores operacionales no tienen ningún efecto. El amplificador operacional sigue produciendo una salida de 6,05 V aunque hay una gran diferencia entre la entrada positiva y la negativa. Puedo ver que el opamp está recibiendo, digamos, 0,8 V en la entrada positiva y solo ve 0,45 V en la entrada negativa, pero se niega a generar más de 6,05-6,1 V.

El Vcc al amplificador operacional es de 12 V, por lo que debería haber suficiente margen para que emita voltajes más altos, aunque no sea un amplificador operacional de riel a riel. He buscado en la hoja de datos, pero parece que no puedo encontrar una limitación que explique este comportamiento, así que espero que alguien pueda explicar lo que me estoy perdiendo.


¡Actualizar! Estoy un poco más cerca de resolver el misterio. Tenía un cable (no en el dibujo) que iba desde la salida del amplificador operacional hasta una entrada analógica en el Arduino. Pensé que las entradas analógicas eran de alta impedancia, por lo que no afectaría nada. Pero con ese cable ahí estoy viendo la saturación de 6V (medida con un multímetro, el Arduino solo mide a 5V), pero si lo desconecto todo funciona. ¿Es este algún tipo de oscilación que involucra al Arduino? ¿O el Arduino está drenando el voltaje?

¡NOTA! La causa raíz de este problema resultó ser diferente. Había conectado un cable de medición desde la salida del amplificador operacional a la entrada analógica de Arduinos. Mi pensamiento era que era de alta impedancia y, por lo tanto, no afectaría el resultado. Había notado que las mediciones alcanzaban un máximo después de 5 V, pero pensé que eso se debía simplemente a que no podía reportar más del valor 1023 y que en realidad no afectaría el comportamiento del circuito. Esta suposición estaba equivocada; debido a un diodo de protección en las entradas de Arduino, el voltaje adicional se drenó (el LM358P tiene un voltaje de cortocircuito de 40-50 mA) provocando la caída en el voltaje medido (incluso con un multímetro) en la salida del amplificador operacional. Pero el verdadero culpable fue el diodo de protección del Arduino. Quitar este cable de medición resolvió el problema.

Comportamiento extraño. ¿Quizás tienes un óxido de puerta dañado en tu FET?
Ok, pero ¿eso podría causar tal problema? Debido a que parece que es la salida del amplificador operacional la que se satura y se satura a un nivel por debajo de donde el MOSFET estaría completamente encendido, entonces, desde esta perspectiva, ¿está bien que el MOSFET no conduzca más de lo que hace?
Un óxido de puerta dañado puede hacer que la puerta tenga una impedancia baja, posiblemente tomando más corriente de la que puede conducir el amplificador operacional. (Tal vez 20 mA más o menos). Entonces, el amplificador podría estar tratando de encender el FET con más fuerza, pero no puede debido a la puerta dañada. ESD puede causar ese tipo de daño en la puerta. Si desconecta la puerta del amplificador, ¿el amplificador se balancea hacia el riel?
Hola Juan, buen punto. Intenté eliminar la conexión a la puerta, pero el voltaje directamente del opamp es el mismo (es decir, todavía está saturado en el nivel que mencioné). Pero gracias por la sugerencia.
Vuelva a verificar todos los voltajes en el amplificador operacional y reemplace si no cumple con las especificaciones.
también agregue una tapa de desacoplamiento a través de los rieles cerca de IC
es el rango analógico >5V. No. ¡Por lo tanto, está sobrecargando un diodo de protección ESD interno de 5 mA a Vcc más caída de diodo!
Sí, he quitado los cables de la salida del amplificador operacional. Inicialmente, fue principalmente relevante para mi depuración ver que el amplificador operacional estaba controlando el MOSFET según lo previsto. Pero por encima de 6V causó más daño que bien :/
Debe publicar lo que descubrió como respuesta, no editarlo en su pregunta.

Respuestas (3)

Primero imaginé que su problema era que el amplificador operacional estaba oscilando y le sugerí que intentara algo como esto (gracias a Spehro también):

esquemático

simular este circuito : esquema creado con CircuitLab

Según una discusión adicional, donde agregó que estaba suministrando la salida del opamp a un pin de entrada MCU en su Arduino, también está claro que incluso si tuviera (o hubiera tenido) un problema de oscilación (y lo haría, estoy bastante seguro) es más probable ahora que su límite medido de alrededor 6 V se debió a un diodo de protección muy cargado en el pin de entrada analógica de su MCU. Las limitaciones del diodo de protección para cualquier MCU dado generalmente se pueden encontrar en la sección "Calificaciones máximas absolutas" de la hoja de datos, donde esa sección incluirá una línea descrita como algo similar a: "corriente de diodo en cualquier terminal de dispositivo". Por lo general, el valor indicado allí será alrededor 2 metro A o menos.

Si debe medir el voltaje de salida del amplificador operacional, deberá considerar una disposición de circuito diferente para acondicionar la salida del amplificador operacional (sin alterar su comportamiento de control MOSFET) y hacer que sea adecuado para la entrada al pin de entrada analógica de Arduino.

@Morty: he construido varios de estos y siempre he necesitado una compensación como la que jonk recomienda para estabilizarlo. Puede evaluar la estabilidad relativa quitando su tapa de suavizado PWM y alimentando una onda cuadrada relativamente lenta (tal vez 1kHz) mientras observa el voltaje en R yo o a d con un alcance. Más zumbido (o oscilación absoluta) en el paso significa menos estable. Si tiene flexibilidad en la elección de MOSFET, el IRFZ24N tiene una capacitancia de puerta mucho más baja (370pF), desafortunadamente más alta R D S o norte (70 mΩ frente a 17 mΩ), pero cuanto mayor sea R yo o a d tiene limitará la capacidad actual antes de eso.
Es probable que todavía oscile, debido a C3. Bórralo y deberías estar bien.
Buen punto. No debí haberlo agregado.
Hola Jonk, gracias por la sugerencia. Pero vea mi comentario de actualización sobre la entrada de Arduino también, gracias :) Creo que ese es el culpable (pero tal vez también juegue con su teoría).
@Morty: ¡Oh, CRIPOS! Sí. ¡Hay un diodo de protección en esa entrada!
OK, ¿ese diodo de protección funciona de tal manera que "come" lo que está más allá de 6V? Por cierto, ¿esto normalmente dañaría el Arduino? Parece estar funcionando bien. Tengo chips de repuesto pero, por supuesto, preferiría no reemplazarlos innecesariamente.
@Morty: Sí. Es casi seguro que también excedió la corriente máxima en el diodo de protección. Espero que sin excesivo daño.
@Morty: Casi todas las entradas del microcontrolador tendrán diodos de protección para ambos rieles, Vcc y tierra. El pin se mantiene dentro de una caída de diodo de cada riel y siempre debe estar entre esos voltajes.
Está bien, pero estaba midiendo el voltaje (con un multímetro) en el pin de salida LM358P. ¿Cómo puede el diodo de protección en el Arduino bajar ese pin?
@Morty: ¿Sabes cómo funcionan los diodos? Supongo que podría modificar mi publicación y agregar algunos detalles. Pero la idea básica es que si el amplificador operacional intenta elevarse por encima del riel de +5 V de su Arduino, entonces el diodo de protección comenzará a estar polarizado hacia adelante. En el momento en que llega a aproximadamente 5,7 V, ese diodo está conduciendo bastantes miliamperios de corriente (creo que normalmente nunca debería exceder los 2 mA). A medida que se mueve ligeramente por encima de 5,7 V, esa corriente aumenta RÁPIDAMENTE. No puedo imaginar que supere mucho los 6V. ¡Eso sería 1V a través de ese pobre diodo!
jonk, podría ser que sea el amplificador operacional el que limite la salida y evitó un desastre total. Según la hoja de datos ti.com/lit/ds/symlink/lm358.pdf , la corriente de cortocircuito es de 40-50 mA (segunda última fila en la página 5).
¿Supongo que el diodo de protección simplemente lleva la corriente a tierra (y lejos del IC)? En ese caso, ¿quizás se pueda sobrevivir a 40-50 mA?
@Morty: Claro, eso puede haberte salvado. Pero realmente, creo que si observa la hoja de datos de MCU para Arduino, encontrará una buena especificación allí debajo de Calificaciones máximas absolutas (o algo parecido) donde dice algo más como "corriente de diodo en cualquier terminal de dispositivo" y dice "2mA".
He marcado la tuya como la respuesta correcta dado que fuiste (hasta donde pude ver) primero en señalar el diodo de protección como el culpable. Pero tal vez podrías actualizar la respuesta. Actualizaré la pregunta.
@Morty: Hay dos diodos. Uno al riel +5V. Uno a tierra. En este caso, el del carril de +5V es el que te está atrapando.

Creo que su circuito se ha vuelto inestable y está oscilando. Tiene una resistencia de 1,5 kohm que alimenta la puerta y la capacitancia de la puerta se verá "fraccionalmente" en relación con la tierra en este punto y esto agregará una buena cantidad de cambio de fase. Cierras el bucle y obtienes un oscilador.

Normalmente, puede confiar en que el FET actúa como un convertidor de voltaje 1: 1 de la puerta a la fuente pero, con una resistencia de valor tan bajo en la fuente, esto podría degradarse a más como 1: 0.7 y esto significará 0.3 X capacitancia puerta-fuente se ve a tierra en la puerta. Si fuera un convertidor de voltaje de fuente de puerta 1: 1 perfecto, teóricamente no se vería capacitancia en la puerta.

La capacitancia de puerta especificada es de 1,9 nF para el IRFZ44, por lo que la resistencia de 1,5 kohm verá aproximadamente el 30 % de esto, es decir, ~600 pF. Esto forma un filtro de paso bajo de 3dB a aproximadamente 178 kHz; a esta frecuencia, la señal se desplaza 45 grados y, por lo tanto, reduce el margen de fase del LM358, lo que hace que cante con todo su corazón. Probablemente esté oscilando entre 200 kHz y 1 MHz. Un amplificador operacional más moderno tendría un gráfico de su respuesta de fase de bucle abierto y esta frecuencia sería más fácil de predecir.

Intente reducir el 1k5 a unos 100 ohmios o menos y vea si la situación mejora. De hecho, simplemente cortocircuitaría el 1k5 por completo. Podría agregar un capacitor integrador y una resistencia de entrada como se indica en otra respuesta, pero esto reducirá significativamente la capacidad dinámica del circuito para mantener una corriente constante. Es mucho más fácil dejar caer el valor de 1k5.

Buen análisis, no pensé en eso ya que supuse que el OP estaba mirando la salida del amplificador con un alcance, ¡pero tal vez no!
Hola, gracias por la sugerencia: eliminé el 1k5 y lo reemplacé con un cable. El punto de saturación aumentó un poco (5-10%) pero el voltaje que veo en la puerta es exactamente el mismo que antes (casi exactamente 6V). :/
¡Actualizar! Estoy un poco más cerca de resolver el misterio. Tenía un cable (no en el dibujo) que iba desde la salida del amplificador operacional hasta una entrada analógica en el Arduino. Pensé que las entradas analógicas eran de alta impedancia, por lo que no afectaría nada. Pero con ese cable veo la saturación de 6 V (medida por un multímetro, el Arduino solo mide 5 V), pero si conecto la salida del amplificador operacional a la entrada analógica de Arduino, veo inmediatamente la caída. ¿Es este algún tipo de oscilación que involucra al Arduino? ¿O el Arduino está drenando el voltaje?
Consulte la hoja de datos de ATmega328 Calificaciones máximas absolutas: lo más probable es que las entradas AIN no puedan exceder VCC. Hay uniones PN internas dentro del Atmega328 que están siendo polarizadas hacia adelante por AIN que excede el suministro de 5V.
Sí, parece ser lo que sucedió, y el LM358P tiene una salida de cortocircuito de alrededor de 40-50 mA. Entonces, tal vez esto evitó el daño y dio la impresión de que las cosas estaban funcionando siempre que el amplificador operacional no intentara generar un voltaje demasiado alto.
@Morty, sin embargo, su circuito aún se volvería inestable como se muestra.

Este es un ejemplo de sobrecarga de su entrada analógica Arduino. En primer lugar, se debería haber proporcionado un divisor de voltaje (y se mostró la conexión real a Arduino para permitir una discusión significativa