17th Nov 2016

Dependencies:   mbed

Fork of TEST10_8A_Nucleo_Charger_vApril_copy by SmartCharge

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?

UserRevisionLine numberNew 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()