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