Control digital de calibres electromecánicos

Tengo exactamente el mismo escenario que una pregunta anterior, Control digital de indicador analógico , pero todavía tengo problemas para resolverlo.

Tengo dos medidores analógicos electromecánicos antiguos (de combustible y temperatura) (alrededor de 1973) fabricados por VDO que me gustaría controlar digitalmente. Son medidores de 3 hilos (12v, tierra y señal) donde la señal se conectó originalmente a una unidad emisora ​​(flotador de combustible o emisor de temperatura).

Creé una serie de circuitos y tuve cierto éxito con el que se muestra a continuación (usando un filtro de paso bajo, un amplificador operacional y un MOSFET), pero aún no lo he hecho funcionar bien.

Circuito de calibre digital a analógicoingrese la descripción de la imagen aquí

Debido a que los indicadores originales usan una escala logarítmica de algún tipo, he medido y creado un mapa en código que varía la salida PWM según el porcentaje de lleno (o caliente) que deseo. El rango del pwm utilizado es estrecho, pero funciona bien con un solo indicador y un voltaje constante de la fuente de alimentación de 12v. Sin embargo, cualquier ligero cambio en el voltaje o la resistencia en el sistema, como variar el voltaje de entrada de la fuente de alimentación de 12v, encender las luces del instrumento o agregar el segundo indicador, cambia la calibración y hace que la aguja se mueva más o menos de lo normal. previamente. Estoy usando una sola fuente de alimentación de 12v para la prueba. Tengo un convertidor reductor de 12v a micro USB conectado para alimentar el Arduino. Comparto el suelo desde la fuente de alimentación hasta el pin de tierra del Arduino.

Videos de ejemplo que se mueven a través de 5 o 6 pasos distintos (frío, normal, medio, 3/4, caliente o vacío, reserva 1/4, medio, 3/4, lleno): https://youtu.be/VGjDCAPXvEQ https : / /youtu.be/2KRYqxt8-eU

¿Alguna sugerencia sobre cómo hacer que esto sea confiable?

Componentes utilizados: Arduino MKR Zero con DAC de 12 bits, amplificador operacional LM358, MOSFET 2N7000

No creo que el código de Arduino sea particularmente relevante, pero lo incluiré aquí para completarlo. Obviamente, esto eventualmente usará información de combustible y temperatura de mi CANbus para escribir la salida PWM apropiada, pero por ahora solo estoy tratando de calibrar la salida con pasos fijos.

int tempStep = 0;
int fuelStep = 0;
int tempIncrement = 1;
int fuelIncrement = 1;

int tempGaugeMap[] = {
  2500, // bottom of cold
  2560, // top of cold
  2600, // quarter
  2635, // half
  2655, // three quarters
  2680, // bottom of hot
  2695 // top of hot
};
unsigned int tempSteps = 6;

int fuelGaugeMap[] = {
  2710, // reserve
  2730, // empty
  2760, // 1/4
  2820, // half
  2900, // 3/4
  3500, //full
};
unsigned int fuelSteps = 5;

void setup() {
  // open a serial connection
  Serial.begin(9600);
  // make our DAC pin an output
  pinMode(0, OUTPUT);
  pinMode(1, OUTPUT);
  // 12-bit DAC resolution
  analogWriteResolution(12);
}

void loop() {
  int tempVal = tempGaugeMap[tempStep];
  int fuelVal = fuelGaugeMap[fuelStep];
  
  analogWrite(0, tempVal);
  analogWrite(1, fuelVal);
  
  if(tempStep >= tempSteps) { tempIncrement = -1; }
  if(tempStep == 0) { tempIncrement = 1; }
  tempStep = tempStep + tempIncrement;
 
  if(fuelStep >= fuelSteps) { fuelIncrement = -1; }
  if(fuelStep == 0) { fuelIncrement = 1; }
  fuelStep = fuelStep + fuelIncrement;
 
  delay(1000);
}

