DIY Solar Laderegler

Hallo,

heute möchte ich einen einfachen DIY Solarladerregler vorstellen. Den Solarladereger hab ich 2012 als Prototyp für eine etwas größere Solaranlage (16A) gebaut. Dazu hatte ich mir in der Bucht ein 18V / 20Wp Solarmodul besorgt. Mit der kleinen Solaranlage lade ich eine 22Ah Blei Gel Batterie. Die Batterie dient zum Laden meiner LiPos.

Funktionsweise:
Der Regler schaltet bei erreichen der Ladeschlussspannung von 14 Volt einen Logic Level FET ein. Damit wird das Solarmodul kurzgeschlossen. Als Rückstromsperre von der Batterie dient eine Schottky-Diode. Der Regler ist als einfacher Zweipunktregler mit einer Hysterese von 0.2 Volt ausgeführt.

Ursprünglich hab ich den Regler mit einem PIC 12F683 gebaut. Gestern hab ich den 12F683 gegen den 12F1572 getauscht. Mit dem 12F1572 erfasse ich jetzt auch die Umgebungstemperatur mit dem internen Temperature Indicator Module. Die Temperaturmessung muss allerdings zuvor kalibriert werden. Je nach Aufwand erreicht man eine Genauigkeit im Bereich von +/- 1.5 °C.

Details zum optionalen LCD-Display siehe http://www.rc-network.de/forum/showthread.php/630243-LiPo-LiFePo-Monitor-mit-PIC16F1705.

Gruss Micha

Solarregler.jpg
IM001249.JPG

Code:
'  Solarregler V1.0 20W Module
'  05.07.2018, compiled with v98.01
'
'
'                  -----------
'  V+            -| 1       8 |- GND
'  RA5 LFET      -| 2       7 |- RA0 LED
'  RA4           -| 3       6 |- RA1 SER_OUT
'  RA3           -| 4       5 |- RA2 VBATT
'                  -----------
'
#include "software_uart_v1.h"

#chip 12F1572,8
#config OSC=INTOSC,PWRTE = ON

'defines
#define ADC_SAMPLES 4

#define VOLT_13P8  235
#define VOLT_14P0  238

#define BAUD_RATE 2400
#define SER_OUT PORTA.1
dir SER_OUT out

#define LFET PORTA.5
dir LFET out

'Gain ADC = 1/3
#define VBATT AN2
dir PORTA.2 in  'AN2

#define LED PORTA.0
dir LED out

'variables
dim T_ambient as word
dim Pb_battery as word

T_ambient = 0
Pb_battery = 0

'main
LCD_CLEAR
wait 1 s
SerPrint("V1.0")
wait 3 s
LCD_CLEAR

Do
  GET_ADC

  if (Pb_battery >= VOLT_14P0) then
     set LFET on   'Charge Off
     set LED on
  end if

  if (Pb_battery < VOLT_13P8) then
     set LFET off  'Charge On
     set LED off
  end if

  if (TEMP_IC > 461) then
     T_ambient = ((((TEMP_IC + TEMP_IC) / 2) * 25) - 11546) / 31
  else
     T_ambient = 0
  end if

  Display
  wait 1 s
Loop

'---------------subroutines--------------------------------------------------------------------------------------------
sub GET_ADC
    Pb_battery = 0

    repeat ADC_SAMPLES
      Pb_battery = Pb_battery + ReadAD(VBATT)
    end repeat

    Pb_battery = Pb_battery / ADC_SAMPLES
end sub
'------------------------------------------------------------------------------
sub Display
   LCD_Line1
   print_2p1((Pb_battery * 117) / 2)
   SerPrint(" V")
   if (LED = off) then
      SerPrint("    Charge")
   else
      SerPrint("      Full")
   end if
   LCD_Line2
   print_byte(T_ambient)
   SerPrint("degC")
