Battery management system

Joined
Sep 12, 2018
Messages
3
I am using LTC6804-2 and arduino to measure voltage. i am having problem in code ....is there someone who can help me?
 
What's the problem you're having? I have a bit of experience coding with Arduino's
 
I am providing 7 cells voltage 3.3V and to 17V to power the IC. I am getting 6.55 as output for every cells
 
I wouldn't know your exact coding issue since I haven't seen your code but here's a thread that might be useful.

https://forum.arduino.cc/index.php?topic=477092.0

Are you following any kind of guide or DIY build? There's quite a few out there about measuring cell votlages using the LTC and an arduino so I would suggest following on of those as well
 
#include <Userinterface.h>
#include <Arduino.h>
#include <stdint.h>
//#include "Linduino.h"
#include "LT_SPI.h"
#include "LTC68042.h"
#include <SPI.h>

const uint8_t TOTAL_IC = 1;//!<number of ICs in the isoSPI network LTC6804-2 ICs must be addressed in ascending order starting at 0.


uint16_t cell_codes[TOTAL_IC][12];

uint16_t aux_codes[TOTAL_IC][6];

uint8_t tx_cfg[TOTAL_IC][6];

uint8_t rx_cfg[TOTAL_IC][8];


void setup()
{
Serial.begin(9600);
LTC6804_initialize(); //Initialize LTC6804 hardware
init_cfg();
}
void loop()
{
wakeup_sleep();
LTC6804_wrcfg(TOTAL_IC,tx_cfg);
print_config();

wakeup_sleep();
int8_t error = LTC6804_rdcfg(TOTAL_IC,rx_cfg);
if (error == -1)
{
Serial.println("A PEC error was detected in the received data");
}
print_rxconfig();

wakeup_sleep();
LTC6804_adcv();
delay(3);
Serial.println("cell conversion completed");
Serial.println();


wakeup_sleep();
error = LTC6804_rdcv(0, TOTAL_IC,cell_codes); // Set to read back all cell voltage registers
if (error == -1)
{
Serial.println("A PEC error was detected in the received data");
}
print_cells();

delay(1000);
}
void init_cfg()
{
for(int i = 0; i<TOTAL_IC;i++)
{
tx_cfg[0] = 0xFE;
tx_cfg[1] = 0xFE;
tx_cfg[2] = 0xFE;
tx_cfg[3] = 0xFE ;
tx_cfg[4] = 0xFE ;
tx_cfg[5] = 0xFE ;
}
}


void print_menu()
{
Serial.println("Please enter LTC6804 Command");
Serial.println("Write Configuration: 1");
Serial.println("Read Configuration: 2");
Serial.println("Start Cell Voltage Conversion: 3");
Serial.println("Read Cell Voltages: 4");
Serial.println("Start Aux Voltage Conversion: 5");
Serial.println("Read Aux Voltages: 6");
Serial.println("loop cell voltages: 7");
Serial.println("Please enter command: ");
Serial.println();
}



void print_cells()
{


for (int current_ic = 0 ; current_ic < TOTAL_IC; current_ic++)
{
Serial.print(" IC ");
Serial.print(current_ic+1,DEC);
for(int i=0; i<12; i++)
{
Serial.print(" C");
Serial.print(i+1,DEC);
Serial.print(":");
Serial.print(cell_codes[current_ic]*0.0001,4);
Serial.print(",");
}
Serial.println();
}
Serial.println();
}
void print_aux()
{

for(int current_ic =0 ; current_ic < TOTAL_IC; current_ic++)
{
Serial.print(" IC ");
Serial.print(current_ic+1,DEC);
for(int i=0; i < 5; i++)
{
Serial.print(" GPIO-");
Serial.print(i+1,DEC);
Serial.print(":");
Serial.print(aux_codes[current_ic]*0.0001,4);
Serial.print(",");
}
Serial.print(" Vref2");
Serial.print(":");
Serial.print(aux_codes[current_ic][5]*0.0001,4);
Serial.println();
}
Serial.println();
}

void print_config()
{
int cfg_pec;

Serial.println("Written Configuration: ");
for (int current_ic = 0; current_ic<TOTAL_IC; current_ic++)
{
Serial.print(" IC ");
Serial.print(current_ic+1,DEC);
Serial.print(": ");
Serial.print("0x");
serial_print_hex(tx_cfg[current_ic][0]);
Serial.print(", 0x");
serial_print_hex(tx_cfg[current_ic][1]);
Serial.print(", 0x");
serial_print_hex(tx_cfg[current_ic][2]);
Serial.print(", 0x");
serial_print_hex(tx_cfg[current_ic][3]);
Serial.print(", 0x");
serial_print_hex(tx_cfg[current_ic][4]);
Serial.print(", 0x");
serial_print_hex(tx_cfg[current_ic][5]);
Serial.print(", Calculated PEC: 0x");
cfg_pec = pec15_calc(6,&tx_cfg[current_ic][0]);
serial_print_hex((uint8_t)(cfg_pec>>8));
Serial.print(", 0x");
serial_print_hex((uint8_t)(cfg_pec));
Serial.println();
}
Serial.println();
}

void print_rxconfig()
{
Serial.println("Received Configuration ");
for (int current_ic=0; current_ic<TOTAL_IC; current_ic++)
{
Serial.print(" IC ");
Serial.print(current_ic+1,DEC);
Serial.print(": 0x");
serial_print_hex(rx_cfg[current_ic][0]);
Serial.print(", 0x");
serial_print_hex(rx_cfg[current_ic][1]);
Serial.print(", 0x");
serial_print_hex(rx_cfg[current_ic][2]);
Serial.print(", 0x");
serial_print_hex(rx_cfg[current_ic][3]);
Serial.print(", 0x");
serial_print_hex(rx_cfg[current_ic][4]);
Serial.print(", 0x");
serial_print_hex(rx_cfg[current_ic][5]);
Serial.print(", Received PEC: 0x");
serial_print_hex(rx_cfg[current_ic][6]);
Serial.print(", 0x");
serial_print_hex(rx_cfg[current_ic][7]);
Serial.println();
}
Serial.println();
}

void serial_print_hex(uint8_t data)
{
if (data< 16)
{
Serial.print("0");
Serial.print((byte)data,HEX);
}
else
Serial.print((byte)data,HEX);
}




this is code which i am using ...do you have schematic of ltc 6804
 
are you getting a valid CRC from the chip? the value you are getting suggests you are just reading a SPI line pulled high.
 
Back
Top