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ógico
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:
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.
scott seidman