Preserve the Batteries in your Storage Bank

By Tom Woods

Problem

Where I live in Northern New England, there can be long periods, especially at the turn of the seasons, of dark cloudy weather lasting for weeks or even months. If you have a solar installation and you use batteries connected to a load, it doesn’t take long to learn you have a real problem on your hands because there just isn’t enough solar energy to keep the batteries charged during these long dark cloudy periods. It’s a big problem because batteries can be damaged by subjecting them to a chronically undercharged conditions.

The Solution

This solution uses the grid in a sort of reverse grid tie arrangement. PVs charge the batteries, but the batteries are also connected to the grid by way of a supplementary charger that keeps the batteries topped off even if the load is more than the PV array is capable of delivering during cloudy spells. I’ve been using this system for the past two years. I have never had to worry about low batteries, and I have always been able to power the load on my inverter, even during the times from October to January when the number of sunny days here can be counted on one hand.

I call the circuit that does this a grid-charger voltage switch. It uses a PIC microcontroller to protect the batteries from chronic low charge by connecting them through a solid state relay to a grid powered battery charger when it is needed. The circuit monitors battery voltage and when it drops below a certain preset voltage it turns on a solid state relay for a selectable period of time from one to four hours. The relay connects the grid powered battery charger. Two jumpers, or DIP switches let you select the amount of time the relay stays switched ON. Refer to the schematic diagram in Figure 1. The ON time select switches 1 and 2 are set as follows:

Switch

1 2 ON Time Duration

on on 1 hour

off on 2 hours

on off 3 hours

off off 4 hours

To protect the batteries from overcharge, the PIC will switch the relay OFF if the battery voltage exceeds an adjustable setpoint. In the OFF state, the switch waits for the next low voltage event to occur, and then it recycles.

There is a reset button in the circuit that will manually toggle the relay on or off. Also, whenever you press the reset button to turn the relay OFF, the LED will blink a number of times to indicate how many ON/OFF cycles occurred since the last reset.

Circuit and Board Features

Potentiometers, R3 and R4, are the adjustments to the upper and lower voltage setpoints. R3 trims the battery input voltage which is monitored by the PIC. R4 is a reference voltage adjustment for the turn-on voltage. These two controls allow you to set the voltages at which the relay will turn ON and OFF.

The LED tells you if the circuit is working. It turns ON when the relay is ON. Additionally, the LED blinks when you press the reset button. It blinks the number of times the switch turned on since the last reset.

How to Build the Circuit

The schematic diagram shows the circuit. You can build it up on a printed circuit board, a breadboard, a PIC prototype board, or by other means that you prefer. Please note the 12 volt battery shown in the schematic is actually your alternative energy bank of storage batteries. There is nothing critical in deciding parts placement. Component values are critical, however, particularly the crystal and resistors R3 and R7. R7 must be twice the value of R3.

Refer to the parts list in Figure 2. The battery charger and solid state relay you choose to operate with this circuit will depend on the size of your storage battery bank and the current at which you wish to charge your batteries. The solid state relay must be able to handle the current draw of the charger you choose, plus a safety factor of roughly 25%. The relay must be able to switch 120vac and the control voltage must be at least 3 vdc.

My bank consists of 10 batteries of 125 amp-hour capacity each. I use the DLS-55 charger made by Iota Engineering, capable of delivering 55 amps. The Iota charger is not the cheapest charger you will find on the market, but it is a very well engineered product. It offers precise current control and cool trouble free operation. I chose a 40 amp solid state relay, which is more than adequate to power the charger.

Use care in soldering the components. Avoid blobs of solder that may cause a short between adjacent pins on the board. A 25 watt grounded soldering iron is recommended. Be mindful of static electricity when handling the PIC and other components. Use rosin core solder made for electrical circuits. Do not solder the PIC chip to the board. Instead solder a 14 pin DIP socket to the board and plug the PIC into it after all the components have been soldered first.

