newbie - multiple voltage readings & disp, is this project suitable for Arduino?

This looks like the area to start… please let me know if I should start thread elsewhere.

I would like to build hw/software that will:

  • take 48 different voltage readings on a rotating basis interactively, expected values between 2v-5v
  • check for upper/lower voltage limit values
  • display/update current values interactively on some device/screen, and ‘remember’ and display high/low values for each station (1-48) until reset manually… i.e each station might display low, current, high voltages until ‘reset’.

I am totally newbie to Arduino…
Is this something Ardunio can do?
what Board/hardware do I need to start?
what are display options?

Welcome. You are in the right place.

Any Arduino board will do what you describe. Is there anything else you want the board to do, such as connect over WiFi or Bluetooth? That would narrow the selection by a few.

You would need a couple of these: 16-Channel Analog/Digital Multiplexer/Demultiplexer because no Arduino board has that many analog ports.

What would you like to display? There are several LCD display options so the decision really depends on how much you want to display.

It can do that but you'll see some external hardware. You've got a limited number of analog channels available on any AVR Arduino (for example) and so you'll need one or more external multiplexer(s) to bring those 48 channels into the ADC inputs of the Arduino.

You could get four of these:

and connect their outputs to four Ax pins on the Arduino, and control their channel selection with digital I/Os. TO keep things simple I'd go with a Mega2560 which has a plethora of digital I/Os to do this.

The rest -- user interface, display, high/low etc -- is boilerplate Arduino stuff.

EDIT: SteveMann beat me to it :slight_smile:

Blackfin:
It can do that but you'll see some external hardware. You've got a limited number of analog channels available on any AVR Arduino (for example) and so you'll need one or more external multiplexer(s) to bring those 48 channels into the ADC inputs of the Arduino.

You could get four of these:

SparkFun Analog/Digital MUX Breakout - CD74HC4067 - BOB-09056 - SparkFun Electronics

and connect their outputs to four Ax pins on the Arduino, and control their channel selection with digital I/Os. TO keep things simple I'd go with a Mega2560 which has a plethora of digital I/Os to do this.

The rest -- user interface, display, high/low etc -- is boilerplate Arduino stuff.

EDIT: SteveMann beat me to it :slight_smile:

I would use a single analog input and four 12-port multiplexers to get 48 analog inputs. You would only need eight data pins, so the Uno would work. At least for code development.

