VW eGolf hardware

Forum on Volkswagen related hardware, so VW, Audi, Seat, Skoda etc.
User avatar
Bigpie
Posts: 682
Joined: Wed Apr 10, 2019 8:11 pm
Location: South Yorkshire, UK

Re: VW eGolf hardware

Post by Bigpie »

Strange, half amusing how the balance command has been elusive but you had it by accident.
Be interesting to see what happens now Tom has found the balancing feedback ids, should be able to see if the the slaves turn on the resistors.
I have the Panasonic modules too.
boekel
Posts: 49
Joined: Mon Nov 25, 2019 4:37 pm

Re: VW eGolf hardware

Post by boekel »

with a thermal camera you should be able to see the balancing indeed.
User avatar
Bigpie
Posts: 682
Joined: Wed Apr 10, 2019 8:11 pm
Location: South Yorkshire, UK

Re: VW eGolf hardware

Post by Bigpie »

That's a good idea.
alfonatr
Posts: 5
Joined: Sun Apr 24, 2022 3:50 pm

Re: VW eGolf hardware

Post by alfonatr »

Hello.
I introduce myself with the first message, I'm Alfonso from Spain.
I have bought 16 modules from VW (1.64kWh), and seeing that the Teensy 3.6 cannot be obtained right now, I am trying to communicate with a simple Arduino.
I am looking for the plot to activate cell balancing, but I see that it is not working.
I have a thermal camera, but I see that the resistances are not activated, sending in all possible directions.
I have unbalanced on purpose, but there is no cell balancing.
Image
Image
Image
Image
Image
Image
Image
Image

I have looked at the balancing datasheet, and it can dissipate a maximum of 150mA, so it will be there for a while.
I'll wait until tomorrow to see if anything works, or if the cell voltage changes.

Best regards
User avatar
johu
Site Admin
Posts: 3560
Joined: Thu Nov 08, 2018 10:52 pm
Location: Kassel/Germany
Contact:

Re: VW eGolf hardware

Post by johu »

Welcome! That looks very systematic, keep it coming.
Support R/D and forum on Patreon: https://patreon.com/openinverter - Subscribe on odysee: https://odysee.com/@openinverter:9
alfonatr
Posts: 5
Joined: Sun Apr 24, 2022 3:50 pm

Re: VW eGolf hardware

Post by alfonatr »

Hello.
I have confirmed that the commands for balancing work fine.
2 version e-golf battery
2 version e-golf battery
I attach two images, thermal, and photo of 2 battery versions.
thermal resistor balance 2 version
thermal resistor balance 2 version
This is a video with work balance https://youtu.be/fDm4_A2jWdU
To activate balancing, any value greater than 0x00 , except 0xFE (the latter ignores the function, neither activates nor deactivates balancing).
To disable balancing, 0x00.
Tramas balanceo
Tramas balanceo
tramas balanceo excel
tramas balanceo excel
Best regards
User avatar
Bigpie
Posts: 682
Joined: Wed Apr 10, 2019 8:11 pm
Location: South Yorkshire, UK

Re: VW eGolf hardware

Post by Bigpie »

You got a DBC to share? Nice work
alfonatr
Posts: 5
Joined: Sun Apr 24, 2022 3:50 pm

Re: VW eGolf hardware

Post by alfonatr »

Bigpie wrote: Mon May 02, 2022 5:48 pm You got a DBC to share? Nice work
Sorry, I don't know the DBC format, or for what system is it needed? Batrium? SimpBMS ? or app?
I am attaching a modified Excel (VW GTE Canbus Ids) with the results that I have experienced. Best regards
tom91
Posts: 712
Joined: Fri Mar 01, 2019 9:15 pm
Location: Bristol

Re: VW eGolf hardware

Post by tom91 »

alfonatr wrote: Sun May 01, 2022 11:40 pm I have confirmed that the commands for balancing work fine.
thank you for confirming my finds are correct. Good to see others being able to replicate my findings/hunches 8-)
User avatar
Bigpie
Posts: 682
Joined: Wed Apr 10, 2019 8:11 pm
Location: South Yorkshire, UK

Re: VW eGolf hardware

Post by Bigpie »

DBC is a file to describe the ID and bit mapping, using by SavvyCAN and others.

