Series Hybrid with Hubmotor

Progress this weekend:

Finished painting the battery tray and reassembled so I now have a complete and functional 48V 12aH lead acid BD36 Wilderness Energy kit.

Using leftover batteries which were "worn out" last year, I ran 5 miles at wide open throttle on a track, which brought voltage down to 47V (normally I do not want to go below 48V). 48V is more fun than 36V. It was fun leaning into the turns.

I got the Weedeater to run by putting a new fuel line and fuel filter on it. After adjusting the carb a bit, it now seems to run pretty well. It is all cleaned up. I am trying to figure out how to mount it, will need some type of angle or channel aluminum. I have to look at it awhile. I would like to get rid of the Weedeater plastic housing but it includes a reed valve and cover for the crankcase as part of the housing, and the housing is probably is needed to direct cooling air. I may end up keeping the motor in the housing if I can find a way to mount the motor. It would be nice to find a quieter muffler for the thing.

The Weedeater has a shaft with a 5mm x 5mm square hole in the middle. A flexible shaft was inserted into the square to power the weed whipper. I may try to grind down the threaded end of the Bosch permanent magnet motor to fit the square opening. If that doesn't work I can still use a flexible coupling.
 

Attachments

  • 48VTray8.jpg
    48VTray8.jpg
    104.1 KB · Views: 544
  • 48VTray9.jpg
    48VTray9.jpg
    129 KB · Views: 532
  • 48VTray10.jpg
    48VTray10.jpg
    124.7 KB · Views: 545
I ground down the shaft end of the dc motor and it fits into the 5mmx5mm opening in the gas motor shaft. I also ordered a flexible coupling kit which is probably the better way to go.

I tried to get a weed whacker conversion kit but apparently I have an odd motor, no parts available. I was going to get the 3" mount from here:

http://www.wackerengines.com/Ryobi.htm

But no dice, the kit does not fit my motor.

So instead I took a look at the plastic housing and cut it down to open up the head and muffler for better cooling. I think I can make a mount by bolting the plastic housing to a board and then installing the motor into it.

I think I am going to be able to make this thing work, at least I can finally see how to mount it. It will take some work to get the gas motor and dc motor lined up right. I still have a long way to go.
 
Today I spent time on cutting and sanding the plastic weedeater housing to allow me to screw on aluminum angle to make a motor mount. The mount is pretty straight and stable, I think it will work.

For the dc motor, I cut out a mount from 1/8" aluminum plate scrap that I had in my garage. It will be fitted to some aluminum angle as well.

All this was done with a hacksaw and file, and an electric drill. I don't have good metal working tools, mostly just hand tools.

I still have to bolt a lot of stuff together, align it and mount it to a piece of plywood. Then add a gas tank, electric switch, servo and controller. I still have to program the controller, I may just start out with adjusting the throttle and holding it in one position at first.
 

Attachments

  • generator1.jpg
    generator1.jpg
    104.2 KB · Views: 581
  • generator2.jpg
    generator2.jpg
    104.8 KB · Views: 3,109
Motor Control Theory

Gas motor rpm is tied to voltage output of the dc motor. There is a linear relationship. In order to control voltage, it may be possible to hold voltage within ranges by controlling the gas motor throttle.

There are two conditions to consider regarding motor control: 1. No Load and 2. Max Load. An example of No Load would be while standing still waiting for a stoplight with the motor running. Max Load would be at start up from a stop while using full electric hubmotor throttle.

It is possible that the system would work adequately with a static throttle position. However, the throttle would have to be set so that the target voltage is achieved at No Load condition. Under Max Load, the actual voltage would likely sag. There may be some optimization to achieve by increasing gas motor throttle under load.

No Load

The goal at No Load is to hold but not exceed the fast charge rate voltage. For my 48V lead acid system, the target voltage for fast charge is 57.5V. This is based on lead acid battery chemistry. I do not want to exceed this voltage in order to avoid battery damage. I want to maintain the target voltage to maximize charging into the battery system. No Load gas motor throttle position -> Target Throttle Position -> TTP. TTP is the throttle position where the generator system provides 57.5V.

Max Load

