17th Nov 2016

Dependencies:   mbed

Fork of TEST10_8A_Nucleo_Charger_vApril_copy by SmartCharge

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?

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