Comportamiento de DAC al restablecer / iniciar LPC1768

3

Estoy programando un mbed LPC1768 para un descargador de corriente constante. Planeo usar la salida DAC en el LPC1768 para configurar la corriente en mi circuito de descarga.

editar: El problema que tengo está relacionado con el voltaje del DAC durante el inicio y el restablecimiento. Ya hice y probé el circuito de descarga y NO está conectado en este momento. Por el momento solo tengo Rpulldown conectado en el DAC y estoy viendo la salida del DAC en mi alcance.

simular este circuito : esquema creado usando CircuitLab

Me di cuenta de que, al iniciar y reiniciar, el DAC de uC llega a aproximadamente 2 V durante un tiempo muy corto. Supongo que va a algún estado hasta que defino la salida en mi código, pero no estoy seguro de ello. Edición: ¿cómo las personas suelen lidiar con este tipo de problema?

En mi circuito, estos 2V son iguales a 20A de corriente de descarga. ¡No quiero que esto suceda!

Intenté bajar el DAC con una resistencia de 1K y seguro que sujeta el DAC en el inicio (llega a alrededor de 50 mV en el reinicio), pero también baja el voltaje analógico de lo que está establecido en mi código. También probé 12K, pero eso no fue suficiente para sujetar el DAC.

Tengo algunas soluciones diferentes para este problema, pero todas involucran transistores o relés. Estaba pensando que debe haber una manera más elegante de lidiar con un problema como este y no puedo ser el primero en tener tal problema.

¿Pueden por favor darme algunos consejos sobre cómo resolver este problema? ¿Debería el DAC comportarse así o estoy haciendo algo mal?

¡Muchas gracias de antemano!

Editar: se agregó un esquema, se borró un texto confuso.

Editar: Así es como estoy lidiando con este problema. ¿Algún problema al hacerlo así o es aceptable? Funciona pero a mi me parece un poco como una solución de vaquero :)

La base se mantiene alta mediante una resistencia pullup y esto cierra el relé que carga la salida DAC con 1K y lo tira hacia gnd. Cuando se activa el código en mi código, el relé se abre y las funciones DAC se suponen.

editar:códigoqueintentéejecutar.soloalternaelDACentre0y3.3V.Cuandopresiono/mantengoelbotóndereinicio,elDACmuestraelcomportamientodelqueestoyhablando.

#include"mbed.h"

AnalogOut out(p18);


int main()
{
    out = 0;
    while(1) 
    {
    out = 1;
    wait(1);
    out=0;
    wait(1);
    }
}

editar: se agregó la captura de alcance de la falla.

Solo salida DAC al inicio, sin carga adjunta:

Con10KenDAC:

Con1KenDAC:

1KenDAC,ejecutandounprogramaquedebealternarDACentre0-3.3V.Vaa3.3sincarga/másligero:

    
pregunta Swagministeren

3 respuestas

3

Durante un reinicio, como en el encendido, sus puertos de E / S LPC1768 se configurarán como GPIO en el modo de entrada. Un pin de E / S LPC1768 puede generar hasta 3 uA de corriente de fuga en este modo. Cuando se configura como un DAC, el mismo pin se especifica como capaz de impulsar una resistencia de carga de 1 K o más.

No especifica su amplificador operacional, por lo que supongamos que tiene una corriente de fuga de entrada de 2 uA. (Puede encontrar fácilmente amplificadores operacionales alternativos con mucho menos fuga de entrada que esto si el suyo es más alto).

Esta corriente de fuga será conducida a 0 V por su resistencia desplegable y producirá una caída de voltaje a través de ella, siguiendo a V = IR. Este voltaje impulsará la entrada de su amplificador operacional durante el restablecimiento, hasta que su software haya configurado su E / S para el funcionamiento del DAC, por lo que la caída de voltaje de la resistencia debe ser aceptablemente baja. Sin embargo, lo ideal es que el valor de la resistencia esté muy por encima de 1 K.

Como ejemplo, consideremos un voltaje de resistencia de 20 mV. Esto corresponde a su amplificador operacional que maneja 2 mA a través de su regulador actual, asumiendo una precisión perfecta allí.

Entonces R = V / I = .02 / 0.000005 = 4000 ohms (una resistencia de 3K9).

Después de restablecer, su software debe configurar el DAC mientras deja el pin de E / S en su estado inicial, como una entrada GPIO. Una vez que el DAC está en el modo correcto y configurado en cero, el GPIO se puede configurar como una salida DAC. No se debe utilizar la resistencia de pull-up opcional del pin de E / S.

OTROS RESULTADOS ...

En el manual de usuario de LPC1768 (UM10360), no pensé que los pin-ups de E / S estén habilitados después del reinicio. Sin embargo, @Dorian ha encontrado información en la errata que indica que lo son.

Por lo tanto, en lugar de lo anterior, puede utilizar un circuito de desactivación externo para fijar la entrada del amplificador operacional a 0 V hasta que el LPC1768 esté estable y listo para controlar su salida ADC.

Elija un FET de nivel lógico adecuado para Q1 que esté ENCENDIDO con una Vgs de 3 V o, idealmente, hasta Vgs de 2.7 V.

simular este circuito : esquema creado usando CircuitLab

En el encendido, GPIO se elevará internamente pero también se colocará alto en R2, lo que se agrega con certeza después del asunto de errata. Q2 conducirá y cortará el R1 a la plataforma, asegurándose de que la entrada del amplificador operacional sea cero. Una vez que su software está en funcionamiento, primero configura GPIO / DAC para que sea un DAC que conduce a 0 V. Luego puede configurar GPIO para que tenga una salida con un nivel bajo, apagando Q2 y permitiendo que el circuito del amplificador operacional funcione normalmente.

    
respondido por el TonyM
1

