# Need info on A123 pack from 2014 Spark EV



## DrJeff (Apr 24, 2015)

For reference found some info related to similar A123 modules...

http://www.metricmind.com/qashqai/main.htm

BetterPlace cars used the A123 packs in Israel.


----------



## DrJeff (Apr 24, 2015)

Shop Service Manuals for the 2014 Chevy Spark can be accessed for $29 for a year.

Repair Service Manuals

I can confirm that the wiring diagrams include wiring to the battery pack and even within the battery pack (contactors, current sensing, BMS modules, cell links). I would characterize it as a modules and interconnections level of information, for example the circuit design of the BMS is not listed. Between the interconnections and the detail on the DTC codes, it looks promising to figure out the control and information scheme for the battery pack.

Just based on this information (i.e. not tested on the battery yet), it looks like the battery pack is controlled based on signal wires from other modules(i.e. it does not attempt to interpret CAN messages and act accordingly). Where CAN/GMLAN lines do show up, I'm hoping they are pushing data on the pack/cell states and not being controlled by CAN.

So at this stage pretty hopeful about gaining control of the pack. More to come...


----------



## zaxxon (Jul 11, 2009)

Based on some MIT students using same or similar A123 Modules in 2010 on a motorcycle project indicates the BMS commands and information is through a CAN interface.


----------



## DrJeff (Apr 24, 2015)

zaxxon said:


> Based on some MIT students using same or similar A123 Modules in 2010 on a motorcycle project indicates the BMS commands and information is through a CAN interface.


Zaxxon - Thanks for the MIT lead. Did a search and found some good information on the MIT EVT projects, some of which used the A123 prismatic cells and the associated BMS modules.

Searching Github for MIT A123 BMS turned up some code written to interpret CAN messages from the BMS and also to hook an A123 module up to a Brusa NLG513 charger (BINGO! - the exact charger I have - which can be CAN driven for charge profiles). It will take some interpretation of the code for my purposes, but this is a huge leg up on interpreting the CAN from the BMS modules.

Jeff


----------



## DrJeff (Apr 24, 2015)

I posted a new thread to the *TesLorean thread* to demonstrate some testing of the OEM contactors in the 2014 Chevy Spark EV A123 battery pack.

In summary there are two LV connectors for the pack.

X-358 is at the end of the next and provides ground and power for the contactors that connect the pack to the motors (power distribution) and to the charger (via a pre-charger circuit).

X-357 is at the left (car convention) of the pack. It contains some power lines, communication signalling, and GMLAN and CAN lines.

Jeff


----------



## DrJeff (Apr 24, 2015)

Using the data connector X357 to the 2014 Chevy Spark Pack A123 battery, I was able to extract the following CAN frames. Still lots of decoding to do, but it looks like there may be some commonality with the MIT work done on a single A123 module and associated sub-BMS.

(Note: Data started flowing as soon as pins 1(12v), 2(Gnd), 4(12v ignition) were connected. Once pins 3 and 14 (12v for data enable) were connected the data patterns changed - same frames just different contents).

Frames 0x0200, 0x0202, 0x0204, and 0x0206 looks promising as cell voltage data.

Jeff

