Mirjana Radosavljevic
/
BMS_LV
Battery Management System LV - 2020/2021
main.cpp@1:d0662d4ffb8c, 2020-12-20 (annotated)
- Committer:
- minamax
- Date:
- Sun Dec 20 18:07:17 2020 +0000
- Revision:
- 1:d0662d4ffb8c
- Child:
- 2:03a6da61d834
Revised
Who changed what in which revision?
User | Revision | Line number | New 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 | } |