There's a lot of diversity in the world of ebike power systems. Some manufacturers like Bosch, Brose, and Yamaha focus on making them as light as possible with just enough power and smooth delivery of that power, where others, like Bafang, are often criticized for not being as smooth and responsive with all that:
Which one is better for your needs depends largely on your personal preferences and riding styles, but ideally, I'd like to have both! Ample power with smooth delivery can make climbing hills as much fun as descending. I also prefer powertrains that have throttles (is it really a "throttle" on an electric bike?) and are user-programmable which lets us go beyond the typical street limits of 250-750 Watts of power.
The Bafang Ultra M620 is as close as it gets to my ideal powertrain since it has a throttle and can output 1500 Watts with simple software tweaks!
When I started riding a Bafang Ultra M620-powered, full-suspension, Luna Z1 mountain bike, even at the lowest power level, the power delivery was, at best, startling, and, at worst, dangerous. That's not a knock on Luna, necessarily, it just seems to be the preference with all of the bikes I've tried with this powertrain. However, when you're dealing with so much power off road, in my opinion, it must be smooth and predictable so it doesn't send you into a boulder or off the trail at the worst possible moment.
Thankfully, there's a remedy. Like its cousins the BBS02 and BBSHD, the M620 drive (as long as it has the UART connector, YMMV!) is programmable using an Eggrider controller and a smartphone or a programming cable and a Windows laptop with Bafang Config Tool. I have both options and they're each great, but I prefer to use a laptop for the larger screen. If you prefer to use an Eggrider, connecting and programming will look much different than what I show below, but the settings I'm using can be used with the Eggrider just the same.
So, how do we tame this beast?
Disclaimer
Before we go any further, a word of caution here. Some of these settings can do bad things to your bike and/or your body. What is presented below works for me and my bike and I share it freely with no guarantee that it will work for you and your bike.
I relied heavily on help from the internet (thanks Karl!) in understanding these settings for myself. What I'm using is modified significantly from what my bike shipped with from the factory and from what I've seen others use. I made changes thoughtfully and tested them cautiously and I strongly recommend you do the same.
If you proceed, you are solely responsible for the consequences.
Step 1. Controller Assist Levels
It's not required, but with this much power available, it's best if we can access all 9 of the available power levels on the M620 drive, not just the 3 or 5 levels that are the default for many controllers.
My Luna Z1 came with a Bafang 860C controller that was set to 5 levels and is configurable to 3, 5, or 9, but that will vary by bike. In any case, consult with your controller's manual to access the advanced settings to change the number of assist levels. If your controller is hard limited to 3 or 5 power levels, I'd highly recommend the Eggrider controller as an upgrade.
Following the 860C manual, I had to double press the "M" button, navigate to "Advance setting", input passcode "1199" (not "1919"), and change assist levels from 5 to 9. There's plenty more you can do in here, but that's all we need right now.
Step 2. Connect to the Drive
- Disconnect the controller from the bike
- Connect the programming cable to the bike (not the controller)
- Power on the bike's battery
- Connect the programming cable to a USB port on the computer
Step 3. Find Your COM Port
Open Windows Device Manager and look for "Ports (COM & LPT)" to find which port (COM5 shown here) the computer assigned to the cable.
Step 4. Open Bafang Config Tool
- Open Bafang Config Tool.
- Enter the COM port that was assigned by Windows.
- Click Connect. If you see information populate below, you know you're connected. You should also get a message.
- Click on Read Flash to pull in the current programming.
- Click on File, Save to save a backup of the factory configuration.
Step 5. Basic Settings
Here's where those 9 assist levels on the controller come into play. If you have fewer than 9, it uses Assist0, Assist1, and Assist 9, but has to skip some in between so the jumps are much larger.
Here are my settings. I'll point out some particular ones I recommend and why below.
Limit Current(%) is the percentage of maximum current the drive can apply in each assist level. I like to vary the current with an exponential curve since that's how power naturally works. If we use a linear curve like 10%, 20%, 30%, etc, when you go from Assist1 to Assist2, you've doubled your power, but from Assist2 to Assist3, you've only increased by 50%. This exponential curve starts at a very low 8% in Assist1 and increases by 37% each step for a smooth, intuitive ramp in power levels up to Assist9.
Limit Spd(%) is the percentage of maximum speed it will reach before stopping in each power level. I like to set my speeds to 100% from Assist1-Assist9 and to 1% on Assist0 to effectively disable it.
Make sure you click on Write to send the settings to the controller before moving on.
Step 6. Pedal Assist Settings
Pedal Assist (or PAS) pushes at a constant power anytime the pedals are turning regardless of how hard you are pedalling. Since the Bafang Ultra M620 has torque sensing pedals, I want to minimize the PAS output and maximize the torque sensing output.
Here are my settings. I'll point out some particular ones I recommend and why below.
Start Current(%) very low keeps it from being jumpy.
Slow-Start Mode(1-8) in the middle gives it a smooth ramp on in power.
Keep Current(%) varies based on the assist level, so I set it very low to minimize the feeling of PAS.
Current Decay(1-8) in the middle gives it a smooth ramp off in power.
Stop Decay(x10ms) very low makes power drop off quickly when you stop peddaling.
Make sure you click on Write to send the settings to the controller before moving on.
Step 7. Throttle Settings
One of the key features of the M620 drive is having that throttle to help get through technical terrain without pedal strikes or just scoot across an intersection.
Here are my settings. I'll point out some particular ones I recommend and why below.
Mode set to Current rather than Speed is more intuitive feeling and gives much better control at slow speeds.
Designated Assist on 9 corresponds to Assist9 for full power all the time, even when the controller is set to Assist0!
Start Current(%) very low gives you a smoother initial turn on.
Make sure you click on Write to send the settings to the controller before moving on.
Step 8. Torque Settings
Here's the big one, the main event. This one has a lot going on.
Here are my settings. I'll point out some particular ones I recommend and why below.
Base Voltage corresponds to the lowest voltage from the torque sensor used to calculate power output. The default is 0, but setting it to 740 based on Frey's recommendations makes the torque sensing a bit more sensitive.
Delta Voltage is how much force you're applying to the pedals. A lower mV number makes the drive apply more power for the same input force. I like for it to be less sensitive at low pedal forces to keep from being jumpy and make a linear ramp up in sensitivity. Starting the curve at 400mV works well for me at 165 lbs, but you may want to use 375mV, 370mV, 365mV and so on, if you weigh less and can't physically put as much torque on the pedals.
Spd0 - Spd100 are motor speed ranges (not bike speed ranges) that apply to the next settings.
Start(Kg) is how much force we apply to the pedals before it starts pushing.
Full(Kg) is how much pedal force it takes to let it apply full power at that speed. Frey has a good write-up on why this should decrease as pedal cadence increases, but I think their settings are excessive. At least for the type of riding I typically do, if I'm pedalling as fast as I can in a low gear, I can't imagine a scenario where I'd need 1000W+ added to it, so I tone it back.
MinCur(%) is how much it starts applying at each speed.
MaxCur(%) is the maximum it will apply at each speed. Note the lower values at Spd0 and Spd20 since we don't want to dump too much power into the motor until it's spinning sufficiently fast. This protects the drivetrain if you're trying to ride in too high of a gear with a low pedal cadence.
Make sure you click on Write to send the settings to the controller before moving on.
Step 9. Disconnect
- Click on "Close" to disconnect the computer from the drive
- Disconnect the programming cable from the bike
- Reconnect the controller to the drive
- Power up the controller and give it a test ride!
Wrap-Up
With these settings, I'm well impressed and pleased with how the bike performs both on and off road. Even on Assist9, the power delivery is smooth and predictable where it ramps up quickly if I start pedalling hard and it stops quickly when I stop. There's barely any delay and it feels just as responsive as the drives from the big boys.
If you find any ways to make it even better, let me know!
Update: UART vs CANBUS
Bafang is moving away from the easily-modded UART motor controllers, but the UART controllers and motors are still available. A helpful reader recommended this Alibaba listing as a source: https://www.alibaba.com/product-detail/Victory-bafang-m620-bafang-1000w-Bafang_1600328115320.html?spm=a2756.order-detail-ta-ta-b.0.0.272f2fc2uMYKiG