Bafang M500/M600 thread

A clarification, you can change the controller of an M600 with an M500, M510 and M560 have a different torque meter so they should be incompatible with each other.
Has anyone checked this?
I have not check, but I have an M600 and a spare M510 FC1.0 controller, but I have ask in the forum before I trie. I have not done it because of your first answer. The hard layout and the phases of the stator connector are identical.
 
Can I use BESST to adjust the speedlimit for any Bafang canbus midmotor? Looks like it's easy enough to get the tool shipped (and bypass login).
 
Hello, you can try with Besst. Pain with expiring passwords or python workaround though. Also since they swapped to EU servers it allows me only 27kmh to set.
 
Last edited by a moderator:
Hello, you can try with Besst. Pain with expiring passwords or python workaround though. Also since they swapped to EU servers it allows me only 27kmh to set.
Thanks, I dont think Besst does any api call to set the speed. It's only the login which does an api call. Bypassing was rather easy. Perhaps the 27kph limit is part of the besst software version?
 
Last edited by a moderator:
Exactly, there go two male and female cables connected in parallel, one connected to the display, the other connected to the controller.
Follow my instructions and you can't go wrong.
Hi what is "PL" in this schematic? "P+" is VCC. Ground is shielding earth and "PL" is ground i guess? Thanks
 
If anyone stumbles on this. I unlocked my m420 with BESST, no problem at all. Feels much nicer without the limit on.
 
If anyone stumbles on this. I unlocked my m420 with BESST, no problem at all. Feels much nicer without the limit on.
Which version of BESST software did you need to use to do this? The version 1.2.43 did not allow me to up the speed limit (local law message). I tried earlier versions like 1.2.17 (from the Github repo), but those ones won't let me login - I get the 'user not exist' message. Only 1.2.43 lets me login, specifically on the EU server; the Asian servers also give me 'user not exist'. I am using login_bypass.py from the Github repo.

EDIT: Okay never mind, I got it to work with version 1.2.20. I needed to add a fourth url to the Windows host file. The guides I've seen only list these three:
127.0.0.1 api.besst.bafang-service.com
127.0.0.1 eu-central-1.api.besst.bafang-service.com
127.0.0.1 bafang-besst.oss-cn-shanghai.aliyuncs.com

I added one more:
127.0.0.1 test.api.besst.bafang-service.com
 
Last edited:
Is it possible to use the Bafang BESST tool with a diy canbus adapter? It would be nice to save some money and use reusable part, but I'm no sure if the BESST box box is more than a glorified canbus USB adapter or if it contains other hardware or firmware that the BESST Tool checks for.
 
To configure the Bafang M500 / M600 motor without using the BESST programmer, you can use this interface.

Link interface USB to CAN on Amazon:

Link cables Bafang HMI M500/M600 on e-bike-technologies:

Below are the software and the instructions for configuration and use.
Thanks CiDi for the information provided. I tested this on my M420 engine with a DPC18 display and now my speed limit is set to 35km/h with the correct tire size. Works perfect :)
 
Hello! New here.
My bike is a Dengfu E10 with a Bafang M600.
After a couple rides, it started to have an annoying problem which is a safety hazard and makes the bike barely rideable. The issue is when using the pedals, at times the motor is disengaged from the cranks and lets the pedals free-spin. This issue is intensified when going uphill or under load. Thankfully I had de throttle to return home safely. Does anyone have come near this problem or could give me some guidance in what to look for?

Video:

Cheers!
 
Something similar happened to me, but I also ran out of gas with the BBS02B. It was a faulty one-way bearing that acts as a clutch. I think it will also be something like that.
 
There are also other parameters that you can theoretically change, but you can't do it with BESSTPro.
I'm trying to do it via can analyzer, if anyone wants to try these are the messages to use.
First you perform a reading, then you write, modifying only those involved.

Read Parameter 6011 Send message 05116011 0

022D0000 8 30 12 3B D8 0E 68 10 10
0-Nominal voltage DCV 36/43/48
1-Maximum current limit when the battery is full A
2-Overvoltage DCV
3-undervoltage DCV
4-Dynamic driving undervoltage DCV
5-Undervoltage recovery voltage DCV
6-
7-Battery capacity mAh (Byte low)

022D0001 8 27 05 0A 32 2C 00 00 0D
0-Battery capacity mAh (Byte hight)
1-Maximum current limit when battery is low A
2-Battery value threshold when the current begins to decrease %
3-Percentage coefficient of power when the current begins to decay %
4-Display of the complete mileage of the battery Km
5-Sensor type 0/1/2
6-Reverse brake function 0/1
7-Speed Code Disc Teeth

022D0002 8 01 08 01 05 01 02 C8 01
0-Number of speed signal channels 1/2
1-Anti-heel pair controls the number of teeth
2-Motor type 0/1/2
3-Number of pole pairs
4-Number of speed magnets
5-Temperature sensor signal 0/1/2
6-Reduction ratio (Byte low)
7-Reduction ratio (Byte hight)

022D0003 8 C8 00 50 46 80 BB 03 00
0-Maximum speed of rail movement RPM (Byte low)
1-Maximum speed of rail movement RPM (Byte hight)
2-Inductance of the D axis uH (Byte low)
3-Inductance of the D axis uH (Byte hight)
4-Inductance of the Q axis uH (Byte low)
5-Inductance of the Q axis uH (Byte hight)
6-Phase limit resistance mΩ (Byte low)
7-Phase limit resistance mΩ (Byte hight)

022D0004 8 60 00 0C 27 01 28 05 03
0-Rear EMF coefficient 0.001V/RPM (Byte low)
1-Rear EMF coefficient 0.001V/RPM (Byte hight)
2-Start voltage 0.1DCV
3-End voltage 0.1DCV
4-Speed limited
5-Dinamic current %
6-Current loading time 100ms
7-Current load shedding time 100ms

022D0005 8 05 0A 14 1E 28 32 3E 4B
0-Level 1-#-# - Current Limit %
1-Level 2-1-# - Current Limit %
2-Level 3-#-1 - Current Limit %
3-Level 4-2-# - Current Limit %
4-Level 5-#-2 - Current Limit %
5-Level 6-3-# - Current Limit %
6-Level 7-#-# - Current Limit %
7-Level 8-4-# - Current Limit %

022D0006 8 64 64 64 64 64 64 64 64
0-Level 9-5-3 - Current Limit %
1-Level 1-#-# - Speed Limit %
2-Level 2-1-# - Speed Limit %
3-Level 3-#-1 - Speed Limit %
4-Level 4-2-# - Speed Limit %
5-Level 5-#-2 - Speed Limit %
6-Level 6-3-# - Speed Limit %
7-Level 7-#-# - Speed Limit %

022E0007 8 64 64 00 00 14 00 FF B4
0-Level 8-4-# - Speed Limit %
1-Level 9-5-3 - Speed Limit %
2-With or without display 0/1
3-The headlights are always on 0/1
4-Boost speed (Byte low)
5-Boost speed (Byte hight)
6-
7-

Read Parameter 6012 Send message 05116012 0

022D0000 8 0D 04 02 01 01 01 0A 0A
0-Starting torque value - 0 Kg
1-Starting torque value - 1 Kg
2-Starting torque value - 2 Kg
3-Starting torque value - 3 Kg
4-Starting torque value - 4 Kg
5-Starting torque value - 5 Kg
6-Torque value at full load - 0 Kg
7-Torque value at full load - 1 Kg

022D0001 8 09 08 07 06 0D 04 02 01
0-Torque value at full load - 2 Kg
1-Torque value at full load - 3 Kg
2-Torque value at full load - 4 Kg
3-Torque value at full load - 5 Kg
4-Return torque value - 0 Kg
5-Return torque value - 1 Kg
6-Return torque value - 2 Kg
7-Return torque value - 3 Kg

022D0002 8 01 01 64 64 64 64 64 64
0-Return torque value - 4 Kg
1-Return torque value - 5 Kg
2-Maximum current - 0 %
3-Maximum current - 1 %
4-Maximum current - 2 %
5-Maximum current - 3 %
6-Maximum current - 4 %
7-Maximum current - 5 %

022D0003 8 04 04 04 04 04 04 08 08
0-Minimum current - 0 %
1-Minimum current - 1 %
2-Minimum current - 2 %
3-Minimum current - 3 %
4-Minimum current - 4 %
5-Minimum current - 5 %
6-Decay time of the torque - 0 10ms
7-Decay time of the torque - 1 10ms

022D0004 8 08 08 08 08 01 00 00 00
0-Decay time of the torque - 2 10ms
1-Decay time of the torque - 3 10ms
2-Decay time of the torque - 4 10ms
3-Decay time of the torque - 5 10ms
4-Start pulse number - 0
5-Start pulse number - 1
6-Start pulse number - 2
7-Start pulse number - 3

022D0005 8 00 00 02 02 02 02 02 02
0-Start pulse number - 4
1-Start pulse number - 5
2-Current decay time - 0 5ms
3-Current decay time - 1 5ms
4-Current decay time - 2 5ms
5-Current decay time - 3 5ms
6-Current decay time - 4 5ms
7-Current decay time - 5 5ms

022D0006 8 FA FA FA FA FA FA 07 FF
0-Maximum pulse Width of pedal speed - 0 2ms
1-Maximum pulse Width of pedal speed - 1 2ms
2-Maximum pulse Width of pedal speed - 2 2ms
3-Maximum pulse Width of pedal speed - 3 2ms
4-Maximum pulse Width of pedal speed - 4 2ms
5-Maximum pulse Width of pedal speed - 5 2ms
6-Motor derating temperature °C
7-Motor overheating temperature °C

022E0007 8 FF FF FF FF FF FF FF E6
0-
1-
2-
3-
4-
5-
6-
7-

Write Parameter 6011

05106011 1 40
022A6011 0
05146011 8 30 12 3B D8 0E 68 10 10
022A6011 0
05150000 8 27 05 0A 32 2C 00 00 0D
022A6011 0
05150001 8 01 08 01 05 01 02 C8 01
022A6011 0
05150002 8 C8 00 50 46 80 BB 03 00
022A6011 0
05150003 8 60 00 0C 27 01 28 05 03
022A6011 0
05150004 8 05 0A 14 1E 28 32 3E 4B
022A6011 0
05150005 8 64 64 64 64 64 64 64 64
022A6011 0
05160006 8 64 64 00 00 14 00 FF B4
022A6011 0


Write Parameter 6012

05106012 1 40
022A6012 0
05146012 8 0D 04 02 01 01 01 0A 0A
022A6012 0
05150000 8 09 08 07 06 0D 04 02 01
022A6012 0
05150001 8 01 01 64 64 64 64 64 64
022A6012 0
05150002 8 04 04 04 04 04 04 08 08
022A6012 0
05150003 8 08 08 08 08 01 00 00 00
022A6012 0
05150004 8 00 00 02 02 02 02 02 02
022A6012 0
05150005 8 FA FA FA FA FA FA 07 FF
022A6012 0
05160006 8 FF FF FF FF FF FF FF E6
022A6012 0
Quick question: I noticed "speedlimit" above, setting this value to zero, would that disable the speedlimit completely (so that you can set the wheel size and circumstance on the console display itself)?
 
Last edited:
Thank you for these informations !
How to use theses values?

with innomaker , 022D0001 is frame ID value , and 09 08 07 06 0D 04 02 01 is data input ?
How to use an change values 0, 1 ,2 etc into data input
what number 8 is for ?

022D0001 8 09 08 07 06 0D 04 02 01
0-Torque value at full load - 2 Kg
1-Torque value at full load - 3 Kg
2-Torque value at full load - 4 Kg
3-Torque value at full load - 5 Kg
4-Return torque value - 0 Kg
5-Return torque value - 1 Kg
6-Return torque value - 2 Kg
7-Return torque value - 3 Kg
 
I’m not sure this is best place to ask, but here goes. My Bafang M600 is ready for service, but I’m wondering if I should open it up and possibly risk bricking it or needing to purchase the BESST tool if the motor gets rotated.

The bike is a Luna X1, almost 1500 miles, 3+ years good service. It is due for lubrication at the very least. Lately the motor’s internal gears make a surging sound under power. The RPM stays smooth and constant but noise level goes louder-soft-louder-soft… at a frequency that matches a gear rotation rate. I think the Peek gear has worn unevenly.

I ordered my X1 with the Ludicrous 2kW option. It’s not the later Ludi V2.

I did not choose the silent Peek gear (then) option but I assume it has one. They became standard-equipment sometime after I got mine. The motor had always been very quiet. Even now it isn’t loud but the surging gear noise calls for an inspection and grease at least.

I am not without mechanical skills and tools. I have diagnosed and repaired many (ICE) motorcycle engines and transmissions. I’ve purchased the big bottom-bracket socket wrench. I can get a tube of the correct grease and a Peek gear if needed.

I like this bike and the battery still has enough juice for where I ride but I’m not married to it. I think I can unhook the wires from the controller without issue but I’ve seen no documentation or video of a Ludi M600. In one YouTube video there is a warning that you must not rotated the motor-rotor on the “non-Ludicrous” M600. No mention is made about Ludicrous motors. Some people struggle mightily to get those two intermediary gears and their carrier off of the motor. It seams like just lifting them away from the motor would rotate the motor, as it has a worm gear.

I don’t know if the BESST tool can even be purchased. Bafang says it is for professionals not end-users. Luna lists it as Sold-Out.

The bike runs and rides now. I would be happy to repair it or to sell it. I would not be happy to spend several hours wrenching, only to discover that it no longer runs. Then, if I can find the BESST tool and spend another $100 maybe it will run again or not?

Summing it up again here: for those who have opened up the cases of a Bafang M600, is it possible and likely that a competent home mechanic can successfully swap-in a new Peek gear and grease an M600 without access to the BESST tool?

Thank you for your consideration.
 
"Open Brain Surgery For EBikes And EScooters" is how HackADay news site see this OpenSource solution of DIY electronics and firmware for EBikes and EScooters. The project was also featured in this week's CircuitPython newsletter.

"Personal Electric Vehicles (PEVs) all contain the same basic set of parts: a motor, a battery, a motor controller, some sensors, and a display to parse the information. This simplicity allowed [casainho] to develop a custom controller setup for their own PEVs.

Built around the venerable VESC motor controller, [casainho]’s addition is the EBike/EScooter board that interfaces the existing motor of a device to the controller. Their ESP32-powered CircuitPython solution takes the sensor output of a given bike or scooter (throttle, cadence, or torque) and translates it into the inputs the controller uses to set the motor power.

They’ve also designed an ESP32-based display to interface the rest of the system to the user while riding. Since it also runs CircuitPython, it’s easy to reconfigure the functions of the three button device to display whatever you’d like as well as change various drive modes of your system."

1699901785658.png 1699901802552.png
 
For those struggling with using the BESST tool (i.e. running the login bypass script, finding the connections on the bike, using the right software), I made a full walkthrough guide on youtube:
 
Which version of BESST software did you need to use to do this? The version 1.2.43 did not allow me to up the speed limit (local law message). I tried earlier versions like 1.2.17 (from the Github repo), but those ones won't let me login - I get the 'user not exist' message. Only 1.2.43 lets me login, specifically on the EU server; the Asian servers also give me 'user not exist'. I am using login_bypass.py from the Github repo.

EDIT: Okay never mind, I got it to work with version 1.2.20. I needed to add a fourth url to the Windows host file. The guides I've seen only list these three:
127.0.0.1 api.besst.bafang-service.com
127.0.0.1 eu-central-1.api.besst.bafang-service.com
127.0.0.1 bafang-besst.oss-cn-shanghai.aliyuncs.com

I added one more:
127.0.0.1 test.api.besst.bafang-service.com
No need to unlock and all the hassle. Just buy The APT 600C Can screen on ebay advertised as maintanance screen for bafang 500 /600 bafang motor .With this screen wheel size and speed are not locked anymore and works on M420 and also on my M200 Can Bafang motor :) Ik bought it on ebay for 50 euros. some are asking . more than 100 . There also seems to be also one with bluetooth support the APT 600C BLE . enjoy !
 
Did you manage to change the speed and circumference of the wheel? If so, wouldn't you have the possibility to increase it with M500 or M600 can?
 
I discovered that it's possible to install an ISIS torque sensor from M620 into a M500 or M600 (not tested with M510 or M560). It sticks out a bit by 3mm and I havn't tested, whether it works with the firmware rightaway. However the model-numbers of the black electronic piece are identical: SR PA410.32.ST.C 1.1


2023-12-10-15-57-02-692.jpg2023-12-10-16-18-50-189.jpg
2023-12-10-15-57-45-081.jpg
 
Is it possible to install new controller to "old" motor?
M510- and M560-motors are newer than M500- and M600-motors. The M510-controller (~710W peak) has received multiple revisions and can be recommended over M500 (~660W peak). However if you want power, I'd rather go with the M600-controller (~915W peak), than M560 (~1520W peak) in the current state. The M560 has the M510-controller (see my post here) with different firmware and bootloader. The M560-firmware is in its early stages, like the M510 was back then.. As a sidenote, it's not possible to flash the 500W or 750W M560-firmware to a M510-controller, because they have different bootloaders. You can compare the first byte of each firmware-file, to find out for which motor it is. Sometimes it's even written before the timedate within the filename:

Code:
M500: 0x88
M510: 0x90, 0x91, 0x71, 0x72,
M600: 0x89, 0x93
M560: 0x73, 0x74

For a full comparision of all Mxxx motors visit my Google-Sheet: Bafang Mxxx Mid-Drive Overview

M510-controllers can be bought here (or on Aliexpress):
 
Last edited:
M510- and M560-motors are newer than M500- and M600-motors. The M510-controller (~710W peak) has received multiple revisions and can be recommended over M500 (~660W peak). However if you want power, I'd rather go with the M600-controller (~915W peak), than M560 (~1520W peak) in the current state. The M560 has the M510-controller (see my post here) with different firmware and bootloader. The M560-firmware is in its early stages, like the M510 was back then.. As a sidenote, it's not possible to flash the 500W or 750W M560-firmware to a M510-controller, because they have different bootloaders. You can compare the first byte of each firmware-file, to find out for which motor it is. Sometimes it's even written before the timedate within the filename:

Code:
M500: 0x88
M510: 0x90, 0x91, 0x71, 0x72,
M600: 0x89, 0x93
M560: 0x73

For a full comparision of all Mxxx motors visit my Google-Sheet: Bafang Mxxx Mid-Drive Overview

M510-controllers can be bought here (or on Aliexpress):
Same stator/rotor on all of them? (510,600,560)
 
Seems likee the m560 is potted for better heat transfer.But from what I read it overheats quickly anyway
 

Attachments

  • 2023-12-09-13-37-02-111.jpg
    2023-12-09-13-37-02-111.jpg
    1.6 MB · Views: 26
  • 2023-12-09-14-01-46-473.jpg
    2023-12-09-14-01-46-473.jpg
    1.2 MB · Views: 25
Back
Top