cancel
Showing results for 
Search instead for 
Did you mean: 

BMS Chain Setup Assistance

Luke_A
Associate II

I posted recently about getting set up with the demo for the GUI application, and got great help from @SRomeo. I've now moved on to the SingleAccess Chain demo, and could use some more help if you don't mind?

I am using the C4ML1T, ISOSPI1, and 2 BMS63EN boards each connected to a BMSHOLD cell holder. The first device has 8 cells connected to it, the second has 4. In both cases, there are cells occupying slots 1, 2, 13, and 14.

In AutoDevKitStudio, the AEK-POW-BMS63ENCHAIN component is set up with a single chain, with two devices. I have connected the ISOSPI1 board to the C4ML1T as per the allocated pins visible on the board view, below.

ISO_MCU Pinouts.png

Once the code is compiled and generated, and the board is flashed, I get periodic LED illumination, and zero values for all data printed to the serial terminal. See video below for hardware behaviour, including how the frequency of the LEDs changes with a reset.

I suppose my first question is am I interpreting the board view pin designations correctly? NSLAVE isn't mentioned, and so I have left it disconnected (assuming there's internal pull-down resistors or something), and BNE/TxAmp are shown with an "X" which I have also taken to mean leave disconnected.

My ultimate goal with this is to be able to output voltage values for all cells across all devices to a terminal. Toward this aim, I have included a for-loop in the AEK_POW_BMS63CHAIN_app_serialStep function to iterate over devices as well as cells, as below. I will only ever have a single chain and so I don't need to iterate over that.

 

void AEK_POW_BMS63CHAIN_app_serialStep(uint16_t AEK_POW_BMS63CHAIN_app_timeStamp){
  char message[11];

  uint8_t AEK_POW_BMS63CHAIN_chainidx = AEK_POW_BMS63CHAIN_CHAIN0;
  uint8_t AEK_POW_BMS63CHAIN_devidx = AEK_POW_BMS63CHAIN_NODE_DEV1;
  uint8_t AEK_POW_BMS63CHAIN_cellidx = AEK_POW_BMS63CHAIN_CELL1;
  uint8_t cellCounter = 1;

  if((osalThreadGetMilliseconds()%AEK_POW_BMS63CHAIN_app_timeStamp)==0){
	  for(AEK_POW_BMS63CHAIN_devidx = AEK_POW_BMS63CHAIN_NODE_DEV1; AEK_POW_BMS63CHAIN_devidx<=AEK_POW_BMS63CHAIN_chain_getDevNum(AEK_POW_BMS63CHAIN_chainidx); AEK_POW_BMS63CHAIN_devidx++){

		    //Printing DEV
		    sprintf(message, "DEV,%d, ", (int)(AEK_POW_BMS63CHAIN_devidx));
		    sendMessage(message);
		    sendMessage("\n");

		    //Printing SoC
			for(AEK_POW_BMS63CHAIN_cellidx = AEK_POW_BMS63CHAIN_CELL1; AEK_POW_BMS63CHAIN_cellidx<= AEK_POW_BMS63CHAIN_CELL14; AEK_POW_BMS63CHAIN_cellidx++){
		    sprintf(message, "S%d,%.3d, ",AEK_POW_BMS63CHAIN_cellidx, (int)(AEK_POW_BMS63CHAIN_app_dataChain[AEK_POW_BMS63CHAIN_chainidx].AEK_POW_BMS63CHAIN_nodeData[AEK_POW_BMS63CHAIN_devidx - 1].AEK_POW_BMS63CHAIN_Pack_SOC[AEK_POW_BMS63CHAIN_cellidx - 1] * 100));
		    sendMessage(message);
		    }
		    sendMessage("\n");

		    //Printing Voltage
			for(AEK_POW_BMS63CHAIN_cellidx = AEK_POW_BMS63CHAIN_CELL1; AEK_POW_BMS63CHAIN_cellidx<= AEK_POW_BMS63CHAIN_CELL14; AEK_POW_BMS63CHAIN_cellidx++){
		    sprintf(message, "V%d,%.3f, ",cellCounter, AEK_POW_BMS63CHAIN_app_dataChain[AEK_POW_BMS63CHAIN_chainidx].AEK_POW_BMS63CHAIN_nodeData[AEK_POW_BMS63CHAIN_devidx - 1].AEK_POW_BMS63CHAIN_Pack_CellVoltage[AEK_POW_BMS63CHAIN_cellidx - 1]);
		    sendMessage(message);
		    cellCounter++;
		    }
		    sendMessage("\n");

		    //Printing Current
		    sprintf(message, "C,%.4f, ", AEK_POW_BMS63CHAIN_app_dataChain[AEK_POW_BMS63CHAIN_chainidx].AEK_POW_BMS63CHAIN_nodeData[AEK_POW_BMS63CHAIN_devidx - 1].AEK_POW_BMS63CHAIN_Pack_Current);
		    sendMessage(message);
		    sendMessage("\n");

		    //Printing Temperature
			for(AEK_POW_BMS63CHAIN_cellidx = AEK_POW_BMS63CHAIN_CELL1; AEK_POW_BMS63CHAIN_cellidx<= AEK_POW_BMS63CHAIN_CELL14; AEK_POW_BMS63CHAIN_cellidx++){
		    sprintf(message, "T%d,%.3f, ", AEK_POW_BMS63CHAIN_cellidx, AEK_POW_BMS63CHAIN_app_dataChain[AEK_POW_BMS63CHAIN_chainidx].AEK_POW_BMS63CHAIN_nodeData[AEK_POW_BMS63CHAIN_devidx - 1].AEK_POW_BMS63CHAIN_Pack_CellTemperatureNTC[AEK_POW_BMS63CHAIN_cellidx - 1]);
		    sendMessage(message);
		    }
		    sendMessage("\n");

		    //Printing Bal_cmd
			for(AEK_POW_BMS63CHAIN_cellidx = AEK_POW_BMS63CHAIN_CELL1; AEK_POW_BMS63CHAIN_cellidx<= AEK_POW_BMS63CHAIN_CELL14; AEK_POW_BMS63CHAIN_cellidx++){
		    sprintf(message, "B%d,%d, ", AEK_POW_BMS63CHAIN_cellidx, AEK_POW_BMS63CHAIN_app_dataChain[AEK_POW_BMS63CHAIN_chainidx].AEK_POW_BMS63CHAIN_nodeData[AEK_POW_BMS63CHAIN_devidx - 1].AEK_POW_BMS63CHAIN_Pack_Bal_cmd[AEK_POW_BMS63CHAIN_cellidx - 1]);
		    sendMessage(message);
		    }
		    sendMessage("\n");

		}}
}

 

 

 

