44#include "bms.h"
55#include "can.h"
66#include "data.h"
7- #define DEBUG_BMS
7+
88extern data_t * data ;
9+ float cells [72 ] = {0 };
910
1011int bmsClearFaults (void ){
1112
@@ -45,7 +46,7 @@ int bmsParseMsg(uint32_t id, uint8_t *msg) {
4546 bms -> packVoltage /= 10 ;
4647 bms -> Soc = msg [4 ]/2 ;
4748 bms -> relayStatus = msg [6 ] | msg [5 ] << 8 ;
48- bms -> cellMaxVoltage = (msg [5 ] << 8 ) /10000.0 ;
49+ bms -> cellMaxVoltage = (( msg [5 ] << 8 )| msg [ 6 ] ) /10000.0 ;
4950#ifdef DEBUG_BMS
5051 printf ("V: %f\r\n" , bms -> packVoltage );
5152 printf ("A: %f\r\n" , bms -> packCurrent );
@@ -56,15 +57,15 @@ int bmsParseMsg(uint32_t id, uint8_t *msg) {
5657 case 0x6B1 :
5758 bms -> packDCL = msg [1 ] | msg [0 ] << 8 ;
5859 bms -> highTemp = msg [4 ];
59- bms -> cellMinVoltage = (msg [7 ] | (msg [6 ] << 8 )) / 10000.0 ;
60+ /* bms->cellMinVoltage = (msg[7] | (msg[6] << 8)) / 10000.0;*/
6061#ifdef DEBUG_BMS
6162 printf ("DCL: %d\r\n" , bms -> packDCL );
6263 printf ("High T: %d\r\n" , bms -> highTemp );
6364 printf ("Low T: %d\r\n" , bms -> lowTemp );
6465#endif
6566 break ;
6667 case 0x653 :
67- printf ("ID: 0x%3lx\r\n" , (long unsigned int ) id );
68+ /* printf("ID: 0x%3lx\r\n", (long unsigned int) id);*/
6869 bms -> relayStatus = msg [1 ] | msg [0 ] << 8 ;
6970 bms -> relayStatus = msg [0 ];
7071 bms -> inputVoltage = msg [2 ] | (msg [3 ] << 8 );
@@ -121,9 +122,9 @@ int bmsParseMsg(uint32_t id, uint8_t *msg) {
121122 break ;
122123 case 0x150 :
123124
124- bms -> packCurrent = msg [0 ] | ( msg [ 1 ] << 8 );
125+ /* bms->avgTemp = msg[0];*/
125126 bms -> packCurrent /= 10 ;
126- bms -> cellMinVoltage = ((msg [3 ] << 8 ) | msg [4 ]) / 10000.0 ;
127+ /* bms->cellMinVoltage = ((msg[3] << 8) | msg[4]) / 10000.0;*/
127128/* bms->packVoltage = msg[2] | (msg[3] << 8);*/
128129/* bms->packVoltage /= 10;*/
129130 bms -> packAh = msg [4 ] | (msg [5 ] << 8 );
@@ -136,12 +137,23 @@ int bmsParseMsg(uint32_t id, uint8_t *msg) {
136137 printf ("High Temp %d\r\n" , bms -> highTemp );
137138 printf ("Low Temp %d\r\n" , bms -> lowTemp );
138139#endif
140+ break ;
141+ case 0x6b2 :
142+ data -> bms -> cellMinVoltage = ((msg [0 ] << 8 ) | msg [1 ]) / 10000.0 ;
143+ /* data->bms->cellMaxVoltage = ((msg[2] << 8) | msg[3]) / 10000;*/
144+ bms -> avgTemp = msg [2 ];
139145 break ;
140146 case 0x80 :
141147 break ;
142- default :
148+ case 0x36 :
149+ if (msg [0 ] >= 0 && msg [0 ] < 72 )
150+ cells [msg [0 ]] = (msg [2 ] | (msg [1 ] << 8 )) / 10000.0 ;
151+
152+
153+ default :
143154 return 0 ;
144- }
155+
156+ }
145157 return 1 ;
146158}
147159
@@ -162,9 +174,21 @@ void bmsDump () {
162174 printf ("\tRelay Status = %u\n" , bms -> relayStatus );
163175 printf ("\tHigh Temp = %u\n" , bms -> highTemp );
164176 printf ("\tLow Temp = %u\n" , bms -> lowTemp );
177+ printf ("\tAvg Temp = %d\n" , bms -> avgTemp );
165178 printf ("\tCell Max Voltage = %f\n" , bms -> cellMaxVoltage );
166179 printf ("\tCell Min Voltage = %f\n" , bms -> cellMinVoltage );
167180 printf ("\tMax Cells = %u\n" , bms -> maxCells );
168181 printf ("\tNumber of Cells = %u\n" , bms -> numCells );
169182 printf ("---END BMS---\n" );
170183}
184+ float * getCellArray ();
185+ float * getCellArray () {
186+ return cells ;
187+ }
188+
189+ void dumpCells () {
190+ printf ("BATTERY CELLS: \n" );
191+ for (int i = 0 ; i < 72 ; i ++ ) {
192+ printf ("CELL: %d : %f V\n" , i , cells [i ]);
193+ }
194+ }
0 commit comments