Solucionado FZ0430 lecturas incorrectas en 2 de 4

Hola foro en español, mi código solo lee de forma correcta, los pines A5 A3, los pines A4 A2 dan datos incorrectos y no doy donde esta el problema.


const int sensor0 = A5;
const int sensor1 = A4;
const int sensor2 = A3;
const int sensor3 = A2;

const unsigned long TIEMPO_LECTURAS = 3000UL;

float adc_voltage0 = 0.0;
float in_voltage0 = 0.0;

float adc_voltage1 = 0.0;
float in_voltage1 = 0.0;

float adc_voltage2 = 0.0;
float in_voltage2 = 0.0;

float adc_voltage3 = 0.0;
float in_voltage3 = 0.0;


float R1 = 30000.0;
float R2 = 7500.0;

float R3 = 30000.0;
float R4 = 7500.0;

float R5 = 30000.0;
float R6 = 7500.0;

float R7 = 30000.0;
float R8 = 7500.0;


float ref_voltage0 = 5.0;
float ref_voltage1 = 5.0;
float ref_voltage2 = 5.0;
float ref_voltage3 = 5.0;


int adc_value0 = 0;
int adc_value1 = 0;
int adc_value2 = 0;
int adc_value3 = 0;

unsigned long tiempolecturas;

void setup() {

  Serial.begin(9600);

}

