Controlador de carga solar: problema de aumento de voltaje

0

Estoy diseñando un controlador de cargador solar para un panel solar para cargar una batería de 12v. Estoy usando arduino uno para este proyecto. Hasta ahora solo estoy revisando el circuito en el tablero. Para propósitos de prueba, he conectado fuente de alimentación en reemplazo de un panel solar. Esta fuente de alimentación tiene potenciómetro, por lo que el voltaje de salida puede variar entre 10 y 14 voltios. Ahora sigue el circuito que estoy usando:

Para propósitos de prueba, doy voltaje de entrada y lo compruebo en el pin analógico A0 de arduino. Si es superior a 12,0 voltios, active una salida PIN6 . Si el voltaje es inferior a 11.0 voltios, apague PIN6 . SO cuando PIN6 está ENCENDIDO, MOSFET dará 12v y le daré este circuito divisor de voltaje de 12v donde estoy midiendo el voltaje utilizando el pin A1 del uno.

A continuación se muestra el código

solarScale = analogRead(A0);  
batScale = analogRead(A1);
solPinVolt = solarScale * (4.279/1023.00);
solVolt = solPinVolt * (10 + 2.2)/2.2; 
batPinVolt = batScale * (4.279/1023.00);
batVolt = batPinVolt * (10 + 2.2)/2.2; 

if(solVolt >= 12.0)
{
  digitalWrite(6,HIGH);
}
if(solVolt <= 11.0)
{

  digitalWrite(6,LOW);
}

Estoy obteniendo el voltaje exacto que estoy aplicando. El problema ocurre tan pronto como el PIN6 está activado. Cuando el voltaje está por encima de 12.0v, el PIN6 está ENCENDIDO, por lo que mosfet está encendido pero no sé por qué en el terminal serial se muestran 13.45v mientras que en real es 12.23v. Por qué el voltaje aumenta cuando la salida digital se enciende. Por favor ayuda. Gracias

    
pregunta S Andrew

1 respuesta

2

He resuelto el problema leyendo el voltaje arduino. Arduino tiene esta gran característica donde puedes leer el voltaje actual. Si alguien se enfrenta a un problema similar, use el siguiente código para leer el voltaje:

long readVcc() 
{
  long result;
  // Read 1.1V reference against AVcc
  ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  delay(2); // Wait for Vref to settle
  ADCSRA |= _BV(ADSC); // Convert
  while (bit_is_set(ADCSRA,ADSC));
  result = ADCL;
  result |= ADCH<<8;
  result = 1125300L / result; // Back-calculate AVcc in mV
  return result;
}

El código anterior devolverá el voltaje del arduino.

    
respondido por el S Andrew

Lea otras preguntas en las etiquetas