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