I'm struggling to understand what the IDS/messages should look like, for example, with SIMPBMS I've got a SavvyCan script that sends out all the modules as the same voltage, except Module 1A Cell 1, having 20mV higher.
Screenshot 2022-05-03 at 6.57.44 pm.png
Screenshot 2022-05-03 at 6.58.42 pm.png
What I don't understand is 0x1A55540A and 0x1A55540B, the first bytes are both set to 0x08, I'd have though't only the first byte of 0x1A55540A should be 0x08 in my case, unless I'm missing something?
User avatar
Bigpie
Posts: 682
Joined: Wed Apr 10, 2019 8:11 pm
Location: South Yorkshire, UK

Re: VW eGolf hardware

Post by Bigpie »

Found a bug in the SimpBMS balancing code. Where you loop over the cells in the 2nd half of the module you're setting buffer indexes out of the can message range, e.g. 8, 9, 10 etc

Code: Select all

      for (int i = 8; i < 13; i++)
      {
        if (bitRead(balance, i) == 1)
        {
          msg.buf[i] = 0x08;
        }
        else
        {
          msg.buf[i] = 0x00;
        }
      }
So removing 8 from the index before setting it is needed to get the correct output

Code: Select all

      for (int i = 8; i < 13; i++)
      {
        if (bitRead(balance, i) == 1)
        {
          msg.buf[i - 8] = 0x08;
        }
        else
        {
          msg.buf[i - 8] = 0x00;
        }
      }
tom91
Posts: 712
Joined: Fri Mar 01, 2019 9:15 pm
Location: Bristol

Re: VW eGolf hardware

Post by tom91 »

Bigpie wrote: Wed May 04, 2022 9:06 am Found a bug in the SimpBMS balancing code. Where you loop over the cells in the 2nd half of the module you're setting buffer indexes out of the can message range, e.g. 8, 9, 10 etc
Thank you for highlighting this, sloppy copy paste on my part.
alfonatr
Posts: 5
Joined: Sun Apr 24, 2022 3:50 pm

Re: VW eGolf hardware

Post by alfonatr »

Hello.
I still can't get teensy 3.6, so the Simpbms code doesn't work on teensy 4.0 or 4.1 that are available.
I am writing a little code in Arduino nano, to test the balance of each individual module.
Although the Arduino nano is very slow, it loses frames, but it works fine with a battery module.

I have found that I have 16 modules, and many have repeating CMC addresses.
Direcciones CMC repetidas.JPG
With the SimpBMS can all the modules be connected even if they have repeated addresses?

Attached image when starting the balance
Balanceo depuración arduino, solo 1 módulo.JPG
After 10 hours the result was acceptable, I put a 4mV differential with respect to the minimum voltage.
Balanceo depuración arduino, solo 1 módulo_terminando.JPG

Code: Select all

// CAN readout of VW type 5 modules
//    ------- Programa adaptado por Alfonso para comunicar las celdas SDI de VW  a 15-04-2022
//    ------- Funciona con un Arduino nano, y el MCP2515, la interrupción del integrado interrumpe algunos comandos, pero en general va respondiendo con 1 módulo solo conectado.
//
//    Link información muy útil: https://openinverter.org/wiki/VW_Hybrid_Battery_Packs 
// 
//    Revisión programa 0.1:    Balanceo para 1 módulo solo, no se ha probado con más módulos. 
//                              La equivalencia con la tabla balanceBMS no coincide con el cmcID , por lo que he ajustado a ojo.   
//                              Hay que hacer pruebas con todos los módulos que tengo de stock, para ver si todos los CMC responden bien a los comandos de balanceo.
//
//
//






#include <mcp_can.h>
#include <SPI.h>

long unsigned int rxId;
unsigned char len = 0;
unsigned char rxBuf[8];
char msgString[128];                        // Array to store serial string
unsigned long looptime = 0;

#define CAN0_INT 2                              // Set INT to pin 2
MCP_CAN CAN0(10);                               // Set CS to pin 9 de[ending on shield used

