Dragica Stoiljkovic / Mbed 2 deprecated BMS_LV_TEMP_VOLT_BALANCE

Dependencies:   mbed

Committer:
dragica
Date:
Sun Mar 21 22:58:15 2021 +0000
Revision:
4:28919318b141
Parent:
3:4dc457ed63d5
Child:
5:979ff570efce
BMS_VOLTAGE_TEMPERATURE

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 2:03a6da61d834 11 Serial bms(PA_0, PA_1, 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 2:03a6da61d834 14 CAN can1(PB_8, PB_9, 500000);
minamax 2:03a6da61d834 15 CANMessage message1;
minamax 2:03a6da61d834 16
minamax 2:03a6da61d834 17
minamax 1:d0662d4ffb8c 18 BYTE recBuff[1024];
minamax 2:03a6da61d834 19 volatile int recLen=0;
minamax 2:03a6da61d834 20 volatile int expected=0;
minamax 1:d0662d4ffb8c 21 volatile bool full = false;
minamax 2:03a6da61d834 22 volatile int rdLen=0;
minamax 1:d0662d4ffb8c 23 int counter = 0;
minamax 1:d0662d4ffb8c 24
minamax 1:d0662d4ffb8c 25 uint8_t pFrame1[(MAXBYTES+6)*TOTALBOARDS];
minamax 1:d0662d4ffb8c 26
minamax 1:d0662d4ffb8c 27 void callback() {
minamax 1:d0662d4ffb8c 28 // Note: you need to actually read from the serial to clear the RX interrupt
minamax 2:03a6da61d834 29 //pc1.printf("* * * Uspesan PRIJEM! * * *\n");
minamax 2:03a6da61d834 30
minamax 2:03a6da61d834 31 //pc1.printf("rec = %d", c);
minamax 1:d0662d4ffb8c 32 recBuff[recLen++] = bms.getc();
minamax 2:03a6da61d834 33 if(expected==0) expected = recBuff[0]+7; //prvi bajt je (broj data - 1), +1 device id, +2 reg address, +2 CRC
minamax 2:03a6da61d834 34 //pc1.printf("Prva rec = %d", recBuff[0]);
minamax 1:d0662d4ffb8c 35 if(expected == recLen){
minamax 2:03a6da61d834 36 //pc1.printf("\n\n- - - USAO U EXPECTED - - -\n");
minamax 1:d0662d4ffb8c 37 full = true;
minamax 1:d0662d4ffb8c 38 rdLen = expected;
minamax 1:d0662d4ffb8c 39 expected = 0;
minamax 1:d0662d4ffb8c 40 recLen = 0;
minamax 1:d0662d4ffb8c 41 }
minamax 2:03a6da61d834 42
minamax 2:03a6da61d834 43
minamax 2:03a6da61d834 44 //full = true;
minamax 2:03a6da61d834 45 //recLen = 0;
minamax 2:03a6da61d834 46 //rdLen = 17; //samo test - nebitno koji broj
minamax 1:d0662d4ffb8c 47 }
minamax 1:d0662d4ffb8c 48
minamax 1:d0662d4ffb8c 49 void waitFrame(){
minamax 1:d0662d4ffb8c 50 while(!full);
minamax 2:03a6da61d834 51 //wait(2);
minamax 1:d0662d4ffb8c 52 full=false;
minamax 2:03a6da61d834 53 pc1.printf("\n%d\n", rdLen);
minamax 1:d0662d4ffb8c 54 for(int i = 0;i<rdLen;i++){
minamax 1:d0662d4ffb8c 55 pc1.printf("%X ",recBuff[i]);
minamax 1:d0662d4ffb8c 56 }
minamax 1:d0662d4ffb8c 57
minamax 1:d0662d4ffb8c 58 pc1.printf("\n\n- - - VOLTAGE - - -\n");
minamax 2:03a6da61d834 59 message1.id = 0x71;
minamax 2:03a6da61d834 60 int j = 0;
minamax 1:d0662d4ffb8c 61 for(int i = 4; i < recBuff[0] + 4; i += 2){
minamax 1:d0662d4ffb8c 62 int voltage = recBuff[i+1]; //LSB
minamax 1:d0662d4ffb8c 63 voltage |= (recBuff[i]) << 8; //MSB
minamax 2:03a6da61d834 64 double vol = voltage*0.0001907349;
minamax 2:03a6da61d834 65 //double vol = ((double)voltage)/65536.0 * 5.0;
minamax 2:03a6da61d834 66 pc1.printf("CELL[%d] = %6.2f V\n", i/2-1, vol);
minamax 2:03a6da61d834 67
minamax 2:03a6da61d834 68 message1.data[j++] = recBuff[i];
minamax 2:03a6da61d834 69
minamax 1:d0662d4ffb8c 70 }
minamax 2:03a6da61d834 71 can1.write(message1);
minamax 1:d0662d4ffb8c 72
minamax 1:d0662d4ffb8c 73 pc1.printf("\n");
minamax 1:d0662d4ffb8c 74 }
minamax 3:4dc457ed63d5 75
minamax 3:4dc457ed63d5 76
minamax 3:4dc457ed63d5 77 void waitFrameTemp(){
minamax 3:4dc457ed63d5 78 while(!full);
minamax 3:4dc457ed63d5 79 //wait(2);
minamax 3:4dc457ed63d5 80 full=false;
dragica 4:28919318b141 81 pc1.printf("****** TEMPERATURA *****");
minamax 3:4dc457ed63d5 82 pc1.printf("\n%d\n", rdLen);
minamax 3:4dc457ed63d5 83 for(int i = 0;i<rdLen;i++){
minamax 3:4dc457ed63d5 84 pc1.printf("%X ",recBuff[i]);
minamax 3:4dc457ed63d5 85 }
minamax 3:4dc457ed63d5 86 int voltage = recBuff[5]; //LSB
minamax 3:4dc457ed63d5 87 voltage |= (recBuff[4]) << 8; //MSB
minamax 3:4dc457ed63d5 88 double vol = voltage*0.0001907349;
minamax 3:4dc457ed63d5 89 //double vol = ((double)voltage)/65536.0 * 5.0;
dragica 4:28919318b141 90 pc1.printf("temp1 = %f V\n", vol);
minamax 3:4dc457ed63d5 91
minamax 3:4dc457ed63d5 92 }
minamax 1:d0662d4ffb8c 93 void waitFrameResponse(){
minamax 1:d0662d4ffb8c 94 while(!full);
minamax 1:d0662d4ffb8c 95 full = false;
minamax 1:d0662d4ffb8c 96 for(int i = 0;i < rdLen; i++){
minamax 1:d0662d4ffb8c 97 pc1.printf("%X ", recBuff[i]);
minamax 1:d0662d4ffb8c 98 }
minamax 1:d0662d4ffb8c 99 pc1.printf("\n");
minamax 1:d0662d4ffb8c 100 }
minamax 1:d0662d4ffb8c 101
minamax 2:03a6da61d834 102
minamax 1:d0662d4ffb8c 103 int main(){
dragica 4:28919318b141 104 pc1.printf("Main ulazak\n");
minamax 1:d0662d4ffb8c 105 bms.attach(&callback);
dragica 4:28919318b141 106 pc1.printf("Main after attacha\n");
minamax 1:d0662d4ffb8c 107 Wake79606();
dragica 4:28919318b141 108 pc1.printf("woken up\n");
minamax 2:03a6da61d834 109 //DigitalOut(PA_0, 0);
minamax 2:03a6da61d834 110 //DigitalOut(PA_1, 0);
minamax 2:03a6da61d834 111 //wait(1);
minamax 2:03a6da61d834 112 //DigitalOut(PA_0, 1);
minamax 2:03a6da61d834 113 //DigitalOut(PA_1, 1);
minamax 2:03a6da61d834 114 //bms(PA_0, PA_1, 250000);
minamax 2:03a6da61d834 115 bms.baud(10);
minamax 2:03a6da61d834 116 bms.send_break();
minamax 2:03a6da61d834 117 bms.baud(250000);
minamax 2:03a6da61d834 118 //wait_ms(500);
minamax 2:03a6da61d834 119 //bms.clear_break();
minamax 2:03a6da61d834 120
minamax 2:03a6da61d834 121 wait(2); //marta rekla da mozda treba da se doda wait
minamax 1:d0662d4ffb8c 122 AutoAddress();
minamax 2:03a6da61d834 123
minamax 2:03a6da61d834 124
minamax 2:03a6da61d834 125 //WriteReg(0, COMM_CTRL, 0x343C, 2, FRMWRT_ALL_NR); //mask GPIO faults
minamax 2:03a6da61d834 126
minamax 2:03a6da61d834 127 wait(2);
minamax 1:d0662d4ffb8c 128 init();
minamax 2:03a6da61d834 129 /*WriteReg(0, COMM_TO, 0x00, 1, FRMWRT_ALL_NR); //disable COMM timeout because printf takes a long time between reads
minamax 2:03a6da61d834 130 WriteReg(0, SYSFLT1_FLT_RST, 0xFFFFFF, 3, FRMWRT_ALL_NR); //reset system faults
minamax 2:03a6da61d834 131 WriteReg(0, SYSFLT1_FLT_MSK, 0xFFFFFF, 3, FRMWRT_ALL_NR); //mask system faults (so we can test boards and not worry about triggering these faults accidentally)
minamax 2:03a6da61d834 132
minamax 2:03a6da61d834 133 //SET UP MAIN ADC
minamax 2:03a6da61d834 134 WriteReg(0, CELL_ADC_CTRL, 0x3F, 1, FRMWRT_ALL_NR); //enable conversions for all cells
minamax 2:03a6da61d834 135 WriteReg(0, CELL_ADC_CONF2, 0x08, 1, FRMWRT_ALL_NR); //set continuous ADC conversions, and set minimum conversion interval
minamax 2:03a6da61d834 136 WriteReg(0, CONTROL2, 0x01, 1, FRMWRT_ALL_NR); //CELL_ADC_GO = 1
minamax 2:03a6da61d834 137 wait_ms(5);*/
minamax 1:d0662d4ffb8c 138
dragica 4:28919318b141 139 //bmsWakeUp = 0;
dragica 4:28919318b141 140 pc1.printf("Pre while-a\n");
minamax 1:d0662d4ffb8c 141 while (1) {
minamax 1:d0662d4ffb8c 142 pc1.printf("Main Code \n");
minamax 1:d0662d4ffb8c 143
minamax 1:d0662d4ffb8c 144 pc1.printf("Board 0 \n");
minamax 1:d0662d4ffb8c 145
minamax 2:03a6da61d834 146
minamax 2:03a6da61d834 147
minamax 2:03a6da61d834 148
minamax 1:d0662d4ffb8c 149 wait(2);
minamax 3:4dc457ed63d5 150 //while(bms.readable()) bms.getc();
minamax 3:4dc457ed63d5 151 int rdLen = ReadReg(0, VCELL1H , pFrame1, 6 , 0, FRMWRT_ALL_R); //6 bajtova jer cita od adrese VCELL1H po dva bajta za svaki kanal (ima 3 kanala)
minamax 3:4dc457ed63d5 152
minamax 3:4dc457ed63d5 153
minamax 2:03a6da61d834 154
minamax 1:d0662d4ffb8c 155 waitFrame();
minamax 1:d0662d4ffb8c 156
dragica 4:28919318b141 157 WriteReg(0, CONTROL2, 0x02, 1, FRMWRT_ALL_NR);
dragica 4:28919318b141 158 ReadReg(0, AUX_GPIO1H, pFrame1, 2 , 0, FRMWRT_ALL_R);
minamax 3:4dc457ed63d5 159
dragica 4:28919318b141 160 waitFrameTemp();
minamax 2:03a6da61d834 161
minamax 2:03a6da61d834 162
minamax 1:d0662d4ffb8c 163 //slanje zahteva za GRESKAMA
minamax 2:03a6da61d834 164 //ReadReg(0, 0x52, &wTemp, 2, 0); // 0ms timeout
minamax 2:03a6da61d834 165 //waitFrameResponse();
minamax 1:d0662d4ffb8c 166
minamax 1:d0662d4ffb8c 167
minamax 1:d0662d4ffb8c 168 }
minamax 1:d0662d4ffb8c 169
minamax 1:d0662d4ffb8c 170
minamax 1:d0662d4ffb8c 171
minamax 1:d0662d4ffb8c 172 }