Most Efficient Electricity Generating Stationary Bike

by fotherby in Workshop > Energy

4116 Views, 31 Favorites, 0 Comments

Most Efficient Electricity Generating Stationary Bike

PXL_20221121_190923267.jpg
PXL_20221121_152207148.jpg
Turbo Trainer Generator Drive chain losses

Abstract

I challenge anyone to build a more efficient way of converting human power into electrical power! In this project we use an NXT stationary bike to drive a 149kv outrunner via a flat belt. The outrunner works as a generator and by using the VESC6 motor controller we apply regenerative braking. The power generated is fed into a 480Wh battery and a grid tie inverter feeds this power into the grid.

Introduction

During the English winter it often rains for weeks. Having an indoor trainer is convenient to keep one's fitness ticking over. Ever since I was young I have always been interested in the idea of generating electricity through pedal power. In my workshop it gets very cold and having an exercise machine to do 1-2 minute high intensity sessions gives me another way of staying warm. So there’s 3 reasons I did this project. I hope you find this write up interesting.

General Strategy

This diagram shows all the parts to the project. I think they are all quite self explanatory so I’ll move on to discussing the individual aspects



Motor Mount and Flat belt

The motor mount hinges on a shaft and springs maintain proper tension on the flat belt to prevent slippage. 


BLDC motors are normally designed to spin propellers which creates an axial load. Consideration has to be paid to how the rotor is loaded when a radial force is exerted such as in this scenario. Luckily this motor has internal bearings on either side of its drum so the shaft doesn’t experience any moment loads. Moment loads on shaft interfaces or bearings cause much faster wear.

Arguably this is a small point, but should mean the motor lasts a fair bit longer. The belt applies several kilograms of radial loading to the rotor.



Flat belts are incredibly efficient but to track centrally on the outrunner it needed to have a crown. I achieved this by wrapping sellotape around the rotor to build up thickness in the centre relative to the sides. This worked well and the belt stays central and runs smoothly.



The NXT Bike’s flywheel has a huge amount of inertia and stays spinning freely for ages without any connected load. I put the flat belt around the flywheel so it drives the motor with a 7.4:1 gearing. There is a 3.25:1 gearing between the pedal crank and the flywheel. Overall there is a 24:1 gear ratio. Therefore a cadence of 90 rpm spins the 149kv motor at 2164rpm which would generate 14.5 volts.



VESC6

The VESC6 is Benjamin Vedder's ESC. The hardware and software is open source. I actually bought the components and reflowed my own board but you can buy the fully assembled product online (for a price). I didn’t populate the CAN or Bluetooth chips.



It’s a beautiful bit of hardware and the software is remarkable. You can drive motors using super smooth FOC and control all sorts of parameters such as torque, current limits, motor speed etc. You can customise the software but instead I use a simple Arduino Pro-Mini to interface with the VESC6 via UART.

Control Box

I mounted the VESC6 in a plastic enclosure with some additional bulk capacitance and an Arduino Pro-Mini. The Arduino interfaces with the VESC6 via a UART connection and runs some code. It reads the selected power from a 6-position rotary switch (50, 100, 150, 200, 250, 300 watts) and implements a PI control algorithm. The power is read from the VESC6 and the PI controller adjusts the regenerative torque on the motor so as to realise the demanded power. This means that regardless of the speed you pedal at, the mechanical power you are putting out is constant. Slow cadence will demand high torque and vice versa.



Whenever there is lots of bulk capacitance there’s always the problem of sparks on connecting the battery. I bought a 3 position switch. To turn the device on you have to go through the middle switch position which connects the VESC6 to power through a 5 ohm resistor. This quickly pre-charges the capacitors. The switch is then turned to the fully on position which shorts out the resistor and connects the battery directly to the VESC6.



Rather than run a dozen wires to the arduino from the 6-position switch I use a resistor divider method to generate 6-different analogue voltages. A single ADC channel on the Arduino can then read the voltage and determine the switch position. 

Software

The software is available here on github. The code is simple and self explanatory.

Battery and Grid Tie Inverter