int controlid = 0x0BA;
int controlid2 = 0x0BB;
long cmcID[] = {0x1b0, 0x1b4, 0x1b8, 0x1bc, 0x1c0, 0x1c4, 0x1c8, 0x1cc};
long controlbms1[] = {0x1A55540A, 0x1A55540C, 0x1A555410, 0x1A555412, 0x1A555414, 0x1A555416, 0x1A555418 };
long balanceBMS[8][2] = {0x1A55540A, 0x1A55540B,    0x1A55540C, 0x1A55540D,   0x1A555410, 0x1A555411,   0x1A555412, 0x1A555413,   0x1A555414, 0x1A555415,   0x1A555416, 0x1A555417,   0x1A555418, 0x1A555419,   0x1A55541A, 0x1A55541B};
long moduleidstart, CMC;
char mes[8] = {0, 0, 0, 0, 0, 0, 0, 0};
char mes2[8], mes3[8];
int minimoVoltage, inicioVoltage;
long mesBalanceo[14];
boolean necesitaBalanceo;

uint16_t voltage[30][14];
int modulespresent = 0;
int sent = 0;

int debug = 0;

void setup()
{
  Serial.begin(115200);
 //  Can0.begin(500000);
  Serial.println("Inicio programa ...");
  // Initialize MCP2515 running at 8MHz with a baudrate of 500kb/s and the masks and filters disabled.
  if (CAN0.begin(MCP_ANY, CAN_500KBPS, MCP_8MHZ) == CAN_OK)
    Serial.println("MCP2515 Initialized Successfully!");
  else
    Serial.println("Error Initializing MCP2515...");

  CAN0.setMode(MCP_NORMAL);                     // Set operation mode to normal so the MCP2515 sends acks to received data.

  pinMode(CAN0_INT, INPUT);                            // Configuring pin for /INT input

  //Serial.println("Time Stamp,ID,Extended,Bus,LEN,D1,D2,D3,D4,D5,D6,D7,D8");
  //Serial.println("Vcell 1, Vcell 2, Vcell 3, Vcell 4, Vcell 5, Vcell 6, Vcell 7, Vcell 8, Vcell 9, Vcell 10, Vcell 11, Vcell 12");
}

void loop()
{

  if (CAN0.checkReceive() == 3){                        // If CAN0_INT pin is low, read receive buffer
    // Serial.print(CAN0.checkReceive());     // Si lee 3 quiere decir que ha recibido un mensaje, decodifica a ver si es relevante o no.
    candecode();
  }
  if (Serial.available() > 0){
    menu();                               // Un menú, que no funciona, pero está en el código.
  }

  if (millis() > looptime + 1000){
    looptime = millis();
    for(int i=0;i<8;i++){
      if(CMC == cmcID[i]){
        Serial.println();
        Serial.print("CMC = ");
        CMC = i;
        Serial.println(CMC+1); 
        //Serial.println(" Buscando tabla de balanceo ...");
      }
    }
    for (int y = 0; y < modulespresent; y++){
      //Serial.println();
      Serial.print("Module ");
      Serial.print(y+1);
      Serial.print(" Voltages : ");
      Serial.print("");
      minimoVoltage = voltage[y][1];      // OK, guarda el mínimo
      // Serial.print( inicioVoltage);
      for (int i = 1; i < 13; i++){
        //Serial.print("");
        if(voltage[y][i] <= minimoVoltage){       // Busca el mínimo voltage 
           minimoVoltage = voltage[y][i];         // Guarda el valor mínimo
           //Serial.print("_Min_");
        }
        Serial.print(voltage[y][i]);
        Serial.print("mV ");
        if( i<12 ){  Serial.print(","); }
      }
      Serial.print(" R.Balanceo: ");
      for (int i = 1; i < 13; i++){
        if(voltage[y][i] > minimoVoltage + 4){      // Diferencial de 4mV para dejar de equalizar respecto al valor mínimo
              mesBalanceo[i-1] = 0x01;
              necesitaBalanceo = 1;
              Serial.print("O");
        }else{
              mesBalanceo[i-1] = 0x00;
              Serial.print(".");
        }
      }
    }    
    //Serial.print();
    //Serial.print(" Voltaje minimo celdas = ");
    //Serial.print(minimoVoltage);
    //Serial.print("  Balanceo: ");
    //Serial.println(necesitaBalanceo);
    if(necesitaBalanceo){
      sendcommandbalance();
    }
      
    sendcommand();
  }

}


void menu()
{
  byte incomingByte = Serial.read(); // read the incoming byte:

  switch (incomingByte)
  {
    case 's': //
      sendcommand();
      break;
  }
}

