17th Nov 2016

Dependencies:   mbed

Fork of TEST10_8A_Nucleo_Charger_vApril_copy by SmartCharge

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?

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