*Extracted Data*
* 0x0200*
Pre Data Enable
Bytes 0-5 = 0x00
On Data Enable
Byte 0 goes to 0x14
Byte 1 takes values 0x9A to 0x9E
Idea: Could be reporting data on cells - voltage variations
Byte 2 goes 0xF4
Byte 3 takes values 0x9A to 0x9E
Idea: Could be reporting data on cells - voltage variations
not the same values as Byte 1, so reporting different data
Byte 4 goes to 0xA4
Byte 5
Bits 6 & 7 always 1
Bits 3,4,5 seem to be indicators
Byte 6 counts from 0x18 to 0xF8 by 0x20 increments (bits 5,6,7 counter)
Byte 7 = 0x00
* 0x0202*
Same type of byte data as 0x0200
* 0x0204*
Same type of byte data as 0x0200
* 0x0206*
Same type of byte data as 0x0200
* 0x0208*
Bytes 6
Counts 0x18 to 0xF8, incr 0x20
Bytes 0--5
Cycles through a sequence of 8 frames
Cycle 1 has bytes 1,3,4,5 = 0x00 every time, byte 2 mostly 0x00, but occassionally 0x20
Bytes 0 = 0x00,0x00, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14
Byte 1 = 0x00, 0x00, 0x9E, 0x9B, 0x9C , 0x9B, 0x09C, 0x09A
Byte 2 = (0x00 or 0x20), (0x00 or 0x20), 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0x80
Byte 3 = 0x00, 0x00, 0x9B, 0x9C, 0x9A , 0x9C, 0x9B, 0x00
Byte 4 = 0x00, 0x00, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0x00
Byte 5 = 0x00, 0x00, 0xD8, 0xD0, 0xD8, 0xD0, 0xE0, 0x00
* 0x020C*
Bytes 0,2,3,4,5 turned on once enable signal sent, and removed once enable removed
Byte 0 has data 0x02 while on
Byte 2 has data 0x07 while on
Bytes 3,4,5 have same data 0xA5 while on
* 0x0216*
Byte 0,5,6,7 = always 0x00
Byte 1 = Goes 0x00, 0x0B then 0x6B on startup, stays at 0x6B at end goes to 0x0B then 0x00
Byte 2 = Starts 0x00, goes to 0x8A, stays 0x8A, until end then 0x00
Idea ; Byte 1 and 2 just On status indicatorss (no variability in the values)
Byte 3 = 0x00 until data enabled, then 0x00 or 0xFF (not a repeating pattern)
Byte 4 = 0x00 until data enabled, then values like 0x02, 0x04, 0x06, 0x08, and values like 0xFE, 0xFC, 0xF8 when Byte 3 = 0xFF, suggests it might be a signed integer (0xF... being small negatives)
Ideas: Byte 3 could be an over under indicator, and Byte 4 is a signed integer of the degree over under
* 0x0260*
Bytes 0,1,2,3,4 Bits 0,1,2 are indicator of some type
Bytes 0,1,2,3,4, Bits 3-7 are a counter
Counts 02 to 3A (incr 8) , then 40 to F8 (incr 8)
* 0x0262*
Bytes 0,1,2 all the same
Counts 02 to 3A (incr 8) , then 40 to F8 (incr 8)
* 0x0270*
For all Bytes 0-7, bits 3-7 are acting as a counter
Bit 2 = always 0
Bits 0 & 1 are status bits (no obvious pattern)
* 0x0272*
For all Bytes 0-7, bits 3-7 are acting as a counter
Bit 2 = always 0
Bits 0 & 1 are status bits (obvious cycling pattern)
* 0x0274*
For all Bytes 0-7, bits 3-7 are acting as a counter
Bit 2 = always 0
Bits 0 & 1 are status bits (no obvious pattern)
* 0x0302*
Pre Data Enable
 Bytes 0-6 all 0x00
Byte 7 toggles between 0x00 and 0x20
On Data Enable
Byte 0 goes to 0x03 and stays
Byte 1 went to 0x7B, infrequently 0x7C
Byte 2 went ti 0x7B, stayed
Bytes 3,4,5,6 cycle between 0x00 and 0x7B
Byte 7 toggles between 0x20 and 0x1E
* 0x0460*
Pre Data Enable
Byte 0 and 2 = 0x01
On Data Enable
Byte 0 and 2 = 0x09
Bytes 4,5,6,7 all 0x00 always
Bytes 1 and 3 bounce around 0xE2, 0xE3, 0xE5, 0xE6

