BMS Master HW test - 20/21

Dependencies:   mbed

Committer:
minamax
Date:
Sun Jun 27 10:07:04 2021 +0000
Revision:
1:26659a89d49e
Parent:
0:4fedfbc3c6b8
Done;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
minamax 0:4fedfbc3c6b8 1 #include "mbed.h"
minamax 0:4fedfbc3c6b8 2 #include "PwmIn.h"
minamax 0:4fedfbc3c6b8 3
minamax 0:4fedfbc3c6b8 4 //FTDI (TX, RX, BAUDRATE)
minamax 0:4fedfbc3c6b8 5 Serial pc(PC_12, PD_2, 9600);
minamax 0:4fedfbc3c6b8 6
minamax 0:4fedfbc3c6b8 7 //SHUTDOWN
minamax 0:4fedfbc3c6b8 8 DigitalOut SHD_Control(PA_8);
minamax 0:4fedfbc3c6b8 9 DigitalIn SHD_Status(PC_6);
minamax 0:4fedfbc3c6b8 10
minamax 1:26659a89d49e 11 DigitalOut WakeUp(PC_9);
minamax 1:26659a89d49e 12 DigitalIn fault(PC_8);
minamax 0:4fedfbc3c6b8 13
minamax 0:4fedfbc3c6b8 14 //ADC
minamax 0:4fedfbc3c6b8 15 AnalogIn voltage(PC_0);
minamax 0:4fedfbc3c6b8 16 AnalogIn current(PC_1);
minamax 0:4fedfbc3c6b8 17
minamax 0:4fedfbc3c6b8 18 //AIRs
minamax 0:4fedfbc3c6b8 19 DigitalOut AIR_P_Control(PC_2);
minamax 0:4fedfbc3c6b8 20 DigitalOut AIR_N_Control(PC_3);
minamax 0:4fedfbc3c6b8 21 DigitalIn AIR_P_Status(PA_6);
minamax 0:4fedfbc3c6b8 22 DigitalIn AIR_N_Status(PA_7);
minamax 0:4fedfbc3c6b8 23
minamax 0:4fedfbc3c6b8 24 //Precharge
minamax 0:4fedfbc3c6b8 25 DigitalOut PRECHRG_Control(PC_7);
minamax 0:4fedfbc3c6b8 26 DigitalIn PRECHRG_Status(PC_5);
minamax 0:4fedfbc3c6b8 27
minamax 0:4fedfbc3c6b8 28 //IMD
minamax 0:4fedfbc3c6b8 29 PwmIn imdPWM(PB_3);
minamax 0:4fedfbc3c6b8 30
minamax 0:4fedfbc3c6b8 31
minamax 0:4fedfbc3c6b8 32 void callback()
minamax 0:4fedfbc3c6b8 33 {
minamax 0:4fedfbc3c6b8 34 char byte;
minamax 0:4fedfbc3c6b8 35 pc.printf("callback\n");
minamax 0:4fedfbc3c6b8 36 if(pc.readable()) {
minamax 0:4fedfbc3c6b8 37 byte = pc.getc();
minamax 0:4fedfbc3c6b8 38 pc.printf("%d\n", byte);
minamax 0:4fedfbc3c6b8 39 }
minamax 0:4fedfbc3c6b8 40 }
minamax 0:4fedfbc3c6b8 41
minamax 0:4fedfbc3c6b8 42 int main()
minamax 0:4fedfbc3c6b8 43 {
minamax 0:4fedfbc3c6b8 44
minamax 0:4fedfbc3c6b8 45 pc.printf("Begin test\n");
minamax 0:4fedfbc3c6b8 46 pc.attach(&callback);
minamax 0:4fedfbc3c6b8 47 //int shd_cnt = 0;
minamax 0:4fedfbc3c6b8 48 int air_cnt = 0;
minamax 0:4fedfbc3c6b8 49 int prechrg_cnt = 0;
minamax 0:4fedfbc3c6b8 50 int i = 0;
minamax 0:4fedfbc3c6b8 51 float currentVal = 0;
minamax 0:4fedfbc3c6b8 52 /*pc.printf("Closing SHUTDOWN!\n");
minamax 0:4fedfbc3c6b8 53 SHD_Control = 1; //RELJA PRITISNI DUGME
minamax 0:4fedfbc3c6b8 54 if(SHD_Status)
minamax 0:4fedfbc3c6b8 55 pc.printf("SHUTDOWN open!\n");
minamax 0:4fedfbc3c6b8 56 else
minamax 0:4fedfbc3c6b8 57 pc.printf("SHUTDOWN closed!\n");*/
minamax 0:4fedfbc3c6b8 58
minamax 0:4fedfbc3c6b8 59 while(1) {
minamax 0:4fedfbc3c6b8 60
minamax 0:4fedfbc3c6b8 61 //UART FROM MASTER TO PC
minamax 0:4fedfbc3c6b8 62 //pc.printf("Hi. I am BMS master...\n");
minamax 0:4fedfbc3c6b8 63
minamax 0:4fedfbc3c6b8 64 /* pc.printf("Closing AIRs!\n");
minamax 0:4fedfbc3c6b8 65 AIR_P_Control = 1;
minamax 0:4fedfbc3c6b8 66 AIR_N_Control = 1;
minamax 0:4fedfbc3c6b8 67
minamax 0:4fedfbc3c6b8 68 if(++prechrg_cnt % 15 == 0) {
minamax 0:4fedfbc3c6b8 69 if(++i % 2) {
minamax 0:4fedfbc3c6b8 70 pc.printf("Start PRECHARGE!\n");
minamax 0:4fedfbc3c6b8 71 PRECHRG_Control = 1;
minamax 0:4fedfbc3c6b8 72 }
minamax 0:4fedfbc3c6b8 73 else {
minamax 0:4fedfbc3c6b8 74 pc.printf("Stop PRECHARGE!\n");
minamax 0:4fedfbc3c6b8 75 PRECHRG_Control = 0;
minamax 0:4fedfbc3c6b8 76 }
minamax 0:4fedfbc3c6b8 77 }
minamax 0:4fedfbc3c6b8 78
minamax 0:4fedfbc3c6b8 79 if(PRECHRG_Status)
minamax 0:4fedfbc3c6b8 80 pc.printf("PRECHARGE closed!\n");
minamax 0:4fedfbc3c6b8 81 else
minamax 0:4fedfbc3c6b8 82 pc.printf("PRECHARGE open!\n");
minamax 0:4fedfbc3c6b8 83 */
minamax 0:4fedfbc3c6b8 84 /* wait(4);
minamax 0:4fedfbc3c6b8 85
minamax 0:4fedfbc3c6b8 86 if(AIR_P_Status == 0 && AIR_N_Status == 0) {
minamax 0:4fedfbc3c6b8 87 pc.printf("Both AIRs open!\n");
minamax 0:4fedfbc3c6b8 88 pc.printf("Closing SHUTDOWN!\n");
minamax 0:4fedfbc3c6b8 89 SHD_Control = 1; //RELJA PRITISNI DUGME
minamax 0:4fedfbc3c6b8 90 }
minamax 0:4fedfbc3c6b8 91
minamax 0:4fedfbc3c6b8 92 else if(AIR_P_Status && AIR_N_Status) {
minamax 0:4fedfbc3c6b8 93 pc.printf("Both AIRs closed!\n");
minamax 0:4fedfbc3c6b8 94 pc.printf("Closing SHUTDOWN!\n");
minamax 0:4fedfbc3c6b8 95 SHD_Control = 1; //RELJA PRITISNI DUGME
minamax 0:4fedfbc3c6b8 96 }
minamax 0:4fedfbc3c6b8 97
minamax 0:4fedfbc3c6b8 98 else if (AIR_P_Status == 0 && AIR_N_Status == 1) {
minamax 0:4fedfbc3c6b8 99 pc.printf("AIR+ open, AIR- closed!\n");
minamax 0:4fedfbc3c6b8 100 pc.printf("ERROR: OPEN SHUTDOWN!\n");
minamax 0:4fedfbc3c6b8 101 pc.printf("Opening SHUTDOWN!\n");
minamax 0:4fedfbc3c6b8 102 SHD_Control = 0;
minamax 0:4fedfbc3c6b8 103 }
minamax 0:4fedfbc3c6b8 104
minamax 0:4fedfbc3c6b8 105 else if (AIR_P_Status == 1 && AIR_N_Status == 0) {
minamax 0:4fedfbc3c6b8 106 pc.printf("AIR+ closed, AIR- open!\n");
minamax 0:4fedfbc3c6b8 107 pc.printf("ERROR: OPEN SHUTDOWN!\n");
minamax 0:4fedfbc3c6b8 108 pc.printf("Opening SHUTDOWN!\n");
minamax 0:4fedfbc3c6b8 109 SHD_Control = 0;
minamax 0:4fedfbc3c6b8 110 }
minamax 0:4fedfbc3c6b8 111 wait(1);
minamax 0:4fedfbc3c6b8 112
minamax 0:4fedfbc3c6b8 113 if(SHD_Status)
minamax 0:4fedfbc3c6b8 114 pc.printf("SHUTDOWN open!\n");
minamax 0:4fedfbc3c6b8 115 else
minamax 0:4fedfbc3c6b8 116 pc.printf("SHUTDOWN closed!\n");
minamax 0:4fedfbc3c6b8 117
minamax 0:4fedfbc3c6b8 118 wait(3);
minamax 0:4fedfbc3c6b8 119 */
minamax 0:4fedfbc3c6b8 120
minamax 0:4fedfbc3c6b8 121 /* //AIRs
minamax 0:4fedfbc3c6b8 122 if(++air_cnt % 30 == 0) {
minamax 0:4fedfbc3c6b8 123 if(++i % 2) {
minamax 0:4fedfbc3c6b8 124 pc.printf("Closing AIRs!\n");
minamax 0:4fedfbc3c6b8 125 AIR_P_Control = 1;
minamax 0:4fedfbc3c6b8 126 AIR_N_Control = 1;
minamax 0:4fedfbc3c6b8 127 }
minamax 0:4fedfbc3c6b8 128 else {
minamax 0:4fedfbc3c6b8 129 pc.printf("Opening AIRs!\n");
minamax 0:4fedfbc3c6b8 130 AIR_P_Control = 0;
minamax 0:4fedfbc3c6b8 131 AIR_N_Control = 0;
minamax 0:4fedfbc3c6b8 132 }
minamax 0:4fedfbc3c6b8 133
minamax 0:4fedfbc3c6b8 134
minamax 0:4fedfbc3c6b8 135 }
minamax 0:4fedfbc3c6b8 136
minamax 0:4fedfbc3c6b8 137 if(AIR_P_Status == 0 && AIR_N_Status == 0)
minamax 0:4fedfbc3c6b8 138 pc.printf("Both AIRs open!\n");
minamax 0:4fedfbc3c6b8 139 else if(AIR_P_Status && AIR_N_Status)
minamax 0:4fedfbc3c6b8 140 pc.printf("Both AIRs closed!\n");
minamax 0:4fedfbc3c6b8 141
minamax 0:4fedfbc3c6b8 142
minamax 0:4fedfbc3c6b8 143 //SHUTDOWN CIRCUIT
minamax 0:4fedfbc3c6b8 144 if(++shd_cnt % 30 == 0) {
minamax 0:4fedfbc3c6b8 145 if(SHD_Status) {
minamax 0:4fedfbc3c6b8 146 pc.printf("Closing SHUTDOWN!\n");
minamax 0:4fedfbc3c6b8 147 SHD_Control = 1; //RELJA PRITISNI DUGME
minamax 0:4fedfbc3c6b8 148 } else {
minamax 0:4fedfbc3c6b8 149 pc.printf("Opening SHUTDOWN!\n");
minamax 0:4fedfbc3c6b8 150 SHD_Control = 0;
minamax 0:4fedfbc3c6b8 151 }
minamax 0:4fedfbc3c6b8 152 }
minamax 0:4fedfbc3c6b8 153
minamax 0:4fedfbc3c6b8 154 if(SHD_Status)
minamax 0:4fedfbc3c6b8 155 pc.printf("SHUTDOWN open!\n");
minamax 0:4fedfbc3c6b8 156 else
minamax 0:4fedfbc3c6b8 157 pc.printf("SHUTDOWN closed!\n");
minamax 0:4fedfbc3c6b8 158 */
minamax 0:4fedfbc3c6b8 159
minamax 0:4fedfbc3c6b8 160 /*
minamax 0:4fedfbc3c6b8 161 //WAKEUP
minamax 0:4fedfbc3c6b8 162 WakeUp = 1;
minamax 0:4fedfbc3c6b8 163 pc.printf("WakeUp is 1\n");
minamax 0:4fedfbc3c6b8 164 wait(1);
minamax 0:4fedfbc3c6b8 165 */
minamax 0:4fedfbc3c6b8 166 /* //VOLTAGE AND CURRENT
minamax 0:4fedfbc3c6b8 167 currentVal = current.read();
minamax 0:4fedfbc3c6b8 168
minamax 0:4fedfbc3c6b8 169 pc.printf("Voltage = %.4f\n", voltage.read()*3.3f*273.2f);
minamax 0:4fedfbc3c6b8 170 pc.printf("Current = %.4f\n\n", currentVal);
minamax 0:4fedfbc3c6b8 171 */
minamax 1:26659a89d49e 172 /*
minamax 0:4fedfbc3c6b8 173 //IMD
minamax 0:4fedfbc3c6b8 174 float period = imdPWM.period();
minamax 0:4fedfbc3c6b8 175 float duty_cycle = imdPWM.dutycycle();
minamax 0:4fedfbc3c6b8 176 pc.printf("Dutycycle = %.4f\n", duty_cycle);
minamax 0:4fedfbc3c6b8 177 pc.printf("Freq = %.4f\n\n", 1/period);
minamax 0:4fedfbc3c6b8 178
minamax 0:4fedfbc3c6b8 179 if(SHD_Status)
minamax 0:4fedfbc3c6b8 180 pc.printf("SHUTDOWN open!\n");
minamax 0:4fedfbc3c6b8 181 else
minamax 0:4fedfbc3c6b8 182 pc.printf("SHUTDOWN closed!\n");
minamax 1:26659a89d49e 183 */
minamax 1:26659a89d49e 184 WakeUp = 1;
minamax 0:4fedfbc3c6b8 185
minamax 0:4fedfbc3c6b8 186 wait(2);
minamax 1:26659a89d49e 187
minamax 1:26659a89d49e 188 WakeUp = 0;
minamax 1:26659a89d49e 189
minamax 1:26659a89d49e 190 wait(2);
minamax 1:26659a89d49e 191
minamax 1:26659a89d49e 192 if(fault)
minamax 1:26659a89d49e 193 pc.printf("Fault\n");
minamax 1:26659a89d49e 194 else
minamax 1:26659a89d49e 195 pc.printf("No Fault\n\n");
minamax 0:4fedfbc3c6b8 196
minamax 0:4fedfbc3c6b8 197 }
minamax 0:4fedfbc3c6b8 198
minamax 0:4fedfbc3c6b8 199 }