Soldering can sometimes be tricky for a beginner. If you lack experience try to get someone to show you how it’s done.

Build or Buy

If you lack the skill, knowledge, time, or desire to build the circuit board, or the completed circuit yourself, a variety of kits, preprogrammed PIC chips, and completed units are available for sale at http://www.altenergyweb.com/gridcharger.htm

Iota Engineering info is at http://www.iotaengineering.com/dls.htm

Programming the PIC 16F676

Listings 1 and 2 give the sequence of programming instructions that go into the PIC microcontroller. To program the PIC you need special equipment and knowledge which may be beyond the means of many readers except those who are programming junkies. Everyone else may obtain preprogrammed chips from the altenergy web site shown above.

Testing the Circuit

To test the circuit you will need a voltmeter and an adjustable dc power supply capable of delivering from 5 to 15 volts.

  1. To begin, turn the low voltage adjust pot, R3, fully counter clockwise.

  2. Turn the overvoltage adjust pot, R4, fully clockwise.

  3. Adjust the power supply to a voltage close to that of your storage batteries and connect the power to the circuit board. The LED should turn ON or blink ON, then OFF.

/ Troubleshooting: If the LED does not light or blink when power is supplied, press the reset button to see if that turns it on. If it still does not blink there is something wrong with your assembly and you will need to troubleshoot the cause. Inspect it closely with a magnifying glass for bad solder joints. Check if the PIC or LED is placed backwards or if pins are not properly seated. Test the supply voltage between pins 1 and 14 on the PIC to insure it is 5v. If you did not use the supplied printed circuit board, double-check all your connections against the schematic./

  1. Now adjust the power supply to the maximum acceptable voltage for your battery bank. This can be measured conveniently between the points marked A and B at the upper right hand corner of the board. The maximum voltage you choose might be just under 15 volts, which is the over voltage cut-off on many inverters.

  2. At this stage the LED should be OFF. If it is ON, press the reset button to turn it OFF. Then turn R3 clockwise until voltage between pin 8 of the 16F676 and ground (point ‘B’ on the circuit board) measures 2.5 volts.

  3. Adjust the power supply to the minimum acceptable voltage for your battery bank. There are several considerations to make when deciding upon the optimum low-end voltage. A higher adjustment will mean the grid charger will turn on more frequently, and you will consume more electricity from the power company, but you will afford greater longevity to your batteries. A lower voltage will mean you get more power from your batteries, but the deeper discharge cycles may shorten battery life. Consult your favorite experts. I chose 11.95 volts for my minimum battery voltage.

  4. Turn R4 counter clockwise until the LED turns ON. If you overshoot this adjustment, turn R4 back 1/2 turn, press the reset button to turn off the LED, then slowly turn R4 counter clockwise until the LED lights

Mains and Circuit Board Connections

Run small gauge wires between the control terminals on the relay and the pads on the circuit board labeled Relay + and - in the schematic. The same size wire may be used to bring power to the board from your 12-volt battery array. Use care not to accidentally reverse the positive and negative leads to the board. Doing so will destroy the voltage regulator chip. You may wish to install a SPST switch in line with the positive wire so that you can turn the unit on and off.

Now it’s time to make the 120vac connections. Refer to Figure 3 that shows how one leg of a suitable power cable rated for the current capacity of your charger is series connected to the relay. Put an AC plug on one end and a receptacle to receive the charger plug on the other. Observe safety precautions and electrical codes when working with 120vac.

After the battery is connected, plug the ac power cable into a wall outlet and plug your battery charger into the receptacle. The charger will now keep your batteries charged once it is hooked up according to the manufacturer’s instructions.

You can verify that the unit is operating by manually turning the LED on and off with the reset button. When the LED lights, you can measure a change in voltage (from approximately 0 volts to approximately 5 volts) between the relay control terminals. When this happens your charger will come to life (unless the battery voltage exceeds your high voltage adjustment).

