The Solar Power Expert Blog

A DIY Dual Voltage Converter – Turning The Solar Charge Controller Circuit On Its Head

by Chris - September 6th, 2011.
Filed under: Charge Controller. Tagged as: , , , , , , .

There has been some discussion lately on the Free Charge Controller mailing list about the future direction of the project. The main points of the discussion have centered around how to incorporate the Arduino into the project and how to get hardware into the hands of interested members.

Getting hardware into the hands of interested people is ‘the problem‘ for any open source hardware project, and the Free Charge Controller project is no different. Embracing control by Arduino as opposed to integrating a microcontroller into the board is a great step in the right direction. The community has certainly indicated their support of this idea.

In this same vein, I’ve been completely rethinking what a charge controller needs to be for the DIY community. In the product roadmap that I proposed on the mailing list, I encouraged ’embracing’ surface mount technology because it was the only way I could see that an open-source product could compete with other charge controllers on the market, such as this popular sunforce charge controller. The logic was that if the open source community designed a dependable, standardized hardware ‘core’, then manufacturers could focus on adding features rather than reinventing the wheel.

I’ve come to realize over the last few months that competing with off-the-shelf products isn’t the best idea for an open source project. In fact, it’s the exact opposite of what an open source project should do. Consumer products have warranties, returns, and the manufacturer is always to blame. For these reasons they lock their technology down into a ‘black box’ and try their best to prevent customers from tampering with the internal components. An open source and/or DIY project is the opposite of that concept. A good open source design should encourage people to tinker with it. It should focus on eliminating as many barriers to tinkering as possible by having excellent (community driven) documentation, source code, and by simplifying the hardware as much as possible.

Some older members of the mailing list may remember this reply from Johnathan Peakall asking if it was unreasonable for people to wind inductors. Well Johnathan, this is my official appology to you. That was a good idea and I shouldn’t have poo poo’d it. What I’m ultimately leading up to is this: The current design of the Free Charge Controller, while a good step in the right direction, is fundamentally flawed. And let me tell you why.

Rethinking What A Charge Controller Is

I’ve always simplified the explanation of what a charge controller is by saying that “A charge controller makes sure that a solar panel and a battery ‘play nice’ together” and this is true. The primary task of a charge controller is to make sure that a solar panel can’t over-charge a battery. An MPPT charge controller has the additional task of keeping the solar panel at its most efficient loading point.

To get a little more technical, most MPPT charge controllers are really just a buck converter. This is an electricity converter circuit that efficiently converts power from a higher DC voltage to a lower DC voltage. This circuit is also at the core of the current Free Charge Controller design.

The opposite of a buck converter is a boost converter. It ‘boosts’ a low DC voltage to a higher DC voltage. An ideal charge controller would be able to do both. In my mind, an ideal charge controller would be able to handle a wide range of voltages and a wide range of currents.

That’s a tall order. And for that reason, you don’t see charge controllers on the market that can act as both buck and boost electricity converters. However, if it was possible, then it would allow a much wider range of flexibility in the components that DIY solar system builders can use and would prevent them from getting locked in to a single manufacturers product line.

Here’s an example

I have long had my eye on the Kaneka thin film solar panel. At $2.52 per watt, it’s the most inexpensive solar panel I’m aware of on the consumer market. However, it uses new thin film technology and it’s operating voltage is 48 volts nominal. It would be great to be able to plug this into an Enphase M190 grid-tie inverter and start seeing your electricity bill get lower. But it’s not that simple. The M190 only has a voltage range of 22 to 40 volts, which is below the nominal 48 volts generated by the Kaneka panel.

The components I mention are less important than the idea: DIY solar enthusiasts should be able to take whatever solar panel (or wind turbine, etc) is most cost effective and use it to lower their power bills. An ideal charge controller would be the glue that allows these two devices to work together.

How to Build the Ideal Charge Controller

Well, that ideal charge controller is what I’d like the Free Charge Controller to become. It’s what I would like the community to build through pooling our collective technical knowledge.

In the past, there was no ‘community’ to speak of around the Free Charge Controller. Over the last year however, the mailing list has slowly grown in size and quality of members. From here, the design of the controller should be (and is now able to be) driven by the community. On that note, I would like to propose the following MPPT charge controller schematic to the community and solicit their input on it:

Charge Controller Circuit

Proposed Solar Charge Controller Circuit

Theory of Operation

This circuit can be summarized as a computer (or microcontroller) controlled transformer. If the circuit looks simple… that’s the idea. DC power from a source (solar panel or battery) is ‘chopped’ via a MOSFET controlled by a microcontroller (Arduino or Maple) into an AC square wave which can be stepped up or stepped down via the transformer. On the other side of the transformer, the AC voltage is rectified back into DC of the desired voltage.

Input Power

