MPPT Charge Controller for Small Wind Turbines



About: After a degree in micro-engineering in Switzerland, I moved to Russia to discover new landscapes

There is a lot of DIY wind turbine on the internet but very few explain clearly the result they obtain in terms of power or energy. Also there is often a confusion between power, tension and voltage. A lot of time, people are saying : "I measured this voltage on the generator!" Nice! But it doesn't mean that you can draw current and have power (Power = voltage x current). There is also a lot of home made MPPT (Maximum Power Point Tracker) controllers for solar application but not so much for wind application. I did this project to remedy this situation.

I designed a low power (< 1W) MPPT charge controller for 3.7V (single cell) Lithium Ion Polymer batteries. I started with something small because I would like to compare different 3D printed wind turbine design and the size of these turbines should not produce much more than 1W. The final goal is to supply a stand alone station or any off grid system.

To test the controller I built a setup with a small DC motor coupled to a stepper motor (NEMA 17). The stepper motor is used as a generator and the DC motor allows me to simulate the wind pushing the turbine blades. In the next step I will explain the problem and summarize some important concepts so if you are just interested by making the board, jump to step 3.

Step 1: The Problem

We want to take kinetic energy from the wind, transform it into electricity and store that electricity in a battery. The problem is that the wind fluctuates so the available amount of energy fluctuates too. Moreover the voltage of the generator depends on its speed but the battery voltage is constant. How can we solve that?

We need to regulate the generator current because the current is proportional to the breaking torque. Indeed there is a parallel between the mechanical world (Mechanical power = Torque x Speed) and the electrical world (Electrical power = Current x Voltage)(cf. graph). The details about the electronics will be discussed later.

Where is the maximum of power? For a given wind speed, if we let the turbine spin freely (no breaking torque), its speed will be maximum (and the voltage too) but we have no current so the power is null. On the other side if we maximize the drawn current, it is likely that we break too much the turbine and that the optimum aerodynamic speed is not reached. Between these two extremums there is a point where the product of the torque by the speed is maximum. This is what we are looking for!

Now there is different approaches: For example if you know all the equations and parameters that describes the system you can probably calculate the best duty cycle for a certain wind speed and turbine speed. Or, if you know nothing, you can say to the controller: Change a bit the duty cycle then calculate the power. If it is bigger it means that we moved in the good direction so keep going in that direction. If it is lower just move the duty cycle in the opposite direction.

Step 2: The Solution

First we need to rectify the generator output with a diode bridge and then regulate the injected current in the battery with a boost converter. Other systems use a buck or a buck boost converter but as I have a low power turbine I assume that the battery voltage is always bigger than the generator output. To regulate the current we need to change the duty cycle ( Ton / (Ton+Toff) ) of the boost converter.

Some pins are used during the programing but we can still use them to sense the voltage. We just wire them by hand after programing.

The big capacitors that we see on the first image is an experiment: I turned my circuit in a Delon Voltage doubler. The conclusions are good so if more voltage is needed, just add capacitors to make the transformation.

Step 3: Tools and Material


  • Arduino or AVR programmer
  • Multimeter
  • Milling machine or chemical etching (for PCB prototyping by yourself)
  • Soldering iron, flux, soldering wire
  • Tweezers


  • Bakelite single side copper plate (60*35 mm minimum)
  • Microcontroller Attiny45
  • Operational amplifier AD8605
  • Inductor 100uF
  • 1 Schottky diode CBM1100
  • 8 Schottky diode BAT46
  • Transistors and Capacitors (size 0603) (cf. BillOfMaterial.txt)

Step 4: Making the PCB

I show you my method for prototyping but of course if you can not make PCBs at home you can order it to your favorite factory.

I used a ProxxonMF70 converted into CNC and a triangular end mill. To generate the G-Code I use a plugin for Eagle.

Then the components are soldered starting with the smaller.

You can observe that some connections are missing, this is where I make jumps by hand. I solder curved resistor legs (cf. image).

Step 5: Microcontroller Programming

I use an Arduino (Adafruit pro-trinket and FTDI USB cable) to program the Attiny45 micro-controller. Download the files to your computer, connect the controller pins:

  1. to arduino pin 11
  2. to arduino pin 12
  3. to arduino pin 13 (to controller Vin (voltage sensor) when not programming)
  4. to arduino pin 10
  5. to arduino pin 5V
  6. to arduino pin G

Then load the code on the controller.

Step 6: The Testing Setup

I made this setup (cf. picture) to test my controller. I am now able to select a speed and see how the controller react. Also I can estimate how much power is delivered. Although the motor doesn't behave exactly like a wind turbine I consider that this approximation is not so bad. Indeed, as the wind turbine, when you break the motor, it slows down and when you let it turn freely, it reaches a maximum speed. (the torque-speed curve is a strait line for a DC motor and a sort of parabola for wind turbines)

I calculated a reduction gearbox in order to have the small DC motor spinning at its most efficient speed and the stepper motor spinning at an average speed (200 rpm) for a wind turbine with low wind speed (3 m/s)

Step 7: Some Problems

  • You can have several local maximums (cf. image)
  • The battery over voltage is not controlled (there is a protection circuit in the battery)
  • The stepper motor has a noisy output so I need to average over a long period 0.6 sec.

So I decided to make another experiment with a BLDC (cf. image). Because BLDC have another topology I had to design a new board. Also this type of motors need to turn faster than stepper motor to have the same output voltage (even those with low motor constant KV (high Ke)) so I made another setup with a gearing ratio of one. As the new board is very different from this one. I will explain everything soon in another instructables.



    • Backyard Contest

      Backyard Contest
    • Beauty Tips Contest

      Beauty Tips Contest
    • Fandom Contest

      Fandom Contest