He hecho algunas medidas de los propios indicadores de la siguiente manera:

Mediciones del indicador de temperatura

Mediciones del indicador de combustible

Esos "pequeños cambios" me parecen "grandes cambios".

Respuestas (1)

Su enfoque es ultrasensible porque está conduciendo el manómetro en bucle abierto. El circuito opamp tiene una ganancia fija, pero está impulsando un FET que se abre completamente. Su transconductancia cambia con la temperatura, el voltaje del drenaje a la fuente, la fase de la luna, etc., todo sumando una estabilidad real.

Hay varias formas de mejorar las cosas. Una es llevar el FET dentro del bucle de control opamp. Puede hacerlo desconectando el lado derecho de R2 de la salida U1 y conectándolo al drenaje Q1. <> Q1 es un inversor, por lo que debe intercambiar las dos entradas opamp para compensar la inversión de señal adicional. Además, necesitamos saber el número de pieza del amplificador operacional porque no todos los dispositivos tienen el rango de voltaje de salida para hacer lo que desea.

Aparte de eso, los valores de R2 y R3 se pueden aumentar 10x o incluso 100x para reducir la corriente de la etapa de salida.

Otro enfoque es accionar el medidor con una fuente de corriente en lugar de una fuente de voltaje. Con la fuente de 12 V y una resistencia, determine la corriente a través del manómetro en las indicaciones mínima y máxima. Estos se pueden usar para reconfigurar U1 como una fuente de corriente controlada por voltaje (en realidad, sumidero de corriente).

Actualización 1:

Otro enfoque es dejar las entradas opamp solas, cambiar Q1 a un transistor bipolar como un seguidor de emisor, conectar el colector a +12, conectar R2 al emisor y mover el indicador entre el emisor y GND. El voltaje a través del indicador será el voltaje en C1 multiplicado por la ganancia del circuito opamp. El transistor es solo un amplificador de corriente y no agrega ganancia de voltaje al bucle. Si conoce los valores de resistencia mínimo y máximo del remitente, la ganancia del opamp debería ser fácil de calcular. Nota: es posible que deba agregar una compensación de CC, según el indicador.

Actualización 2:

Cuanto más pienso en esto, más prefiero la idea de la Actualización 1. Elimina cualquier sensibilidad al valor absoluto de la fuente de 12 V. Tanto la señal PWM filtrada como la señal al medidor se refieren a GND únicamente. Supongo que tanto la ganancia del circuito opamp como las tablas de búsqueda tendrán que ajustarse, pero probablemente esta sea la segunda mejor manera de hacerlo. Lo mejor sería el mismo circuito modificado para ser una fuente de corriente, pero es posible que no necesite ese nivel de complejidad.

Ver la actualización...
Realmente aprecio tu respuesta. Necesito aclarar un par de cosas que creo que influyen en su respuesta. Primero, estoy usando amplificadores operacionales LM258. Más importante aún, el indicador tiene voltaje interno y resistencia que aparece en el cable de señal. Eso es lo que representan R4 y V3. Probé el enfoque de la Actualización 1, pero el problema era que no se puede tener una resistencia en el lado del colector o del emisor del transistor porque el cable de señal debe estar completamente en cortocircuito para obtener el rango completo (totalmente caliente) de la aguja. Con esa configuración, solo pude obtener el indicador a 3/4 más o menos.
No puedo conectar el colector a 12v porque los 5,74 voltios (v3) es el voltaje interno en el cable de señal. No hay forma de que pueda agregar una fuente de voltaje externa porque ese cable se conecta al colector.
Realmente no entiendo su comentario original sobre cómo traer el FET dentro del ciclo de control opamp. Intenté simular lo que creo que quisiste decir, pero no hace nada. La idea que estaba intentando con la segunda etapa en mi circuito es solo un amplificador de voltaje. ¿Podría dibujar un circuito o explicar más lo que quiere decir? Además, no entiendo la idea de usar una fuente de corriente frente a una fuente de voltaje.