end sub
'------------------------------------------------------------------------------
function TEMP_IC as word
     clrf TEMP_IC
     clrf TEMP_IC_H
    'Temperature Indicator Init
     movlw B'10100000' ;Right justify, FOSC/32, Vref = Vdd
     movwf ADCON1
    'Temp Indicator is ADC input
    bsf ADCON0,CHS0
    bcf ADCON0,CHS1
    bsf ADCON0,CHS2
    bsf ADCON0,CHS3
    bsf ADCON0,CHS4
    'Temperature Indicator enable
    bsf FVRCON,TSEN
    'Temperature Indicator High Range enable,Vdd >= 3.6V
    bsf FVRCON,TSRNG
    bsf ADCON0,ADON    ;Turn ADC On
    wait 44 us         ;Acquisiton delay
    bsf ADCON0,ADGO    ;Start conversion
    btfsc ADCON0,ADGO  ;Is conversion done?
    goto $-1           ;No, test again
    movf ADRESH,W
    movwf TEMP_IC_H
    movf ADRESL,W
    movwf TEMP_IC
end function
'------------------------------------------------------------------------------
 
Ambient Temperatur

Ambient Temperatur

Hallo,

die Messung der Ambient Temperatur dient eigentlich der Abschaltung des Laderglers bei Temperaturen unter 0°C. Der Bei-Vlies Akku der Vereinsanlage darf laut Datenblatt bei Temperaturen unter 0°C nicht geladen werden. Die alten PIC's besitzen kein Temperatur Modul, daher hab ich bisher den LM35 Temperatursensor verwendet. Mit einigen neueren PIC's kann das mit dem internen Temperature Indicator Module erledigt werden. Daher hab ich mal das Temperature Indicator Module vom PIC 12F1572 ausprobiert. Die beiden Bilder zeigen die Schaltung und Photo vom Vereinsregler.

Solarregler.jpg
Solarregler.jpg

Gruss Micha
 
Hi Micha,

wieder mal ein tolles Projekt von dir. Ich lade schon seit geraumer Zeit meine Lipos an einer zyklenfesten Batterie. Stammt ursprünglich aus einem Stapler und wurde im Rahmen der Wartung "entsorgt".

Bislang hab ich diese ab und an wieder nachgeladen, aber wenn das mit Sonnenstrom auch geht ziehe ich das natürlich vor. Werde mir deine Schaltung auf jeden Fall nachbauen und zusammen mit einem günstigen PV Modul auf unserer verglasten Loggia aufstellen.

Kennt ihr eigentlich das Portal "SecondSol"?! Da kommt man kostengünstig an PV Module ran.

Viele Grüße

Thomas
 
Hallo,

in der Funktion TEMP_IC ist noch ein Fehler. Die Zeit für das Acquisiton delay muss laut Datenblatt auf 200 us gesetzt werden.
Mit wait 44 us ist der Messwert noch nicht eingeschwungen.

Gruss Micha
 
DIY Solar Laderegler

Hallo Micha,

Was genau misst Pin3 auf dem Schaltplan des Vereinsreglers? Laut Bezeichnung scheinbar irgendwie einen Strom, aber welchen? Liegt da der Ladestrom wenn der FET nicht durchgeschaltet ist? Das kommt mir irgendwie komisch vor, erklär das bitte Mal, ich verstehe es nicht.

Schöne Grüße
Günter
 
DIY Solar Laderegler

OK, das passt, stimmt, damit ist die Ausrichtung der Zellen optimierbar. Schöner wäre ja eine direkte Anzeige des aktuellen Ladestroms, z.b. über einen Messwiderstand und OP.
Grüße Günter
 

Ay3.14

User
Hallo Micha,

tolle Idee und Umsetzung! :)

Was hat sich als Entladeschutz bewährt?
(Ist es beim FRC3A 12V 70A Schliesser-Relais geblieben?)

Albert
 
Ansicht hell / dunkel umschalten
Oben Unten