6 REPLIES 6
Max VIZZINI
ST Employee

Hi,

The AEK-POW-BMSHOLD is wired to support exactly 14 cells and not less. It is true that L9963E device is able to manage from a minimum of 4 cells to 14 cells, but the pin wiring has to be done in the proper series way otherwise the sensing will not work.

Best Regards,

AutoDevKit Team

SRomeo
ST Employee

Hi Luke,
As Max says our evaluation kit was designed for exactly 14 Cells.

 

Moreover, I see that the allocation process is allocating some pins as "X".

This means that, somehow, the allocation process allocated an MCU pin not wired to the 4x37 connector.
The golden rule to make a system work is that "all the pins displayed on the connection matrix MUST be connected". So BNE and TXAMP have to be allocated manually to an available MCU pin.


To do that you should take a look to the AEK_MCU_C4MLIT1 extended connector, which can be found on the C4MLIT1 User Manual.

SRomeo_0-1739530680247.png

The pins you want to allocate are GPIOs, so you should search which MCU pin allocable as GPIO, may be found on the scheme above.SRomeo_1-1739531182668.png

To check which P"x"y" pin may work as GPIO you have to open SRomeo_2-1739531583990.pngand take a look to the SIUL section into the Outline window:

SRomeo_7-1739532841495.png     SRomeo_8-1739533091251.png

 

I suggest you using pin 111 and pin 87 (which are wired).
Then left click on the pin with "X" and copy the name from the General setting window:

SRomeo_6-1739532524310.png
Then right click on the PIN and deallocate it, selecting NOT USED:

SRomeo_4-1739532274213.png
Then select the pin 111 and allocate it as input/output

SRomeo_3-1739532078766.png

Pasting the name you copied before.

Repeat the procedure also for BNE, then Save allclean and compile.
Your application should no more have "X" pins allocated

Best Regards
AEK team

 

 

 

Luke_A
Associate II

This was really useful, thank you. The "X" has now disappeared and BNE and TXAmp are now allocated to pins. I have also now fully populated each holder with 18650 cells. I think I have it setup how I want, sending voltage measurements from each cell to the serial port.

I am however noticing lower than expected readings on some cells. The first two cells on each device (Cell 1 and Cell 15) display a reading around 600 - 700 mV lower than when measured using a multimeter (see figures below), while the rest of the cells are around 100 mV lower. For additional information, the voltage of the cells in the holder ranges between 3.3V and 3.8V for each cell, with a total pack voltage of around 51 V.

 

Discrepancy in Voltage ValuesDiscrepancy in Voltage Values

Fig 1: Voltage readings on terminal

 

Cell 15Cell 15 

Fig 2: Cell 15 reading on DVM

 

Cell 1Cell 1
Figure 3: Cell 1 reading on DVM

 

SRomeo
ST Employee

