Recently, I learned about a hub developed by Sanyo and Sachs in the 90’s; the CMU-1 and CMU-3. It was built on several bikes from Sachs, including the joint project with Mercedes-Benz to build an electric bike. This hub is a complex collection of cogs, belts, bearings, sensors and a controller. It is really quite the clockwork, all built inside the rear hub. The hub has the great advantage that the bike does not need any external sensors or displays: feeding 24 Volt from the battery is enough to make the hub work. I therefore decided to buy one, judging it an ideal wheel to use in a conversion from conventional to electric bicycle.
The insides of the hub are engineered very elegantly: there are three belts that reduce the rotation speed from DC motor to wheel, there is a ratchet wheel so that the motor does not turn when the wheel runs forward, and all of this is built in quite a small space.
The only problem with the hub I bought: It did not work…. We have tested individual components (sensors, motor, power transistors, etc), but no life observed. The analogue DC motor controller is completely immersed in some sort of epoxy, and therefore very hard to access.
I decided to remove the old (analogue) controller, and try to build in a digital version. I choose to use an Arduino Nano, which is really small and has sufficient interface ports, that would steer a 24 V/14A DC H-bridge motor driver.
There are three sensors in this hub:
- A thermistor to verify that the motor is not overheating
- A wheel rotation speed sensor, consisting of a Reed sensor and four magnets on the main drive wheel.
- A torque sensor, measuring the torque applied to the pedals.This sensor uses the change of induction in a sensing coil, due to a soft-iron ring that moves in and out of the sensing coil when force is applied to the pedals. The ‘moving in and out’ is the result of the rotation of a driving part (connected to the rear sprocket) and the driven part (connected to the rim and tires). When these spring-loaded parts rotate with respect to one another, the soft-iron ring (mounted on a white plastic part) moves axially. This is then measured by the sensing coil. I hope the picture below clarifies what I have been trying to explain.
Both the temperature and Reed sensor are quite easy to use. The torque sensor, however, requires a small analogue circuit to measure inductance. I have used the instructions given here to build a circuit on a perforated board to read out the induction at the coil.
Induction sensor readout
In simple words, measuring the inductance is done by ‘exciting’ the inductor, by applying sudden change of voltage across the polse. Just a few microseconds after the excitation, the inductor ‘rings’, i.e. causes an oscillating voltage as a response to the sudden potential change. The ‘ringing’ frequency is characteristic for the ring’s inductance. This frequency can be measured and used to calculate the inductance. Below one can see the oscilloscope window showing the ringing of the induction coil (top), and the discretised signal after treatment with a comparator (bottom).
Building it into the hub
It was a challenge to get everything into the tight space, but it seems that a digital version of the regulator could have been built quite a bit more compact if done professionally:
I would have liked to upgrade the battery voltage to 36 Volt, which seems quite standard in the e-bike world, but unfortunately it seems hard to find such drivers. I therefore stuck with 24 Volts (which is what the DC motor is originally designed for, so probably better anyway). It turned out to be a good idea not to try to work with a higher voltage on the specific driver I used, because when my power supply suddenly peaked in voltage (which it sometimes does, I realized I should really fix that and soon after did), the capacitor blew. It was a beautiful bang and very smelly fumes. Luckily I could replace it with another one from an old and broken charger I had. Luckily, no harm done to any other components.
Below I show a schematic I made that shows which wires I connected where:
Now that things have been wired up, I need to write the software to make sense of information from sensors and control the motor driver. I have tested the readout of all sensors, and tested the motor individually, but not simultaneously.
The torque (induction) sensor turned out to pick up noise from the switching on and off of the DC motor PWM. Indeed, the sensor coil is like an antenna to a changing magnetic field, and whenever the motor switches on or off, this change in magnetic field causes noise in the induction coil lines. In the end, I therefore decided to not use the induction/torque sensor, and buy a simple PAS sensor instead.
I do believe it is possible to read out the torque sensor while driving, since the original controller has managed to do so as well. If somebody has a working version of this controller, and could hook it up to an oscilloscope to see how it measures inductance, that would be great!
The software is written using a PAS (pedal cadence sensor) instead of the torque sensor. It is programmed such, that both the pedals and the wheels need to have reached a certain minimum average rotation speed, before the pedals start supporting. At higher wheel speed and cadence, the support increases. The support reduces when reaching 25 km/h, and will completely be disabled above that speed.
PS: Unfortunately I cannot seem to upload videos here demonstrating the hub working…. Sorry!