Assuming TTP at Max Load, the electric hubmotor draws current and voltage sags. Initial power used to power the electric hubmotor comes from the generator system. However generator power is limited and is less than the electric hubmotor load. Generator voltage will sag until battery voltage (about 51V, depending on charge level) is reached, and batteries would then provide power. As voltage continues to sag under load, gas motor rpm will be reduced due to the load. Voltage would continue to sag under battery power until available battery current and electric wheel power "equalize".

If it were possible to increase the gas motor throttle to work against the voltage sag under load, the power draw from the batteries would be reduced and range would be increased. Any time that the generator voltage remains above battery voltage, battery charging is occurring. This allows a longer run time under electric power only, no gas motor, meaning the gas motor might run for less time.

While the generator is operating, generator and battery systems are at the same potential (voltage). A controller could be designed to measure the generator voltage and adjust a servo to increase gas motor throttle when the generator voltage drops below the fast charge voltage.

The programmable Arduino is a kit that is intended to help people learn about electronics, but is also robust enough to be used in real life applications.

The Arduino can measure voltage from 0V to 5V and will provide a reference number for control of other devices. The Arduino can be programmed to control a servo of the type used in RC (hobby remote control) applications.

In order to measure voltage, a voltage divider could be used to reduce system voltage (about 50V - 58V) to Arduino sensor voltage (between 0V and 5V).

See: http://en.wikipedia.org/wiki/Voltage_divider

Voltage Divider Calculation

The Arduino requires very little current to measure voltage. A voltage divider will alway draw a certain amount of current to the ground. For the hybrid bike system, I would accept about 10mA of loss for the voltage divider.

58V / 10 mA = 5800 ohms (total voltage divider resistance)

My target voltage for the Arduino is 3V (roughly midrange 0V - 5V).

3V / 58V * 5800 ohms = 300 ohms
5800 ohms - 300 ohms = 5500 ohms

About 300 ohms of resistance would have to be on the ground side of the Arduino sensor, and 5500 ohms would have to be on the generator positive side of the Arduino.

Actually I would probably use a 10k ohm potentiometer, which would allow me to fine adjust the voltage level, at least at first. When an optimal resistance is found with the potentiometer, I would then measure the resistances and use resistors instead of a potentiometer in order to prevent voltage creep due to vibration or bumping the potentiometer.

The result of the voltage divider would be to provide an approximate 3V to the Arduino sensor, with the voltage varying together with the generator output voltage. The Arduino changes the input voltage to a reference number. In the case of 3V, the Arduino reference number would be about 615. As the reference number rises and falls, a servo can be controlled through the Arduino programmable interface.

Arduino Servo Control

Below is an example servo control script for the Arduino. It allow the user to move the servo by adjusting a potentiometer. This script has not been changed to control a gas motor throttle based on sensor voltage, but it could be modified to do so.

Code:
// Generator Servo Voltage Control
// Sample voltage, adjust throttle with servo to regulate voltage
// Futaba FP-528, pulse range 250 to 2300 milliseconds, over 180 degrees throw

// Static variables
int servoPin = 2;     // Control pin for servo motor
int minPulse = 250;   // Minimum servo position
int analogPin = 0;    // voltage sensor pin, between 0V an 5V
int refreshTime = 20; // the time in between pulses, servo speed adjustment

// Dynamic variables 
int pulse = 0;        // Servo pulse holder, adjusts servo angle
long lastPulse = 0;   // the time in milliseconds since the last pulse
int analogValue = 0;  // the value returned from the analog sensor, 0 to 1023

// Calculated values and adjustments
// Adjust the throw angle as shown in the pulse line below
// Adjust the servo motor speed with the refreshTime variable above
// Voltage at analogPin 0 changes analogPin value, 
// at 0V -> 0, 1V -> 207, 2V -> 408, 3V -> 615, 4V -> 822, 5V -> 1023 

void setup() {
  pinMode(servoPin, OUTPUT);  // Set servo pin as an output pin
  pulse = minPulse;           // Set the motor position value to the minimum
  Serial.begin(9600);
}
 