================
MIT extract from code for what to expect from 0x2 frame (0x0200).
(Need to understand code better to get the correct bits to inspect. There should only be 64 bits in an 8 data byte CAN frame, so there shouldn't be a 13 bit voltage starting at bit 59?)

*ID 0x2*
200 format message
Cell Overvoltage detected - bit flag
at 2, 1 bit
Cell Undervoltage detected - bit flag
at 3, 1 bit
Msg response ID
at 4, 4 bits
Temperature
at 8, 8 bits (add Therm Offset = -40
Temperature Channel
at 24, 3 bits
Minimum Cell Voltage
at 27, 13 bits, *0.0005 +1
Number of Active Balance Circuits
at 40, 3 bits
Maximum Cell Voltage
at 43, 13 bits, *0.0005 +1
Voltage Mismatch Detected
at 58, 1 bit
Average Cell Voltage
at 59, 13 bits, *0.0005 +1


----------



## DrJeff (Apr 24, 2015)

I'm pretty sure I've located the CANbus frames for voltage in the CAN data from the A123 2014 Chevy Spark EV battery pack.

Frames 0x0200, 0x0202, 0x0204, and 0x0206 contains 3 cell voltage readings per frame, frames are numbered 0 to 7, so this accounts for (8*4*3) = 96 cells. Frame 0x0208 contains another 3 voltages, but only in frames numbered 0-4, and one voltage in frame 5. In total this provides 112 voltages, one for each cell in the pack.

Voltages look consistent with the 13 bits data found in the MIT study (looking at the subBMS modules). V= (13 bits * 0.0005) + 1.

Voltage 1 is formed from bits (4,3,2,10,15,14,13,12,11,10,9,8)
Voltage 2 is formed from bits (20,19,18,17,16,31,30,29,28,27,26,25,24)
Voltage 3 is formed from bits (39,38,37,36,35,34,33,32,47,46,45,44,43)

The frame number is found in bits (55,54,53)

I haven't ascertained the purpose of the other bits (there isn't sufficient variance in the data to establish their meaning).

I haven't yet physically validated the individual voltage readings with the cells in the pack. Doing so will allow me to validate the 0.0005 number suggested in MIT's study. The current calculations suggest 3.6v/cell, however the module readings (28 cells of triplets) suggest cell voltages should be 3.3v/cell.

Jeff


----------



## DrJeff (Apr 24, 2015)

Anyone every see a PWM signal to a Pre-charger circuit? The A123 battery pack lists the control for the pre-charger as a PWM. I got it to work as a 12v constant signal (i.e. 100% PWM) but I'm curious if rating up 0-100% PWM might be a better options, but I'm not sure what advantage PWM would bring to a pre-charger circuit.

Any ideas?

Thanks
Jeff


----------



## DrJeff (Apr 24, 2015)

More CAN frame information candidates...

0x0460 : Min and Max voltages in the pack
Min bits (3,2,1,0,15,14,13,12,11,10,9,8) 12 bits
Max bits (19,18,17,16,31,30,29,28,27,26,25,24) 12 bits
Voltage = (12 bits * 0.0005) + 2

0x0302 : (Possible) Temperature readings
(of the bytes 0-7)
bytes 1-6 could be 8 bit temperature values
Note: MIT study reported an offset of -40, so a value of 125 (dec) would be equivalent to a temperature of 85 degrees.

0x0260, 0x0262, 0x0270, 0x0272, 0x0274 : Possible status bits
5 most significant bits of (populated) bytes are a 0-31 counter
3 least-significant bits of (populated) bytes are status bits
as yet - no idea what status these are reporting, but could be... over or under voltage, voltage mismatch, active balancing...

Jeff


----------



## DrJeff (Apr 24, 2015)

Doing some digging today into the Contactors and Pre-charging circuits in the neck of the Chevy Spark EV A123 battery pack.

The battery pack connects to the drive unit, but also has a dedicated connection to the charger. Separate contactors (or HV relays) control each connection, and the pre-charge circuit going to the charger.

Inside the pack the contactors and relays are under an orange protective cover. The 'unknown purpose' device was under an additional cover.

Here are some details about the parts I found in the neck of the pack...

Current Sensing and Pre-charge control
A1013140010402776G0201

Contactors (2 of)
Panasonic AEV14012 M22
- 120 amps
- 400VDC-Nom
- Turn on 9v, Turn off 1v
- Coil voltage 12v

Relays (4 of)
AEV110122 201301003023
- Switching voltage 400vDC
- Coil voltage 12v
- 10 amp

Unknown Purpose
A101312004240609020201
HA4064-AL 1308D (Coil?)
A123 Systems 2012 - 460026-0403
??? Circuit contained the strangest components I've seen, It looked like a large flat box like transistor with a soft (gel like) body. It was constrained by some spring metal which might suggest it has a tendency to swell.

Pre-charge Resistor
SPRI009-1 IRV80 25{Omh}J 2500V DH 32 made by RARA Korea

I'm guessing the Current Sensing module receives the PWM signal for the pre-charge circuit (PWM as listed in the Chevy documentation - but I can't figure out why a pre-charge circuit would need a PWM signal). Tested by going to 100% 12v duty cycle (i.e. just switching on 12v  and it worked.


----------



## piotrsko (Dec 9, 2007)

Knowing how Chevy used to share across all their lines, have you thought how similar the battery communication could be like the Volt? I'll bet that they don't have 2 different sets of testing equipment, so the stuff should talk the same.


----------



## DrJeff (Apr 24, 2015)

piotrsko said:


> Knowing how Chevy used to share across all their lines, have you thought how similar the battery communication could be like the Volt? I'll bet that they don't have 2 different sets of testing equipment, so the stuff should talk the same.


 Hi Piotrsko, 

I did look at some Volt battery status CANframes when I pulled the CAN codes from the Spark EV battery, but I found little in common (no common frame IDs, etc). It looks like (at least for the 2014 Spark EV - A123 Battery pack) that Chevy took A123's lead as regards the CANbus data and control. The best clues I got were from some MIT work on the individual A123 battery modules about how it internally reports voltages, etc.

I do need to look harder at the potential for status communication between the A123 systems and the Chevy master modules. Some of the A123 documentation on later packs (post Chevy) suggest that their pack will shut down if it doesn't hear good status frames back from the car's master systems. From what I can see so far in the 2014 A123/Spark EV design I don't see any sign of that.


----------



## DrJeff (Apr 24, 2015)

Some updates to interpreting the CAN frames from a 2014 Chevy Spark EV battery pack with the A123 batteries...

Frames 0200,0202,0204,0206 and 0208
==========================
- Each frame contains 3 voltages (exception is 0208)
- 13bit values
- divide values by 16 to get 100ths of a volt (divide by 1600 to get volts)
- (previously reported MIT method of (volt = num * 0.0005 + 1) produces incorrect cell voltages
- Each frame contains a 0-7 counter
- 0208 reports 3 cells in counters 0-4, 1 cell in counter 5, and none in 6 or 7
- Total 112 voltages reported

Frame 0216
========
- Reports the pack voltage and a number
- Pack voltage is a 13-bit number
- divide value by 8 to get pack voltage
- Number is bytes 3 and 4, looks like a signed integer, reports small values above and below 0, mostly 0, purpose unknown
- Reports values once per pack scan, but number reported fluctuates up and down even though the cell voltages remain steady from scan to scan

Frame 0302
========
- Reports 8 temperatures, likely 1 per half module (1 per BMS)
- Temperatures are 8-bit unsigned value
- MIT method of subtracting -40F seems to get correct values

Frames 0260,0262,0270,0272,0274
======================
- Reports 22 sets of 3 flags
- Reports flags after every scan of the 112 pack
- Unknown meaning or mapping to the cells or pack structure

Frame 0460
========
- Reports infrequently (maybe once in 10 pack scans)
- Appears to contain a 8-bit unsigned integer and some flag bits
- Meaning unknown

If you want the Python code for pulling the bits and interpreting, just drop me a note.


----------



## ArtRaz (Jun 14, 2017)

DrJeff said:


> Doing some digging today into the Contactors and Pre-charging circuits in the neck of the Chevy Spark EV A123 battery pack.
> 
> The battery pack connects to the drive unit, but also has a dedicated connection to the charger. Separate contactors (or HV relays) control each connection, and the pre-charge circuit going to the charger.
> 
> ...


First time poster.
The Systems 2012 - 460026-0403 and coil work together. It is a heater driver and heater. It uses the High Voltage from the battery or the charger to heat up the coil and in turn heat the coolant flowing under the packs. 
Coil resistance is 74 Ohm.
We know The pack nominal voltage is about 370V.
Using V=IR, it would draw about 5A on a nominal charged pack. 
At full steam ahead, it would be a 1.8kW heater, im guessing the heater driver sends a PWM signal for the heater since something that large may mot be necessary all the time.


----------



## jfgauthier (Jan 25, 2018)

Hi Dr Jeff,

I have a 2014 Chevy Spark EV here in Canada , and i am very interested in your results.

Can i help you in any way? I am an electronic technician by trade, with access to a few interesting test tools.

Did you manage to find all the answers you were looking for?

Cheers,
JF


----------



## ConversionVirgin (Dec 16, 2019)

Is there more out there about these? I have a wrecked 2014 that is pretty complete and was hoping to use the pack with a tesla drive unit or even the stock motor if possible with the A123. I'd love to figure out how to use bms ETC


----------

