lastdownxxl
User
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
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
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
'------------------------------------------------------------------------------