Hi Luke,
I think your L9963E device is actually missing the ground reference.
Please follow this procedure:

 1) Disconnect the BMS holder connector
 2) Check both your BMS boards and place each Jumper JP1 in the 1/2 position:

   SRomeo_0-1739879570805.png

  3) Reconnect the BMS holder connector.

This should solve your issue.

 

Note: Sometimes, even with the jumpers, this problem happens. That's because the BMS connector is not inserted correctly. Try to reconnect it by pushing along the borders, uniformly, as in the picture:

SRomeo_1-1739879640619.png

Best Regards
AEK team



Hi folks,

Sorry for only just getting back to this now, this did help and I was able to get the correct voltage values appearing on the terminal.

I have a further question on applying these boards to cell stacks over 14 cells long, which I’ll post initially here but if you feel it would be better suited to a new thread, please let me know and I’ll start a new one and paste this in.

I have moved on from the AEK-BMSHOLD with 14 cells, and now I have a battery pack with 34 series connections with a nominal voltage of 1.75 V per cell. My aim is to get cell level voltage monitoring throughout the pack, and am not currently interested in current sensing. I have three BMS63EN boards, to handle the following:

  • Dev 1 for cells 1 to 14
  • Dev 2 for cells 15 to 28
  • Dev 3 for cells 29 to 34 (taking care that there are cells connected to pins 1, 2, 13, 14 of this board)

Looking at Dev 1, I am confident at my connections since they are the same as the AEK-BMSHOLD cell holder. I have GND and C0 pins connected to the negative terminal of the pack, and C14 connected to the 14th cell. VBus I have left disconnected for now, since I have questions around it.

Dev 2 is where I start to get uncertain, and have some questions centered around the pinouts below. Connections are referenced to the positive terminal of each cell (i.e. I am ignoring the current sense and thermistor pins for now).

 

BMS Connector for Dev 2

Battery Pack Location

GND

Negative terminal of pack (i.e. negative terminal of Cell 1)

C0

Cell 14 (same as C14 on Dev 1)

C1

Cell 15

C2

Cell 16

C3

Cell 17

C4

Cell 18

C5

Cell 19

C6

Cell 20

C7

Cell 21

C8

Cell 22

C9

Cell 23

C10

Cell 24

C11

Cell 25

C12

Cell 26

C13

Cell 27

C14

Cell 28

Vbus

NOT CURRENTLY CONNECTED

 

 

BMS Connector for Dev 3

Battery Pack Location

GND

Negative terminal of pack (i.e. negative terminal of Cell 1)

C0

Cell 28 (same as C14 on Dev 2)

C1

Cell 29

C2

Cell 30

C3

Cell 31

C4

Cell 32

C13

Cell 33

C14

Cell 34

Vbus

NOT CURRENTLY CONNECTED

 

My questions based on the above are:

  1. Does the GND connection for all 3 devices reference to the negative terminal of the battery pack?
  2. Do I actually need the VBus connection on any or all of the devices if I am only interested in cell-level measurements?
  3. If yes to 2, do I connect all three VBus connections to the positive terminal of the battery pack?
  4. Do I need C0 on any/all of the boards for this setup to function, or can I ignore this? Currently C0 for Dev 1, 2 and 3, are connected to the negative sides of Cells 1, 15, and 29, respectively.

I am still running the SingleAccess CHAIN demo, with one chain and three devices, each set with appropriate under and over voltage limits for the cell chemistry.

Thanks again, I want to make sure I have the right idea before electrically connecting anything obviously.

All the Best,

Luke

SRomeo
ST Employee

Hi Luke,
I will try to answer your questions; however, we cannot guarantee advanced support on custom cabled build.
It may not be aligned with official ones, so, from our side, the overall behavior may be unreachable.

Anyway, 

  1. No. Your aim is to connect 3 battery packs in series in order to obtain ~57v.
    Each BMS ground should be independent.
  2. No. You do not need the Vbus connection. If you take a look to the schematic, you may notice that this line is used to transmit any Fault between BMS nodes.
    SRomeo_0-1741333425576.pngSRomeo_2-1741333575684.png
    SRomeo_3-1741333722962.png
    So, if you are not interested you may skip VBUS/FAULT connection:SRomeo_7-1741338172868.png

     

  3. In case you want to transmit fault, then Vbus between BMS nodes should be connected as follows:
    SRomeo_4-1741334546506.png
  4.  Each Cx pin of a BMS connector have to be connected to a cell of the corresponding battery pack. However, if less than 14 batteries are used, Cx pins corresponding to missing batteries have to be shorted (this way the series condition is mantained).
    For clarity let me share an example with just one BMS, six 4V batteries + Rsense:
    SRomeo_6-1741336812639.png

If you have any further inquiries on a similar topic, I suggest opening a thread regarding custom BMS mockups.

Best regards,
AEK team