Amarendra Mishra
/
bidirectional_final
code for bidirectional DC-DC converter
main.cpp
- Committer:
- amarendra23
- Date:
- 2018-10-02
- Revision:
- 0:a9dbf85a571b
File content as of revision 0:a9dbf85a571b:
#include "mbed.h" PwmOut led1(PB_4); AnalogIn sense(PA_1); PwmOut led2(PB_3); float Kp_set = 0.00005f; float kp_set = 0.00002f; float Ki=0.0000001f; double sum_error_per_buck=0.0f; double sum_error_per_boost=0.0f; double pre_error_per_buck=0.0f; double pre_error_per_boost=0.0f; float Kp = 0.0f,Kd=0.00001f; int flag=1; int main() { led1.period(0.00001f); led2.period(0.00001f); // led2.write(0.40f); while(1) { float duty_boost=0.15f; while(flag==1) { // wait(0.001); led2.write(0.0f); uint16_t setpoint = 0x9777; double error_per = 0.0f; uint16_t bus_voltage = sense.read_u16(); for(int i=0;i<10;i++) { uint16_t bus_voltage = sense.read_u16(); int32_t error = setpoint - bus_voltage; error_per += (double(setpoint)-double(bus_voltage))/double(setpoint)*100.0f; } error_per = error_per/10.0f; sum_error_per_boost+=error_per; if (duty_boost <= 0.700f) { // if (error_per > 5 || error_per < (-5)) // Kp = Kp_set*10; // else Kp = Kp_set; // if (error_per > 2 ||error_per < (-2)) //{ duty_boost = duty_boost + Kp*error_per+Ki*sum_error_per_boost*0.0002f+Kd*(error_per-pre_error_per_boost); pre_error_per_boost=error_per; // } } else duty_boost = 0.700f; led1.write(duty_boost); // printf("%f %f \n ",error_per,duty_boost); if(error_per<=0.0f&&duty_boost<=0.2) { //printf("buck hona chahiye"); flag=0; led2.write(0.0f); led1.write(0.0f); sum_error_per_buck=0.0f; sum_error_per_boost=0.0f; pre_error_per_boost= 0.0f; pre_error_per_buck = 0.0f; } // float Voltagef = float(bus_voltage)*3.3f; // printf(" %f %d \n", Voltagef , flag); } float duty_buck=0.0f; while(flag==0) { led1.write(0.0f); //printf("buck ho rha hai"); uint16_t setpoint = 0xA1B3; float error_per = 0.0f; uint16_t bus_voltage = sense.read_u16(); for(int i=0;i<5;i++) { uint16_t bus_voltage = sense.read_u16(); int32_t error = bus_voltage - setpoint; error_per += (float(bus_voltage)-float(setpoint))/float(setpoint)*100.0f; } error_per = error_per/5.0f; // if (error_per > 5 || error_per < (-5)) // Kp = kp_set*10; //else Kp = kp_set; //if (error_per > 2 ||error_per < (-2)) duty_buck = duty_buck + Kp*error_per+Ki*sum_error_per_buck*0.0002f+Kd*(error_per-pre_error_per_buck); pre_error_per_buck=error_per; led2.write(duty_buck); // if(duty_buck>1)duty_buck=1; // printf("%f dbk= %f \n",error_per,duty_buck) ; if(error_per<0.0f&&duty_buck<0.29 ) { flag=1; led2.write(0.0f); led1.write(0.0f); sum_error_per_buck=0.0f; sum_error_per_boost=0.0f; pre_error_per_boost=0.0f; pre_error_per_boost=0.0f; } // float Voltagef = float(bus_voltage)*3.3f; // printf(" %f %d \n", Voltagef , flag); // printf(" %f %x %d %f \n", duty, input, error, error_per); } } }