17th Nov 2016

Dependencies:   mbed

Fork of TEST10_8A_Nucleo_Charger_vApril_copy by SmartCharge

Committer:
magdamcn
Date:
Tue Nov 22 14:44:32 2016 +0000
Revision:
4:4fae92446559
Parent:
3:0069f2cad504
17thNov2016;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
magdamcn 4:4fae92446559 1 /*
gosia_magda 1:2cbd9538feb6 2 * Copyright (c) 2016 M2C Ltd
magdamcn 4:4fae92446559 3 * TEST 32to16 with cp error sense/ Hyundai Corrected 16112016
magdamcn 4:4fae92446559 4 * 5000 samples
magdamcn 4:4fae92446559 5 * 3 second reset
magdamcn 4:4fae92446559 6 * if / else if / else - post insertation read
gosia_magda 1:2cbd9538feb6 7 */
gosia_magda 1:2cbd9538feb6 8
gosia_magda 0:24db4218414d 9 #include "mbed.h"
gosia_magda 0:24db4218414d 10
gosia_magda 0:24db4218414d 11 AnalogIn cp_value(A1); //A1 – PWM sense, analog read
gosia_magda 0:24db4218414d 12 AnalogIn pp_value(A2); //A2 - PP, analog reads
gosia_magda 0:24db4218414d 13 PwmOut my_pwm(D5);//pwm pin 5
gosia_magda 0:24db4218414d 14 DigitalOut lock(D7);
gosia_magda 0:24db4218414d 15 InterruptIn button(D8);
gosia_magda 0:24db4218414d 16
gosia_magda 0:24db4218414d 17 DigitalOut relay(D12);
gosia_magda 0:24db4218414d 18 DigitalOut contactor(D13);
gosia_magda 0:24db4218414d 19
gosia_magda 0:24db4218414d 20 Timer buttonTimer; //CC for reset button
gosia_magda 0:24db4218414d 21 Timeout buttonTimeout; //CC for reset button
gosia_magda 0:24db4218414d 22
gosia_magda 0:24db4218414d 23 DigitalOut green(D9);
gosia_magda 0:24db4218414d 24 DigitalOut red(D10);
gosia_magda 0:24db4218414d 25 DigitalOut blue(D11);
gosia_magda 0:24db4218414d 26
magdamcn 4:4fae92446559 27
gosia_magda 0:24db4218414d 28
gosia_magda 0:24db4218414d 29 #define STATE_A 1 // Vehicle not connected
gosia_magda 0:24db4218414d 30 #define STATE_B 2 // Vehicle connected / not ready to accept energy
gosia_magda 0:24db4218414d 31 #define STATE_C 3 // Vehicle connected / ready to accept energy / ventilation not required
gosia_magda 0:24db4218414d 32 #define STATE_D 4 // Vehicle connected / ready to accept energy / ventilation required
gosia_magda 0:24db4218414d 33
magdamcn 4:4fae92446559 34 #define PILOT_12V 1
magdamcn 4:4fae92446559 35 #define PILOT_9V_16 2
magdamcn 4:4fae92446559 36 #define PILOT_6V_16 3
magdamcn 4:4fae92446559 37 #define PILOT_9V_32 4
magdamcn 4:4fae92446559 38 #define PILOT_6V_32 5
magdamcn 4:4fae92446559 39 #define PILOT_RESET 6
magdamcn 4:4fae92446559 40 #define PILOT_NOK 7
gosia_magda 0:24db4218414d 41
gosia_magda 0:24db4218414d 42 float current_average=0;
gosia_magda 0:24db4218414d 43 float previous_average=0;
magdamcn 4:4fae92446559 44 unsigned char control_pilot;
magdamcn 4:4fae92446559 45
magdamcn 4:4fae92446559 46 #define NUM_SAMPLES 5000 // size of sample series
gosia_magda 0:24db4218414d 47
gosia_magda 0:24db4218414d 48 #define SAMPLE_BLOCKS 1 //CC for reset button
gosia_magda 3:0069f2cad504 49 #define RESET_SECONDS 3 //CC for reset button
gosia_magda 0:24db4218414d 50
gosia_magda 0:24db4218414d 51 bool resetDown = false;
gosia_magda 0:24db4218414d 52 bool resetCharger = false;
gosia_magda 0:24db4218414d 53
magdamcn 4:4fae92446559 54 void timedOut()
magdamcn 4:4fae92446559 55 {
gosia_magda 0:24db4218414d 56 resetCharger = true;
gosia_magda 0:24db4218414d 57 printf("Button pressed for more than 3 sec ! Charger reset !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! \r\n");
gosia_magda 0:24db4218414d 58 }
magdamcn 4:4fae92446559 59
magdamcn 4:4fae92446559 60 void resetPress()
magdamcn 4:4fae92446559 61 {
gosia_magda 0:24db4218414d 62 printf("Reset button pressed ... starting timer \r\n");
gosia_magda 0:24db4218414d 63 buttonTimer.stop();
gosia_magda 0:24db4218414d 64 buttonTimer.reset();
gosia_magda 0:24db4218414d 65 buttonTimer.start();
magdamcn 4:4fae92446559 66 resetDown = true;
magdamcn 4:4fae92446559 67 buttonTimeout.attach(&timedOut, RESET_SECONDS);
gosia_magda 0:24db4218414d 68 }
magdamcn 4:4fae92446559 69
magdamcn 4:4fae92446559 70 void resetRelease()
magdamcn 4:4fae92446559 71 {
gosia_magda 0:24db4218414d 72 printf("Reset button released \r\n");
gosia_magda 0:24db4218414d 73 int elapsedSeconds = buttonTimer.read();
gosia_magda 0:24db4218414d 74 buttonTimer.stop();
gosia_magda 0:24db4218414d 75 buttonTimer.reset();
gosia_magda 0:24db4218414d 76 if (elapsedSeconds > 3) {
gosia_magda 0:24db4218414d 77 resetCharger = true;
gosia_magda 0:24db4218414d 78 printf("Button was pressed for more than 3 sec !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! \r\n");
magdamcn 4:4fae92446559 79 } else {
magdamcn 4:4fae92446559 80 printf("If we're getting here then we've released the button before 3 seconds were up.\r\n");
gosia_magda 0:24db4218414d 81 }
gosia_magda 0:24db4218414d 82 printf("We will detach the timeout an setup for the next time.\r\n");
gosia_magda 0:24db4218414d 83 printf("%u \r\n", elapsedSeconds);
gosia_magda 0:24db4218414d 84 buttonTimeout.detach();
gosia_magda 0:24db4218414d 85 }
magdamcn 4:4fae92446559 86
magdamcn 4:4fae92446559 87 int main()
magdamcn 4:4fae92446559 88 {
magdamcn 4:4fae92446559 89
gosia_magda 0:24db4218414d 90 button.fall(&resetPress);
gosia_magda 0:24db4218414d 91 button.rise(&resetRelease);
gosia_magda 0:24db4218414d 92
gosia_magda 0:24db4218414d 93 while(1) {
gosia_magda 0:24db4218414d 94
magdamcn 4:4fae92446559 95 float readingA2 = pp_value.read();
magdamcn 4:4fae92446559 96 readingA2 = readingA2 * 3300;
gosia_magda 0:24db4218414d 97
magdamcn 4:4fae92446559 98 for (int i = 0; i < NUM_SAMPLES ; i++) {
gosia_magda 0:24db4218414d 99 float sample_value = cp_value.read_u16();
gosia_magda 0:24db4218414d 100 sample_value = (float) 3300 / 65535 * (float) sample_value; // convert sample to voltage
gosia_magda 0:24db4218414d 101 current_average = ((sample_value + (i * previous_average)) / (i+1));
magdamcn 4:4fae92446559 102 previous_average = current_average;
gosia_magda 0:24db4218414d 103 }
magdamcn 4:4fae92446559 104 printf("PP Pilot Value = %.0f mV\n\r",readingA2);
magdamcn 4:4fae92446559 105 printf("CP avrg. Value %.f \n\r", current_average);
gosia_magda 0:24db4218414d 106
magdamcn 4:4fae92446559 107
magdamcn 4:4fae92446559 108
magdamcn 4:4fae92446559 109
magdamcn 4:4fae92446559 110 //********************* TEST CONVEX BUILD Hyundai 32/16 ***********************//
gosia_magda 3:0069f2cad504 111 if(readingA2>3200)
gosia_magda 3:0069f2cad504 112 {
magdamcn 4:4fae92446559 113 printf("cable out \n\r");
gosia_magda 3:0069f2cad504 114
magdamcn 4:4fae92446559 115 if ((current_average > 2650) && (current_average < 2750)){
gosia_magda 3:0069f2cad504 116 control_pilot = PILOT_12V; // Pilot at 12V
gosia_magda 3:0069f2cad504 117 }
magdamcn 4:4fae92446559 118 if (current_average < 100){ // first reading ˜2702 & ˜755 after
gosia_magda 3:0069f2cad504 119 control_pilot = PILOT_12V; // Pilot at 12V
gosia_magda 3:0069f2cad504 120 resetCharger = false;
magdamcn 4:4fae92446559 121 }
magdamcn 4:4fae92446559 122 }
gosia_magda 3:0069f2cad504 123
magdamcn 4:4fae92446559 124 if(readingA2<3200)
gosia_magda 3:0069f2cad504 125 {
magdamcn 4:4fae92446559 126 //16amp cable in
magdamcn 4:4fae92446559 127 if((readingA2>150)&&(readingA2<300)){
magdamcn 4:4fae92446559 128
magdamcn 4:4fae92446559 129 if((resetCharger == true)||(current_average < 100)){
magdamcn 4:4fae92446559 130 control_pilot = PILOT_RESET;
magdamcn 4:4fae92446559 131 printf("reset @ 16\n\r");
magdamcn 4:4fae92446559 132 }
magdamcn 4:4fae92446559 133 else if ((current_average > 2650) && (current_average < 2750))
magdamcn 4:4fae92446559 134 {
gosia_magda 0:24db4218414d 135 control_pilot = PILOT_12V; // Pilot at 12V
magdamcn 4:4fae92446559 136 printf("16A cable in -no car \r\n");
magdamcn 4:4fae92446559 137 printf("12 @ 32\n\r");
magdamcn 4:4fae92446559 138 }
magdamcn 4:4fae92446559 139 else if((current_average > 1900) && (current_average <2100) || (current_average > 550) && (current_average <650))
magdamcn 4:4fae92446559 140 {
magdamcn 4:4fae92446559 141 control_pilot = PILOT_9V_16; // Pilot at 9V
magdamcn 4:4fae92446559 142 printf("9 @ 16 \r\n");
magdamcn 4:4fae92446559 143 }
magdamcn 4:4fae92446559 144 else if((current_average> 400) && (current_average<500)) {
magdamcn 4:4fae92446559 145 control_pilot = PILOT_6V_16; // Pilot at 6V
magdamcn 4:4fae92446559 146 printf("6 @ 16 \r\n");
magdamcn 4:4fae92446559 147 }
magdamcn 4:4fae92446559 148 /*else if (current_average < 100){ // first reading ˜2702 & ˜755 after
magdamcn 4:4fae92446559 149 control_pilot = PILOT_RESET;
magdamcn 4:4fae92446559 150 printf("car gone so @ 16");
magdamcn 4:4fae92446559 151 }
magdamcn 4:4fae92446559 152 */
magdamcn 4:4fae92446559 153 else {
magdamcn 4:4fae92446559 154 control_pilot = PILOT_NOK;
magdamcn 4:4fae92446559 155 printf("NOT OK @ 16 \r\n");
magdamcn 4:4fae92446559 156 }
magdamcn 4:4fae92446559 157
magdamcn 4:4fae92446559 158 }
magdamcn 4:4fae92446559 159
magdamcn 4:4fae92446559 160 //32amp cable in
magdamcn 4:4fae92446559 161 if((readingA2> 0)&&(readingA2<100))
magdamcn 4:4fae92446559 162 {
magdamcn 4:4fae92446559 163 if((resetCharger == true)||(current_average < 100))
magdamcn 4:4fae92446559 164 {
magdamcn 4:4fae92446559 165 control_pilot = PILOT_RESET;
magdamcn 4:4fae92446559 166 printf("reset @ 32\n\r");
magdamcn 4:4fae92446559 167 }
magdamcn 4:4fae92446559 168 else if ((current_average > 2650) && (current_average < 2750)) // first reading ˜2702 & ˜755 after
magdamcn 4:4fae92446559 169 {
gosia_magda 0:24db4218414d 170 control_pilot = PILOT_12V; // Pilot at 12V
magdamcn 4:4fae92446559 171 printf("32A cable in -no car \r\n");
magdamcn 4:4fae92446559 172 printf("12 @ 32\n\r");
magdamcn 4:4fae92446559 173 }
magdamcn 4:4fae92446559 174 else if((current_average > 1900) && (current_average <2100) || (current_average > 1070) && (current_average <1170)) // first reading ˜2012 & ˜573 after
magdamcn 4:4fae92446559 175 {
magdamcn 4:4fae92446559 176 control_pilot = PILOT_9V_32; // Pilot at 9V
magdamcn 4:4fae92446559 177 printf("9 @ 32 \r\n");
magdamcn 4:4fae92446559 178 }
magdamcn 4:4fae92446559 179 else if((current_average> 730) && (current_average<870))
magdamcn 4:4fae92446559 180 {
magdamcn 4:4fae92446559 181 control_pilot = PILOT_6V_32; // Pilot at 6V
magdamcn 4:4fae92446559 182 printf("6 @ 32 \r\n");
magdamcn 4:4fae92446559 183 }
magdamcn 4:4fae92446559 184 /*else if (current_average < 100){ // first reading ˜2702 & ˜755 after
magdamcn 4:4fae92446559 185 control_pilot = PILOT_RESET;
magdamcn 4:4fae92446559 186 printf("car gone so @ 32");
magdamcn 4:4fae92446559 187 }
magdamcn 4:4fae92446559 188 */
magdamcn 4:4fae92446559 189 else {
magdamcn 4:4fae92446559 190 control_pilot = PILOT_NOK;
magdamcn 4:4fae92446559 191 printf("NOT OK @ 32 \r\n");
magdamcn 4:4fae92446559 192 }
magdamcn 4:4fae92446559 193 }
gosia_magda 0:24db4218414d 194 }
gosia_magda 0:24db4218414d 195
magdamcn 4:4fae92446559 196
gosia_magda 0:24db4218414d 197 switch(control_pilot) {
gosia_magda 0:24db4218414d 198 case PILOT_12V:
gosia_magda 0:24db4218414d 199 printf("Charger in STATE A\r\n");
magdamcn 4:4fae92446559 200 //printf("PILOT_12V - Pilot at 12 V \n\r");
gosia_magda 0:24db4218414d 201 contactor =0;
magdamcn 4:4fae92446559 202 my_pwm.write(0);
gosia_magda 0:24db4218414d 203 lock=0;
gosia_magda 0:24db4218414d 204 red = 0;
gosia_magda 0:24db4218414d 205 green = 0;
gosia_magda 0:24db4218414d 206 blue = 1;
gosia_magda 0:24db4218414d 207 break;
gosia_magda 0:24db4218414d 208
magdamcn 4:4fae92446559 209 case PILOT_9V_16:
gosia_magda 0:24db4218414d 210 contactor =0;
gosia_magda 0:24db4218414d 211 //relay=0;
gosia_magda 0:24db4218414d 212 lock=1;
gosia_magda 0:24db4218414d 213 my_pwm.period_ms(1);
gosia_magda 0:24db4218414d 214 my_pwm.pulsewidth_ms(1);
magdamcn 4:4fae92446559 215 my_pwm.write(0.734);
gosia_magda 0:24db4218414d 216 printf("Charger in STATE b\r\n");
magdamcn 4:4fae92446559 217 //printf("PILOT_9V 16- Pilot at 9 V \n\r");
gosia_magda 0:24db4218414d 218 red = 1;
gosia_magda 0:24db4218414d 219 green = 1;
gosia_magda 0:24db4218414d 220 blue = 0;
gosia_magda 0:24db4218414d 221 break;
gosia_magda 0:24db4218414d 222
magdamcn 4:4fae92446559 223 case PILOT_6V_16:
gosia_magda 0:24db4218414d 224 contactor =1;
gosia_magda 0:24db4218414d 225 relay=1;
gosia_magda 0:24db4218414d 226 lock=1;
gosia_magda 0:24db4218414d 227 my_pwm.period_ms(1);
gosia_magda 0:24db4218414d 228 my_pwm.pulsewidth_ms(1);
magdamcn 4:4fae92446559 229 my_pwm.write(0.734);
gosia_magda 0:24db4218414d 230 printf("Charger in STATE c\r\n");
magdamcn 4:4fae92446559 231 //printf("PILOT_6V 16- Pilot at 6 V \n\r");
gosia_magda 0:24db4218414d 232 red = 0;
gosia_magda 0:24db4218414d 233 green = 1;
gosia_magda 0:24db4218414d 234 blue = 0;
gosia_magda 0:24db4218414d 235 break;
magdamcn 4:4fae92446559 236
magdamcn 4:4fae92446559 237 case PILOT_9V_32:
magdamcn 4:4fae92446559 238 contactor =0;
magdamcn 4:4fae92446559 239 //relay=0;
magdamcn 4:4fae92446559 240 lock=1;
magdamcn 4:4fae92446559 241 my_pwm.period_ms(1);
magdamcn 4:4fae92446559 242 my_pwm.pulsewidth_ms(1);
magdamcn 4:4fae92446559 243 my_pwm.write(0.468);
magdamcn 4:4fae92446559 244 printf("Charger in STATE b\r\n");
magdamcn 4:4fae92446559 245 //printf("PILOT_9V 32- Pilot at 9 V \n\r");
gosia_magda 0:24db4218414d 246 red = 1;
magdamcn 4:4fae92446559 247 green = 1;
magdamcn 4:4fae92446559 248 blue = 0;
magdamcn 4:4fae92446559 249 break;
magdamcn 4:4fae92446559 250
magdamcn 4:4fae92446559 251 case PILOT_6V_32:
magdamcn 4:4fae92446559 252 contactor =1;
magdamcn 4:4fae92446559 253 relay=1;
magdamcn 4:4fae92446559 254 lock=1;
magdamcn 4:4fae92446559 255 my_pwm.period_ms(1);
magdamcn 4:4fae92446559 256 my_pwm.pulsewidth_ms(1);
magdamcn 4:4fae92446559 257 my_pwm.write(0.468);
magdamcn 4:4fae92446559 258 printf("Charger in STATE c\r\n");
magdamcn 4:4fae92446559 259 //printf("PILOT_6V 32- Pilot at 6 V \n\r");
magdamcn 4:4fae92446559 260 red = 0;
magdamcn 4:4fae92446559 261 green = 1;
gosia_magda 0:24db4218414d 262 blue = 0;
gosia_magda 0:24db4218414d 263 break;
gosia_magda 0:24db4218414d 264
gosia_magda 0:24db4218414d 265 case PILOT_RESET:
gosia_magda 0:24db4218414d 266 printf("RESET IMPLEMENTED \n\r");
magdamcn 4:4fae92446559 267 //printf("PILOT_RESET - Pilot at -12V \n\r");
magdamcn 4:4fae92446559 268 my_pwm.period_ms(1);
magdamcn 4:4fae92446559 269 my_pwm.pulsewidth_ms(1);
magdamcn 4:4fae92446559 270 my_pwm.write(1);
magdamcn 4:4fae92446559 271 contactor =0;
magdamcn 4:4fae92446559 272 relay=0;
magdamcn 4:4fae92446559 273 lock=0;
magdamcn 4:4fae92446559 274 red = 0;
magdamcn 4:4fae92446559 275 green = 0;
magdamcn 4:4fae92446559 276 blue = 1;
magdamcn 4:4fae92446559 277 wait(0.5); // 200 ms
magdamcn 4:4fae92446559 278 blue = 0; // LED is OFF
magdamcn 4:4fae92446559 279 wait(0.2); // 1 sec
magdamcn 4:4fae92446559 280 break;
magdamcn 4:4fae92446559 281
magdamcn 4:4fae92446559 282 case PILOT_NOK:
magdamcn 4:4fae92446559 283 printf("Error");
magdamcn 4:4fae92446559 284 printf("PILOT_NOT OK - Pilot readding incorect \n\r");
gosia_magda 0:24db4218414d 285 my_pwm.period_ms(1);
gosia_magda 0:24db4218414d 286 my_pwm.pulsewidth_ms(1);
gosia_magda 0:24db4218414d 287 my_pwm.write(1);
gosia_magda 0:24db4218414d 288 contactor =0;
gosia_magda 0:24db4218414d 289 relay=0;
gosia_magda 0:24db4218414d 290 lock=0;
gosia_magda 0:24db4218414d 291 red = 1;
gosia_magda 0:24db4218414d 292 green = 0;
gosia_magda 0:24db4218414d 293 blue = 0;
gosia_magda 0:24db4218414d 294 break;
gosia_magda 0:24db4218414d 295 }//end switch
magdamcn 4:4fae92446559 296
magdamcn 4:4fae92446559 297 printf("############## 32/16 with error 16112016 ###\n\r");
magdamcn 4:4fae92446559 298 //wait(2);
magdamcn 4:4fae92446559 299 }//end while (1)
magdamcn 4:4fae92446559 300
magdamcn 4:4fae92446559 301
gosia_magda 0:24db4218414d 302 }//end main()