Bafang Ultra M620 Programming aka Taming the Beast

Last Updated on August 3, 2022

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

  1. Disconnect the controller from the bike
  2. Connect the programming cable to the bike (not the controller)
  3. Power on the bike’s battery
  4. 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

  1. Open Bafang Config Tool.
  2. Enter the COM port that was assigned by Windows.
  3. Click Connect. If you see information populate below, you know you’re connected. You should also get a message.
  4. Click on Read Flash to pull in the current programming.
  5. 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

  1. Click on “Close” to disconnect the computer from the drive
  2. Disconnect the programming cable from the bike
  3. Reconnect the controller to the drive
  4. 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

34 thoughts on “Bafang Ultra M620 Programming aka Taming the Beast”

  1. You know nothing
    BBSHD and BBS02 use UART protocol
    Bafang Ultra M620 uses CANBUS protocol which has not yet been hacled.

    Reply
    • Such confidence you have! You’re thinking of the M600 though, which is also confusingly called the Bafang Ultra. M620 is very much programmable.

      Reply
    • Dennis, you know very little due to your closed mind. Consider that there are options out there that you obviously haven’t learned of. The operation above works well for the UART based M620 motors (if you can still find one).

      Reply
    • Not currently. The program from Bafang is Windows only and I haven’t seen any versions for MacOS. If you don’t have access to a Windows laptop, I’d recommend programming using your phone and an Eggrider V2. You can always disconnect the Eggrider and reconnect the stock display and it keeps the settings.

      Reply
    • Maybe. Based on their page, they say 750W continuous, 1152W peak, 25A controller. From that, I would guess they have “Limit Current” on the Basic settings page set to 24A (1152W/48V=24A).

      Use can usually increase that to 30A on the stock Bafang controller, but you do have to be mindful of the battery’s maximum output capability. With a 21AH battery, I would think 30A is reasonable, but I have no way to confirm that.

      Also, of course, if you increase the maximum output beyond what they’ve set and you have issues, I would not expect for them to honor their warranty.

      Reply
      • That’s a 48v limitation.

        “ Up to 1300 watts with 52V battery (1152 watts with 48V battery)”

        For some reason it peaks at 1152w on a 48v battery. It is 25A.

        Reply
  2. I have a Bafang Ultra M620, it’s the newer version with CANBUS. Display cable is triangular instead of the old round cable. How do you plug the display into the PC with the newer CANBUS ?
    I do not understand how you can program the M620 if you cannot connect the programming cable into the display and into the PC.

    Reply
    • This programming method only works with the round connector UART drives. I’ve heard the CANBUS drives can be programmed, but you currently need their software and an account, but that’s hard to come by.

      Reply
      • There is a $30 cable available that allows changing the speed limit and wheel size on a CANBUS M620, but that’s all it can do. No need for USB connection to a PC either. It’s a little tricky to use but it does work (I confirmed it with mine).

        Reply
      • As of 10-19-22 you can still purchase Ultra (M620/G510) motors in both 48v and 52v versions with either a CANBUS ( non-programable ) or the UART ( programmable ) versions. Greenbike kit.com has them in stock. I just ordered a UART controller for mine.

        Reply
  3. Thank you for putting this together. I have been doing some research on this and wanted to know if you have read this article about setting the Base Voltage for the torque sensor.
    https://electricbike.com/forum/forum/builds/custom-ebike-motor-programming/71853-bafang-ultra-drive-programming?view=stream

    I was also looking at the Ultra “Smooth” Tune (on the bottom) and felt like it had a good point about decreasing the Full(Kg) setting with speed (motor) because we can’t provide max torque as we start pedaling faster and we probably still want high assist if we are pedaling fast.
    http://frey-bafang.patransformers.com/2020/10/09/bafang-ultra-programming/

    Reply
    • Nice finds! I updated the post with my learnings and testing. I found the base voltage made things a bit more sensitive, but nothing night and day. The Full(Kg) settings can have a huge impact though. Frey’s settings were way too aggressive for me, but I’ll keep playing with them. Thanks for the input!

      Reply
  4. every time i try to input a number in the base voltage the program frezzes and i have to restart it and conect again, did you have anything like this?

    Reply
  5. I have a new M620 on a Biktrix. It has an unrestricted controller but what I’ve noticed is that I only get about 5-8 minutes of full power with the throttle (while pedaling). I dont seem to get full assist when just on pedal assist in level 5 (at level 5 eco is the same as sport) (but I dont see a controller setting to change that). I put a 48 tooth ring on the front so its a 48-10 gear ratio so l can produce lots of pedal torque.

    But am more interested in the throttle issue. This seems to happen regardless of battery voltage. Is that a built-in protection or some kind of heat limit?? Has anyone experienced that? Is there a programming value that could change this limitation?

    Reply
    • If you have a UART style motor you can reprogram your throttle to max output. Most controllers have max % values at different PAS levels. You can reprogram max values for all PAS levels if you have the UART version using a PC and programming USB cable from amazon. Check out Frey controller settings.

      Reply
  6. Great article, thanks.

    I’m building an M620 bike right now and went out of my way to find an older UART model in order to easily tune it. I’m riding a BBSHD at the moment, on 52v, with heavily tweaked parameters, but this article is definitely a leg up for the unfamiliar parameters.

    I’m only able to get 65 cells (19650) into my new frame, so pretty much limited to 48v, and am quietly concerned that this will be a downgrade of sorts from my BBSHD.

    I was considering reducing the Limited Current value down from 30A, to increase my range and potentially open the door to larger capacity cells with lower continuous current.

    a] is this safe and is there any logic to my theory?
    b] is this essentially the same as keeping the max current at 30A and never ramping up the Limit Current (%) to 100% – or just not using the higher assists?

    Last question – any ideas about comparative efficiency, BBSHD & M620? I’m struggling to find any info there.

    Reply
    • I’d say the 52V vs 48V question will largely depend on your riding conditions. If you’re looking for top speed, you’ll probably notice. If you’re like me and ride trails with no interest in top speed, the difference between a lot of power and a little more than a lot of power is negligible. As it is, I rarely ride on level 9 and just keep full power available on the thumb throttle for a boost.

      For range, again that’ll largely depend on your riding conditions and how much effort you’re putting in. I typically ride 4-5 miles on trails and only use ~20% of a charge, so I could have half the battery capacity and be just fine.

      I agree with your assessment on the effect of lower power levels vs an overall limit, but certainly you should set the overall limit equal to or less than what the cells are capable of providing.

      I have a BBS02 and M620, but I really can’t say for sure on the difference in efficiency. I find myself putting in more effort with the M620 because I’d rather rely on the torque sensing vs PAS + throttle on the BBS02, but that’s going to vary. I’ve never done a test of throttle only on both to see which is more efficient. A lot of that will likely come down to the bike itself with weight, gearing, tires, and drivetrain all impacting efficiency.

      Reply
  7. I just went through programming and a test ride. I’d like to change some more settings but now once I connect to the motor and read flash for the first time, the read and write buttons grey out and I cannot write any new changes. I saw someone with the same problem on EBR forum just recently but no one responded there. I’ve tried a new download of the tool, different usb ports, and a different PC, the buttons still grey out after the first Read and I cannot write anything new.

    Reply
    • Sounds like your PC isn’t recognizing your USB cable. Just remember after initially connecting everything up and having the program software recognize your motor, version etc. any changes you make to a specific page you need to select write to overwrite the new settings.
      Write down all your original settings for all the pages before making any changes.
      If you were able to make changes originally you should be able to again. Usually when first connecting up to a for instance a FREY programming version it will show those setting and not your actual motor. You have to select READ to get to YOUR motor. Then make your changes and select WRITE and it should permanently change the settings.
      I had issues with my PC originally and had to reconfigure my USB driver to recognize the USB cable and program. Good luck.

      Reply
  8. EveryAmp, I want to thank you for the thorough and well documented procedure for tuning these motors. I bought a bike with a CAN BUS M620 and it was basically unrideable and dangerous. I found a UART based M620 and after using your program it works amazingly well – better than my other bike with a Shimano 8000. Thank you so much for posting this info and for doing a lot of the necessary legwork to make it right. You saved us!!

    Reply

Leave a Comment