Sunday, August 17, 2014

Initial draft hardware design

I have posted into the Schematic resource tab above a .pdf file with an initial cut of a hardware design for a battery monitor.  Here is a low resolution photo as well (Look to the .pdf file to be able to see it better).

Refer to .pdf file in Schematics tab above for higher resolution view

Some highlights of the design:
  • Based on the Arduino Uno - compatible with its boot-loader, IDE, etc.:
  • Embedded USB controller vs. using external Service Port attachment
    • Initial layout also has service port, as no way am I hand soldering a QFN28 package)
  • CAN controller w/parallel hardware ports - allows easy Daisey chaining of devices on the CAN bus.
  • Measured Volts with a 1.25mV resolution, and Amps to 25mA depending on external shunt value
  • DIP switches to select battery ID as well as preferred default charge profile
  • Two feature out ports which can drive cutout relays, cooling fans, etc.  Able to do PWM control for verifiable speed.
  • Usable for 12v, 24v, or 48v batteries w/no hardware change.
  •  Connects to external Amp Shunt, max 80mV - and external battery temperate 10K NTC probe
  • PCB is 50x100mm in size
There are two additional pins left on the ATmega uC, trying to decide if there is a use for a feature-in port...

The PCB is laid out to support horizontal connectors as shown, but can also be populated with vertical connects as well.  Much will depend on how the mechanical case plays out.  Another option is to just solder wires directly to the PCB.

As this will be powered 24x7, also want to pay attention to power down modes.  Might be a challenge in keeping the Arduino environment, but as firmware is looked at will see.  I am thinking of drafting up some firmware, perhaps based off the Arduino Alternator Regulator's code - and mocking up a unit using a Uno + proof board.  but will not be able to play with this until next month as I will be traveling back to our boat to attend some long needed maintenance of her.

Saturday, August 16, 2014



The Arduino Battery Management System is intended to act as the 'voice of the battery' in part of a complete system.  It will provide to anyone who is interested the following information via the CAN network:
  1. Current battery Voltage
  2. Current battery Current (in or out)
  3. Current battery Temperature
  4. High Priority messages when battery reaches high voltage limit, or from a high dV/dT event.
  5. Guidance to charging sources:  Target Voltage and Amp limit for battery charging
  6. SOC estimate, likely based on coulomb counting with reset at full SOC.

Features 1..4 are intended to reduce wiring clustering from multiple charging sources to the battery.

Feature #5 is the foundation that can be used to build a systems approach with all charging sources working well together in a coordinated fashion.

Feature #6 is kind of  a free-be, given the Arduino BMS will be doing most of this work anyway.

Other capabilities of the BMS will be based on optional wiring and attachments, including:
  • Cell based BMS fault loop - allows cell based BMS modules to indicate a limit of an individual cell has been reached.
  • Two 'Feature Out' ports which could be used for:
    • PWM variable speed cooling fan control
    • Last chance safety cutoff - disconnecting battery from bus if needed for protection.
  • 'Feature in' port which can be used for ????  (Just have an extra pin left over on the ATmega uC)

As this device will be action 24x7, care should be taken with power usage.  Example:  Placing CPU into various sleep modes between sample periods.

Hardware Overview

Software Overview

Ordering & Costs