void loop() {

  if (millis() - tiempolecturas > 3000UL) {

    adc_value0 = analogRead(sensor0);
    adc_voltage0  = (adc_value0 * ref_voltage0) / 1024.0;
    in_voltage0 = adc_voltage0 / (R2 / (R1 + R2));

    adc_value1 = analogRead(sensor1);
    adc_voltage1  = (adc_value1 * ref_voltage1) / 1024.0;
    in_voltage1 = adc_voltage1 / (R3 / (R3 + R4));

    adc_value2 = analogRead(sensor2);
    adc_voltage2  = (adc_value2 * ref_voltage2) / 1024.0;
    in_voltage2 = adc_voltage2 / (R6 / (R6 + R7));

    adc_value3 = analogRead(sensor3);
    adc_voltage3  = (adc_value3 * ref_voltage3) / 1024.0;
    in_voltage3 = adc_voltage3 / (R7 / (R7 + R8));

    Serial.println("    VOLTAJE VCC   ");

    Serial.println("sensor 0 ");
    Serial.print(in_voltage0, 2);
    Serial.println("V");

    Serial.println("sensor 1 ");
    Serial.print(in_voltage1, 2);
    Serial.println("V");

    Serial.println("sensor 2 ");
    Serial.print(in_voltage2, 2);
    Serial.println("V");

    Serial.println("sensor 3 ");
    Serial.print(in_voltage3, 2);
    Serial.println("V");

    tiempolecturas = millis();

  }
}
float in_voltage(float x, float in_min, float in_max, float out_min, float out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

Este otro código es el que use como base, para construir el anterior, que me gusta porque es posible ajustar los ohmios, de las resistencias de cada sensor y hacer los ajustes en código y conseguir mas precisión y este otro no tiene esa posibilidad
Saludo.


const int sensor0 = A5;
const int sensor1 = A4;
const int sensor2 = A3;
const int sensor3 = A2;

const unsigned long TIEMPO_LECTURAS = 2000UL;

int valorsensor0;
int valorsensor1;
int valorsensor2;
int valorsensor3;

float voltaje0;
float voltaje1;
float voltaje2;
float voltaje3;

unsigned long tiempolecturas;

void setup() {

  Serial.begin(9600);

}

void loop() {

  if (millis() - tiempolecturas > 2000UL) {

    valorsensor0 = analogRead(sensor0);
    voltaje0 = Convolt(valorsensor0, 0, 1023, 0.0, 25.0);

    valorsensor1 = analogRead(sensor1);
    voltaje1 = Convolt(valorsensor1, 0, 1023, 0.0, 25.0);

    valorsensor2 = analogRead(sensor2);
    voltaje2 = Convolt(valorsensor2, 0, 1023, 0.0, 25.0);

    valorsensor3 = analogRead(sensor3);
    voltaje3 = Convolt(valorsensor3, 0, 1023, 0.0, 25.0);

    Serial.println("sensor 0 ");
    Serial.print(voltaje0);
    Serial.println("V");

    Serial.println("sensor 1 ");
    Serial.print(voltaje1);
    Serial.println("V");

    Serial.println("sensor 2 ");
    Serial.print(voltaje2);
    Serial.println("V");

    Serial.println("sensor 3 ");
    Serial.print(voltaje3);
    Serial.println("V");

    tiempolecturas = millis();
  }
}
float Convolt(float x, float in_min, float in_max, float out_min, float out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
in_voltage2 = adc_voltage2 / (R6 / (R6 + R7)); 

no debería ser

in_voltage2 = adc_voltage2 / (R5 / (R5 + R6)); 

?

Saludos

Hola @anon90500195, si hay esta el error, admiro tu capacidad de observación, yo pase como 3 horas buscando, el error que yo misma escribí, que bien que ya se soluciono. Ahora puedo seguir con el ASC712 que toda vía no consigo un código que tenga la precisión que requiero, para usar lo con Arduino uno, o tendré que usar un uno con mayor resolución, que 0- 1024, lo subo ya solucionado.

//https://forum.arduino.cc/t/fz0430-lecturas-incorrectas-en-2-de-4/998825

const int sensor0 = A5;
const int sensor1 = A4;
const int sensor2 = A3;
const int sensor3 = A2;

const unsigned long TIEMPO_LECTURAS = 3000UL;

float adc_voltage0 = 0.0;
float in_voltage0 = 0.0;

float adc_voltage1 = 0.0;
float in_voltage1 = 0.0;

float adc_voltage2 = 0.0;
float in_voltage2 = 0.0;

float adc_voltage3 = 0.0;
float in_voltage3 = 0.0;


float R1 = 30000.0;
float R2 = 7500.0;

float R3 = 30000.0;
float R4 = 7500.0;

float R5 = 30000.0;
float R6 = 7500.0;

float R7 = 30000.0;
float R8 = 7500.0;


float ref_voltage0 = 5.0;
float ref_voltage1 = 5.0;
float ref_voltage2 = 5.0;
float ref_voltage3 = 5.0;


int adc_value0 = 0;
int adc_value1 = 0;
int adc_value2 = 0;
int adc_value3 = 0;

unsigned long tiempolecturas;

void setup() {

  Serial.begin(9600);

}

void loop() {

  if (millis() - tiempolecturas > 3000UL) {

    adc_value0 = analogRead(sensor0);
    adc_voltage0  = (adc_value0 * ref_voltage0) / 1024.0;
    in_voltage0 = adc_voltage0 / (R2 / (R1 + R2));

    adc_value1 = analogRead(sensor1);
    adc_voltage1  = (adc_value1 * ref_voltage1) / 1024.0;
    in_voltage1 = adc_voltage1 / (R4 / (R3 + R4));

    adc_value2 = analogRead(sensor2);
    adc_voltage2  = (adc_value2 * ref_voltage2) / 1024.0;
    in_voltage2 = adc_voltage2 / (R6 / (R5 + R6));

    adc_value3 = analogRead(sensor3);
    adc_voltage3  = (adc_value3 * ref_voltage3) / 1024.0;
    in_voltage3 = adc_voltage3 / (R8 / (R7 + R8));

    Serial.println("    VOLTAJE VCC   ");

    Serial.println("sensor 0 ");
    Serial.print(in_voltage0, 2);
    Serial.println("V");

    Serial.println("sensor 1 ");
    Serial.print(in_voltage1, 2);
    Serial.println("V");

    Serial.println("sensor 2 ");
    Serial.print(in_voltage2, 2);
    Serial.println("V");

    Serial.println("sensor 3 ");
    Serial.print(in_voltage3, 2);
    Serial.println("V");

    tiempolecturas = millis();

  }
}
float in_voltage(float x, float in_min, float in_max, float out_min, float out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

Saludos.

Hola @anon90500195, esto es mas o menos lo que quería, le falta el PWM, mas precisión al ACS712 ahora fluctúa casi 150ma, pero el modelo es 20 Amp así que no puedo pedir mas exactitud, y los cables dupont cada día los hacen de menor calidad, ya funciona pero debe tener mas de un error de sintaxis, los FZ0430 funcionan bastante bien, lo que se ve en monitor Serial, esta muy desordenado, ya irán saliendo las fallas.

//https://dronebotworkshop.com/dc-volt-current/ base de construcción 
//https://forum.arduino.cc/t/fz0430-lecturas-incorrectas-en-2-de-4/998825/3 


int rele8 = 8;
int rele9 = 9;
int rele10 = 10;
int rele11 = 11;


double Vout = 0;
double Current = 0;
const double scale_factor = 0.100; // 20A factor para este modelo

const double vRef = 5.000;
const double resConvert = 1024;
double resADC = vRef / resConvert;
double zeroPoint = vRef / 1.9906;


const int sensor0 = A5;
const int sensor1 = A4;
const int sensor2 = A3;
const int sensor3 = A2;

const unsigned long TIEMPO_LECTURAS = 3000UL; // ya empiezo a entender los millis 

float adc_voltage0 = 0.0;
float in_voltage0 = 0.0;

float adc_voltage1 = 0.0;
float in_voltage1 = 0.0;

float adc_voltage2 = 0.0;
float in_voltage2 = 0.0;

float adc_voltage3 = 0.0;
float in_voltage3 = 0.0;


float R1 = 30000.0;
float R2 = 7500.0;

float R3 = 30000.0;
float R4 = 7500.0;

float R5 = 30000.0;
float R6 = 7500.0;

float R7 = 30000.0;
float R8 = 7500.0;

float ref_voltage0 = 5.0;
float ref_voltage1 = 5.0;
float ref_voltage2 = 5.0;
float ref_voltage3 = 5.0;

int adc_value0 = 0;
int adc_value1 = 0;
int adc_value2 = 0;
int adc_value3 = 0;

unsigned long tiempolecturas;

void setup() {

  Serial.begin(9600);
  pinMode(rele8, OUTPUT);
  pinMode(rele9, OUTPUT);
  pinMode(rele10, OUTPUT);
  pinMode(rele11, OUTPUT);
}

void loop() {

  if (millis() - tiempolecturas > 3000UL) {
    for (int i = 0; i < 1000; i++) {
      Vout = (Vout + (resADC * analogRead(A0)));
      delay(1);
    }
    Vout = Vout / 1000;
    Current = (Vout - zeroPoint) / scale_factor;
    Serial.println(" AMPERIOS");
    Serial.print(   Current, 1.9906);  // no es muy preciso fluctua 100 ma   
    Serial.println("");

     if (Current > 1.200) {
      digitalWrite(rele8, HIGH);
    }
    if (Current < 0.600) {
      digitalWrite(rele8, LOW);
    }

    adc_value0 = analogRead(sensor0);
    adc_voltage0  = (adc_value0 * ref_voltage0) / 1024.0;
    in_voltage0 = adc_voltage0 / (R2 / (R1 + R2)); // buena precisión con ajuste
    if (in_voltage0 > 16.10) {
      digitalWrite(rele9, HIGH);
    }
    if (in_voltage0 < 15.80) {
      digitalWrite(rele9, LOW);
    }
    adc_value1 = analogRead(sensor1);
    adc_voltage1  = (adc_value1 * ref_voltage1) / 1024.0;
    in_voltage1 = adc_voltage1 / (R3 / (R3 + R4));
     if (in_voltage1 > 12.70) {
      digitalWrite(rele10, HIGH);
    }
    if (in_voltage1 < 12.40) {
      digitalWrite(rele10, LOW);
    }

    adc_value2 = analogRead(sensor2);
    adc_voltage2  = (adc_value2 * ref_voltage2) / 1024.0;
    in_voltage2 = adc_voltage2 / (R6 / (R6 + R7));
 if (in_voltage1 > 8.90) {
      digitalWrite(rele11, HIGH);
    }
    if (in_voltage1 < 8.20) {
      digitalWrite(rele11, LOW);
    }
    

    adc_value3 = analogRead(sensor3);
    adc_voltage3  = (adc_value3 * ref_voltage3) / 1024.0;
    in_voltage3 = adc_voltage3 / (R7 / (R7 + R8));
/*
espacio para implementar un PWM para carga con mosfet 
(aun no se como hacer lo )
*/
    Serial.println("    VOLTAJE VCC   ");

    Serial.println("sensor 0 ");
    Serial.print(in_voltage0, 2);
    Serial.println("V");

    Serial.println("sensor 1 ");
    Serial.print(in_voltage1, 2);
    Serial.println("V");

    Serial.println("sensor 2 ");
    Serial.print(in_voltage2, 2);
    Serial.println("V");

    Serial.println("sensor 3 ");
    Serial.print(in_voltage3, 2);
    Serial.println("V");

    tiempolecturas = millis();
  }
}
float in_voltage(float x, float in_min, float in_max, float out_min, float out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

Saludos.

Fluctúa el sensor o hay ruido en la corriente que mide?
Lo has contrastado con un multimetro de calidad?
Podrias agregar algun filtro digital que mejore las lecturas.
Deberías evitar en cada loop de mostrar datos volver a calcular una y otra vez los divisores resistivos.
Algo como

#define R2div       R2 / (R1 + R2)  
// y luego solo usas
in_voltage0 = adc_voltage0 / R2div;

y lo mismo para las demas cuentas, demasiadas cuentas y reiteradas.

    adc_value0 = analogRead(sensor0);
    adc_voltage0  = (adc_value0 * ref_voltage0) / 1024.0;
    in_voltage0 = adc_voltage0 / (R2 / (R1 + R2));

Igualmente es una sutileza lo haces cada 3 seg.

Hola @Surbyte, si fluctúa, en un voltímetro (Agilent U1241B) regular, es muy estable la lectura, como carga uso un mini ventilador sin escobillas, de 12V, 0.350A, (según hoja de datos). Consume 94 ma el ventilador (según voltímetro) y puede fluctuar las lecturas en Arduino de 70ma a 120ma funcionando, pero cuando esta en cero pude fluctuar entre -0.0 y 200ma. Tenia por hay abandonado un max471, (nunca lo pude hacer funcionar) tengo entendido que es mas preciso, intentare usarlo para ver si mejora la calidad de la señal, el ASC712 es para 20 amp y eso le resta resolución a bajo consumo, por mi zona no hay proveedor que tenga el de 5 amp. Es complicado el filtro digital ? (ya busco), como evito los loop repetitivos.
Saludos

Primero analizar que tienes y cual es tu resolución con el ACS712-20

Tomado de la página de Luis Llamas

Max Intensidad Sensibilidad Tensión salida Resolucion
±5A 185 mV/A 1,575V a 3,425V 26mA
±20A 100 mV/A 0,5V a 4,5V 49mA
±30A 66 mV/A 0,52V a 4,48V 74mA

El siguiente código realiza la medición de la corriente mediante el ACS712. Para reducir el ruido
Un sensor de 20A tiene 49mA x paso del ADC
El ADC tiene una establidad de +- 2LSB o sea 2 x 49 ya son casi 100mA para uno y otro lado
Lo que esta midiendo esta dentro de lo esperable.
Podrias hacer un simple promedio o una mediana a ver como se comportan los resultados.

Hola @Surbyte, estoy con el max741, como es de solo 3 amp funciona bien, solo que no consigo ajustar a cero ya vi la pagina de Luis LLamas, y me fue útil en su momento, con el sensor de voltaje, y creo que también hay tema del asc712, pero ahora mismo veo lo del filtro, pero la resolución del max741 es perfecta para lo que quiero, es muy estable en la lectura en el monitor serial, solo que sin carga esta en 240 ma siempre, y con carga se va a 470 ma y el voltimetro esta 129ma, solo que tengo confusión con tantos GND que tiene, el sensor un es modelo que casi no información en en la red, les envió una imagen a a ver si es posible que me ayuden a configurar su hardware hasta donde voy su resolución es muy superior a la del ASC721 de 20A, solo que cuando conecto GND, en un rato se empieza a calentar el IC, solo tiene output, RS+, RS-, y 3 GND y se calienta cuando conecto con el GND de la fuente de 12v. cualquiera de los tres GNDdel modulo, si esta dañado compro uno ya confiarme con el proveedor local y si tiene en existencia. Tengo la seguridad de que es el ideal para mi propósito, y es mas económico que el ASC712. Solo que mas complicado de configurar por no existir información suficiente, el sistema operara a 1.2A máximo.

Hola foro, definitiva mente esta dañado el MAX741, iré por el lunes o martes por uno, mientras buscare información del ASC712, del filtro, intentar integrar al código el PWM y estudiar lo del doblaje de lecturas en código.
Saludos

Hola @Surbite, ya resolví lo del ACS712, sin hacer ningún ajustes, la mayoría de los códigos en ninguno da cero, y en la mayoría de ellos si carga 80ma y con carga 170ma, 90ma de diferencia, y el voltímetro 94ma un desfase de 4 a 10ma y no pierde linealidad (el desfase lo producían los cables dupont). Ahora intentare el PWM para que la carga no sea directa, no tengo ni idea es como incrementar o decrementar el numero de pulsos en relación al volumen de carga que requiera la batería si regalas alguna idea de como seria de gran ayuda.
Nota: ACS712 es de uso rudo, el MAX471 es delicado y engorroso, lo único a su favor es su alta precisión, y algunos modelos hasta te indican si la batería esta recibiendo carga o esta entregando, así que me quedo con los dos.
Saludo, y buen fin de semana.

Hola @Surbyte, este es el mejor código, que he conseguido para el ACS712 20A, sin carga 0.06A con carga 0.093A a 0.095A, el voltímetro 0.094A ahora lo integrare al código, ya tengo una idea para los PWM.
Saludos.

const int sensorPin = A0;
const unsigned long TIEMPO_LECTURAS = 10UL;
float sensorValue = 0;
float currentValue = 0;
float voltsporUnidade = 0.0051175855327468;
float ruido = 0.00;
unsigned long tiempolecturas;
void setup() {

  Serial.begin(9600);
}

void loop() {
  if (millis() - tiempolecturas > 10UL) {
    currentValue = 0;
    for (int index = 0; index < 5000; index++) {
      sensorValue = analogRead(sensorPin);
      sensorValue = (sensorValue - 510) * voltsporUnidade;
      currentValue = currentValue + (sensorValue / 100) * 1000;
      delay(1);
    }

    currentValue = currentValue / 5000;
    Serial.print("corrente = " );
    currentValue = currentValue - ruido;
    Serial.print(currentValue, 3);
    Serial.print("\n" );
    tiempolecturas = millis();
    // delay(10);
  }
}

Tal vez lo hayas visto pero prueba este código o la parte que te sirva de el usanddo el MAX471.

Corresponde a este video

Ya has dicho que tu MAX471 se dañó y por eso marcaba mA cuando en realidad no circulaba nada.

Hola @Surbyte, ya cambie la parte donde el código lee el sensorACS712, ya llega a cero sin carga y 0.116A con carga. El MAX471 esta dañado (espero y mi amiga le de tiempo de pasar por uno nuevo), a un que ya no veo inconveniente en usar el ACS712, solo intentare conseguir uno de 5A. en un futuro, para tener mejor sensibilidad en bajo consumo, lo que me trae loca es el PWM, los mosfet que ahora tengo son irf520n, irfz44n, y despues solo tengo IGBT 60N60S y drivers IR2110, me podrías recomendar alguno que sea de rápida conmutación.
Nota: use el MCP4725 para alimentar los sensores y mejoro mucho la calidad de las lecturas hice una prueba con el ADS1115 Adafruit eso ahorraría mucho cableado pero no se como recuperar los datos recibidos vía I2C alguna sugerencia.

//https://forum.arduino.cc/t/fz0430-lecturas-incorrectas-en-2-de-4/998825/3


int rele8 = 8;
int rele9 = 9;
int rele10 = 10;
int rele11 = 11;

const int sensorPin = A0;
const unsigned long TIEMPO_CURRENT = 10UL;
float sensorValue = 0;
float currentValue = 0;
float voltsporUnidade = 0.0051112855327468;
float ruido = 0.00;
unsigned long tiempocurrent;
int Current;

const int sensor0 = A5;
const int sensor1 = A4;
const int sensor2 = A3;
const int sensor3 = A2;


const unsigned long TIEMPO_LECTURAS = 3000UL;

float adc_voltage0 = 0.0;
float in_voltage0 = 0.0;

float adc_voltage1 = 0.0;
float in_voltage1 = 0.0;

float adc_voltage2 = 0.0;
float in_voltage2 = 0.0;

float adc_voltage3 = 0.0;
float in_voltage3 = 0.0;


float R1 = 30000.0;
float R2 = 7500.0;

float R3 = 30000.0;
float R4 = 7500.0;

float R5 = 30000.0;
float R6 = 7500.0;

float R7 = 30000.0;
float R8 = 7500.0;

float ref_voltage0 = 5.0;
float ref_voltage1 = 5.0;
float ref_voltage2 = 5.0;
float ref_voltage3 = 5.0;

int adc_value0 = 0;
int adc_value1 = 0;
int adc_value2 = 0;
int adc_value3 = 0;

unsigned long tiempolecturas;

void setup() {

  Serial.begin(9600);
  pinMode(rele8, OUTPUT);
  pinMode(rele9, OUTPUT);
  pinMode(rele10, OUTPUT);
  pinMode(rele11, OUTPUT);
}

void loop() {
  
  if (millis() - tiempocurrent > 10UL) {    
    currentValue = 0;
    for (int index = 0; index < 5000; index++) {
      sensorValue = analogRead(sensorPin);
      sensorValue = (sensorValue - 509.99) * voltsporUnidade;
      currentValue = currentValue + (sensorValue / 100) * 1000;
      delay(1);
    }
  
  currentValue = currentValue / 5000;
  Serial.print("corrente = " );
  currentValue = currentValue - ruido;
  Serial.print(currentValue, 3);
  Serial.print("\n" );
 // tiempolecurrent = millis();

  Serial.println("");

  if (Current > 1.200) {
    digitalWrite(rele8, HIGH);
  }  if (Current < 0.600) {
    digitalWrite(rele8, LOW);
  }

  adc_value0 = analogRead(sensor0);
  adc_voltage0  = (adc_value0 * ref_voltage0) / 1024.0;
  in_voltage0 = adc_voltage0 / (R2 / (R1 + R2)); // buena precisión con ajuste
  if (in_voltage0 > 16.10) {
    digitalWrite(rele9, HIGH);
  }
  if (in_voltage0 < 15.80) {
    digitalWrite(rele9, LOW);
  }
  adc_value1 = analogRead(sensor1);
  adc_voltage1  = (adc_value1 * ref_voltage1) / 1024.0;
  in_voltage1 = adc_voltage1 / (R3 / (R3 + R4));
  if (in_voltage1 > 12.70) {
    digitalWrite(rele10, HIGH);
  }
  if (in_voltage1 < 12.40) {
    digitalWrite(rele10, LOW);
  }

  adc_value2 = analogRead(sensor2);
  adc_voltage2  = (adc_value2 * ref_voltage2) / 1024.0;
  in_voltage2 = adc_voltage2 / (R6 / (R6 + R7));
  if (in_voltage1 > 8.90) {
    digitalWrite(rele11, HIGH);
  }
  if (in_voltage1 < 8.20) {
    digitalWrite(rele11, LOW);
  }


  adc_value3 = analogRead(sensor3);
  adc_voltage3  = (adc_value3 * ref_voltage3) / 1024.0;
  in_voltage3 = adc_voltage3 / (R7 / (R7 + R8));
  /*
    espacio para implementar un PWM para carga con mosfet
    (aun no se como hacer lo )
  */
  Serial.println("    VOLTAJE VCC   ");

  Serial.println("sensor 0 ");
  Serial.print(in_voltage0, 2);
  Serial.println("V");

  Serial.println("sensor 1 ");
  Serial.print(in_voltage1, 2);
  Serial.println("V");

  Serial.println("sensor 2 ");
  Serial.print(in_voltage2, 2);
  Serial.println("V");

  Serial.println("sensor 3 ");
  Serial.print(in_voltage3, 2);
  Serial.println("V");

  tiempolecturas = millis();
  tiempocurrent = millis();
}
}

float in_voltage(float x, float in_min, float in_max, float out_min, float out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

Saludos.

Los mosfet que nombras son rápidos, que carga o mejor dicho, que tipo de carga deben manejar?

la carga en amperios es de 1.6 maximo, lo que no se es cuantos micro segundos de separación maximo aguantan 10 100 1000 micro segundos, me refiero a la velocidad de shitc- eos, maxima que se les puede aplicar.
Ya consegui información del max471 ya tengo dos nuevos, solo que no quiero hacer conexiones hasta no estar segura que no los voy a dañar otra, vez subo la hoja de datos y dos imagenes.

Saludos

El MAX471 mide tensión de 3 a 25V y de 0 a 3A. Si no pones un fuisible es posible que tu carga este pidiendo mas corriente y por eso se te quemó!!
No lo conectes. Coloca la carga con su fuente de tensión, usa el multímetro/tester en modo amperímetro (escala 10A) y asegúrate de qué corriente consume.

la carga es de 110 MA, con la que hice las pruebas ahora, hace años que lo compre no recuerdo que hice en ese tiempo. El esquema de arriba me parece conocido es de electonoob, no me da mucha confianza, y el de abajo no lo conozco usted como ve los diagramas, cree que son correctas las conexiones.
Saludos

Las conexiones estan bien (esquema de abajo).
El MAX471 me ha desilucionado (esperaba que fuera con salida digital). Igualmente es muy barato, mas que el ACS712 asi que hay una buena competencia en bajas corrientes.

No entiendo esto? Explicate mejor, si puedes.
quien o qué es shitc-eos?

Hloa @Surbyte, perdón por el regionalismo swtch-eo, termino usado en mi región, para decir que algo se prende apaga muy rápido. Si el max471 no es ninguna maravilla y este modelo de modulo en especial no cuenta con ninguna protección, no mide voltaje solo mide corriente. el acs712 es resistente fácil de conectar, y en la escala de 5A. debe ser bastante preciso, de todos los sensores que vi, en que mas me agrado fue el INA219 económico, lee voltaje y corriente, y envía la información por I2C. Ya decidí que mosfet usar, esta ocasión irfz44n, yo creo que hoy por la tarde ya incluyo el PWM al código ahora me porga a conectar el MAX471 conforme al esquema de abajo.
Saludos.

Ah... switcheo !
:smile: