ElectricMotorcycleForum.com
Makes And Models => Zero Motorcycles Forum | 2013+ => Topic started by: Keith on November 24, 2017, 11:54:02 PM
-
I have successfully connected to the BMS using a modified version of the ODB serial cable described in this thread http://electricmotorcycleforum.com/boards/index.php?topic=4296.0
EDIT: New drawing to clearly show the pinout. PDF version has links.
The BMS connector is tiny. I found this part that mates with it and was able to solder wires to it. http://www.mouser.com/ds/2/276/0791077003_PCB_RECEPTACLES-175725.pdf
I then used a multimeter to find the right pins for a serial connection. I found the ground pin is connected to the B- with 10 ohms. Connecting green TX to the RX pin and white RX to the TX pin got me this:
ZERO BMS> help
*************************************************************
* BMS Main Menu *
*************************************************************
help - Display this Help screen
login - Show login level, or login with password
logout - Log out of BMS
version - Display Version Information
stats - Display All statistics
balstats - Display balance statistics
capstats - Display capacity statistics
set - Show all settings, or edit a specific setting
eventlogdump - Display the contents of the event log
errorlogdump - Display the contents of the error log
status - Show pack status summary
balance - Show pack balance
config - Show pack configuration
inputs - Show all inputs
outputs - Show all outputs
errors - List all present warnings and errors
dumpall - Dump all data (stats, inputs, settings, and logs
ZERO BMS>
WOW!!! 8) So no more waiting for the app to maybe get bms logs. I will add this to the unofficial manual of course. This is not an easy thing to do, but yes, it can be done. Same serial setup as the OBD, 38400 8 N 1 N, no power connection.
-
This looks like the same screen you get with the reaper dongle in the ODBII port :)
I am sure i don't have to tell you to be careful when setting things in there and I would suggest doing a dumpall before changing anything so you can refer back to it if something goes wrong ;)
-
Yes, this is very similar to the MBB login prompt but direct to the BMS, all of the same login details. I don't think I want to change anything, but it is nice to ask it how it's doing. I may get the right parts to make a real cable. That would be just 50394-8200 pins in a 51014-0008 housing. The other four pins have 8k pullups to 3.3v, no idea what they are for, some kind of inputs I guess. And yes, caution is important, this gets very expensive fast if you do something dumb.
-
It would be great to know what the BMS 'set' submenu consists of. If/when a 4.0 single FX brick becomes available I plan to get one if possible (it will need a reprogrammed 2014 BMS) and it'd be nice to have some idea in advance exactly what's going on, especially if someone at Zero tells my dealer it can't be done.
Ray
-
I've learned that the menus change with the login level and that there are commands that work but are not on the menus. So only Zero know exactly what's going on.
-
Here's what the Quiq charger does when changing from constant current to constant voltage at 100% SOC. Nice data from the BMS serial port although it took some work to filter out all of the DEBUG lines complaining about no CAN traffic.
-
Here's what the Quiq charger does when changing from constant current to constant voltage at 100% SOC. Nice data from the BMS serial port although it took some work to filter out all of the DEBUG lines complaining about no CAN traffic.
Nice! Can we infer a charging profile from this?
-
Looks like we can. Interesting how the current is low resolution and noisy while the voltage data is clean. I'll do the same for the on board charger next, if I can figure out how to hook up the cable while the pack is on the bike.
-
K
K> > > Here's what the Quiq charger does when changing from constant current to constant voltage...
This is the Zero Quick Charger version of the Quiq charger, right? The one sold by Zero?
S> > Nice! Can we infer a charging profile from this?
I would think this is a good profile, but I'd also compare it to what the onboard does.
K> Looks like we can. Interesting how the current is low resolution and noisy while the voltage data is clean. I'll do the same for the on board charger next, if I can figure out how to hook up the cable while the pack is on the bike.
Yeah. I'd de-noise the current a bit, maybe a rolling average, if building a charging control circuit.
-
I've ordered a proper connector and if I'm careful, I think I can make it low profile so it can work on the bike. There is very little clearance to the pack diagnostic cover when the packs are on the bike so a small right angle wire routing to the connector may work. Some time next week...
-
Made a nice BMS cable with the proper connector. It works great but my plan to use it on the bike did not. Onboard charger will not close the contactor when the BMS is connected. The dash gives the 2-3 flashes CAN error. Can't use the OBD while charging either, more CAN trouble. So I will get the charge current versus time data for the onboard charger, but it will have to be done on the AC side, oh well.
-
I can confirm that Keiths solution works perfectly fine. I have used it a few times and played around with the BMS or pulled logs.
-
It would be great to know what the BMS 'set' submenu consists of. If/when a 4.0 single FX brick becomes available I plan to get one if possible (it will need a reprogrammed 2014 BMS) and it'd be nice to have some idea in advance exactly what's going on, especially if someone at Zero tells my dealer it can't be done.
Ray
(sorry for replying to an old thread)
It's easy to see all of the possible commands from any login level if you just dump the firmware banks and look at it on your computer ;) (...and it's also easy to see the passwords for the login levels...)
This is what it the main help command prints out if you're logged in at max login level:
* BMS Main Menu *
*************************************************************
help - Display this Help screen
login - Show login level, or login with password
logout - Log out of BMS
version - Display Version Information
stats - Display All statistics
balstats - Display balance statistics
capstats - Display capacity statistics
statsrst - Reset All statistics
settingsrst - Reset System Settings To Defaults
eventlogdump - Display the contents of the event log
eventlogadd - Adds an arbitrary string to the Event Log
eventlogfill b - Fills Event log with <b> bytes
errorlogdump - Display the contents of the error log
errorlogadd - Adds an arbitrary string to the Error Log
status - Show pack status summary
balance - Show pack balance
config - Show pack configuration
inputs - Show all inputs
meas - Show most recent measurements
outputs - Show all outputs
errors - List all present warnings and errors
reset - Reset CPU with SW reset
eeprom - Show EEPROM usage
eeprom set x y - Set a byte in Eeprom at address x to y
erase eeprom - Erase entire EEPROM
bin - Dump as a binary stream of eeprom
hex - Dump as an ascii file of eeprom
timing - Display system timing
mbb - Display MBB Interface INfo
timerrst - Reset All clocks to zero
dobal - Balance Pack to Tolerance
stopbal - Stop all menu-related balancing
wdt reset - Force Watchdog Timeout
exit_to_bl - Exit main app and start bootloader
test - Run a specific test, or show the test menu
can - Display CANbus statistics
pl536 - Displays contents of all PL536 registers.
However, there appear to be some hidden commands that even the max login level help screen won't tell you about, like: (there are also some other commands that are just aliases / old names for existing commands; I haven't listed them here because who cares)
errorlogdumpraw
eventlogdumpraw
override_monolith_charge
cancel_monolith_charge
reset_quick
The full list of 'set' command completions:
* BMS Settings *
*************************************************************
To change settings, type:
"set <setting name> <value1> <value2> ..."
************
Psudo Settings
Variable Description Value
time Current Time (RTC) %s
time utc Current UTC Time (RTC) %10lu
systime System Clock Time (test only) %10lu
dut_mode DUT mode %u
soc Present State Of Charge %3u %%
correctsoc Correct State Of Charge for Voltage %3u %%
addfulldis Add full discharge to history in uAh
addestdis Add estimated discharge to history in uAh
config none Reset config to uninitialized
vref_auto_cal Auto-calibrate ADC VREF
**************
-
Don't be sorry! I'm glad to see others get into this deeper understanding of our machines. I see some commands listed under help that are not in your list, maybe different firmware, or perhaps a different login, for example
timerrst - Reset All clocks to zero
dobal - Balance Pack to Tolerance
dobackgroundbal - Continually Balance Pack In Background Until Balanced
stopbal - Stop all menu-related balancing
There are also hardware differences in the BMS versions. I tried and failed to calibrate the dual current sensors in a replacement BMS with these commands
cur_sense_offset_0 Current sensor 0 zero-offset -27 mV
cur_sense_offset_1 Current sensor 1 zero-offset 0 mV
cur_sense_cal_0 Current sensor 0 slope calibration 0x8000
cur_sense_cal_1 Current sensor 1 slope calibration 0x8000
cur_sense_blend Current sensor blending voltage 1 mV
The settings would not stick, don't know why and the measurement error was small enough to ignore. Older BMS has only one current sensor. Maybe someday we'll have open source firmware!
-
I see some commands listed under help that are not in your list, maybe different firmware, or perhaps a different login, for example... <snip>
Those are in the list, you just need to scroll the my text box down separately. (code blocks in this forum software kind of suck)
Though, I mistakenly omitted dobackgroundbal (which also goes by 'dbgb' in the code) because I hadn't realized they were a different function from the foreground balance command.
The version of the BMS firmware I happen to be referencing is this one from 2016-10-26, intended for a 2017 S if I recall
"part_name" : "bms",
"firmware" : "75-08037",
"firmware-revision" : "21",
"build_number" : "320"
... agreed, an open source version would be lovely.
-
I have four versions
* Firmware Name : FIRMWARE BMS CORTEX M3 15MY IMPL *
* Firmware PN : 75-07787 *
* Firmware Rev : 31 *
* Built : Oct 13 2015 16:53:53 *
* Firmware Name : FIRMWARE BMS CORTEX M3 15MY IMPL *
* Firmware PN : 75-07787 *
* Firmware Rev : 33 *
* Built : Feb 9 2016 10:25:51 *
* Firmware Name : FIRMWARE BMS CORTEX M3 15MY IMPL *
* Firmware PN : 75-07787 *
* Firmware Rev : 39 *
* Built : Jun 14 2017 09:45:14 *
* Firmware Name : FIRMWARE BMS 17MY IMPL *
* Firmware PN : 75-08037 *
* Firmware Rev : 29 *
* Build : 2018-01-12_150928 470 banka *
-
Thanks for all the info! I see a lot of display / show / reset commands, but nothing regarding pack configuration or parameters... does anyone know how the BMS tells the MBB what capacity / peak current capability / max charge rate etc. the currently-installed battery has? Or how a new Power Tank identifies itself (with all the PT problems I've seen here, I have a feeling this process is flawed)? If I ordered a 3.6 brick Zero would have to install a 2014 BMS and configure it to 3.6kWh, I'm just wondering exactly how that's done. It doesn't seem like anything shown would accomplish that, unless 'config' has a submenu w/write commands.
The settings would not stick, don't know why
Maybe there's a write-protect switch accessible only by a login password not shown?
Ray
-
Here's the most detailed settings I've seen, found on the dark web
Logged in at level 3
ZERO BMS> set
*************************************************************
* BMS Settings *
*************************************************************
To change settings, type:
"set <setting name> <value1> <value2> ..."
0x preceding the value may be used to indicate a hex number
************
Psudo Settings
************
Variable Description Value
+---------------+------------------------+--------------------
time Current Time (RTC) 02/16/2018 13:51:56
time utc Current UTC Time (RTC) 1518807116
systime System Clock Time (test only) 1518807116
dut_mode DUT mode 0
capacity Ideal Total Capacity 26000000 uAh
soc Present State Of Charge 46 %
correctsoc Correct State Of Charge for Voltage 46 %
addfulldis Add full discharge to history in uAh
addestdis Add estimated discharge to history in uAh
config none Reset config to uninitialized
vref_auto_cal Auto-calibrate ADC VREF
**************
Settings
**************
NV writes: 605
Setting Name Setting Desc Value Units
+--------------------+---------------------------------------+------------+-----
serial BMS Serial Number
pack_serial Pack Serial Number
build_time Firmware Build Timestamp
packtype Pack Type 2016_module
packtype_index Pack Type Index 7
numbricks Number of bricks in pack 1
cell_cap Cell Capacity in mAH 26000 mAH
cell_cap_mwh Cell Capacity in mWH 95000 mWH
vref_cal ADC VREF calibration 0x3FFA
cur_sense_offset_0 Current sensor 0 zero-offset -27 mV
cur_sense_offset_1 Current sensor 1 zero-offset 0 mV
cur_sense_cal_0 Current sensor 0 slope calibration 0x8000
cur_sense_cal_1 Current sensor 1 slope calibration 0x8000
cur_sense_blend Current sensor blending voltage 1 mV
lvc Cell Low Voltage Cutoff 3140 mV
cev Cell Empty Voltage 2500 mV
hvc Cell High Voltage Cutoff 4195 mV
minchg Cell Minimum Charge Voltage 2500 mV
lowvolt Cell voltage to flag Low Pack 3450 mV
lvh Cell Low Voltage Holdoff Time 5000 ms
hvh Cell High Voltage Holdoff Time 2000 ms
lowhold Time pack must be low for flag 5000 ms
mintempdiscutback Minimum Discharge Cutback Temp 55 C
maxtempdis Maximum Discharge Temp 60 C
mintempdis Minimum Discharge Temp -25 C
mintempchg Minimum Charge Temp 0 C
maxtempchg Maximum Charge Temp 50 C
baltol Balance Tolerance While Charging 3 mV
minbal Min Voltage to balance while charging 3700 mV
idlebal Idle Balancing Allowed 1
baltolidle Balance Tolerance While Idle 3 mV
minbalidle Min Voltage to balance while Idle 3900 mV
maxbalres Max Balance Resistors On At Once 10 mV
balon Balance Res On Time 8000 ms
baloff Balance Res Off Time 2000 ms
logfreqrun Discharge log frequency when Running 60000 ms
logfreqchg Discharge log frequency when Charging 600000 ms
logfreqidle Discharge log frequency when Idle 432000000 ms
lowcap Approx Capacity When Low 10 %
hibwait Wait time before hibernate 1800 seconds
hibtime Hibernate Time 86400 seconds
timecor UTC Correction -5 hours
icres Cell tap interconnect resistor value 15000 mOhms
icfuse Cell tap interconnect fuse res value 1077 mOhms
icnorm Cell tap interconnect normal res value 378 mOhms
icresmask Cell tap interconnect resistor mask 0x00000000
icfusemask Cell tap interconnect fuse mask 0x1FFFFFFF
icresinst Cell tap interconnect resistors install 0
icfuseinst Cell tap interconnect fuses installed 1
loadmarg Balance Load Test Margin 50 %
cur_lim_mon_marg Current Limit Monitor Margin 25
cur_lim_mon_cur_coef Current Limit Monitor Current Coefficie 0x0100
cur_lim_mon_lim_coef Current Limit Monitor Limit Coefficient 0x0020
test_mode Test Mode active 0
startup_failed Startup Failed 0
startup_warning Startup Warning 0
pl536_ignore Ignore Invalid Cell Voltages 1
pl536_re_init Re-initialize invalid PL536s 0
debug_level Debug Level 1
rawcellcutstart Raw cell voltage cutback start 3400 mV
rawcellcutend Raw cell voltage cutback end 3150 mV
opencellcutstart Open circuit cell voltage cutback start 3700 mV
opencellcutend Open circuit cell voltage cutback end 3200 mV
power_soc Use Power-Based SOC 0
abnormhigh Cell Abnormally High Voltage 4210 mV
crithigh Cell Critically High Voltage 4250 mV
cur_sense_off Dual Current Sensor Allowed Offset Diff 5 %
cur_sense_slope Dual Current Sensor Allowed Slope Diff 8 %
cutback_filt_up_coef Current cutback filter up coefficient 0x0020
cutback_filt_down_coef Current cutback filter down coefficient 0x00A0
batt_cur_lim Battery Current Limit 1040 A
board_id Board ID 17
firmware_rev Firmware revision 29
-
I have not installed a power brick yet but on the MY17's the harness has a loop back connection on the power brick connector so the bike knows there is not a power brick in place (last part is conjecture)
I wonder if the number of bricks would simply be updated to 5 ? ... the problem being a dealer would likely flash your firmware when installing a power brick with a version which already has the brick settings configured ... just like they would flash your firmware with 2 or 4 bricks on the older bikes (If i recall they have separate files for these)
Not sure if this applies on the newer bikes though :/ (wish I did)
-
I have not installed a power brick yet but on the MY17's the harness has a loop back connection on the power brick connector so the bike knows there is not a power brick in place (last part is conjecture)
I wonder if the number of bricks would simply be updated to 5 ? ... the problem being a dealer would likely flash your firmware when installing a power brick with a version which already has the brick settings configured ... just like they would flash your firmware with 2 or 4 bricks on the older bikes (If i recall they have separate files for these)
Not sure if this applies on the newer bikes though :/ (wish I did)
Burton, I have the powertank on MY17 Sr and the way it manage the 5th brick is that there is BMS0 and BMS1. BMS 0 is the monolith with 4 bricks ( or 2 when you get the long brick) and BMS1 with 1 brick or 0 brick.
So BMS0 can not have 5 brick i think as it only manage the monolith and the powertank has his own BMS so it is BMS1
Doc
-
Good info Doc.
So does this mean when I do a BMS command in the terminal for the MBB and it lists 4 bricks on my MY17 I have a frankenbike like yours? And if so what are the implications of having 4 vs 2 bricks?
-
Hi All, I have been trying to talk to the BMS on my 2018 longbrick. Its a 7.2kwh brick.
I tried this and for the life of me I can't get it to work. I tried Putty and Realterm. I tried all kinds of baud rates.
My setup is not the same as normal I don't have a MBB and I don't have the BMS coms wires hooked to anything at this point. Has anyone else had success with this lately? Will the BMS talk over Serial if its only plugged into the battery it self?
Thanks.
-Arlin
-
On software side you could also try the arduino IDE which is free and has a serial monitor build in. A bit of a workaround but easier since you just need to pick the right device from a list.
-
On software side you could also try the arduino IDE which is free and has a serial monitor build in. A bit of a workaround but easier since you just need to pick the right device from a list.
Hmm thanks for the response. Not sure how I would do that. You think I can just try the arduino IDE with no arduino hooked up? Or are you thinking to have an arduino intercept the serial data first?
-
No Arduino needed but you'll still need an USB to TTL converter which is the part used to program smaller Arduino boards hence the Arduino IDE.
That and an OBDII connector is really all you need. In below video I'm gutting a cheap Bluetooth OBD adapter to put such an USB to TTL converter in place instead and than in the end I read out from console. Video is in a different language but just visually it might help to get an idea.
https://youtu.be/JqUwTeAqi3o?t=159
-
No Arduino needed but you'll still need an USB to TTL converter which is the part used to program smaller Arduino boards hence the Arduino IDE.
That and an OBDII connector is really all you need. In below video I'm gutting a cheap Bluetooth OBD adapter to put such an USB to TTL converter in place instead and than in the end I read out from console. Video is in a different language but just visually it might help to get an idea.
https://youtu.be/JqUwTeAqi3o?t=159
Ok thanks. So a normal USB-serial adapter won't work?
Watching video now.
-Arlin
-
ok after much messing around I got it working. I will do a how to later.
Arduino IDE was actually the fastest way.
I also got real term working and I bet putty will work
-
I put a video together of what I figured out.
Cheers.
https://youtu.be/TR8amzbhBGI
-
Thanks for all the info.
It's really helping.
Any idea if there are also CAN lines in this connector?
-
Thanks for all the info.
It's really helping.
Any idea if there are also CAN lines in this connector?
I don't belive there is CAN lines in this connector. I have the other connector connected for CAN lines.
-
Here's what the Quiq charger does when changing from constant current to constant voltage at 100% SOC. Nice data from the BMS serial port although it took some work to filter out all of the DEBUG lines complaining about no CAN traffic.
Nice! Can we infer a charging profile from this?
(https://i.postimg.cc/9MMT1Pn8/chart.png)
Sorry for reviving an old thread, I must clear a common misconception. What you can see there is not something the charger controls. It does not actively follow a charging profile.
This goes for most lithium chargers.
For lithium batteries it is not needed to slow down the charging when they go towards 100%. What is happening (in this diagram as well) is CCCV charging, first doing a constant current and then holding a constant voltage.
The point where this changes from CC to CV is not actively controlled, at some point the battery just reaches full voltage. Since the power supply does not pull it any higher, the current starts dropping while the battery soaks to full voltage.
None of this is actively controlled and the current ramp down is not actively controlled.
(Also someone had wondered why the current is so noisy and the voltage is not. The current is not actually noisy, the behavior is just caused by the fact that the resolution of the current sensor here is 1A, and without any hysteresis it jumps +/-1A, even if it just goes from 0,99 to 1,01A in reality.)
-
Clearly this is a charging profile although it may be much simpler to create than it looks. But the charger could decide to turn off current immediately when full voltage is reached. It does not. It let's the battery "soak" for a period of time, surely useful for cell balancing near full charge. Integrating the declining current would represent a significant amount of charge, perhaps 100Wh or so in this case. It is probably a very simple decision by the charger, stop when the current drops below ~2 amps (caused by the gradual increase in the battery voltage), and not a regulated current/time curve. But regardless, a profile is created. Would battery health be reduced if the full voltage soak time interval was not done? I think so. Would a more sophisticated profile be even better? Possibly, only a lot of real battery life cycle testing could determine that. And as a practical matter, the person wants to use the battery, not wait indefinitely while a reluctant cell (maybe, given more time or a different current) reaches its "ideal" voltage.
-
Well yes, in a sense everything is a charging profile of course. But this really is very basic and requires no intelligence. I just wanted to point that out.
In my 2013 Zero, they actually use LED power supplies (for lamps) to charge. Enough for a lithium battery.
Would battery health be reduced if the full voltage soak time interval was not done? I think so.
No, stopping the charge immediately is healthier for the battery (disregarding the balancing need for now). The higher the charge voltage, the more harm is done, with quite a significant difference happening in the last few tenth of a Volt. That's the reason Zero charges the cells only to 4,15V instead of 4,2V, even though it seems like a small difference.
-
My impression is that the harm done by higher charge voltage occurs over a long time period, not instantly. Store at 60% SOC, charge full and use immediately. But in any case, the transition point from CC to CV can be at whatever voltage is "good." And of course balancing is complicated and important, and takes time. I have a six year old Zero FX pack with two bad (out of balance but functional) cells. BMS won't let it charge. Ideally, charging for each cell would be separately and independently managed, but that would be quite challenging and costly to design. Anyway, I mostly agree with your points, nice to discuss.
-
Yes nice to discuss!
Sucks with your FX pack.. but happens..
I have one more thing to add. You're right with how to use a battery, but there's a point around 55% (called the central graphite peak in the differential voltage spectrum), above which cell aging is significantly higher. 5% seems like nitpicking, but it really makes a difference. It's not too big but since it's only a 5% difference to the end user, I just wanted to say that. Don't store at 60, store below 55 or 50, to be sure.
Also I checked and it makes a difference how high you charge, even if you use it immediately. It's a pretty significant difference, so I strongly recommend only fully charging if needed.
On the other hand, we buy the bikes to use them, and Zero charges them to 4,15V only, instead of the usual 4,2V for exactly that reason.
But yea.. It makes a big difference, avoid if you can.
I didn't come up with all that knowledge:) it's taken from a study of NMC batteries (exact same chemistry that Zero has)
-
there's a point around 55% (called the central graphite peak in the differential voltage spectrum), above which cell aging is significantly higher. 5% seems like nitpicking, but it really makes a difference. It's not too big but since it's only a 5% difference to the end user, I just wanted to say that. Don't store at 60, store below 55 or 50, to be sure.
Are you referring to Keil's thesis "Aging of Lithium-Ion Batteries in Electric Vehicles", p.52-53, in which I saw this surprising information, or do you have any other references?
-
Hey, yes that's my go-to source. You can find it in different studies as well I'm sure:)