
doesn't charge ;(
Diff: main.cpp
- Revision:
- 0:ae42d6933214
- Child:
- 1:a9315bd73ea5
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Nov 02 12:33:15 2016 +0000 @@ -0,0 +1,265 @@ + +#define CHARGER_PRESET 32 +//#define CHARGER_PRESET 16 + +#include "mbed.h" + +AnalogIn cp_value(A1); //A1 – PWM sense, analog read +AnalogIn pp_value(A2); //A2 - PP, analog reads +PwmOut my_pwm(D5); //pwm pin 5 +DigitalOut lock(D7); +InterruptIn button(D8); + +DigitalOut relay(D12); +DigitalOut contactor(D13); + +Timer buttonTimer; //CC for reset button +Timeout buttonTimeout; //CC for reset button + +DigitalOut green(D9); +DigitalOut red(D10); +DigitalOut blue(D11); + +unsigned char control_pilot; +float pwm; + +#define PILOT_12V 1 +#define PILOT_9V 2 +#define PILOT_6V 3 +#define PILOT_NOK 4 +#define PILOT_RESET 5 + +#define NUM_SAMPLES 2000 // size of sample series + +#define SAMPLE_BLOCKS 1 //CC for reset button +#define RESET_SECONDS 5 //CC for reset button + +bool resetDown = false; +bool resetCharger = false; + +float CP_average=0; +float CP_previous_average=0; +float PP_value; +float PP_reading; + +unsigned char cableType; +unsigned char chargerType; + +void timedOut() { + resetCharger = true; + printf("Button pressed for more than 3 sec ! Charger reset !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! \r\n"); +} + +void resetPress() { + printf("Reset button pressed ... starting timer \r\n"); + buttonTimer.stop(); + buttonTimer.reset(); + buttonTimer.start(); + resetDown = true; + buttonTimeout.attach(&timedOut, RESET_SECONDS); +} + +void resetRelease() { + printf("Reset button released \r\n"); + int elapsedSeconds = buttonTimer.read(); + buttonTimer.stop(); + buttonTimer.reset(); + if (elapsedSeconds > 3) { + resetCharger = true; + printf("Button was pressed for more than 3 sec !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! \r\n"); + } + else{ + printf("If we're getting here then we've released the button before 3 seconds were up.\r\n"); + } + printf("We will detach the timeout an setup for the next time.\r\n"); + printf("%u \r\n", elapsedSeconds); + buttonTimeout.detach(); +} + + +int main() { + + button.fall(&resetPress); + button.rise(&resetRelease); + + while(1){ + + //----------------------END Cable detection, Charger Power Check, Cable Power Check---------------------------// + float PP_value = pp_value.read(); + PP_value = PP_value * 3300; + + if(PP_value == 3300){ + printf("Cable not detected \r\n"); + printf("Charger Type %u AMP \r\n", CHARGER_PRESET); + chargerType = 0; + }//end if + else{ + if(CHARGER_PRESET == 16){ + chargerType = 16; + printf("Charger 16AMP ONLY \r\n"); + pwm=0.734; + printf("PWM @ 26.6% \r\n"); + }// end if + else if(CHARGER_PRESET == 32){ + if((PP_value > 200) && (PP_value < 300)){ + printf("32 AMP charger \n\r\r"); + printf("16 AMP cable detected \n\r\r"); + chargerType = 16; + pwm=0.734; + printf("PWM @ 26.6%\r\n"); + } + if((PP_value > 0 ) && (PP_value < 100)){ + printf("32 AMP charger \n\r\r"); + printf("32 AMP cable detected \r\n"); + chargerType = 32; + pwm=0.468; + printf("PWM @ 52.2%\r\n"); + + } + } + + } + //--------------------------------------Post instertatiom signaling CP-----------------------------------------// + + + + + for (int i = 0; i < NUM_SAMPLES ; i++){ + float CP_sample_value = cp_value.read_u16(); + CP_sample_value = (float) 3300 / 65535 * (float) CP_sample_value; // convert sample to voltage + CP_average = ((CP_sample_value + (i * CP_previous_average)) / (i+1)); + CP_previous_average = CP_average; + } + printf("CP Average Value = %.f \n\r", CP_average); + printf("PP Value = %.0f mV\n\r",PP_value); + printf("\n\r"); + + + + //--------------------------------------------- PILOT CHECK --------------------------------------------------// + +if(chargerType == 0){ + control_pilot = PILOT_12V; + resetCharger = false; //-----check this for restet------// + printf("12 V \n\r"); + printf("\n\r"); +} + +if(chargerType == 16){ + if(((CP_average > 1900)&&(2100 > CP_average))||((CP_average > 550)&&(650 > CP_average))){ + control_pilot = PILOT_9V; + printf("16amp@ 9 V \n\r"); + printf("\n\r"); + } + + if((CP_average > 400)&&(500 > CP_average)){ + control_pilot = PILOT_6V; + printf("16amp@ 6 V \n\r"); + printf("\n\r"); + } + + if((resetCharger == true)||((CP_average > 700)&&(800 > CP_average))){ + control_pilot = PILOT_RESET; + printf("reset \n\r"); + printf("\n\r"); + } +} +if(chargerType == 32){ + if(((CP_average > 1900)&&(2100 > CP_average))||((CP_average > 1070)&&(1170 > CP_average))){ + control_pilot = PILOT_9V; + printf("32amp@ 9 V \n\r"); + printf("\n\r"); + } + if((CP_average > 730)&&(830 > CP_average)){ + control_pilot = PILOT_6V; + printf("32amp@ 6 V \n\r"); + printf("\n\r"); + } + if(resetCharger == true){ + control_pilot = PILOT_RESET; + printf("reset \n\r"); + printf("\n\r"); + } +} + + //------------------------------------------- STATE ASSIGNED ------------------------------------------------// + +switch(control_pilot) { + case PILOT_12V: + printf("Charger in STATE A\r\n"); + printf("PILOT_12V - Pilot at 12 V \n\r"); + my_pwm = 0; + contactor =0; + lock=0; + red = 0; + green = 0; + blue = 1; + break; + + case PILOT_9V: + contactor =0; + // relay=0; + lock=1; + my_pwm.period_ms(1); + my_pwm.pulsewidth_ms(1); + //my_pwm.write(0.734); + my_pwm.write(pwm); + printf("Charger in STATE b\r\n"); + printf("PILOT_9V - Pilot at 9 V \n\r"); + red = 1; + green = 1; + blue = 0; + break; + + case PILOT_6V: + contactor =1; + relay=1; + lock=1; + my_pwm.period_ms(1); + my_pwm.pulsewidth_ms(1); + my_pwm.write(pwm); // 8 amp charger setup + //my_pwm.write(0.734); // 16 amp charger setup + + printf("Charger in STATE c\r\n"); + printf("PILOT_6V - Pilot at 6 V \n\r"); + red = 0; + green = 1; + blue = 0; + break; + + case PILOT_NOK: + printf("Error"); + printf("PILOT_NOK - Pilot ERROR \n\r"); + lock=0; + red = 1; + green = 0; + blue = 0; + break; + + case PILOT_RESET: + printf("RESET IMPLEMENTED \n\r"); + printf("PILOT_RESET - Pilot at -12V \n\r"); + my_pwm.period_ms(1); + my_pwm.pulsewidth_ms(1); + my_pwm.write(1); + contactor =0; + relay=0; + lock=0; + red = 1; + green = 0; + blue = 0; + wait(0.5); // 200 ms + red = 0; // LED is OFF + wait(0.2); // 1 sec + break; + + }//end switch + + //wait(2); + + } //end while(1) + +} //end main + + +