void loop() {
  analogValue = analogRead(analogPin);      // read the analog input, 0 to 1023
  pulse = (analogValue*2.0) + minPulse;     
  // 2.0 is a value that gives about 180 degrees throw on the Futaba servo
  // Reduce 2.0 value to reduce throw, also can recalculate 2.0 value:
  // 1023 * X + minPulse = maxPulse, where X = new 2.0 value in above line
  // and maxPulse is the pulse value that gives the desired max throw angle 
  
  // pulse the servo again after refresh time (20 ms)
  if (millis() - lastPulse >= refreshTime) {
    digitalWrite(servoPin, HIGH);   // Turn the motor on
    delayMicroseconds(pulse);       // Length of the pulse sets the motor position
    digitalWrite(servoPin, LOW);    // Turn the motor off
    lastPulse = millis();           // save the time of the last pulse

// Print pulse and analogValue to screen

    Serial.print("pulse: ");
    Serial.print(pulse);
    Serial.print("; analogValue: ");
    Serial.println(analogValue);
  }
}
 
If you run a motor as a generator the internal IR drop + other losses subtract from the induced voltage,while as a motor it is added to the emf to equal the supply voltage,(the induced voltage is proportional to rpm) therefore running at the same speed, the output in the generator mode can be significantly lower than the motor supply voltage depending on how inefficient the device is.So you'll have to be running at significantly higher rpm,to have the same output voltage.Assume for instance a 0.9 ratio and you end up with an increase of 25% in rpm (1/0.81) and even more at peak 10 Amp load, it could be 35-40 %
 
Last edited by a moderator:
I made some more progress this evening. The flexible coupling came in today. I did a horrible job of drilling out the coupling hubs to the right diameter for the shafts. The hubs are very wobbly now. But I hammered them on and tried to tap them into a reasonable alignment. Next time I will ask to have someone drill the hubs out for me or get a drill press for my shop so I can do it right myself. However, this flexible coupling is really the way to go. Even though I messed it up, I think it will still work. Hubs are only a couple of bucks each so I haven't lost too much.

I hacksaw cut the dc motor axle down to about an inch and a half in length. The gas motor and the dc motor are bolted down to a plywood base, which is reinforced/straightened from warping with angle aluminum. I built a housing out of plexiglass around the axles and flexible coupling and over the dc motor. I installed the 20 amp switch but no wiring yet. Installed the gas tank on top of the housing.

1. I need to get a longer fuel line.

2. I need to do the wiring.

3. I need to get a choke cable to control the speed or mount a servo and start in with servo control (might actually be easier that way).

Then I can do some bench testing.

I tried to run the dc motor under 12V but it did not have enough power to turn the gas motor over without a spark plug. 24V did turn it over quite nicely but still did not have enough power to turn it with a spark plug in it. I hope 48V has enough power to kick it over with the spark plug in it.
 
Today I put everything together and got it running.

I tried some different things to set up a throttle and ended up using a bicycle spoke with some bends in it, hooked into a washer with a hole in it and a nut that allows adjusting the throttle level.

The fuel line was easy, I put it inside some plastic conduit to protect it.

I did the simple wiring system, no servo or control. A switch connects the generator to the battery system. I added a shut off to ground the magneto of the motor when turned off.

36V does a good job of turning over the motor. I played around with the carb adjustment and finally got it to fire up.

With some throttle on it, it was putting out well over 50V. I didn't do that very long since I had a 36V battery pack. I still need to do the testing, I just put it together today and got it running. I have to add a good way to connect a voltmeter to it for adjustments.

Maybe I will take a break tomorrow and clean up the workshop and come back to the motor when well rested and thinking clear.

The thing is loud. I will have to put some kind of additional muffler on it.

I still have to build a mount to fit it to my rear rack.

If I find it is easy to set a certain rpm -> voltage level, I may try it out on the bike with the current throttle set up. Or I may try to set up the controller system before trying it on the bike.
 

Attachments

  • generator3.jpg
    generator3.jpg
    116.2 KB · Views: 549
  • generator4.jpg
    generator4.jpg
    129.3 KB · Views: 2,164
  • generator5.jpg
    generator5.jpg
    104 KB · Views: 539
  • generator6.jpg
    generator6.jpg
    110.1 KB · Views: 524
  • generator7.jpg
    generator7.jpg
    119.5 KB · Views: 1,149
  • generator8.jpg
    generator8.jpg
    111.8 KB · Views: 526
