Buck converter output voltage is not regulated

Status
Not open for further replies.

--BawA--

Advanced Member level 1
Joined
Nov 28, 2012
Messages
479
Helped
43
Reputation
86
Reaction score
42
Trophy points
1,318
Location
Noida, INDIA
Visit site
Activity points
4,931
hi
i have designed a buck converter , which will be used to charge SLA battery ,
the input to the buck converter is 20v and the desired output is 14V. switching to the mosfet is done with PIC16f877a. Feedback is also eshtablished using voltage divider network . the problem is that i am not getting output voltage constant . say if i set dutycycle to 50% , i should get 10v at the output , but the output is still 19.4. there is no load at the output . is if i apply a load of 120ohm , the output voltage goes to 16. if i increase the load further, the output voltage becomes 10v .
i have also use P algorithm to keep the output constant , but that was still not doing good.
so where may be the fault in my design?
 

frequency is16Khz , and ADC is used for regulation ,,,
however i have noticed one thing that if i increase the inductor value ,the output voltage becomes less than 19.5, so i think the problem lies in output inductor and capacitor values,,, can anyone give me correct procedure to calculate the output inductor and capacitor values and also what should be the value of minimum resistance that should be always connected to the load ?
input voltage is around 20
output voltage will be 12 to 14v .
output current will vary from 0.2 ampere to 8ampere.
 

Q> What`s your mosfet driver scheme ? buck configuration usually requires high side mosfet so at such currents and for better efficiency you will have to use synchronous buck converter output stage with one high/low side mosfet pair.

* Increase switching frequency say up-to 31 khz but at that frequency PWM resolution will be low.
* Instead of ADC try using a Comparator...as ADC conversion speed is not sufficient.For example you can employ a scheme in which you just check comparator output every 300-400 u SEC if comparator is in tripped state then decrease pulse width and if comparator is`nt tripped then increase pulse width...this way output will oscillate around a set point but that's not a problem in lead acid type battery charging application .
* For Inductor and output capacitors you can start with low ESR electrolytic capacitors ..say 3 x 2200 uF and the Inductor should be wound on Iron Powder/dust type core.Start with Inductor value of 68 micro Henry and check whether output maintains at desired current/voltages at lowest desired input voltages..and if no then try decreasing the inductor value slightly and repeat till target is achieved.

Above steps are just a dirty/simple hit/try method and for better understanding you should try hands on Spice/LTspice and experiment buck converter using different combinations of frequency/Inductor/Capacitors .Time invested in spice tools will be worth and will be helping in getting insight of these types of switching circuits.
 
thanx aashitech for ur detailed explanation
actually i want to use PID algorithm to regulate the output , and i am using mikroc pro for coding. the problem is that the input feedback data is 10bit long(0 to 1023) , and duty cycle of pwm can vary from 0 to 250. i want the output voltage to be 14v constant , so how to implement the PID or PI in mikroc?
 

--BawA--, I and some friends are also building a buck converter in order to charge an SLA. We've built the circuit **broken link removed** and ir works like a charm. For control algorithm we are looking for PI, but we are using ATMega, not PIC...
 
It came to my mind later that charging SLA Battery need to have some current regulation as these requires CC (Constant Current charging) and also at later stages of charge cycle one needs to either follow 3 stage type charging control or simple tapper off charging current to maintain some specific battery voltages ..so for that you need to have 2 feedback signals from battery (Volts/current).
16F877A is old device and may be much costlier then latest PIC Micro controllers which are cheaper and have more advance features/peripherals . One idea is to use a PIC Microcontroller which has hardware PWM + Latch + Comparator .... PWM output Latch should be resettable by comparator output..two of such devices are PIC 16F616 and 16F785...try studying them and also try going deeper into BUCK converter functioning ..very soon you will find out how to make use of above mentioned microcontrollers in buck converter type applications.
Above Microcontroller like 16F616 have complementary PWM output with dead band/ dead time which suites very well in synchronous Buck converter applications.
 
aashitech, in present case i am using a load , to verify the output voltage and current,
i have written a code like -

Code C - [expand]
1
2
3
4
5
6
if(output_volts > 10)
{ duty =duty +1;
}
if (output_volts < 10)
{duty = duty-1;
}


but at the output i am getting 10 volts at 0.2 ampere load , if i increase the load (1 ampere) , the output voltage goes to 8.2V
duty cycle at 10v is 50%.
and input power supply is capable of providing 20v @ 2 ampere.
so where is the fault?
 

Please post your schematic/circuit diagram .... also check whether duty cycle goes up when you loads the output and resumes back to some lower value when you withdraw the load from output...just to verify that pwm part of your code is really detecting the output change...
 

The code seems to implement positive rather than required negative feedback. We would expect the duty cycle to be decreased if the output voltage is above the setpoint.

I also don't understand your report. You say that the output voltage drops when the load increases. That can be basically expected. But do you mean that you aren't able to increase the output voltage again by adjusting the duty cycle?

Generally your posts seems to assume that a fixed duty cycle will result in a constant output voltage independent of load variations. But apart from non-idealities like transistor and diode forward voltage and inductorseries resistance, the assumption is only valid in continuous conduction mode (CCM). Without a load, an asynchronous buck converter will always transit to discontinuous conduction mode (DCM) and the output voltages rises up to near the input voltage if the duty cycle ins't reduced.
 

FvM said:
The code seems to implement positive rather than required negative feedback. We would expect the duty cycle to be decreased if the output voltage is above the setpoint.

sorry , i have written the wrong code in post#8, the actual code is below,n still it didn,t work for me.

Code C - [expand]
1
2
3
4
5
6
if(output_volts > 10) 
{ duty =duty -1;
}
if (output_volts < 10)
{duty = duty+1;
}


FvM , what is the advantage of using synchronous buck convereter over asynchrounous?
and now i am using PID algorithm , the results are quite ok , the duty cycle is increasing if i put a load , but the output voltage is still not constant ,desired voltage is12 and at no load its 12.2v and
at 5 ampere load it is 11.3v. i have seen the pwm waveform on oscilloscope , its around 50% at no load ,and around 80% at 5 ampere load, i think there is a problem in my PID algorithm , and i dont have much knowledge in PID , so can u tell me how to implement the PID in PIC16F877a, the problem is basically that the ADC feedback data is of 10bit and the dutycycle range is in 8 bit , so how to set PID using this 10 bit data and set 8 bit dutycycle value , ?
 

PIC16 offers up to 10 bit duty cycle resolution, I guess you should use the full resolution.

The shown simple feedback algorithm implements non-linear integral action. I'm not sure if it's stable but it should at least demonstrate the regulators capability to approach the intended setpoint. A linear PI algorithm gives probably better dynamic behaviour
 
FvM ,
i have to ask one thing , i have mapped the the 10 bit feedback data to range of 0 to 20v , and also all the PID calculation results in percentage form , say the PID result is 35. so it will be treated as 35% , means the dutycycle will be 35% of max value of duty cycle , i.e (35/100)*255. so is my procedure correct??
or i have to change something?
 

The register value corresponding to 100% duty cycle depends on PWM timer setup. 255 is the maximum value, valid for PR2 = 255. But that's a PIC programming detail question, also how to achieve 10 bit resolution.
 

Status
Not open for further replies.

Similar threads

Cookies are required to use this site. You must accept them to continue using the site. Learn more…