Detailed Design Dummy BMS and Charger code

Dependencies:   mbed

Committer:
JC2112
Date:
Sun May 20 11:37:56 2018 +0000
Revision:
0:68289c64435b
Detailed Design;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JC2112 0:68289c64435b 1 #include "mbed.h"
JC2112 0:68289c64435b 2
JC2112 0:68289c64435b 3 Ticker BMSticker1;
JC2112 0:68289c64435b 4 Ticker BMSticker2;
JC2112 0:68289c64435b 5 Ticker SoCSP1ticker;
JC2112 0:68289c64435b 6 Ticker TempSP1ticker;
JC2112 0:68289c64435b 7 Ticker Chargerticker;
JC2112 0:68289c64435b 8 DigitalOut led1(LED1);
JC2112 0:68289c64435b 9 DigitalOut led2(LED2);
JC2112 0:68289c64435b 10 DigitalOut led3(LED3);
JC2112 0:68289c64435b 11 DigitalOut led4(LED4);
JC2112 0:68289c64435b 12 DigitalOut Normal(p21);
JC2112 0:68289c64435b 13 DigitalOut Fast(p22);
JC2112 0:68289c64435b 14 DigitalOut OKError(p25);
JC2112 0:68289c64435b 15 DigitalOut ChargeStateError(p26);
JC2112 0:68289c64435b 16 DigitalOut VoltageError(p27);
JC2112 0:68289c64435b 17 DigitalIn OKSwitch(p5);
JC2112 0:68289c64435b 18 DigitalIn ChargeStateSwitch(p6);
JC2112 0:68289c64435b 19 DigitalIn VoltageSwitch(p7);
JC2112 0:68289c64435b 20 DigitalIn Charger(p8);
JC2112 0:68289c64435b 21 CAN can1(p9, p10);
JC2112 0:68289c64435b 22 CAN can2(p30, p29);
JC2112 0:68289c64435b 23 CANMessage BMSMsg;
JC2112 0:68289c64435b 24 CANMessage BMSOK;
JC2112 0:68289c64435b 25 CANMessage BMSSoCSP1;
JC2112 0:68289c64435b 26 CANMessage BMSTSP1;
JC2112 0:68289c64435b 27 CANMessage ChargerMsg;
JC2112 0:68289c64435b 28 int Voltage;
JC2112 0:68289c64435b 29 int Current;
JC2112 0:68289c64435b 30
JC2112 0:68289c64435b 31 void DummyBMSOK() {
JC2112 0:68289c64435b 32
JC2112 0:68289c64435b 33 int OK;
JC2112 0:68289c64435b 34
JC2112 0:68289c64435b 35 if(OKSwitch){
JC2112 0:68289c64435b 36 OKError = 1;
JC2112 0:68289c64435b 37 OK = 1;
JC2112 0:68289c64435b 38 }
JC2112 0:68289c64435b 39 else{
JC2112 0:68289c64435b 40 OKError = 0;
JC2112 0:68289c64435b 41 OK = 0;
JC2112 0:68289c64435b 42 }
JC2112 0:68289c64435b 43
JC2112 0:68289c64435b 44 BMSOK.format = CANExtended;// or CANExtended; // standard or extended ID (can be skipped for standard)
JC2112 0:68289c64435b 45 BMSOK.id = 0x11111111;
JC2112 0:68289c64435b 46 BMSOK.len = 8;//length in bytes (1 to 8);
JC2112 0:68289c64435b 47
JC2112 0:68289c64435b 48 if (OK == 0){
JC2112 0:68289c64435b 49 BMSOK.data[0] = 0;
JC2112 0:68289c64435b 50 BMSOK.data[1] = 0;
JC2112 0:68289c64435b 51 BMSOK.data[2] = 0;
JC2112 0:68289c64435b 52 BMSOK.data[3] = 0;
JC2112 0:68289c64435b 53 BMSOK.data[4] = 0;
JC2112 0:68289c64435b 54 BMSOK.data[5] = 0;
JC2112 0:68289c64435b 55 BMSOK.data[6] = 0;
JC2112 0:68289c64435b 56 BMSOK.data[7] = 0;
JC2112 0:68289c64435b 57 }
JC2112 0:68289c64435b 58 else{
JC2112 0:68289c64435b 59 BMSOK.data[0] = 255;
JC2112 0:68289c64435b 60 BMSOK.data[1] = 255;
JC2112 0:68289c64435b 61 BMSOK.data[2] = 255;
JC2112 0:68289c64435b 62 BMSOK.data[3] = 255;
JC2112 0:68289c64435b 63 BMSOK.data[4] = 255;
JC2112 0:68289c64435b 64 BMSOK.data[5] = 255;
JC2112 0:68289c64435b 65 BMSOK.data[6] = 255;
JC2112 0:68289c64435b 66 BMSOK.data[7] = 255;
JC2112 0:68289c64435b 67 }
JC2112 0:68289c64435b 68
JC2112 0:68289c64435b 69 if (can1.write(BMSOK)){
JC2112 0:68289c64435b 70 led1 = !led1;
JC2112 0:68289c64435b 71 }
JC2112 0:68289c64435b 72 };
JC2112 0:68289c64435b 73
JC2112 0:68289c64435b 74 void DummyBMSSoCSP1(){
JC2112 0:68289c64435b 75
JC2112 0:68289c64435b 76 BMSSoCSP1.format = CANExtended;// or CANExtended; // standard or extended ID (can be skipped for standard)
JC2112 0:68289c64435b 77 BMSSoCSP1.id = 0x150C5100;
JC2112 0:68289c64435b 78 BMSSoCSP1.len = 8;//length in bytes (1 to 8);
JC2112 0:68289c64435b 79
JC2112 0:68289c64435b 80 int s1 = 55;
JC2112 0:68289c64435b 81 int s2 = 51;
JC2112 0:68289c64435b 82 int s3 = 52;
JC2112 0:68289c64435b 83 int s4 = 58;
JC2112 0:68289c64435b 84 int s5 = 49;
JC2112 0:68289c64435b 85 int s6 = 53;
JC2112 0:68289c64435b 86 int s7 = 54;
JC2112 0:68289c64435b 87 int s8 = 56;
JC2112 0:68289c64435b 88
JC2112 0:68289c64435b 89 int s1h = s1 * 2;
JC2112 0:68289c64435b 90 int s2h = s2 * 2;
JC2112 0:68289c64435b 91 int s3h = s3 * 2;
JC2112 0:68289c64435b 92 int s4h = s4 * 2;
JC2112 0:68289c64435b 93 int s5h = s5 * 2;
JC2112 0:68289c64435b 94 int s6h = s6 * 2;
JC2112 0:68289c64435b 95 int s7h = s7 * 2;
JC2112 0:68289c64435b 96 int s8h = s8 * 2;
JC2112 0:68289c64435b 97
JC2112 0:68289c64435b 98
JC2112 0:68289c64435b 99
JC2112 0:68289c64435b 100 BMSSoCSP1.data[0] = s1h;
JC2112 0:68289c64435b 101 BMSSoCSP1.data[1] = s2h;
JC2112 0:68289c64435b 102 BMSSoCSP1.data[2] = s3h;
JC2112 0:68289c64435b 103 BMSSoCSP1.data[3] = s4h;
JC2112 0:68289c64435b 104 BMSSoCSP1.data[4] = s5h;
JC2112 0:68289c64435b 105 BMSSoCSP1.data[5] = s6h;
JC2112 0:68289c64435b 106 BMSSoCSP1.data[6] = s7h;
JC2112 0:68289c64435b 107 BMSSoCSP1.data[7] = s8h;
JC2112 0:68289c64435b 108
JC2112 0:68289c64435b 109 if (can1.write(BMSSoCSP1)){
JC2112 0:68289c64435b 110 //led1 = !led1;
JC2112 0:68289c64435b 111 }
JC2112 0:68289c64435b 112 };
JC2112 0:68289c64435b 113
JC2112 0:68289c64435b 114 void DummyBMSTempSP1() {
JC2112 0:68289c64435b 115
JC2112 0:68289c64435b 116 BMSTSP1.format = CANExtended;// or CANExtended; // standard or extended ID (can be skipped for standard)
JC2112 0:68289c64435b 117 BMSTSP1.id = 0x18075100;
JC2112 0:68289c64435b 118 BMSTSP1.len = 8;//length in bytes (1 to 8);
JC2112 0:68289c64435b 119
JC2112 0:68289c64435b 120 int s1 = 29;
JC2112 0:68289c64435b 121 int s2 = 29;
JC2112 0:68289c64435b 122 int s3 = 30;
JC2112 0:68289c64435b 123 int s4 = 31;
JC2112 0:68289c64435b 124 int s5 = 32;
JC2112 0:68289c64435b 125 int s6 = 32;
JC2112 0:68289c64435b 126 int s7 = 32;
JC2112 0:68289c64435b 127 int s8 = 33;
JC2112 0:68289c64435b 128
JC2112 0:68289c64435b 129 int s1h = s1 * 3;
JC2112 0:68289c64435b 130 int s2h = s2 * 3;
JC2112 0:68289c64435b 131 int s3h = s3 * 3;
JC2112 0:68289c64435b 132 int s4h = s4 * 3;
JC2112 0:68289c64435b 133 int s5h = s5 * 3;
JC2112 0:68289c64435b 134 int s6h = s6 * 3;
JC2112 0:68289c64435b 135 int s7h = s7 * 3;
JC2112 0:68289c64435b 136 int s8h = s8 * 3;
JC2112 0:68289c64435b 137
JC2112 0:68289c64435b 138
JC2112 0:68289c64435b 139
JC2112 0:68289c64435b 140 BMSTSP1.data[0] = s1h;
JC2112 0:68289c64435b 141 BMSTSP1.data[1] = s2h;
JC2112 0:68289c64435b 142 BMSTSP1.data[2] = s3h;
JC2112 0:68289c64435b 143 BMSTSP1.data[3] = s4h;
JC2112 0:68289c64435b 144 BMSTSP1.data[4] = s5h;
JC2112 0:68289c64435b 145 BMSTSP1.data[5] = s6h;
JC2112 0:68289c64435b 146 BMSTSP1.data[6] = s7h;
JC2112 0:68289c64435b 147 BMSTSP1.data[7] = s8h;
JC2112 0:68289c64435b 148
JC2112 0:68289c64435b 149 if (can1.write(BMSTSP1)){
JC2112 0:68289c64435b 150 led2 = !led2;
JC2112 0:68289c64435b 151 }
JC2112 0:68289c64435b 152 };
JC2112 0:68289c64435b 153
JC2112 0:68289c64435b 154 void DummyCharger(){
JC2112 0:68289c64435b 155
JC2112 0:68289c64435b 156 int VoltageNew;
JC2112 0:68289c64435b 157 int CurrentNew = 2.4;
JC2112 0:68289c64435b 158
JC2112 0:68289c64435b 159 if(VoltageSwitch){
JC2112 0:68289c64435b 160 VoltageError = 1;
JC2112 0:68289c64435b 161 VoltageNew = 500;
JC2112 0:68289c64435b 162 }
JC2112 0:68289c64435b 163 else{
JC2112 0:68289c64435b 164 VoltageError = 0;
JC2112 0:68289c64435b 165 VoltageNew = 300;
JC2112 0:68289c64435b 166 }
JC2112 0:68289c64435b 167
JC2112 0:68289c64435b 168 int State_No_Batt = 0;
JC2112 0:68289c64435b 169 int State_Over_Heat = 0;
JC2112 0:68289c64435b 170 int d6 = 0x00;
JC2112 0:68289c64435b 171 int d7 = 0x00;
JC2112 0:68289c64435b 172
JC2112 0:68289c64435b 173 if (ChargeStateSwitch){
JC2112 0:68289c64435b 174 ChargeStateError = 1;
JC2112 0:68289c64435b 175 //State_No_Batt = 1;
JC2112 0:68289c64435b 176 State_Over_Heat = 1;
JC2112 0:68289c64435b 177 }
JC2112 0:68289c64435b 178 else{
JC2112 0:68289c64435b 179 ChargeStateError = 0;
JC2112 0:68289c64435b 180 State_No_Batt = 0;
JC2112 0:68289c64435b 181 State_Over_Heat = 0;
JC2112 0:68289c64435b 182 }
JC2112 0:68289c64435b 183
JC2112 0:68289c64435b 184 if (State_No_Batt == 1){
JC2112 0:68289c64435b 185 d6 = 0x8A;
JC2112 0:68289c64435b 186 d7 = 0x77;
JC2112 0:68289c64435b 187 printf("No Battery\n\r");
JC2112 0:68289c64435b 188 }
JC2112 0:68289c64435b 189 else if (State_Over_Heat == 1){
JC2112 0:68289c64435b 190 d6 = 0x08;
JC2112 0:68289c64435b 191 d7 = 0x07;
JC2112 0:68289c64435b 192 }
JC2112 0:68289c64435b 193 else {
JC2112 0:68289c64435b 194 d6 = 0x00;
JC2112 0:68289c64435b 195 d7 = 0x00;
JC2112 0:68289c64435b 196 };
JC2112 0:68289c64435b 197
JC2112 0:68289c64435b 198 int DecV = VoltageNew * 10;
JC2112 0:68289c64435b 199 int DecC = CurrentNew * 10;
JC2112 0:68289c64435b 200 int Top8V = DecV >> 8;
JC2112 0:68289c64435b 201 int Top8C = DecC >> 8;
JC2112 0:68289c64435b 202 int Bot8var = 255;
JC2112 0:68289c64435b 203 int Bot8V = Bot8var & DecV;
JC2112 0:68289c64435b 204 int Bot8C = Bot8var & DecC;
JC2112 0:68289c64435b 205
JC2112 0:68289c64435b 206 ChargerMsg.format = CANExtended;// or CANExtended; // standard or extended ID (can be skipped for standard)
JC2112 0:68289c64435b 207 if (Charger){
JC2112 0:68289c64435b 208 ChargerMsg.id = 0x18FF50E5;
JC2112 0:68289c64435b 209 }
JC2112 0:68289c64435b 210 else{
JC2112 0:68289c64435b 211 ChargerMsg.id = 0x18FF50E7;
JC2112 0:68289c64435b 212 }
JC2112 0:68289c64435b 213 ChargerMsg.len = 8;//length in bytes (1 to 8);
JC2112 0:68289c64435b 214 ChargerMsg.data[0] = Top8V; // repeat for each byte.
JC2112 0:68289c64435b 215 ChargerMsg.data[1] = Bot8V;
JC2112 0:68289c64435b 216 ChargerMsg.data[2] = Top8C;
JC2112 0:68289c64435b 217 ChargerMsg.data[3] = Bot8C;
JC2112 0:68289c64435b 218 ChargerMsg.data[4] = 0;
JC2112 0:68289c64435b 219 ChargerMsg.data[5] = 0;
JC2112 0:68289c64435b 220 ChargerMsg.data[6] = d6;
JC2112 0:68289c64435b 221 ChargerMsg.data[7] = d7;
JC2112 0:68289c64435b 222 if (can2.write(ChargerMsg)){
JC2112 0:68289c64435b 223 led3 = !led3;
JC2112 0:68289c64435b 224 }
JC2112 0:68289c64435b 225 };
JC2112 0:68289c64435b 226
JC2112 0:68289c64435b 227 int main() {
JC2112 0:68289c64435b 228 printf("main()\n\r");
JC2112 0:68289c64435b 229 BMSticker1.attach(&DummyBMSSoC, 1);
JC2112 0:68289c64435b 230 BMSticker2.attach(&DummyBMSOK, 0.5);
JC2112 0:68289c64435b 231 SoCSP1ticker.attach(&DummyBMSSoCSP1, 1);
JC2112 0:68289c64435b 232 TempSP1ticker.attach(&DummyBMSTempSP1, 1);
JC2112 0:68289c64435b 233 Chargerticker.attach(&DummyCharger, 1);
JC2112 0:68289c64435b 234 CANMessage msg;
JC2112 0:68289c64435b 235 while(1) {
JC2112 0:68289c64435b 236 if (can1.read(msg)) {
JC2112 0:68289c64435b 237 if (msg.id == 0x1806E5F4){
JC2112 0:68289c64435b 238 int HexVoltageTop = msg.data[0];
JC2112 0:68289c64435b 239 int HexVoltageBot = msg.data[1];
JC2112 0:68289c64435b 240 int HexCurrentTop = msg.data[2];
JC2112 0:68289c64435b 241 int HexCurrentBot = msg.data[3];
JC2112 0:68289c64435b 242
JC2112 0:68289c64435b 243
JC2112 0:68289c64435b 244 int TopVoltage = HexVoltageTop << 8;
JC2112 0:68289c64435b 245 Voltage = 0 | TopVoltage;
JC2112 0:68289c64435b 246 Voltage = Voltage | HexVoltageBot;
JC2112 0:68289c64435b 247 Voltage = Voltage/10;
JC2112 0:68289c64435b 248
JC2112 0:68289c64435b 249 int TopCurrent = HexCurrentTop << 8;
JC2112 0:68289c64435b 250 Current = 0 | TopCurrent;
JC2112 0:68289c64435b 251 Current = Current | HexCurrentBot;
JC2112 0:68289c64435b 252 Current = Current/10;
JC2112 0:68289c64435b 253 printf("Charger Current: %d\n\r", Current);
JC2112 0:68289c64435b 254 if (Current == 16){
JC2112 0:68289c64435b 255 Fast = 1;
JC2112 0:68289c64435b 256 Normal = 0;
JC2112 0:68289c64435b 257 }
JC2112 0:68289c64435b 258 else{
JC2112 0:68289c64435b 259 Fast = 0;
JC2112 0:68289c64435b 260 Normal = 1;
JC2112 0:68289c64435b 261 }
JC2112 0:68289c64435b 262 led4 = !led4;
JC2112 0:68289c64435b 263 }
JC2112 0:68289c64435b 264
JC2112 0:68289c64435b 265 }
JC2112 0:68289c64435b 266 }
JC2112 0:68289c64435b 267
JC2112 0:68289c64435b 268 }