void sendcommandbalance(){
  mes[0] = mesBalanceo[0];
  mes[1] = mesBalanceo[1];
  mes[2] = mesBalanceo[2];
  mes[3] = mesBalanceo[3];
  mes[4] = mesBalanceo[4];
  mes[5] = mesBalanceo[5];
  mes[6] = mesBalanceo[6];
  mes[7] = mesBalanceo[7];
  CAN0.sendMsgBuf(balanceBMS[CMC-1][0], 1, 8, mes);
  mes[0] = mesBalanceo[8];
  mes[1] = mesBalanceo[9];
  mes[2] = mesBalanceo[10];
  mes[3] = mesBalanceo[11];
  mes[4] = 0x00;
  mes[5] = 0x00;
  mes[6] = 0x00;
  mes[7] = 0x00;
  CAN0.sendMsgBuf(balanceBMS[CMC-1][1], 1, 8, mes);
}

void sendcommand()
{
  mes[0] = 0x00;
  mes[1] = 0x00;
  mes[2] = 0x00;
  mes[3] = 0x00;
  mes[4] = 0x00;
  mes[5] = 0x00;
  mes[6] = 0x00;
  mes[7] = 0x00;
  CAN0.sendMsgBuf(controlid, 0, 8, mes);

  
  mes[0] = 0x45;
  mes[1] = 0x01;
  mes[2] = 0x28;
  mes[3] = 0x00;
  mes[4] = 0x00;
  mes[5] = 0x00;
  mes[6] = 0x00;
  mes[7] = 0x30;
  CAN0.sendMsgBuf(controlid, 0, 8, mes);
  sent = 1;
 // Serial.println();
 // Serial.print("Command Sent");
 // Serial.print(" Present Modules: ");
 // Serial.print(modulespresent);
 // Serial.println();
 modulespresent = 0;
}

void candecode()
{
  CAN0.readMsgBuf(&rxId, &len, rxBuf);      // Read data: len = data length, buf = data byte(s)
  //Serial.print(rxId, HEX);
  //Serial.print("=");
  //Serial.print(rxId);
  //Serial.print(" / ");
  
  if (sent == 1){
    moduleidstart = rxId;
    sent = 0;
    debug = 0;                            // Activa depuración, para ver las tramas que recibe
  }
  
  if (rxId < 1024){
    //Serial.print("   ");
    sent = 0;
    int ID = rxId - moduleidstart;
    //Serial.print(ID);
    //Serial.print(",");
    CMC = moduleidstart;
    switch (ID){
      case 0:
        voltage[modulespresent][1] = uint16_t(rxBuf[1] >> 4) + uint16_t(rxBuf[2] << 4) + 1000;
        voltage[modulespresent][3] = uint16_t(rxBuf[5] << 4) + uint16_t(rxBuf[4] >> 4) + 1000;

        voltage[modulespresent][2] = rxBuf[3] + uint16_t((rxBuf[4] & 0x0F) << 8) + 1000;
        voltage[modulespresent][4] = rxBuf[6] + uint16_t((rxBuf[7] & 0x0F) << 8) + 1000;
        break;
      case 1:
        voltage[modulespresent][5] = uint16_t(rxBuf[1] >> 4) + uint16_t(rxBuf[2] << 4) + 1000;
        voltage[modulespresent][7] = uint16_t(rxBuf[5] << 4) + uint16_t(rxBuf[4] >> 4) + 1000;

        voltage[modulespresent][6] = rxBuf[3] + uint16_t((rxBuf[4] & 0x0F) << 8) + 1000;
        voltage[modulespresent][8] = rxBuf[6] + uint16_t((rxBuf[7] & 0x0F) << 8) + 1000;
        break;

      case 2:
        voltage[modulespresent][9] = uint16_t(rxBuf[1] >> 4) + uint16_t(rxBuf[2] << 4) + 1000;
        voltage[modulespresent][11] = uint16_t(rxBuf[5] << 4) + uint16_t(rxBuf[4] >> 4) + 1000;

        voltage[modulespresent][10] = rxBuf[3] + uint16_t((rxBuf[4] & 0x0F) << 8) + 1000;
        voltage[modulespresent][12] = rxBuf[6] + uint16_t((rxBuf[7] & 0x0F) << 8) + 1000;
        modulespresent++;
        sent =1;
        break;
    }
  }
  if (debug == 1)                        // If CAN0_INT pin is low, read receive buffer
  {
    Serial.print(millis());
    if ((rxId & 0x80000000) == 0x80000000)    // Determine if ID is standard (11 bits) or extended (29 bits)
      sprintf(msgString, " Extended ID: 0x%.8lX  DLC: %1d  Data:", (rxId & 0x1FFFFFFF), len);
    else
      sprintf(msgString, ",0x%.3lX,false,%1d", rxId, len);

    Serial.print(msgString);

    if ((rxId & 0x40000000) == 0x40000000) {  // Determine if message is a remote request frame.
      sprintf(msgString, " REMOTE REQUEST FRAME");
      Serial.print(msgString);
    } else {
      for (byte i = 0; i < len; i++) {
        sprintf(msgString, " , 0x%.2X", rxBuf[i]);
        Serial.print(msgString);
      }
    }

    Serial.println();
  }
}

