![]() |
Lithium battery BMS questions
I'm sourcing some Nissan Leaf batteries which are lithium based batteries. The setup I'm looking at getting is an 18 cell pack. Where do I start looking for a BMS system that works with these batteries?
Checking Electric Motorsport I see things like: BL20 Cell Balancer for GBS 20Ah - BATTERIES - EV Parts Store and Elithion Lithiumate Lite 20-Cell BMS for Prismatic Cells - BATTERIES - EV Parts Store The second link is for 20 cells. So I was looking for something a little more custom so I'm not paying more for those extra cells I'm not needing. Are there any BMS setups you'd recommend over others? |
Most cheap DIY-style BMS systems (such as Mini-BMS) are meant for LiFePO4, so a different voltage than what you need. That first link is meant for GBS (nominal 3.20V, shunting at 3.55V). I don't know for sure, but I would guess that your batteries are nominal 3.80, and max charge 4.2V, which is typical for, say, the lithiums in a Fisker Karma or something like that. The second link looks like it may be fully adjustable, but you would have to contact them to be sure.
I would go the fully DIY route. Learn Arduino if you do not already know it, and come up with something yourself. That way YOU know exactly what you are getting. I would bottom balance and then rely on an Arduino based system to provide voltage warning (at an individual cell level) and to control charging. Low cost would be a nice side effect - probably under $100. |
Quote:
I'm going to research the arduino DIY BMS. |
A couple issues with the bms node:
BL20 Cell Balancer for GBS 20Ah - BATTERIES - EV Parts Store It uses a shunt, which is ok for bottom balancing occasionally, but they are using it to top balance, which can kill one of your cells since some reach the bottom before the others, but the pack voltage is still fairly high. They make heat instead of moving charge from cell to cell, possibly not an issue on a bike. The bolt-through-pcb is an issue, different rates of expansion for pcb and steel. The bolt pattern probably doesn't fit leaf cells. But perhaps most importantly is they are designed for a different chemistry than is in the leaf: - Nominal Cell Voltage: 3.20V - Load Turn On Voltage: 3.55V recall the leaf "cells" are 2.5v min, 3.75 nominal, 4.2v max (32ah) and each leaf module is 7.5v 65ah (2s2p). I wouldn't worry about bms for starters, you can test 18 cells with a vom pretty easily and a simple circuit will tell you if it is obviously out of wack and needs a bottom balance. 9 "leaf" modules will get you to 67.5v nominal fyi. |
are there any pre-assembled all in one type BMS setups you'd recommend? I'm seeing this Orion one, but it's like $700.
|
Quote:
In my designing a battery monitoring system for my Electric Booger, I designed a lithium one as well. Pretty simple, actually. Keep the cells between 2.7V (or 2.5V) and 3.6V. Balance them at the bottom. Stop the charge when the first one hits 3.6. Pretty easy. Edit voltage for different battery chemistry. Since an Arduino Nano has 8 analog inputs, that's 3 boards for you. On eBay that's $20. 8 inputs * 4.5V (ultimate max per cell) = 36V per board / 1024 (10 bit) = a resolution of 0.035V. Plenty good enough. It's easy to send warning messages (high V or low V) from one board to another via a PWM signal down a single wire. I experimented with an 8 channel dip switch, sending a PWM value down a single wire (using analogRead() function), making the "reader" board decipher what switch was on or off by measuring the PWM (using pulseIn() function). With 8 bit PWM (0-255), allowing for some space between signal duty cycles, you could probably have at least 100 separate triggers down a single wire. Maybe you wouldn't be able to read the voltage of each cell, but a warning of WHICH cell is low or high would be easy, and better than the Mini-BMS which has a general warning and cannot pinpoint problem cells. Let me know if you need help with code or wiring. I would be more than happy to help. |
turn, might I suggest you offer to buy mechman:
an arduino (clone for $10) US Uno R3 ATMEGA328P ATMEGA16U2 2012 Version Board Free USB Cable for Arduino | eBay a mux shield: https://www.sparkfun.com/products/11723 $24.95 maybe a 20/4 serial lcd so you don't have a bunch of pack wires going to the dashboard: Blue Serial IIC I2C TWI 2004 204 20x4 Character LCD Module Display for Arduino | eBay $9.18 suggest 3 digit volt readings, space in between, 5 readings per line, skip the decimal point, to fit 18 reading on a 4x20. very unbalanced example (18 readings): Code:
000 050 470 250 270 and whatever else mech needs and see if he will mess with it for you |
Quote:
I like DIY stuff and doing things on my own, but I've been researching arduino BMS and DIY BMS stuff all day. Lots of soldering that I don't have enough skills in. Or the proper soldering tips. |
I have to mention that manually bottom balancing a 18 cell pack once a month (if it even needs it) can be pretty trivial, next to being a guniea pig. Usually you take 18 readings with a voltmeter before hooking up the charger and see if any need to be bled down with a resistor and some alligator clips.
You don't get any guarantees with the experimental approach. But if you are up for it and mechman wants to experiment w/the hardware then have at it. I forgot current sensor FYI, and a relay if this is going to override the contactor. Guess you have room for amps in the lower right. |
Mux shield. Wow. That's a lot of I/Os. Does it use it's own ADCs (and if so, how many bits are they) or does it multiplex analog inputs to the ADCs in the Arduino?
The problem with using one chip on a series string is that you have to deal with upwards of 90V worth of potential voltage difference on a 72V car. Therefore, say max is 90V and you put it through a voltage divider to make 90V = 5V to the chip, that's only a 0.09V resolution with the Arduino's 8-bit ADC (1024 digital steps). I guess not too bad, but I would like better resolution than that, especially with a lithium pack. If the mux shield has a better ADC, say 10 bits, that would give you 4 times better resolution than 8. This is why I suggest multiple Aduino chips, each taking care of only 8 inputs across a spread of only [4.5V X 8] 36V, yielding a 0.035V resolution (or even less - 4.5V X 4 = 18V with a 0.017V resolution....). Each of the two "reader" Arduinos (for an 18 cell system) can send PWM warning signals to the master board (that has 8 of its own analog inputs) via a single wire through an opto-isolator to keep voltage potential difference between two chips at different parts of the battery series string from letting the smoke out of things. |
Quote:
|
Yah the muxshield probably wouldn't work. I was thinking since you had one at 72v it might, but no.
I'm sorting out a distributed bms (lots of notes, some parts on order) for cheap per cell and probably something more than an arduino for a controller (i.e. olimex). But it isn't at the top of the list currently, gotta sort out one of them $200 or less chargers and put my controller kit together first. I get where jack is coming from, he knows what you can do with electronics and he isn't seeing it. Cell level monitoring and inductive balancing and easy installation and warnings before cutoff and charger/controller integration doesn't have to be expensive though, at least not in hardware, at least it looks that way on paper :) And the relatively dumb op-amp based boards beat the intelligent node boards to market. I think a lot of hardware only guys are stuck, but for less costs they could have had a lot more functionality and less bad rap. I am definitely going to experiment with a cheap bluetooth adapter and android torque too, though I wouldn't put any critical controls or alerts over bluetooth only, still want hardwired idiot lights methinks. But you could open a terminal application on your android and configure the bms controller as well. |
So an ardiuno wont work. Hmm. What about the gamber BMS stuff? GamberBMS
I've been watching his stuff on youtube for a while now. Good series of videos. Looking for a BMS to handle 18 cells is quite hard. I've been googling all evening. -edit- These leaf batteries are pretty awesome and they're local to me available to pickup. But with all this BMS crap, it's looking like it may be easier to go with GBS or another Lifepo4 battery. |
Quote:
Gamber's system is very very good. I met up with him when I was in Calgary a couple of months ago and saw his system on his motorcycle. You can adjust shunting voltage with the menu screen. All voltages are displayed. Fully customizable. However, it is a top balancing system, which I feel is fundamentally flawed to begin with. Like all other top balancing BMS, it is always shunting current at the top of the charge, trying to keep everything even. Completely unnecessary if you bottom balance. |
gaa, the nano's are 3 for $10 (and 8 adc a piece) (something about a regulator?!?)
multi-cpu communication/coordination is a little more challenging, aside from optos. Simplest is to pull down a pin on one from the master (via opto) and it streams the volts out its tx port (through another opto) back to the rx port on the master, with a known start and end string, in case communication gets out of wack. With the main board controlling who turn it is to send there should be no conflicts. EDIT: no obvious usb port, would have to adapt an arduino to program it. still the serial lcd is nice though, keep the boards and wires by the battery. Turn, I grabbed 3 of those modules for my scooter, was planning on taking them apart for 45volts 32ah, till I watched a kid do it on youtube. Well, I'm still planning on taking them apart, just not looking forward to it :) He doesn't appear to have a lot left in stock by the website. |
Quote:
What sort of items would I be looking for to compile a shopping list for an Arduino setup? Is there any soldering required? |
Mech, this is also worthy of consideration:
20x12 bit adc, 256 KB Flash, 16 KB RAM, arm m3 core $7.88 at mouser 32L100CDISCOVERY for STM32L100RCT6, $7.88 at mouser http://www.st.com/st-web-ui/static/a...100c-disco.jpg EDIT: they also have an arduino looking thing ($11) that might be easier to get started with, *should* have like 40 ADC pins, but arduino may not have caught up with that sort of expansion: http://www.mouser.com/Search/Product...-NUCLEO-L152RE |
Is 32-bits the new 8-bit?
Man that stuff is low cost, but it seems like the complexity of firmware development for a 32-bit processor kinda blows away the concept of a microcontroller just to read and report some voltages. i'll probably get one to play with, just to compare assembly language programming with the simple 8051...
|
The have really simplified things with the nucleo, it plugs into your usb port and they have a web based development environment, you just give 'em an email address for access. When you compile, it all happens on the server, where they control all the setup and versions of tools and whatnot, and you save the downloaded bin to your usb device, where it automatically loads.
$10 for 40 12 bit adc pins in an even easier (and more predictable) than arduino to set up environment. Development Platform for Devices | mbed Don't expect anything like assembler though, You will have to "baremetal" it as the plebes say :) i.e. https://launchpad.net/gcc-arm-embedded <- which is gnu C++ and being supported by ARM developers directly (and isn't scared of some asm). Probably your first option for the discovery boards too, or olimex boards. |
Wow, those are indeed low cost. Unfortunately I am dumb if it's not Arduino.:(
What I had figured out is multiplexed cell warning signals with multiple Arduino boards, but not actual voltage reading of each cell. Example, you could get a warning that cell #1 is low voltage (a PWM signal from that cell's board to the main board) but not actually know what the specific voltage was. I am going to play with the I2C communication side tonight to see if I can make it do the latter. Yes, TurnNBurn, you will need to solder. I picked up a 35W soldering gun at Princess Auto yesterday for $15. It even came with solder. Start practicing and do some YouTube tutorials. It's really not hard. |
Quote:
|
Quote:
Edit: yup, found the datasheet for the 64 pin mcu on the 32L100CDISCOVERY board and determined the pin mappings for 22 ADC pins in short order. ADC_IN16 is dedicated to temperature and ADC_IN17 is internal voltage ref, so that leaves 20, i.e. 18 cells and a current shunt. I feel better now :) the legacy arduino stuff was a PITA for the capabilities of this cpu, will have to toy with gnu C. edit 2: looks like coocox can make life simpler for windows users, yay! Eclipse/gcc based IDE http://www.coocox.org/CooCox_CoIDE.htm |
Would you guys say this would be a good weekend project once all the parts are compiled? Easy for a n00b to do with good instructions? I've soldered before. I'm okay with it. Just a bad experience once (toy robot fizzled and made magic smoke once I was done soldering the broken connections)
I'm already this far into the build. |
1 Attachment(s)
No way of knowing :) Anyway I've been pretty limited by the 8 bit stuff for to long so I am using this as an excuse to explore the options.
Thinking out loud... internal voltage reference is 1.224V. Assuming pack voltage. each analog pin tied to ground through a 10k resistor, and connected to the cell tap with a custom resistor. Going around the board clockwise, the pins appear in this order, so suggest mapping the ADCs that way too. Then hookup is more logical. Code:
cell pin# adc# http://ecomodder.com/forum/attachmen...1&d=1397605822 |
(downloading coocox ide + prereqs)
Yah, I'm thinking that soldering and wiring are going to be challenging if you don't understand this stuff. And being all experimental when you are trying to protect your batteries could screw up something, do more harm than good. You know how to measure voltage? That is the only skill needed for bottom balancing. |
I started figuring out I2C communication between Arduino boards. I soon learned that it is not a good solution for our purposes here:
1) It robs two analog pins per board 2) It can only send one byte at a time I quickly set out to invent my own comm protocol. I set up two wires, one for Reader to send messages to Sender, and one for Sender to send messages to Reader. Using the analogWrite() function to send and pulseIn() to read, I successfully made a system that works. Basically, the Reader sends a message at a specific duty cycle, waits a moment and then measures what the Sender has sent back. It then sends a different duty cycle and then reads again. The Sender responds to each duty cycle instruction and sends info back as a duty cycle that the Reader can measure. I will attach code and maybe a video later. I'm excited that I figured this out. |
I considered duty cycle transmission, it is cool stuff, the only issue is that it is another analog link in the chain. There is a software serial library if you don't want to use rxtx. But it is byte oriented, and instead of the whole reading being converted to digital and back into an analog (and back into a digital) you pass the digital bytes directly, with a much "fancier type of pwm". The software serial can also be used to control a serial LCD on pretty much any pins.
So you can have two pins to talk to one board, two for the other, and 1 tx for a serial lcd (which can be remote from the board), you don't care about rx for the lcd because it isnt returning anything interesting. And the only detail you have to worry about is baud rate for these connections. here is some stuff on the serial lcd, he is using pin 2 for tx, but any can be used: http://playground.arduino.cc/Learning/SparkFunSerLCD once set up it is like: pinMode(txPin, OUTPUT); LCD.begin(9600); clearLCD(); lcdPosition(0,0); LCD.print("Hello world!"); and the other boards communicate similarly and you can talk to other boards the same way, just have to figure out the protocol (i.e. when you send a certain byte or string, what does the response look like). http://www.coocox.org/cox/manual/HT3...ingDiagram.png Of course I will mention that the discovery board (STM32) has 3 uarts :), and uart hardware is nice because it can adjust to slightly different frequencies and uses majority vote on each bit to filter out noise. I don't think software serial does, and ev's can be electrically noisy. |
Quote:
An analog signal at a specific voltage that receives interference/induced voltages can easily be skewed to a value that is incorrect. That is obviously why digital is superior. Even if a PWM signal's voltage is skewed by interference, the timing will not change, and the timing is what the pulseIn() command reads to convert the pulse width to an integer value. However, interference will be nearly impossible because the signal will either be low (with a 10K resistor to ground to make sure) or high (+5V applied by MCU). There is no room for interference. This is how I understand it....but I could be wrong. I will add more multiplexed inputs tonight. I have 2 temp sensors and 2 5K pots. Maybe I can find more goodies to input.:D |
Time is analog :)
Reducing it to a 1 or a zero is the best way to eliminate rounding errors. The concept is as old as morse code, and serial communication is as old as two comupters talking to each other digitally. uart only uses it enough to determine if it is looking at a 1 or a zero, that is the basis of digital. There is a lot of goofiness in the arduino implementation itself you start with an analogread of 10 bits you write it with analogwrite which drops it to 8 (resolution is now 1/4 the original) you use pulsein to read it, which has a host of issues on the arduino. Lets just say it isn't accurate, nor excellent for devices that can communicate digitally, easily. And the boards themselves will have slightly different oscillator frequencies. I2c builds on serial communication by adding another wire, a clock signal, to keep communication in synch. Softwareserial makes it easy to use any pins, you write to it and read the responses from it, and you don't lose anything of the original voltage reading (the whole reason for doing this). |
I am still quite new to all of this, so some of the concepts you speak of are still beyond my brain. What I did find is that my POT voltage readings (having been read, ADC'ed, converted to PWM, sent down a wire, counted, converted to a float, and displayed on my LCD) seem to be quite stable and accurate.
I realize that PWM out is only 8 bits. However, since I am sending the values of smaller integers (the math to figure out individual voltages being done in the slave/reader Arduino), we are dealing with a value that does not require the same resolution. For example, we are measuring a bank of 8 lithiums with 10 bits @ 4.5V * 8 = 36V / 1024 = 0.035V resolution. We are then sending each cell voltage across comm with 8 bits @ 4.5V / 256 = 0.02V resolution. No resolution lost. I do hear what you are saying about converting again and again, and that makes perfect sense. However, I see nothing erratic or inaccurate when I test. But, I shall test more, with more inputs and through an opto, because an opto will also be a necessary ingredient when coupling multiple boards at different locations on the pack's series string. |
Resolution has to be lost. Discounting ADAD conversion errors, your input from the one board is in 1024 distinct steps, but the output from that board is 256 distinct steps. and it isn't 4.5v/256 it is the cells voltage above relative ground that is sent.
I assure you that you wont regret sorting out serial communication :) They have a two port example for software serial built right into the arduino ide. Instead of pwming, you just write the converted adc values over serial, with no loss, plus you can control other serial devices. |
Quote:
There must be another type of IC that does two way isolation.:confused: |
yah opto's are doable, the slow ones are like $0.20 a piece, if you can live with a slower baud rate they are fine.
http://www.mouser.com/ds/2/239/775704_1-268944.pdf Faster ones cost a bit more and have larger power requirements. FYI, in the "one cpu per cell" model I am working on only using them on the ends of the battery pack, and node to node communication uses a level shifter. But per cell cost is important, and it should be fast and still operate within the expected voltage range. |
Quote:
So you guys think if I don't have a BMS I should bottom balance once in a while and that'll be good? By once in a while I mean once every few months. |
If you want a fool proof system you want a BMS. If you want to tinker and tweak, then you can get away without one.
|
Quote:
The biggest issue is knowing when to stop the charger. If you bottom balance, the weakest cell will hit max voltage at the top of the charge before the others. If you continue to charge, it will go into the danger zone while the others catch up. So at minimum you should have a device that measures the voltage of your weakest cell and stops the charger when it reaches max voltage. |
Yah we haven't discussed charging, or even how a bms interfaces with a charger (or a controller)
Here is a good video about charging manually as well. Eventually you want to get everything down to the cell level and automatic, but you can at least get rolling cost effectively, and 18 cells is more manageable manually than others :) EVTV Motor Verks | Electric Car Conversion Videos The leaf cells are a bit trickier than the lifepo4 cells fyi, they might not be as resistant to overcharging, and the special voltages of the leaf cell are limiting your cost-effective bms and charger options, so you might want to consider lifepo4 too. |
Quote:
I'm still just concerned with the BMS. I'm uneasy about the DIY route because of time and my experience with frying electronics. But I can't find any good affordable BMS systems otherwise. |
The elcon looks like a cost effective unit for known battery types. But the default cell count and voltages do not look suitable for your special chemistry batteries (LiMn2O4), so you will need to have it reprogrammed, or order direct with a suitable charge profile. I haven't seen evidence of diy programming on those units.
Edit, maybe I stand corrected: $355 and LiMn2O4 is an option at 72v http://www.electriccarpartscompany.c...lay_p_349.html |
Quote:
The BMS is still annoying me, I guess because I'm still not 100% sure what to look for in a BMS. |
All times are GMT -4. The time now is 06:25 AM. |
Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2025, vBulletin Solutions Inc.
Content Relevant URLs by vBSEO 3.5.2
All content copyright EcoModder.com