I have been very pleased with the operation of the grid charger voltage switch. It allows me to gain what energy I can from my solar panels while it fills the gaps caused by periods of cloudy weather and protects the expensive batteries from damage due to chronic under charging.

Figure 1. Grid Charger Voltage Switch Schematic Diagram

Listing 1. PIC Software: The Annotated Assembly Listing

;PIC Lead/Acid Grid Charger Control

;Tom Woods 3/1/2006

;This program monitors battery voltage. When it drops below an adjustable

;preset voltage, it turns on a solid state relay that can control a battery

;charger that is connected to the public utility power grid. The relay will

;remain on for a period of time set by jumpers SW1 and SW2, or

;until battery reaches an adjustable preset high voltage cut-off.

;When the relay turns off, charging reverts to the solar or other alternative energy

;source. Grid power will not be switched on until battery voltage again drops

;below the setpoint. A reset switch will toggle the relay OFF and ON. The unit will

;turn itself ON when battery voltage is below the setpoint.

;When the reset button is pressed, the LED will blink the number of times the

;charger has turned on since the last reset.

; Relay ON duration is approximately as follows

; (n=no jumper, y=jumper connected to ground):

; SW1 SW2 Duration

; y y 1 hour

; n y 2 hours

; y n 3 hours

; n n 4 hours

include “c:program filesmplab idemchip_toolsp16f676.inc”

RELAY EQU 0 ;Bit 0 (Pin 10) is the relay control line

LED EQU 1 ;Bit 1 (Pin 9) is the LED line

SW1 EQU 5 ;Jumpers on these bits of PORTC determine Relay ON duration

SW2 EQU 4

SECONDS EQU h’20’ ;Address of location that stores count of seconds

MINUTES EQU h’21’ ;Address of location that stores count of minutes

HOURS EQU h’22’ ;Address of location that stores count of hours

CYCLES EQU h’23’ ;Address of location that stores number of times the charger

; was turned on since the last reset.

DELAY1 EQU h’24’ ;Address of locations that process a delay during the LED blink.

DELAY2 EQU h’25’

SCRATCH EQU h’26’

PAUSETIME EQU h’3’ ;Number of iterations for the wait loop

MAXVOLTS EQU d’128’ ;This value is good when the battery high cut-off voltage

;is trimmed to 2.5 volts as measured at pin 8 and pin 12.

;Summary of 16F676 Pin Assignments

;Pin 4 MCLR Reset Button Input

;Pin 5 SW1 Relay ON duration jumpers, SW1, SW2

;Pin 6 SW2

;Pin 8 A/D + Battery Voltage Input

;Pin 9 LED Output to LED

;Pin 10 Relay Control Output to relay

;Pin 12 Comparator Battery + Voltage Input

;Pin 13 Comparator Reference Voltage Input

ORG 0

RESETVECTOR BSF STATUS,RP0 ;Select bank 1

BTFSS PCON,1

GOTO POWERUP

INITIALIZE CLRF ANSEL ;Power ON and button resets initialize

;the peripherals…

MOVLW b’00110100’ ;Make RC2 (pin 8) an input for the A-D (AN6)

;RC5 (pin 5) and RC4 (pin 6) digital inputs,

MOVWF TRISC ;and other lines of PORTC outputs

BCF STATUS,RP0 ;Select bank 0

CLRF INTCON ;disable peripheral interrupts.

;Initialize A-D converter on AN6 (Pin 8)

MOVLW b’00011000’ ;Left justified, AN6, VDD=Vref

MOVWF ADCON0

CLRF ADRESH ;Zero out the AD converter

BSF STATUS,RP0 ;Bank 1

MOVLW b’01000011’ ;Enable AN6, AN0, AND AN1 (Pins 8,13,12)as analog

MOVWF ANSEL

MOVLW b’01010000’ ;Set AD clock to Fosc/16

MOVWF ADCON1