Sometimes it is good to step back for a bit for sure. Keep up the good work though, it looks like you are almost there!
 
It Lives!

Got everything installed on the bike, did a little carb adjustment, took a spin around the block. Its a little too rainy to do much more, but it is alive! woooohoooooo!

The idle screw is all the way in, which seems to keep the voltage around 54 to 60V with a lot of swing in the voltage. The motor seems to like the rpms. It did not run as well at 44V when I was trying it out with my old 36V battery pack. 48V works much better with this setup, at least so far.

Haven't done too much testing but I made it around the block and everything seemed to be working right the whole way.

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 

Attachments

  • hybridbike1.jpg
    hybridbike1.jpg
    131.2 KB · Views: 6,082
  • hybridbike2.jpg
    hybridbike2.jpg
    137.3 KB · Views: 9,055
Too rainy to ride today.

I cleaned up the wiring a bit.

I added a voltage divider.

Positive (50 to 60V)
19520 ohms (measured)
Tap
970 ohms (measured)
Ground

At about 50V input, I measured 2.42V at the tap. This will be a good voltage source for the controller to measure.

I will spare you the math, but when I work out the tap voltage for my target voltage of 57.5V, I get 2.78V. And the reference number for that voltage is about 570 on the Arduino scale of 0-1023 over a range of 5V.

So here is an Arduino script that I think will run the servo to try to keep the voltage around 57.5V.

Code:
// Generator Servo Voltage Control
// Samples voltage, adjusts throttle with servo to regulate voltage
// Futaba FP-528, pulse range 250 to 2300 milliseconds, over 180 degrees throw

// Static variables
int servoPin = 2;       // Control pin for servo motor
int analogPin = 0;      // voltage sensor pin, between 0V and 5V
int startPulse = 1800;  // Starting servo position
int refreshTime = 20;   // the time in between pulses, servo speed adjustment
int offset = 0;         // the difference between target voltage and measured V

// Dynamic variables 
int target = 570;       // adjust this value to achieve desired voltage output
int startup = 0;        // initialize startup value
int pulse = 0;          // Servo pulse holder, adjusts servo angle
long lastPulse = 0;     // the time in milliseconds since the last pulse
int analogValue = 0;    // the value returned from the analog sensor, 0 to 1023


// Calculated values and adjustments
// Voltage at analogPin 0 changes analogPin value, estimated
// at 0V -> 0, 1V -> 207, 2V -> 408, 3V -> 615, 4V -> 822, 5V -> 1023 

void setup() {
  pinMode(servoPin, OUTPUT);  // Set servo pin as an output pin
  pulse = startPulse;         // Set the motor position value to the minimum
  Serial.begin(9600);
}
 
void loop() {

  analogValue = analogRead(analogPin);  // read the analog input, 0 to 1023
  offset = target - analogValue;  // voltage difference from target voltage
  
  // the offset amount will affect the acceptable voltage range
  // the pulse increment value will affect how fast the servo steps
  if (offset < -15) pulse = pulse + 10;
  if (offset > 15) pulse = pulse - 10;

  // adjust throw angle with minimum and maximum pulse numbers
  if (pulse > 1800) pulse = 1800;
  if (pulse < 800) pulse = 800;

  // pulse the servo again after refresh time
  if (millis() - lastPulse >= refreshTime) {
    digitalWrite(servoPin, HIGH);   // Turn the motor on
    delayMicroseconds(pulse);       // Length of the pulse sets the motor position
    digitalWrite(servoPin, LOW);    // Turn the motor off
    lastPulse = millis();           // save the time of the last pulse

// Print pulse and analogValue to screen
   Serial.print("analogValue: ");
    Serial.print(analogValue);
     Serial.print("; offset: ");
    Serial.print(offset);
    Serial.print("; pulse: ");
    Serial.println(pulse);
  }
}

I'm not sure I even need to use a controller, it may be enough to let the motor run on high idle. However, the throttle is very responsive, and if I can get more power under load, then it will be worth it. It may also allow the motor to idle at a slower speed when under a no load condition. So I am just having fun trying this out, maybe it will work, maybe it is overkill.
 
Back
Top