The input power source is anticipated to be either a DC voltage or a rectified AC voltage. It can come from a solar panel, wind turbine, or battery. In this design, there is virtually no upper limit for the voltage as all the only voltage sensitive devices on the input are the MOSFET and current sensor (attached to the current sense resistor, R1). The current sensor will always be protected since it’s affixed to the ground path of the MOSFET.

When the microcontroller is not driving the circuit, the input voltage will be fully across the MOSFET. For this reason, it will be important to choose a MOSFET that is capable of handling the maximum input voltage. This voltage and current rating of the MOSFET will set the voltage and current rating for the input. This is a good design choice since there is a wide range of power MOSFETs in a standard TO223 through-hole package, which makes it easy for hobbyists to swap out pin-compatible parts in order to get the best MOSFET for their design.

The Transformer

The transformer is really the heart of the circuit, and because of this it’s also the most configurable. The user has the choice of using a pre-wired transformer or hand-wiring a secondary winding to a torroid inductor like this 10 uH, 20 amp Torroid.

Even a hand wound transformer will be more efficient than a typical buck or boost converter. The key to wiring your own transformer is to calculate how many turns you need and what size gauge of wire to use. This can all be calculated using a Javascript calculator.

The catch is that the difference between actual voltage measurements and those predicted by theoretical calculation may be off by about twenty percent. This is where the microcontroller software comes in to play. By monitoring voltage and current on both the primary and secondary sides, the software can adjust the frequency and duty cycle of the MOSFET to achieve the desired output voltage.

This puts more emphasis on the software, which is a scenario generally shunned by manufacturers due to the inability to release new software once a product has been launched. However, it is exactly the right kind of approach to an open source project utilizing an Arduino.

The beauty of winding your own transformer is that you control the output voltage by the number of turns on the secondary winding. This means that doing both buck and boost conversion is possible and at higher efficiencies.

Output Power

The load on the output is expected to be either a battery or a grid-tie inverter. However, it could be anything, including a 12v appliance or pond pump. The AC voltage coming off the secondary winding of the transformer would be rectified back to DC with the rectifier bridge, REC1. Like the transformer winding, the size of the output capacitor, C1, would need to be calculated based on the size of the expected load. Again, the community could collaborate to create a Javascript calculator to do this.


The sensor system would be fairly simple and straitforward. Two voltage monitoring circuits would use a simple resistor-based voltage divider to scale the input and output voltage for monitoring by the microcontroller. The current sensor would likewise send data about instantanious current on the input and output.

A wide range of current sensors could be used. For smaller systems, they could use the MAX4372FESA IC intended for use on the V3 board. For larger currents, the system could use a bigger current sensor like the CSLA2CD from Honeywell.


The real strength of this new design is its simplicity, scaleability, and heavy reliance on software. Simple in that a minimum of parts are used, they are all through-hole, and are all widely available. Scaleable in that the same schematic can be scaled for higher powers by simply using a bigger coil, MOSFET, and capacitor. Additionally, these parts can all be hand soldered to a prototype board with headers to accept an Arduino. This eliminates the need for an expensive custom PCB.

The reliance on software is perfect for an internet based project. It’s very easy for experimenters to share software and very difficult to share hardware. This applies equally to the firmware for a microcontroller as well as the Javascript calulators for the components. We can pool our collective knowledge and effort to create a web-based GUI which can tell the beginner which parts are recommended for the desired power, voltage, and current and then give them step-by-step direction on how to put it all together. All that is left at that point is to plug in an Arduino or Maple and upload the firmware.

What Do You Think?

What do you think? Feel free to leave a comment or join the discussion on the Free Charge Controller mailing list. Please share this article and encourage others to join the discussion.

4 Responses to A DIY Dual Voltage Converter – Turning The Solar Charge Controller Circuit On Its Head

  1. Hi ,

    Need your help to design a small solar system for my home .. kindly provide your mail id .

    Thanks in advance


  2. Hey Chandresh,

    You can reach me at I love helping people, but prefer to make all conversations public for maximum benefit. Why don’t you ask your question in the forum. If it’s really technical and you need some specific engineering help, I do consulting for $50 per hour. In that case, contact me and we can discuss the most appropriate course.


    Chris Troutner

  3. I am trying to build a Solar Charge controller to charge a 12v 7.2 ah battery. Can you please help me with the circuit. Also please let know the requirement of the solar panel.

    Also I would like to construct a circuit to convert the 12 v 7.2 ah battery power to 220v AC 5 amps. Can you please help?

    Thanks in advance

  4. Please, I am working on building a charge controller circuit to charge a 96V battery bank. The battery bank is made up of 8, 12Vdc batteries with 200amphours. The rating of the solar panel is 200W, 24V and four of them are connected in series.
    Please can you help me with the circuits. Please can you help out?
    Thanks a lot in advance

Leave a Reply

Your email address will not be published. Required fields are marked *