Skip to main content
Electric Bikes

Bafang Ultra M620 Programming aka Taming the Beast

By February 15, 2022August 3rd, 202258 Comments

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?


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!


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:

Matthew Budraitis

Engineer, product designer, co-founder of EveryAmp, and a dedicated fan of EVs, technology, 3D printing, and making.


  • Dennis says:

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

    • EveryAmp says:

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

    • Dave says:

      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).

    • Craig says:

      Just bought a brand new Luna Z-1 and a tuning cable, just use this guide last night to tune it and work perfectly.

  • taylor nairn says:

    Are you able to do any of this tuning through an MacBook?

    • EveryAmp says:

      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.

    • Tom says:

      I use Parallels to run Windows on my MacBook for programming Industrial Controllers, and the Bafang Controller.
      Hope this helps.

  • Brendan says:

    I have the Sondors LX with the M620 – would I be able to increase the power from 750 watts?

    • EveryAmp says:

      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.

      • Carbon says:

        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.

  • Todd says:

    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.

    • EveryAmp says:

      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.

      • Dave says:

        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).

    • Greg says:

      If the new M620 is now CANBUS…then I won’t buy it. I was about to order a frame and M620 kit.

      • Mike says:

        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 has them in stock. I just ordered a UART controller for mine.

  • Shap08 says:

    Thanks, not enough of this information is shared online!

  • Robert T Bannon says:

    CANbus program cables are out right Now!

  • Sunny D says:

    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.

    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.

    • EveryAmp says:

      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!

      • Ford Prefect says:

        Yeah, setting the BaseVoltage mV, just gets the torque sensor to stop reading ~0.1Kg of pedal force as ~12Kg.

        The torque sensor regains about 20% of its potential sensing range, once BaseVoltage is set to a value higher than what the torque sensor outputs at zero pedal force (click Get & add +1 to the highest observed ‘TqVoltate’ with nothing on the pedals, if you want to check).

        Sadly, the sensor can’t output anything higher than ~3245 mV (theoretically 4300 mV, but I haven’t seen any read that high). From a fairly steady 747-752 mV at zero pedal force, it jumps to about 1200 mV with my leg resting on the front pedal. Doing the math, that’s pretty accurate to my actual leg weight… Unfortunately, I can exceed 112Kg just standing on the front pedal; 60Kg feels like a casual level of effort for me.

        It’s physically impossible for the torque sensor on this motor (or any other ebike motor commercially available), to respond proportionally to my full pedal effort.

        Slightly enlarging the Delta Voltage spans to more precisely cover the very maximum range the sensor can output, helps a tiny bit. Ultimately though, the Start\Full\Return Kg values, & the Min\Keep\Decay voltage% values, are where most of the best fine tuning occurs.

        Now if only KeepCurrent% weren’t erroneously limited to “less than” the MinCurrent%, it could actually scale up & down steadily to reflect pedal force between strokes, instead of plummeting toward Minimum current every time the pedal goes around without reaching ReturnKg… ;P

    • Ford Prefect says:

      Heh: I got here by searching for “m620 firmware”, hoping after a year, to find any variant which sets the KeepCurrent% higher than MinCurrent% (if you compare with the KeepCurrent% field on the Pedal Assist tab, or think about what “MinCurrent%” actually does, you’ll see KeepCurrent% is supposed to be higher than MinCurrent%\’StartCurrent%’). Unfortunately, it looks like Bafang is too focused on their crippled CANBus units, to issue a patch fixing the inverted sanity check for the UART units. I’m not at all confident that the CANBus units have this value the right side up either, which is doubly unfortunate since those CANBus units have none of the Torque sensitivity adjustments available.

      I see that there’s a new article on programming the m620, here at everyamp, click the link, read the article & comments… & realize that my findings regarding the Base Voltage are finally making the rounds among those paying attention.

      Anyone who orders multiples of these m620 motors, please pass the word to Bafang, that the KeepCurrent% fields on the Torque tab, are erroneously limited to “equal to or less than” the MINIMUM current, instead of MinCurrent% being < KeepCurrent%!

      I know the terminology's a bit weird, but this issue is a real :facepalm:
      Bafang m620 motors could have much better pedal assist responsiveness, if the KeepCurrent values for each Spd0/Spd20/etc range, worked correctly!

  • paul says:

    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?

  • James says:

    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?

    • mike says:

      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.

    • Ford Prefect says:

      If you have 20Ah or less maximum battery capacity, it’s very likely that running at full throttle for minutes at a time, is causing Voltage sag in your battery pack. 30A from a 20Ah battery, is a discharge rate of 1.5C. That’s quite reasonable, but Voltage sag still occurs. At 30 amps continuous draw, a 20Ah battery would be *completely* dead (as in, at risk of damage) within 45 minutes.

      Try setting the battery indicator on your display, to show Voltage instead of percentage. If you see the Voltage dropping after a few minutes on full throttle, that’s your battery suffering from high rate of discharge.

      A battery pack with more cells in parallel would help alleviate this. Actually, so could a 52 Volt battery pack with identical amp-hours, since the nominal voltage is higher and the pack’s lowest safe voltage is higher too.

  • Leopold says:

    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.

    • EveryAmp says:

      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.

    • Ford Prefect says:

      The m620 is most efficient at Voltages higher than 50.

      If you could somehow fit a 52V 20Ah battery, you’d get more miles per Watt-hour, than you would from 48V×20Ah.

      At 48V×30A peak output, the m620 feels perhaps just a bit more powerful than the BBSHD at 48V×30A, but at more conservative power levels like 48V×4.5A (~320W), the BBSHD wins.

      Both motors run more efficiently at 52V than at 48V… but the m620 *really* benefits from any extra Voltage.

      (Mike at says the original design for the m620’s onboard motor-controller, was to have 100V capacitors; hence the 60V Frey Beast’s ability to run at max power without overheating.)

  • Hans says:

    Where can I order the new CANbus program cables?

  • Eric says:

    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.

    • mike says:

      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.

      • Greg Githens says:

        This is not what he is talking about. I have the same issue. The program connects and reads just fine but after the first read all the buttons become greyed out.

    • Greg Githens says:

      I am having the same issue. Did you every find a solution to this? This happened to me on 2 different bikes.

  • Dave says:

    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!!

    • Ford Prefect says:

      This has been my experience too: Without the ability to configure its torque settings, the m620 was jerky & hazardous to both drivetrain & rider. After thorough tuning, it’s preferable to any ebike motor I’ve ridden.

  • Matt says:

    Is there a way to enable zero start throttle?

  • Brian says:

    Do you know how to update the M620 to a 500W max output? I was told from Bafang that this is possible and in their words “easy” to do… I’m in Canada, and need to update my bike to do this. Do you know how?

  • EveryAmp says:

    You’re looking for the Basic tab, Limited Current(A). You should set it to 500W/(your battery voltage), but for round numbers, just say 500W/50V=10A gets you close.

  • . says:

    můžete mně prosím poradit jaké max.hodnoty můžu nastavit v poli Basic Low battery protection…V?
    a kolik pro limit current A?
    Můj motor je M4OO – 350W – 16A
    Baterie Li-ion 36V – 17.5Ah
    Display DPC 07 – 5 úrovni pomoci

    Děkuji Aleš

  • Craig says:

    If I could buy you a beer, I would. This guide is magic!

  • Daniel says:

    Hi, I have had the same problem (buttons gray out right after reading the flash memory). I believe the problem is with the Bafang software, as when the Read flash and Write flash buttons are grayed and then click the Connect button, the computer tells you that the serial port is still open. So the connection is there, but the software does not seem to see it. Anyhow, the work around I found is to not click on the Read flash right after connection is established. Just go to the page you want to change the settings, enter all of the settings in that page, and then click Write page (at bottom of page, NOT Write flash button on right). This will write the settings you want, and seems to revive the grayed buttons. Let me know it that worked for you too.

  • exmelin says:

    do you know how to override the poor” 30 Amp max ” of the BBSHD? I run a 100A continuous battery, and I know BBSHD motor can assume much more power.. (see ludicrous for example)

  • fabio says:

    Hello mathiew,

    I am new to ebikes, i just purchased a Biktrix Juggernaut Ultra Pro equipes with a bafang Ultra M620 and 52 Volts 17.5 ah. I’ve been reading alot online on how to tweak the power… with trottle only, i can get passed 38KM/H and even crazy pedaling bring me to 46KM/H. I ‘ve seen and read the 38 miles is possible. I would be content with full power on trottle only…

    so far, from what i understand. Increase to 30A, add all 9 power assist levels, the torgue settings is were it gets confusing… is your setup a general one that is valide for all bikes? it seems that i only find setups for 48 volts and not 52.

  • Kolja says:

    When I connect my usb cable to the m620 and open the software it doesn’t show anything under com ports… Its just blank, so there is no way to select one.
    The cable did work on my bbs02 (different software) and i’ve tried different computers, but no luck.
    Has anybody had this problem or more importantly, a solution?

    Thank you!

  • uwekurzynski says:

    The newer M620 with Can bus can be programmed with BESST tool. Well, seems not as good as the M620 with UART! Also I have read that some guys are working at some solutions for programming with Can bus and a Can bus programming cable!
    Besides that there are some good news! The M620 UART is by request still available from some sources in China! 😉

Leave a Reply