;Initialize comparator and timer.

BSF TRISA,1 ;Pin 12 is comparator input.

BSF TRISA,0 ;Pin 13 is comparator input.

BCF STATUS,RP0 ;Bank 0

MOVLW b’00000010’ ;Comparator goes high when

MOVWF CMCON ;battery voltage (pin 12) is less than

; reference voltage (pin 13)

CLRF TMR0 ; Clear the clock value

BSF STATUS,RP0 ;Bank 1

MOVLW b’10000110’

MOVWF OPTION_REG

BCF STATUS,RP0 ;Bank 0

BTFSS PORTC,RELAY ;What is the status of the relay?

GOTO RELAYISOFF

RELAYISON INCF CYCLES,1

CALL LEDBLINK

GOTO RELAYOFF

RELAYISOFF CALL LEDBLINK

GOTO RELAYSET

RELAYOFFA INCF CYCLES,1

RELAYOFF BCF STATUS,RP0 ;Bank 0

BCF PORTC,RELAY ;Turn OFF the relay and LED

BCF PORTC,LED

;At this point everything is initialized and the relay is OFF.

;All we do is watch the voltages and the clock.

COMPARATOR BTFSS CMCON,6 ;Is the battery < Vref? (was BTFSS)

GOTO RELAYOFF ;No. Go back and wait.

CALL WAIT ;Yes. Then resample to make sure

BTFSS CMCON,6 ;we’re not looking at a load spike GOTO RELAYOFF ;Is battery<Vref? No. Go back and wait.

;Otherwise we have a true reading and need

;to turn on the relay.

CLRF HOURS ;Zero out the counters

CLRF MINUTES

CLRF SECONDS

CLRF TMR0

CHECKAD BSF ADCON0,0 ;Turn ON the A/D

BSF ADCON0,1 ;Read the A/D. Set the GO bit

ADHOLD BTFSC ADCON0,1 ;and wait for it to go low (DONE)

GOTO ADHOLD

BCF ADCON0,0 ;Turn OFF the A/D

MOVLW MAXVOLTS

SUBWF ADRESH,0 ;Subtract maxvolts from battery volts

BTFSC STATUS,C

GOTO RELAYOFF ;If battery>MAXVOLTS, go back and turn off the relay

;If Battery < MAXVOLTS…

RELAYSET BSF PORTC,RELAY ;Turn ON the relay

BSF PORTC,LED ; and LED.

TLOOP MOVLW d’63’ ;Approximate ‘ticks’ per second.

SUBWF TMR0,0

BTFSS STATUS,Z

GOTO TLOOP

INCF SECONDS,1 ;Once per second

CLRF TMR0

MOVLW D’60’

SUBWF SECONDS,0

BTFSS STATUS,Z

GOTO CHECKAD

ADVANCE INCF MINUTES,1 ;Once per minute

CLRF SECONDS

MOVLW d’60’

SUBWF MINUTES,0

BTFSS STATUS,Z

GOTO CHECKAD

INCF HOURS,1 ;Once per hour

CLRF MINUTES

CALL ONTIME ;Find out how long the relay should be ON.

SUBWF HOURS,0

BTFSS STATUS,Z

GOTO CHECKAD ;Keep counting if time is not up.

GOTO RELAYOFFA ;Shut off and wait when time is up.

LEDBLINK BCF PORTC,LED ;Subroutine that handles the blinking of

CALL WAIT ;the LED equal to the number of times the

MOVF CYCLES,W ;charger was turned on since the last reset.

MOVWF SCRATCH ;The count is set to zero

INCF SCRATCH,1

BLINK2 DECF SCRATCH,1

BTFSC STATUS,Z

GOTO OUT

BLINK3 BSF PORTC,LED

CALL WAIT

BCF PORTC,LED

CALL WAIT

GOTO BLINK2

OUT CALL WAIT

CLRF CYCLES

RETURN