the reason I would use one analog pin would be to eliminate any difference in the analog inputs. (Though, I've never seen any).

SteveMann:
I would use a single analog input and four 12-port multiplexers to get 48 analog inputs. You would only need eight data pins, so the Uno would work. At least for code development.

the reason I would use one analog pin would be to eliminate any difference in the analog inputs. (Though, I’ve never seen any).

Using 4 would increase his through-put a bit but that may not be an issue.

I do see the potential of issues with noise ingress and ensuring that ground potentials over the entire system remain equal. That many sources suggests wide spatial distribution and lots of wires ripe for noise and ground loops.

Hi,
Welcome to the forum.

Please read the post at the start of any forum , entitled "How to use this Forum".
OR
http://forum.arduino.cc/index.php/topic,148850.0.html.

How often do you need to take your readings?
Do all the analog signals use the same gnd along with the controller.

Tom... :slight_smile:

super, looks like arduino fits the bill for what I need to do! I’m happy to see a couple responses so fast, a little disappointed that I didn’t get auto-emailed, but I may not have my preferences set right to tell me when somenoe replies to the thread I started.

I’m a mech engr / programmer but never dealt with microprocessors other than as a user, so struggling a bit with the unfamiliar vocab for electronics and microprocessing on the inside of the box. :wink:

My project is to build a simple battery BMS for my DIY EV. I have 48 cells in series, nominal voltage is 3.2v
I’d like to monitor all 48 cells, and notify if any cell drops below LV=2.0v, or exceeds HV=3.65v.
I have access to all cell terminals, so separate pairs +/- from each cell is easy, although pack is in series; 160vDC to motor controller.

I need to know which cell(s) go out of range, what the high/low was or at least flag the error, and be able to manually reset after cell has been manually balanced.

speed of cycling thru 48 channels is not important… 1 per second or faster would be acceptable
display could be a small LCD screen, or even 48 LED ‘idiot lights’ that only illuminate on error condition.

What I’ve boiled out of responses so far is:

It is useful to know that it sounds like my project is very doable… but being a newbie, I need to know what base kit(s) to buy, what tutorial books to read, and get your suggestions for the simplest possible display of error conditions. firing up a little red LED for over-voltage would be a fine start. :wink:

TomGeorge:
How often do you need to take your readings?
Do all the analog signals use the same gnd along with the controller.

Thx for response,

time between channels is not important.... slow as 1 per second would be ok
signals would all be separate grounds, measuring voltage in 48 separate batteries

Blackfin:
you could get four of these:
SparkFun Analog/Digital MUX Breakout - CD74HC4067 - BOB-09056 - SparkFun Electronics

and connect their outputs to four Ax pins on the Arduino, and control their channel selection with digital I/Os. TO keep things simple I'd go with a Mega2560 which has a plethora of digital I/Os to do this.

The rest -- user interface, display, high/low etc -- is boilerplate Arduino stuff.

I found the MUX, but don't understand what the Mega2560 is. and nothing is boilderplate to me since this is my first attempt at this sort of thing. :wink: I think I need a 15 minute chalk-talk to get an overview. I'm a decently quick learner, but I don't know what to start reading....

Couple of quick thoughts:

  1. I assume these are LiFePO batteries in this pack: Is there a "real" BMS looking after safety and balancing?

  2. The wiring of the 48 taps may be an issue: If you have 48 wires leading out it means that each wire is connected to the '+' terminal of a given battery. In a series pack, all but the "highest" battery output is connected to the '-' of the battery above in in the pack.

Starting from the bottom of the pack, the first wire would be 3.2Vnom with respect to pack ground The 2nd wire would at 6.4V wrt GND, the third at 9.6V etc. You won't be able to use the muxes are Arduino directly to measure the voltage of each cell because they -- the muxes and Uno -- are referenced to GND and are powered by a lowly 5V.

In order to measure each cell's voltage you need to be able to measure the differential voltage between pairs of wires; for cell #1, between wire 1 and GND; for cell #2, between wire 2 and wire 1; for cell #3 between wire 3 and wire 2 etc.

You might want to look at the datasheet for something like the LTC6811:

Blackfin:
Couple of quick thoughts:

  1. I assume these are LiFePO batteries in this pack: Is there a “real” BMS looking after safety and balancing?

yes, this is a string of 48 CALB LiFePO4 cells. nominal voltage 3.2, end-of-charge target v/cell<3.65
no, there is no BMS… I top-balanced initially, the charger has no cell level monitoring or shunt balancing.
I manually check voltages at end of charge, and bleed a little energy our of any cells that creep up. It’s working fine, but a pain to manually hit all 48 cells with multimeter at end of charge. So, I wanted to experiment with Arduino IF it will be less expensive that hacking some cheapo 16s BMS boards I can find on ebay.

  1. The wiring of the 48 taps may be an issue: If you have 48 wires leading out it means that each wire is connected to the ‘+’ terminal of a given battery. In a series pack, all but the “highest” battery output is connected to the ‘-’ of the battery above in in the pack.

I have 48 cells… I could add taps at each terminal, to have 48 ‘separate’ 3.2v pairs or one per connector strap+1 as you noted with half the number of wires, where I could measure difference, but polarity flips with each.

Starting from the bottom of the pack, the first wire would be 3.2Vnom with respect to pack ground The 2nd wire would at 6.4V wrt GND, the third at 9.6V etc. You won’t be able to use the muxes are Arduino directly to measure the voltage of each cell because they – the muxes and Uno – are referenced to GND and are powered by a lowly 5V.
In order to measure each cell’s voltage you need to be able to measure the differential voltage between pairs of wires; for cell #1, between wire 1 and GND; for cell #2, between wire 2 and wire 1; for cell #3 between wire 3 and wire 2 etc.

yes, I get that… I can’t measure across more than one cell. I want to measure each cell individually anyway.

You might want to look at the datasheet for something like the LTC6811:
https://www.analog.com/media/en/technical-documentation/data-sheets/LTC6811-1-6811-2.pdf

ok, so this looks like how I can grab sets of 12 voltages… so I’d need 4 of these, right? Then wire this to the Arduino, process to look for voltages out of range, and send any results out of range to an output channel to light a LED. Would this chip basically take the place of the general purpose MUX and IO mentioned earlier?

if the arduino route starts getting too complicated/expensive, I'll probably just hardwire some little mini voltmeters on each cell. I found some that are only about $1 ea. This will provide visual monitoring, but not provide any notification when LV or HV parameters are exceeded.

I'd like the excuse to learn more about the Arduino capabilities though as I have some other projects with temperature monitoring where some relay control would be pretty cool.

Hi
Draw yourself a basic connection diagram of how you will connect each analog input to each battery, then work from there, that will be the hardest part to design.

As pointed out the fact that your batteries do not share the same gnd makes this project difficult.

Tom... :slight_smile:
PS, Auto notification is fake news, hardly ever works. You are best to regularly check.

You mention 2-5V range sensing, along with reaching limits...
If you expect any inputs to unexpectedly go negative, or over 5V, you need to keep that in mind, and condition those inputs & the calculations to accommodate any difference in the source range.