Battery Management System LV - 2020/2021

Dependencies:   mbed

Committer:
minamax
Date:
Sun Dec 20 18:07:17 2020 +0000
Revision:
1:d0662d4ffb8c
Child:
2:03a6da61d834
Revised

Who changed what in which revision?

UserRevisionLine numberNew contents of line
minamax 1:d0662d4ffb8c 1 #include "mbed.h"
minamax 1:d0662d4ffb8c 2 #include "bq79606.h"
minamax 1:d0662d4ffb8c 3
minamax 1:d0662d4ffb8c 4 // - - - PIN CONFIGURATION - - -
minamax 1:d0662d4ffb8c 5
minamax 1:d0662d4ffb8c 6 DigitalIn bmsFault(PB_4);
minamax 1:d0662d4ffb8c 7 DigitalOut bmsWakeUp(PB_5);
minamax 1:d0662d4ffb8c 8
minamax 1:d0662d4ffb8c 9 // - - - UART CONFIGURATION - - -
minamax 1:d0662d4ffb8c 10
minamax 1:d0662d4ffb8c 11 Serial bms(PA_0, PA_1, BAUDRATE);//PA_9, PA_10,250000); //UART ka BMS Slaveu
minamax 1:d0662d4ffb8c 12 Serial pc1(USBTX, USBRX, 9600);//PC_10, PC_11,9600); //UART ka PCu Serijskom monitoru
minamax 1:d0662d4ffb8c 13
minamax 1:d0662d4ffb8c 14 BYTE recBuff[1024];
minamax 1:d0662d4ffb8c 15 int recLen=0;
minamax 1:d0662d4ffb8c 16 int expected=0;
minamax 1:d0662d4ffb8c 17 volatile bool full = false;
minamax 1:d0662d4ffb8c 18 int rdLen=0;
minamax 1:d0662d4ffb8c 19 int counter = 0;
minamax 1:d0662d4ffb8c 20
minamax 1:d0662d4ffb8c 21 uint8_t pFrame1[(MAXBYTES+6)*TOTALBOARDS];
minamax 1:d0662d4ffb8c 22
minamax 1:d0662d4ffb8c 23 void callback() {
minamax 1:d0662d4ffb8c 24 // Note: you need to actually read from the serial to clear the RX interrupt
minamax 1:d0662d4ffb8c 25 pc1.printf("* * * Uspesan PRIJEM! * * *\n");
minamax 1:d0662d4ffb8c 26 while(bms.readable()){
minamax 1:d0662d4ffb8c 27 recBuff[recLen++] = bms.getc();
minamax 1:d0662d4ffb8c 28 if(expected==0) expected = recBuff[0]+6; //prvi bajt je (broj data - 1), +1 device id, +2 reg address, +2 CRC
minamax 1:d0662d4ffb8c 29 if(expected == recLen){
minamax 1:d0662d4ffb8c 30 full = true;
minamax 1:d0662d4ffb8c 31 rdLen = expected;
minamax 1:d0662d4ffb8c 32 expected = 0;
minamax 1:d0662d4ffb8c 33 recLen = 0;
minamax 1:d0662d4ffb8c 34 }
minamax 1:d0662d4ffb8c 35 }
minamax 1:d0662d4ffb8c 36 }
minamax 1:d0662d4ffb8c 37
minamax 1:d0662d4ffb8c 38 void waitFrame(){
minamax 1:d0662d4ffb8c 39 while(!full);
minamax 1:d0662d4ffb8c 40 full=false;
minamax 1:d0662d4ffb8c 41 for(int i = 0;i<rdLen;i++){
minamax 1:d0662d4ffb8c 42 pc1.printf("%X ",recBuff[i]);
minamax 1:d0662d4ffb8c 43 }
minamax 1:d0662d4ffb8c 44
minamax 1:d0662d4ffb8c 45 pc1.printf("\n\n- - - VOLTAGE - - -\n");
minamax 1:d0662d4ffb8c 46 for(int i = 4; i < recBuff[0] + 4; i += 2){
minamax 1:d0662d4ffb8c 47 int voltage = recBuff[i+1]; //LSB
minamax 1:d0662d4ffb8c 48 voltage |= (recBuff[i]) << 8; //MSB
minamax 1:d0662d4ffb8c 49 double vol = ((double)voltage)/65536.0 * 5.0;
minamax 1:d0662d4ffb8c 50 pc1.printf("CELL[%d] = %6.f V\n", i/2-1, vol);
minamax 1:d0662d4ffb8c 51 }
minamax 1:d0662d4ffb8c 52
minamax 1:d0662d4ffb8c 53 pc1.printf("\n");
minamax 1:d0662d4ffb8c 54 }
minamax 1:d0662d4ffb8c 55 void waitFrameResponse(){
minamax 1:d0662d4ffb8c 56 while(!full);
minamax 1:d0662d4ffb8c 57 full = false;
minamax 1:d0662d4ffb8c 58 for(int i = 0;i < rdLen; i++){
minamax 1:d0662d4ffb8c 59 pc1.printf("%X ", recBuff[i]);
minamax 1:d0662d4ffb8c 60 }
minamax 1:d0662d4ffb8c 61 pc1.printf("\n");
minamax 1:d0662d4ffb8c 62 }
minamax 1:d0662d4ffb8c 63
minamax 1:d0662d4ffb8c 64 int main(){
minamax 1:d0662d4ffb8c 65 bms.attach(&callback);
minamax 1:d0662d4ffb8c 66 Wake79606();
minamax 1:d0662d4ffb8c 67 AutoAddress();
minamax 1:d0662d4ffb8c 68 init();
minamax 1:d0662d4ffb8c 69
minamax 1:d0662d4ffb8c 70 while (1) {
minamax 1:d0662d4ffb8c 71 pc1.printf("Main Code \n");
minamax 1:d0662d4ffb8c 72
minamax 1:d0662d4ffb8c 73 pc1.printf("Board 0 \n");
minamax 1:d0662d4ffb8c 74
minamax 1:d0662d4ffb8c 75 wait(2);
minamax 1:d0662d4ffb8c 76 ReadReg(0, VCELL1H, pFrame1, 0x0C, 0, FRMWRT_SGL_R); //12 bajtova jer cita od adrese VCELL1H po dva bajta za svaki kanal (ima 6 kanala)
minamax 1:d0662d4ffb8c 77 waitFrame();
minamax 1:d0662d4ffb8c 78
minamax 1:d0662d4ffb8c 79 //slanje zahteva za GRESKAMA
minamax 1:d0662d4ffb8c 80 /*ReadReg(0, 0x52, &wTemp, 2, 0); // 0ms timeout
minamax 1:d0662d4ffb8c 81 waitFrameResponse();*/
minamax 1:d0662d4ffb8c 82
minamax 1:d0662d4ffb8c 83
minamax 1:d0662d4ffb8c 84 }
minamax 1:d0662d4ffb8c 85
minamax 1:d0662d4ffb8c 86
minamax 1:d0662d4ffb8c 87
minamax 1:d0662d4ffb8c 88 }