WAIT MOVLW PAUSETIME ;A subroutine to delay

MOVWF DELAY1

WAIT1 MOVLW h’ff’

MOVWF DELAY2

WAIT2 DECFSZ DELAY2,1

GOTO WAIT2

DECFSZ DELAY1,1

GOTO WAIT1

RETURN

ONTIME CLRF SCRATCH ;Subroutine returns with W=# hrs the relay

BTFSC PORTC,SW1 ;should be ON. Transfer SW2 and SW1 to W bits

BSF SCRATCH,0 ;1 and 0. Then increment W so the subroutine will

BTFSC PORTC,SW2 ;return with W=1,2,3,4

BSF SCRATCH,1

INCF SCRATCH

MOVF SCRATCH,W

RETURN

POWERUP BSF PCON,1 ;The initial powerup.

BCF STATUS,RP0 ;Select Bank 0

CLRF PORTC

CLRF CYCLES

CLRF MINUTES

CLRF HOURS

CLRF SECONDS

BSF STATUS,RP0 ;Bank 1

GOTO INITIALIZE

end

Listing 2. PIC 16F676 Hexadecimal Program Data

PIC 16F676 Program Hexadecimal Code

Addr Values

0000 16 83 1C 8E 28 71 01 91 30 34 00 87 12 83 01 8B

0008 30 18 00 9F 01 9E 16 83 30 43 00 91 30 50 00 9F

0010 14 85 14 05 12 83 30 02 00 99 01 81 16 83 30 86

0018 00 81 12 83 1C 07 28 1F 0A A3 20 50 28 22 20 50

0020 28 37 0A A3 12 83 10 07 10 87 1F 19 28 22 20 60

0028 1F 19 28 22 01 A2 01 A1 01 A0 01 81 14 1F 14 9F

0030 18 9F 28 30 10 1F 30 80 02 1E 18 03 28 22 14 07

0038 14 87 30 3F 02 01 1D 03 28 39 0A A0 01 81 30 3C

0040 02 20 1D 03 28 2E 0A A1 01 A0 30 3C 02 21 1D 03

0048 28 2E 0A A2 01 A1 20 69 02 22 1D 03 28 2E 28 21

0050 10 87 20 60 08 23 00 A6 0A A6 03 A6 19 03 28 5D

0058 14 87 20 60 10 87 20 60 28 55 20 60 01 A3 00 08

0060 30 03 00 A4 30 FF 00 A5 0B A5 28 64 0B A4 28 62

0068 00 08 01 A6 1A 87 14 26 1A 07 14 A6 0A A6 08 26

0070 00 08 14 8E 12 83 01 87 01 A3 01 A1 01 A2 01 A0

0078 16 83 28 03

PIC 16F676 Configuration Bits

Oscillator: LP

Watchdog Timer: Disabled

Power-up Timer: Disabled

Brown-out Reset: Disabled

MCLR Pin Function: Reset

Code: Not protected

Data EEPROM: Not Protected

Figure 2. Grid-Charger Voltage Switch Materials

Switches

PB1 1 reset switch (momentary, normally open)

SW1,SW2 1 ON time select DIP switches or jumpers

Capacitors

C1 1 .1uf electrolytic

C2 1 10uf electrolytic capacitors

C3, C4 2 18pf ceramic capacitors

Resistors

R1 1 2k 1/4 watt resistor

R2, R5, R6 3 10k 1/2 watt resistor

R3, R4 2 50k multi-turn potentiometer

R7 1 100k 1/4 watt resistor

Semiconductors

LED1 1 LED 5mm T1

U1 1 78L05 5v 3 terminal voltage regulator

U2 1 PIC 16F676

Miscellaneous

XT1 1 32.768khz crystal

DIP14 1 14 pin DIP socket

1 Printed Circuit Board or breadboard

1 120vac Solid State Relay

1 120vac Battery Charger

Figure 3. Relay Connections Diagram