The VESC needs somewhere to dump the electrical power. It takes the AC electrical power from the generator and converts it into DC which is fed into a 24v 20Ah LiFePO4 battery. The VESC6 provides a huge performance benefit over a full bridge rectifier. For 2 reasons:

  • Full bridge rectifiers have voltage drops of about 2 volts whereas the synchronous rectification that occurs within the VESC has voltage drops below 0.2 volts.


  • Diode rectifiers have very high RMS currents (way over quadruple the average current). All the current flows for a short period at the top of the sine wave. This is in contrast to the sine wave currents that the VESC pulls from the generator. High RMS currents cause resistive losses due to the non-linear I²R relationship.




On Facebook marketplace I found a 1000W grid tie inverter. It’s designed as a solar MPPT with an input voltage range of between 22-50V. I wasn’t quite sure how such an inverter would perform when connected to a 26V battery. Thankfully it works beautifully. Since the battery voltage is at the lower end of the acceptable input voltage, the MPPT appears to throttle down its output power to 300-400 Watts. This suits us quite nicely because I don’t want 1000W being drawn from my poor batteries. I discharge the batteries using the GTI if they are becoming a bit full and if I pedal at the same time then the batteries are only being discharged at about 0.5C which is fine.

Calibrating and Testing

When pedalling I wanted the rotary switch to select the mechanical power at the pedals rather than electrical output power. I therefore did my best to try to calculate the drive chain and electrical losses and account for these.



After pedalling at about 200W for 10 minutes I felt the motor and the VESC6. I was really pleased to note that neither were hot. In fact they were barely even warm. I took some thermal imaging pictures and you can see the motor warmed to about 20 degrees above ambient and the VESC only about 5 degrees. Interestingly the capacitors were what got warmest and I suppose this is due to the current ripple they experience. After seeing this I added a 4700uF capacitor near the input to the VESC. This subjective assessment made me think the losses couldn't be more than about 25W.

In an attempt to get a more objective calibration I figured that I could run the generator as a motor to spin the pedals at a nominal cadence and measure the electrical power required to maintain this freewheel. I deduced that the electrical losses should be entirely symmetrical regardless of whether the motor is applying positive or negative torque. Hence when cycling at this nominal cadence the same losses will be present.

It’s a 12 pole motor, the flywheel to motor gear ratio is 1:7.4 and the pedal to flywheel gear ratio is 1:3.25. Therefore 1 rotation of the pedal crank equates to 24 motor rotations. An ERPM of 12960 corresponds to a cadence of 90 rpm.

At 90 rpm the drive chain and electrical losses appear to be about 22W. I think this estimates losses well and I don’t think the losses will drastically increase with increasing motor currents. So to keep things simple I have assumed a fixed 25W drive chain loss regardless of cadence or torque. It doesn’t take into account:

  1. Drive chain losses may slightly depend on the torque through the pedals. With higher torque, the stretch on the chain and belt may result in slightly larger losses compared to a freewheel. 


  1. This takes into account the motor iron losses, the motor friction and the power used to run the VESC (all of which won’t change with varying motor current). However, we don’t take into account the ohmic losses in the motor windings. These losses will be larger at high motor currents (ie. high power outputs). However it’s a 70A rated motor and we’re operating at about 20A. I think the ohmic losses will be negligible at these low motor currents (We limit to 32A max braking current to avoid the belt slipping).

Next I got on the bike and took measurements of electrical power into the battery for different selected powers. When the VESC said it was measuring an input Voltage x Current of 290W, I only measured 242 W using my multimeters. I was slightly disappointed by the discrepancy and blamed VESC inaccuracy.

These measurements allow me to correct for the offsets measured by the VESC. For example when I asked the VESC to apply 40W regen I actually measured an electrical output power of 25W. We know that there are 25W of drive chain losses so the overall mechanical power must be 50W.

Likewise with 190W requested I measured an electrical power of 158W. I assumed 28W of losses so this correlates to a mechanical power draw of 158+28 = 186W. I plotted these values on a graph and got the equation of best fit.

These measurements allow us to estimate efficiency. A 272W mechanical power produces 242W of electricity which is 89% efficient. At 186W mechanical we get 85% efficiency. Not bad!

Mechanical Power = 0.882*Requested Power + 16.4

Equivalently:

Requested Power = 1.13*Mechanical Power - 18.6

This allows us to know what regen power to ask the VESC to apply for a desired mechanical power output.

Conclusion and Videos

I’m pleased with this build. I’ve accumulated a few hours whirring away on this turbo and there have been no problems so far. The power selections feel about right although it’s very difficult to judge from pedalling!

If anyone can suggest any improvements I’d be keen to hear from you! 

I have to put some text here...