/*********************************************************************************************************
  END FILE
*********************************************************************************************************/
User avatar
rstevens81
Posts: 172
Joined: Sun Dec 22, 2019 10:36 am
Location: Bristol, UK

Re: VW eGolf hardware

Post by rstevens81 »

Tom de Bree (tom91) is the author, but what I do know is that ...

You can't have repeated addresses, basically the BMS is receiving a shunt on the can saying I am module 1, my cells are ... If you have 2 modules called 1 things are going to go bad quickly.

As far as I know then can't be renumbered.
You'll going to need to work out what the IDs are for each of your modules and then create some sort of can in the middle device that will translate the ids's.
Rule 1 of EV Club is don't buy a rust bucket....
Which rule does everyone forget 🤪
alfonatr
Posts: 5
Joined: Sun Apr 24, 2022 3:50 pm

Re: VW eGolf hardware

Post by alfonatr »

rstevens81 wrote: Thu May 05, 2022 2:06 pm Tom de Bree (tom91) is the author, but what I do know is that ...

You can't have repeated addresses, basically the BMS is receiving a shunt on the can saying I am module 1, my cells are ... If you have 2 modules called 1 things are going to go bad quickly.

As far as I know then can't be renumbered.
You'll going to need to work out what the IDs are for each of your modules and then create some sort of can in the middle device that will translate the ids's.
It's true.
They cannot be connected with the same address, it's difficult to identify them.
In my case, by the voltage I know which module corresponds.
But in case of sending balanced, it's a problem.
savvycan32 - captura 2 modulos misma dirección.JPG
It's a shame, I was thinking of using 16 modules to install in a vehicle, a Think City, but I'll look for an alternative BMS.

Summarizing:
I understand that you cannot install modules with the same address if you want to enable balancing.
If you don't turn it on, no problem, it will read all the voltages but it won't be able to identify which module has the wrong voltage.
You are limited to 8 different CMC modules, so your final battery with slave BMS will be limited to 8x1.64kWh = 13kWh approx.
User avatar
rstevens81
Posts: 172
Joined: Sun Dec 22, 2019 10:36 am
Location: Bristol, UK

Re: VW eGolf hardware

Post by rstevens81 »

It's not impossible, but you'll going to need to dive into programming and understanding the simp code.
you just need have device that has 2 can ports that will translate the can Id into a new one.
A due should be able to do it easy as it has 2 can ports so all you'll need then is 2 transceivers.
All the code needs to do is change the CMC Id to an I'd that isn't used and pass it onto simp BMS string.

Tom kindly added extra IDs so all u.need to do is translate (0x1B0) to (0x1D0) or it might be even simpler as moving it from (0x1B0) to
(0x1B1)

///////////////////////standard ids////////////////


case (0x1B0):
CMU = 1;
Id = 0;
break;
case (0x1B1):
CMU = 1;
Id = 1;
break;
case (0x1B2):
CMU = 1;
Id = 2;
break;
case (0x1B3):
CMU = 1;
Id = 3;
break;
//////////////// one extender increment//////////

case (0x1D0):
CMU = 9;
Id = 0;
break;
case (0x1D1):
CMU = 9;
Id = 1;
break;
case (0x1D2):
CMU = 9;
Id = 2;
break;
case (0x1D3):
CMU = 9;
Id = 3;
break;
Rule 1 of EV Club is don't buy a rust bucket....
Which rule does everyone forget 🤪
bigmotherwhale
Posts: 3
Joined: Tue Sep 22, 2020 6:48 pm