El siguiente esquema toma ventaja del hecho de que un JFET con compuerta atada a la fuente es una impedancia baja. Si se asegura de que la HABILITACIÓN no se tome en alto hasta que su salida DAC esté estable, entonces el MOSFET se mantendrá apagado porque la entrada al amplificador se mantendrá cerca de 0V.

Actualizar a comentario de dirección: Un JFET con compuerta atada a la fuente (incluso a través de una resistencia) es una impedancia baja cuando no está alimentada (efectivamente), por lo que el circuito se inicia con una impedancia baja en la entrada del amplificador.

Cuando tomas ENABLE high, el JFET se convierte en una alta impedancia y está fuera de circuito.

simular este circuito : esquema creado usando CircuitLab

    
respondido por el Peter Smith
0

"Si todo lo demás falla, entonces lea la hoja de datos" y la errata que podría agregar. Consulte la hoja de errata para LPC1768 página 19: "I / O de propósito general ( Los pines GPIO) tienen resistencias configurables de pull-up / pull-down donde los pines se elevan al nivel de VDD de manera predeterminada. Durante el encendido, puede ocurrir una falla inesperada (pulso bajo) en los pines del puerto a medida que aumenta la alimentación del VDD. . "

Se refieren a las resistencias de pull-up internas de ~ 100k que son consistentes con sus observaciones: 50 mV para la resistencia de pull down de 1K y solo puedo adivinar un ~ 500 mV para la resistencia de 10K.

Mal diseño de chips, podría decir.

¿Qué hacer?

  1. Una opción se basa en la suposición de que todas las E / S se están comportando en De la misma manera y utilizar un transistor como en la solución de Peter Smith. Sin embargo, esto está sujeto a peligro. Si entiendo bien el significado de "podría ocurrir". Problemas más cortos aún "podrían ocurrir"
  2. Una segunda opción si no necesita variaciones rápidas en Iout es coloque un filtro RC para suavizar la falla como esta:

simular este circuito : esquema creado usando CircuitLab

With these values, 10 ms startup time, the glitch will be less than
50mV. R1 is there just as protection for an accidental digital
output setting for the pin.

3. Una tercera opción relacionada con la solución de Peter Smith es usar un OA con     entrada de cierre como OPA211

En cualquier solución que elija, es una buena práctica limitar por hardware los daños que pueden producirse por errores de software y aquí puedo sugerir dos opciones:

  1. Coloque una resistencia de potencia en el drenaje Mosfet. Digamos que el voltaje más bajo de la batería es 5V máximo 10V y la corriente máxima es 4A, luego coloque una resistencia de 1 ohmio, la corriente irá por encima de 10A, sin importar lo que haga con la salida DAC o la salida habilitada. Te recomiendo que uses eso para la etapa de desarrollo.
  2. Establezca la referencia de DAC lo más alta posible y use el rango máximo disponible para que la salida máxima de DAC esté lo más cerca posible del voltaje que puede aplicarse accidentalmente, luego use un divisor resistivo para llevar el voltaje en el rango que usted necesitar.

Digamos que la salida máxima de DAC ahora es de 0.5 V para una salida máxima de 5A. Si, por error, la salida del DAC llega a 5V, tendrá 50A, por lo menos R1 se quemará en llamas.

Si la salida máxima de DAC sería 3V, dividida con un divisor de resistencia de 6: 1 a 0.5V, entonces una 5V accidental aplicada en la salida de DAC generará solo 5 * 5/3 ~ 8A, no un desastre, tiene tiempo para Actúa antes de que algo se queme. Además el fallo de inicio también se divide seis veces.

simular este circuito

Los valores de resistencia no son críticos, puede hacer algunos ajustes en el software

Bonus: cómo hacer que un defecto de diseño del microcontrolador sea aún peor de lo que es.

¡Podrías pensar que enciendes la placa, cambias el pin a DAC y listo! ¿Cuánto tiempo puede tomar esto en un procesador que puede funcionar a 100MHZ? Microsegundos? Respuesta incorrecta. No tuve tiempo de leer toda la documentación de LPC1768, pero aquí está la peor pesadilla que me sucedió:

  • Encienda, su salida DAC ya es alta, espere a que se reinicie la versión algunos ms.
  • El microcontrolador comienza con el reloj de baja potencia de 32 khz
  • Ejecuta el código generado por el compilador para inicializar las variables y las matrices si no le dijiste específicamente que no lo hiciera. A 32 kHz el reloj puede tardar mucho tiempo.
  • Finalmente, obtienes el control, cambias el reloj del sistema a alta velocidad, esperas el cambio. Puede tomar algunos ms para.
  • Ahora cambia la salida DAC. Han pasado cientos de milisegundos con decenas de amperios corriendo a través de la batería.

DESPUÉS DE LA EDICIÓN, después de simular las soluciones de Tony y Peter, ambas comparten el mismo defecto, el interruptor de encendido / apagado del transistor está por encima de 4 V muestra las simulaciones. En un 3.3V, la solución de Tony no corta el pico en absoluto y la solución de Peter sigue tirando de la salida DAC. Lo que hace que la solución Swagministeren mejorada sea la mejor que corta la salida DAC a algunos mV al encenderse y apagarse por completo después de poner la habilitación en cero.

simular este circuito

El barrido de CC de simulación muestra márgenes grandes para la liberación y el corte para HABILITAR a más de 2 V, el pico es inferior a 10 mV, para HABILITAR a menos de 500 mV, la salida DAC se libera completamente.

    
respondido por el Dorian

Lea otras preguntas en las etiquetas