
17th Nov 2016
Dependencies: mbed
Fork of TEST10_8A_Nucleo_Charger_vApril_copy by
main.cpp@3:0069f2cad504, 2016-08-10 (annotated)
- Committer:
- gosia_magda
- Date:
- Wed Aug 10 13:25:04 2016 +0000
- Revision:
- 3:0069f2cad504
- Parent:
- 2:81b3308d5d45
- Child:
- 4:4fae92446559
SImple Test 10.8A Mick
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
gosia_magda | 1:2cbd9538feb6 | 1 | /** |
gosia_magda | 1:2cbd9538feb6 | 2 | * Copyright (c) 2016 M2C Ltd |
gosia_magda | 3:0069f2cad504 | 3 | * TEST 10.8A (18% PWM) for first Convex build / Mick's dad house |
gosia_magda | 3:0069f2cad504 | 4 | |
gosia_magda | 3:0069f2cad504 | 5 | 2000 samples |
gosia_magda | 3:0069f2cad504 | 6 | |
gosia_magda | 3:0069f2cad504 | 7 | 3 second reset |
gosia_magda | 1:2cbd9538feb6 | 8 | * |
gosia_magda | 1:2cbd9538feb6 | 9 | */ |
gosia_magda | 1:2cbd9538feb6 | 10 | |
gosia_magda | 0:24db4218414d | 11 | #include "mbed.h" |
gosia_magda | 0:24db4218414d | 12 | |
gosia_magda | 0:24db4218414d | 13 | AnalogIn cp_value(A1); //A1 – PWM sense, analog read |
gosia_magda | 0:24db4218414d | 14 | AnalogIn pp_value(A2); //A2 - PP, analog reads |
gosia_magda | 0:24db4218414d | 15 | PwmOut my_pwm(D5);//pwm pin 5 |
gosia_magda | 0:24db4218414d | 16 | DigitalOut lock(D7); |
gosia_magda | 0:24db4218414d | 17 | InterruptIn button(D8); |
gosia_magda | 0:24db4218414d | 18 | |
gosia_magda | 0:24db4218414d | 19 | DigitalOut relay(D12); |
gosia_magda | 0:24db4218414d | 20 | DigitalOut contactor(D13); |
gosia_magda | 0:24db4218414d | 21 | |
gosia_magda | 0:24db4218414d | 22 | Timer buttonTimer; //CC for reset button |
gosia_magda | 0:24db4218414d | 23 | Timeout buttonTimeout; //CC for reset button |
gosia_magda | 0:24db4218414d | 24 | |
gosia_magda | 0:24db4218414d | 25 | DigitalOut green(D9); |
gosia_magda | 0:24db4218414d | 26 | DigitalOut red(D10); |
gosia_magda | 0:24db4218414d | 27 | DigitalOut blue(D11); |
gosia_magda | 0:24db4218414d | 28 | |
gosia_magda | 0:24db4218414d | 29 | unsigned char control_pilot; |
gosia_magda | 0:24db4218414d | 30 | |
gosia_magda | 0:24db4218414d | 31 | #define STATE_A 1 // Vehicle not connected |
gosia_magda | 0:24db4218414d | 32 | #define STATE_B 2 // Vehicle connected / not ready to accept energy |
gosia_magda | 0:24db4218414d | 33 | #define STATE_C 3 // Vehicle connected / ready to accept energy / ventilation not required |
gosia_magda | 0:24db4218414d | 34 | #define STATE_D 4 // Vehicle connected / ready to accept energy / ventilation required |
gosia_magda | 0:24db4218414d | 35 | |
gosia_magda | 0:24db4218414d | 36 | #define PILOT_12V 1 |
gosia_magda | 0:24db4218414d | 37 | #define PILOT_9V 2 |
gosia_magda | 0:24db4218414d | 38 | #define PILOT_6V 3 |
gosia_magda | 0:24db4218414d | 39 | #define PILOT_DIODE 4 |
gosia_magda | 0:24db4218414d | 40 | #define PILOT_NOK 0 |
gosia_magda | 0:24db4218414d | 41 | #define PILOT_RESET 5 |
gosia_magda | 0:24db4218414d | 42 | |
gosia_magda | 0:24db4218414d | 43 | float current_average=0; |
gosia_magda | 0:24db4218414d | 44 | float previous_average=0; |
gosia_magda | 0:24db4218414d | 45 | #define NUM_SAMPLES 2000 // size of sample series |
gosia_magda | 0:24db4218414d | 46 | |
gosia_magda | 0:24db4218414d | 47 | #define SAMPLE_BLOCKS 1 //CC for reset button |
gosia_magda | 3:0069f2cad504 | 48 | #define RESET_SECONDS 3 //CC for reset button |
gosia_magda | 0:24db4218414d | 49 | |
gosia_magda | 0:24db4218414d | 50 | bool resetDown = false; |
gosia_magda | 0:24db4218414d | 51 | bool resetCharger = false; |
gosia_magda | 0:24db4218414d | 52 | |
gosia_magda | 0:24db4218414d | 53 | void timedOut() { |
gosia_magda | 0:24db4218414d | 54 | resetCharger = true; |
gosia_magda | 0:24db4218414d | 55 | printf("Button pressed for more than 3 sec ! Charger reset !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! \r\n"); |
gosia_magda | 0:24db4218414d | 56 | } |
gosia_magda | 0:24db4218414d | 57 | |
gosia_magda | 0:24db4218414d | 58 | void resetPress() { |
gosia_magda | 0:24db4218414d | 59 | printf("Reset button pressed ... starting timer \r\n"); |
gosia_magda | 0:24db4218414d | 60 | buttonTimer.stop(); |
gosia_magda | 0:24db4218414d | 61 | buttonTimer.reset(); |
gosia_magda | 0:24db4218414d | 62 | buttonTimer.start(); |
gosia_magda | 0:24db4218414d | 63 | resetDown = true; |
gosia_magda | 0:24db4218414d | 64 | buttonTimeout.attach(&timedOut, RESET_SECONDS); |
gosia_magda | 0:24db4218414d | 65 | } |
gosia_magda | 0:24db4218414d | 66 | |
gosia_magda | 0:24db4218414d | 67 | void resetRelease() { |
gosia_magda | 0:24db4218414d | 68 | printf("Reset button released \r\n"); |
gosia_magda | 0:24db4218414d | 69 | int elapsedSeconds = buttonTimer.read(); |
gosia_magda | 0:24db4218414d | 70 | buttonTimer.stop(); |
gosia_magda | 0:24db4218414d | 71 | buttonTimer.reset(); |
gosia_magda | 0:24db4218414d | 72 | if (elapsedSeconds > 3) { |
gosia_magda | 0:24db4218414d | 73 | resetCharger = true; |
gosia_magda | 0:24db4218414d | 74 | printf("Button was pressed for more than 3 sec !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! \r\n"); |
gosia_magda | 0:24db4218414d | 75 | } |
gosia_magda | 0:24db4218414d | 76 | else{ |
gosia_magda | 0:24db4218414d | 77 | printf("If we're getting here then we've released the button before 3 seconds were up.\r\n"); |
gosia_magda | 0:24db4218414d | 78 | } |
gosia_magda | 0:24db4218414d | 79 | printf("We will detach the timeout an setup for the next time.\r\n"); |
gosia_magda | 0:24db4218414d | 80 | printf("%u \r\n", elapsedSeconds); |
gosia_magda | 0:24db4218414d | 81 | buttonTimeout.detach(); |
gosia_magda | 0:24db4218414d | 82 | } |
gosia_magda | 0:24db4218414d | 83 | |
gosia_magda | 0:24db4218414d | 84 | int main() { |
gosia_magda | 0:24db4218414d | 85 | |
gosia_magda | 0:24db4218414d | 86 | button.fall(&resetPress); |
gosia_magda | 0:24db4218414d | 87 | button.rise(&resetRelease); |
gosia_magda | 0:24db4218414d | 88 | |
gosia_magda | 0:24db4218414d | 89 | while(1) { |
gosia_magda | 0:24db4218414d | 90 | |
gosia_magda | 0:24db4218414d | 91 | float readingA2 = pp_value.read(); |
gosia_magda | 0:24db4218414d | 92 | |
gosia_magda | 0:24db4218414d | 93 | readingA2 = readingA2 * 3300; |
gosia_magda | 0:24db4218414d | 94 | |
gosia_magda | 0:24db4218414d | 95 | for (int i = 0; i < NUM_SAMPLES ; i++) |
gosia_magda | 0:24db4218414d | 96 | { |
gosia_magda | 0:24db4218414d | 97 | float sample_value = cp_value.read_u16(); |
gosia_magda | 0:24db4218414d | 98 | sample_value = (float) 3300 / 65535 * (float) sample_value; // convert sample to voltage |
gosia_magda | 0:24db4218414d | 99 | current_average = ((sample_value + (i * previous_average)) / (i+1)); |
gosia_magda | 0:24db4218414d | 100 | previous_average = current_average; |
gosia_magda | 0:24db4218414d | 101 | } |
gosia_magda | 0:24db4218414d | 102 | printf("current_average %.f \n\r", current_average); |
gosia_magda | 0:24db4218414d | 103 | printf("PP Pilot Value = %.0f mV\n\r",readingA2); |
gosia_magda | 0:24db4218414d | 104 | |
gosia_magda | 3:0069f2cad504 | 105 | |
gosia_magda | 3:0069f2cad504 | 106 | |
gosia_magda | 3:0069f2cad504 | 107 | //********************* TEST CONVEX BUILD***********************// |
gosia_magda | 3:0069f2cad504 | 108 | if(readingA2>3200) |
gosia_magda | 3:0069f2cad504 | 109 | { |
gosia_magda | 3:0069f2cad504 | 110 | |
gosia_magda | 3:0069f2cad504 | 111 | if ((current_average > 2600) && (current_average < 2750) || (current_average > 370) && (current_average < 470)) // first reading ˜2702 & ˜755 after |
gosia_magda | 3:0069f2cad504 | 112 | { |
gosia_magda | 3:0069f2cad504 | 113 | control_pilot = PILOT_12V; // Pilot at 12V |
gosia_magda | 3:0069f2cad504 | 114 | } |
gosia_magda | 3:0069f2cad504 | 115 | if (current_average < 100) // first reading ˜2702 & ˜755 after |
gosia_magda | 3:0069f2cad504 | 116 | { |
gosia_magda | 3:0069f2cad504 | 117 | control_pilot = PILOT_12V; // Pilot at 12V |
gosia_magda | 3:0069f2cad504 | 118 | resetCharger = false; |
gosia_magda | 3:0069f2cad504 | 119 | } |
gosia_magda | 3:0069f2cad504 | 120 | |
gosia_magda | 0:24db4218414d | 121 | |
gosia_magda | 3:0069f2cad504 | 122 | } |
gosia_magda | 3:0069f2cad504 | 123 | if(readingA2<3200) // tester 32A cable |
gosia_magda | 3:0069f2cad504 | 124 | { |
gosia_magda | 3:0069f2cad504 | 125 | |
gosia_magda | 3:0069f2cad504 | 126 | if((current_average > 1900) && (current_average <2100) || (current_average > 400) && (current_average <470)) // first reading ˜2012 & ˜573 after |
gosia_magda | 3:0069f2cad504 | 127 | { |
gosia_magda | 3:0069f2cad504 | 128 | control_pilot = PILOT_9V; // Pilot at 9V |
gosia_magda | 3:0069f2cad504 | 129 | } |
gosia_magda | 3:0069f2cad504 | 130 | if((current_average> 270) && (current_average<350)) // first reading ˜1372 & ˜405 after |
gosia_magda | 3:0069f2cad504 | 131 | { |
gosia_magda | 3:0069f2cad504 | 132 | control_pilot = PILOT_6V; // Pilot at 6V |
gosia_magda | 3:0069f2cad504 | 133 | } |
gosia_magda | 3:0069f2cad504 | 134 | if(resetCharger == true) |
gosia_magda | 3:0069f2cad504 | 135 | {control_pilot = PILOT_RESET;} |
gosia_magda | 3:0069f2cad504 | 136 | |
gosia_magda | 3:0069f2cad504 | 137 | }//end if(readingA2!=0) |
gosia_magda | 3:0069f2cad504 | 138 | |
gosia_magda | 3:0069f2cad504 | 139 | |
gosia_magda | 3:0069f2cad504 | 140 | /* |
gosia_magda | 0:24db4218414d | 141 | if(readingA2>3200) |
gosia_magda | 0:24db4218414d | 142 | { |
gosia_magda | 0:24db4218414d | 143 | |
gosia_magda | 0:24db4218414d | 144 | if ((current_average > 2650) && (current_average < 2750) || (current_average > 700) && (current_average < 800)) // first reading ˜2702 & ˜755 after |
gosia_magda | 0:24db4218414d | 145 | { |
gosia_magda | 0:24db4218414d | 146 | control_pilot = PILOT_12V; // Pilot at 12V |
gosia_magda | 0:24db4218414d | 147 | } |
gosia_magda | 0:24db4218414d | 148 | if (current_average < 100) // first reading ˜2702 & ˜755 after |
gosia_magda | 0:24db4218414d | 149 | { |
gosia_magda | 0:24db4218414d | 150 | control_pilot = PILOT_12V; // Pilot at 12V |
gosia_magda | 0:24db4218414d | 151 | resetCharger = false; |
gosia_magda | 0:24db4218414d | 152 | } |
gosia_magda | 0:24db4218414d | 153 | |
gosia_magda | 0:24db4218414d | 154 | |
gosia_magda | 0:24db4218414d | 155 | } |
gosia_magda | 0:24db4218414d | 156 | if(readingA2<3200) // tester 32A cable |
gosia_magda | 0:24db4218414d | 157 | { |
gosia_magda | 0:24db4218414d | 158 | |
gosia_magda | 2:81b3308d5d45 | 159 | if((current_average > 1900) && (current_average <2100) || (current_average > 500) && (current_average <600)) // first reading ˜2012 & ˜573 after |
gosia_magda | 0:24db4218414d | 160 | { |
gosia_magda | 0:24db4218414d | 161 | control_pilot = PILOT_9V; // Pilot at 9V |
gosia_magda | 0:24db4218414d | 162 | } |
gosia_magda | 0:24db4218414d | 163 | if((current_average> 350) && (current_average<450)) // first reading ˜1372 & ˜405 after |
gosia_magda | 0:24db4218414d | 164 | { |
gosia_magda | 0:24db4218414d | 165 | control_pilot = PILOT_6V; // Pilot at 6V |
gosia_magda | 0:24db4218414d | 166 | } |
gosia_magda | 0:24db4218414d | 167 | if(resetCharger == true) |
gosia_magda | 0:24db4218414d | 168 | {control_pilot = PILOT_RESET;} |
gosia_magda | 0:24db4218414d | 169 | |
gosia_magda | 2:81b3308d5d45 | 170 | }//end if(readingA2!=0) |
gosia_magda | 3:0069f2cad504 | 171 | */ |
gosia_magda | 0:24db4218414d | 172 | |
gosia_magda | 0:24db4218414d | 173 | |
gosia_magda | 0:24db4218414d | 174 | switch(control_pilot) { |
gosia_magda | 0:24db4218414d | 175 | case PILOT_12V: |
gosia_magda | 0:24db4218414d | 176 | printf("Charger in STATE A\r\n"); |
gosia_magda | 0:24db4218414d | 177 | printf("PILOT_12V - Pilot at 12 V \n\r"); |
gosia_magda | 0:24db4218414d | 178 | my_pwm = 0; |
gosia_magda | 0:24db4218414d | 179 | contactor =0; |
gosia_magda | 0:24db4218414d | 180 | lock=0; |
gosia_magda | 0:24db4218414d | 181 | red = 0; |
gosia_magda | 0:24db4218414d | 182 | green = 0; |
gosia_magda | 0:24db4218414d | 183 | blue = 1; |
gosia_magda | 0:24db4218414d | 184 | break; |
gosia_magda | 0:24db4218414d | 185 | |
gosia_magda | 0:24db4218414d | 186 | case PILOT_9V: |
gosia_magda | 0:24db4218414d | 187 | contactor =0; |
gosia_magda | 0:24db4218414d | 188 | //relay=0; |
gosia_magda | 0:24db4218414d | 189 | lock=1; |
gosia_magda | 0:24db4218414d | 190 | my_pwm.period_ms(1); |
gosia_magda | 0:24db4218414d | 191 | my_pwm.pulsewidth_ms(1); |
gosia_magda | 3:0069f2cad504 | 192 | my_pwm.write(0.820); ///////PWM CHANGED from my_pwm.write(0.734); |
gosia_magda | 0:24db4218414d | 193 | printf("Charger in STATE b\r\n"); |
gosia_magda | 0:24db4218414d | 194 | printf("PILOT_9V - Pilot at 9 V \n\r"); |
gosia_magda | 0:24db4218414d | 195 | red = 1; |
gosia_magda | 0:24db4218414d | 196 | green = 1; |
gosia_magda | 0:24db4218414d | 197 | blue = 0; |
gosia_magda | 0:24db4218414d | 198 | break; |
gosia_magda | 0:24db4218414d | 199 | |
gosia_magda | 0:24db4218414d | 200 | case PILOT_6V: |
gosia_magda | 0:24db4218414d | 201 | contactor =1; |
gosia_magda | 0:24db4218414d | 202 | relay=1; |
gosia_magda | 0:24db4218414d | 203 | lock=1; |
gosia_magda | 0:24db4218414d | 204 | my_pwm.period_ms(1); |
gosia_magda | 0:24db4218414d | 205 | my_pwm.pulsewidth_ms(1); |
gosia_magda | 3:0069f2cad504 | 206 | my_pwm.write(0.820); ///////PWM CHANGED from my_pwm.write(0.734); |
gosia_magda | 0:24db4218414d | 207 | |
gosia_magda | 0:24db4218414d | 208 | printf("Charger in STATE c\r\n"); |
gosia_magda | 0:24db4218414d | 209 | printf("PILOT_6V - Pilot at 6 V \n\r"); |
gosia_magda | 0:24db4218414d | 210 | red = 0; |
gosia_magda | 0:24db4218414d | 211 | green = 1; |
gosia_magda | 0:24db4218414d | 212 | blue = 0; |
gosia_magda | 0:24db4218414d | 213 | break; |
gosia_magda | 0:24db4218414d | 214 | |
gosia_magda | 0:24db4218414d | 215 | case PILOT_NOK: |
gosia_magda | 0:24db4218414d | 216 | printf("Error"); |
gosia_magda | 0:24db4218414d | 217 | printf("PILOT_NOK - Pilot ERROR \n\r"); |
gosia_magda | 0:24db4218414d | 218 | lock=0; |
gosia_magda | 0:24db4218414d | 219 | red = 1; |
gosia_magda | 0:24db4218414d | 220 | green = 0; |
gosia_magda | 0:24db4218414d | 221 | blue = 0; |
gosia_magda | 0:24db4218414d | 222 | break; |
gosia_magda | 0:24db4218414d | 223 | |
gosia_magda | 0:24db4218414d | 224 | case PILOT_RESET: |
gosia_magda | 0:24db4218414d | 225 | printf("RESET IMPLEMENTED \n\r"); |
gosia_magda | 0:24db4218414d | 226 | printf("PILOT_RESET - Pilot at -12V \n\r"); |
gosia_magda | 0:24db4218414d | 227 | my_pwm.period_ms(1); |
gosia_magda | 0:24db4218414d | 228 | my_pwm.pulsewidth_ms(1); |
gosia_magda | 0:24db4218414d | 229 | my_pwm.write(1); |
gosia_magda | 0:24db4218414d | 230 | contactor =0; |
gosia_magda | 0:24db4218414d | 231 | relay=0; |
gosia_magda | 0:24db4218414d | 232 | lock=0; |
gosia_magda | 0:24db4218414d | 233 | red = 1; |
gosia_magda | 0:24db4218414d | 234 | green = 0; |
gosia_magda | 0:24db4218414d | 235 | blue = 0; |
gosia_magda | 0:24db4218414d | 236 | wait(0.5); // 200 ms |
gosia_magda | 0:24db4218414d | 237 | red = 0; // LED is OFF |
gosia_magda | 0:24db4218414d | 238 | wait(0.2); // 1 sec |
gosia_magda | 0:24db4218414d | 239 | break; |
gosia_magda | 0:24db4218414d | 240 | |
gosia_magda | 0:24db4218414d | 241 | }//end switch |
gosia_magda | 0:24db4218414d | 242 | |
gosia_magda | 3:0069f2cad504 | 243 | printf("#################\n\r"); |
gosia_magda | 0:24db4218414d | 244 | }//end while (1) |
gosia_magda | 0:24db4218414d | 245 | }//end main() |