Re: VW eGolf hardware

Post by bigmotherwhale »

Im looking for something exactly like this, I have two outlander packs I want to use on a single simpBMS for energy storage.

I saw someone had written a program that did exactly this somewhere but now I cant find it, and I'm useless at programming myself.

It sure would be great if someone could re write simpBMS to have two can bus networks or a bridge as discussed.

Edit: there is a perfect ready made bit of hardware available cheaply for intercepting and manipulating automotive CAN messages on AliExpress, lookup "can filter" it has an STM32 that would need reprogramming, it would be a neat solution.

Update: I have found the program : https://github.com/knoxsp/OutlanderCanH ... Middle.ino

I setup a test using some outlander packs and an Arduino with two mcp2515 modules and it works fine, I can use two modules on the same BMS with the same name.
User avatar
EV_Builder
Posts: 807
Joined: Tue Apr 28, 2020 3:50 pm
Location: The Netherlands

Re: VW eGolf hardware

Post by EV_Builder »

alfonatr wrote: Thu May 05, 2022 10:21 pm
rstevens81 wrote: Thu May 05, 2022 2:06 pm Tom de Bree (tom91) is the author, but what I do know is that ...

You can't have repeated addresses, basically the BMS is receiving a shunt on the can saying I am module 1, my cells are ... If you have 2 modules called 1 things are going to go bad quickly.

As far as I know then can't be renumbered.
You'll going to need to work out what the IDs are for each of your modules and then create some sort of can in the middle device that will translate the ids's.
It's true.
They cannot be connected with the same address, it's difficult to identify them.
In my case, by the voltage I know which module corresponds.
But in case of sending balanced, it's a problem.
savvycan32 - captura 2 modulos misma dirección.JPG

It's a shame, I was thinking of using 16 modules to install in a vehicle, a Think City, but I'll look for an alternative BMS.

Summarizing:
I understand that you cannot install modules with the same address if you want to enable balancing.
If you don't turn it on, no problem, it will read all the voltages but it won't be able to identify which module has the wrong voltage.
You are limited to 8 different CMC modules, so your final battery with slave BMS will be limited to 8x1.64kWh = 13kWh approx.
Pretty sure those addresses are visible on the PCB else we should try to reconfigure a board. If it's not on the PCB it means that the # in the pack could vary with their position in the pack. Don't know if OEM's don't want to know the physical position..(or they should be programmed one by one which is costly).

If not a conversion device would do the trick, except you have 3 modules #6 that means you need 3 can ports in your translator. I might have a solution for you todo translations. I need to check how easy i can make it 3ports... (It has 2 natively). So for all others it's easy.

P.s. i do think we should be able to change ID's.
User avatar
EV_Builder
Posts: 807
Joined: Tue Apr 28, 2020 3:50 pm
Location: The Netherlands

Re: VW eGolf hardware

Post by EV_Builder »

alfonatr wrote: Sun May 01, 2022 11:40 pm Image
In the small square section looks like some configuration to me?
Do you have closeup? What's printed on the small table?
User avatar
Bigpie
Posts: 682
Joined: Wed Apr 10, 2019 8:11 pm
Location: South Yorkshire, UK

Re: VW eGolf hardware

Post by Bigpie »

283363374_341659734775974_6015012828176769006_n.jpeg
User avatar
EV_Builder
Posts: 807
Joined: Tue Apr 28, 2020 3:50 pm
Location: The Netherlands

Re: VW eGolf hardware

Post by EV_Builder »

@ the third screw on both HW revs. you see like a config zone.
(Could be)

The table is on the left side third screw on the left board. The right board has the table at the second screw.

That table might be interesting...

It's speculation best thing would be compare two boards same HW rev. different ID's.
Alibro
Posts: 381
Joined: Sun Feb 23, 2020 9:24 am
Location: Co Armagh, N. Ireland
Contact:

Re: VW eGolf hardware

Post by Alibro »

If anyone needs them or is just interested I have a complete set of PCB's from the 8 master modules. Plus a complete master power module and a complete battery loom, all from a 2020 eGolf.
I'll be putting them up in the classifieds section sometime but wanted to offer them here first.

BTW I'm currently using a Nissan Leaf BMS and LeafSpy with my modules as I now have a 96S pack
I need a bigger hammer!
Post Reply