Hi, I am new to microcontrollers, please advise me if the following project is possible with Arduino.
I would like to build a high current (~1000A) buck converter with very precise control (~0.1%) of output voltage. I would need 8 pairs of MOSFETs to handle the current, so it's better to have 2Pi/8 shift between 8 individual buck converters to minimize output oscillations. Is it possible to get 8 phase shifted PWM signals to feed the buck converter drivers? PWM frequency would be constant, variable duty cycle. Duty cycle value would be sent via USB. I would like to avoid any interrupts in PWM outputs.
I found an elegant solution for 2 phases here: http://www.athenaenergycorp.com/2013/03/out-of-phase-interleaved-pwm-on-the-arduino/. It has to do with offsetting the timer counter register. What would be the maximum number of phases with this approach?
I am particularly interested in Arduino Due because of higher clock frequency translating into higher PWM frequency at 10-12 bit resolution.
please advise me if the following project is possible with Arduino.
I would like to build a high current (~1000A) buck converter with very precise control (~0.1%) of output voltage.
No this is not possible.
I would need 8 pairs of MOSFETs to handle the current,
Mosfets would be IRF6718L2TRPbF. Rated 25V, Rds(on)=0.5mOhm, 64nC gate charge. With good cooling these can handle up to 200A.
12V power supply voltage should be converted to ~1.5V.
The idea is to get 8 phase shifted PWM to the inputs of 8 buck converter drivers like ISL6615A.
What problems do you envision with this approach?
Ultimately I need to have a very precise control of the electric power provided to a resistive heater. I will monitor output voltage and total current and make fine adjustments of PWM duty cycle.
I am not sure about your level of expertise with electronics but this is a major, major undertaking and requires a high level of skill.
With good cooling these can handle up to 200A.
Yer sure read the data sheet again especially the bit about thermal resistance.
Ultimately I need to have a very precise control of the electric power provided to a resistive heater.
And your thermal time constant for this is? Most people use PWM and a much higher voltage.
12V power supply voltage should be converted to ~1.5V.
Ok lets do some maths
Assume 100% efficiency, 12V in 1.5V out gives a step down of 8 times so assume you have a current step up of the same.
Output required 1.5V at 1000A = output power of 1.5KW.
12V supply current - 1000 / 8 = 125A
Does it not strike you that any of these figures are a bit unrealistic?
Grumpy_Mike:
I am not sure about your level of expertise with electronics but this is a major, major undertaking and requires a high level of skill.
I don't intend to sound disrespectful to professionals, but I will try to accomplish this project and gain some experience in the process. I have time at hands and I am willing to learn.
Grumpy_Mike:
read the data sheet again especially the bit about thermal resistance.
I guess I need to dissipate less than 8W per MOSFET: I2R=125A^20.0005 Ohm=8W. Junction to case temperature difference would be 8W1.8deg/W= 14 deg. Nothing criminal here. Next I need to dissipate 8W from 0.4 cm2 case surface. Water cooled copper block would do it for sure, with minimal temperature difference. I do not need to resort to passive cooling options listed in data sheet.
Grumpy_Mike:
And your thermal time constant for this is? Most people use PWM and a much higher voltage.
I would love to use higher voltage, but the heater goes to 1500 deg Celsius and it would burn if I make it thinner. This is a very specialized application, I have to go with high current.
Grumpy_Mike:
Ok lets do some maths
Assume 100% efficiency, 12V in 1.5V out gives a step down of 8 times so assume you have a current step up of the same.
Output required 1.5V at 1000A = output power of 1.5KW.
12V supply current - 1000 / 8 = 125A
Does it not strike you that any of these figures are a bit unrealistic?
Come on, you can get an IBM BladeCenter power supply for 30$ on eBay(12V, 2000W). I have a Cherokee CAR2512FP, 2500W, it has >90% efficiency.
1000A is a terribly large amount of current, especially at DC. Have you considered maybe sinusoidal AC and maybe more balanced voltages? I agree with it being a major major undertaking.
So I'm assuming you have 1.5+KW resistive heater somewhere. What is it's resistance and power rating? This means that you want to control the input voltage or input current. We are all trying to figure out why you say 1000A, because that is arc-flash explosion fatal amounts of current.
I don't intend to sound disrespectful to professionals, but I will try to accomplish this project and gain some experience in the process. I have time at hands and I am willing to learn.
I don't doubt your willingness to learn but power supply design is a specialist subject. I have managed several professional power supply specialists and I have seen them struggle to get a stable step down switching regulator at 5 Amps. It has taken three or four CAD iterations to get the finished design.
Your biggest problem will be getting any design stable and will require a specialist PCB layout, it is not a thing you can prototype on strip board. The other thing is that the current carrying capacity of coils will be limited by the magnetic saturation of the core.
I would love to use higher voltage, but the heater goes to 1500 deg Celsius and it would burn if I make it thinner.
I am not sure I follow that line of thinking, a watt is a watt no matter how it is derived.
If you do manage to design such a device then I think you will be able to walk into any power supply design job on the planet.
Anyway good luck with the project.
A bit of advice I would give, is to try and design a 20A system to start with just to see how it goes.
I'm probably just dense, I'm an electrician, not an electronics designer, but why can't you use a higher voltage instead of such a large current? I mean, if I wanted 1500 W of heating power, I would use line voltage (120 V in my case) and draw 12.5 A. Any wall outlet in my home could provide the current and the wiring wouldn't need to be 2" in diameter. What am I missing?
I actually made more careful calculations and found that I need only 350A, 3.5V.
Resistive heater in my case is a short piece of graphite tube with ~0.01 Ohm resistance. It has to withstand extreme temperature for a prolonged period of time. The walls need to be thick enough, so that the heater doesn't degrade very fast. Making a spiral cut is not an option. There is no possibility to increase the resistance, please take it for granted.
350A is nothing extraordinary. The same current is circulating in a graphics card which dissipates 350W; they work on ~1 volt these days, right?
The resistive load in my experiment will remain virtually constant, I will control the power by changing buck converter's duty cycle in software and transferring it to Arduino. Could someone comment on the capability of Arduino to generate several phase shifted PWM signals to implement multi-phase buck converter?
mirith:
Have you considered maybe sinusoidal AC and maybe more balanced voltages? I agree with it being a major major undertaking.
I need an ultimate stability of the output voltage, mains voltage variations would ruin it. I considered producing a sinusoid from stable 48 or 12 V (inverter with variable AC amplitude) and using step-down transformer. DC power is a bit easier to measure accurately though.
please take it for granted.
350A is nothing extraordinary. The same current is circulating in a graphics card which dissipates 350W; they work on ~1 volt these days, right?
I'd be leery of this code. It doesn't do anything intentional to establish any particular phase relationship between Timer1 and Timer2; it just gets lucky. Here's why it seems to work:
The last thing that the internal startup code does is to set up and start Timer2. Timer2 runs at 1/64 of the system clock, so it's still at zero when setup() executes.
Timer1 is set to full scale for its mode - 8-bit phase-correct PWM, mode 1 - rather than half-scale, as claimed in the text accompanying this code. The code sets it explicitly to 0x7FFF, but Timer1 ignores the most significant byte in mode 1, and sets itself to 0xFF. That more or less works, because the phase-correct mode counts up to the top, and then down to the bottom, rather than rolling over. Timer1 is set to one tick away from zero, upcounting, at a time when Timer2 is at zero, upcounting. On the next tick, Timer2 starts counting down, while Timer1 counts up. They're almost 180 degrees out pf phase, but that's largely a matter of luck. If the next version of the IDE adds code between setting Timer2 and calling setup(), or if you add code at the beginning of setup(), the phase relationship will be less accurate. With just a couple of analogRead()'s, it gets off pretty far.
Here's an 8-phase PWM controller, made for applications like this: http://www.irf.com/product-info/datasheets/data/pb-chl8318.pdf. It costs about $3 US in big quantities. I didn't readily find any for sale in singles. Maybe the manufacturer will sample a couple to you.
I believe that an Uno won't lend itself well to generating the PWM pulses you want. A Due might. The datasheet claims, "Up to 8-channel 16-bit PWM," - exactly the right number - but I don't know how that's implemented in the Due, or supported in the IDE. If you want to investigate that, you might try the Due forum, here: Arduino Due - Arduino Forum.
I'll echo Grumpy Mike's sentiment, and vote that you prototype something with less current. A buck converter runs just one step ahead of the grim reaper - if a driver doesn't switch off, the supply voltage shows up on the output in short order. This statement:
I am new to microcontrollers ...
suggests that you'll have multiple rounds of debugging, and, with this project, that suggests that you might see a little smoke.
As for the capabilities of the Arduino, I don't think it is what you want, especially since the arduino's PWM isn't the most accurate thing in the world. You will probably want to find a fairly sophisticated microcontroller that can generate multiple separate, accurate PWM outputs. Also the Arduino's PWM is probably too low frequency for what you want to do. My experience has been that such things run from 100-400kHz, and at the very least, the basic Arduino PWM won't handle that. I would maybe look at Atmel's XMega series, or even their 32Bit stuff.
Keep in mind that for low noise, you want a linear regulator, and for high efficiency you want switching. Switching power supplies will always generate noise/ripple.
What you are describing would generally cost at least on the scale of tens of thousands of dollar. And there is good reason for that, it is not trivial.
astaire:
Mosfets would be IRF6718L2TRPbF. Rated 25V, Rds(on)=0.5mOhm, 64nC gate charge. With good cooling these can handle up to 200A.
12V power supply voltage should be converted to ~1.5V.
The idea is to get 8 phase shifted PWM to the inputs of 8 buck converter drivers like ISL6615A.
What problems do you envision with this approach?
Ultimately I need to have a very precise control of the electric power provided to a resistive heater. I will monitor output voltage and total current and make fine adjustments of PWM duty cycle.
That surface mount package cannot handle 200A or anything like it on a PCB.
The copper traces will have more resistance than the MOSFET and put out more
heat and just melt. Well perhaps with 1mm thick copper board you might have
a chance but that's 28oz/square foot, unheard of. 2.5mm^2 copper wire
makes a good 150A fuse.
Those high current ratings are pulse ratings assuming perfect heat dissipation and
no lead resistance. If you're dealing with such high continuous current levels you use
MOSFETs in big chunky screw-down packages like ISOTOP and copper or aluminium
bus-bars to distribute power, not surface mount!
astaire:
Mosfets would be IRF6718L2TRPbF. Rated 25V, Rds(on)=0.5mOhm, 64nC gate charge. With good cooling these can handle up to 200A.
12V power supply voltage should be converted to ~1.5V.
The idea is to get 8 phase shifted PWM to the inputs of 8 buck converter drivers like ISL6615A.
What problems do you envision with this approach?
Ultimately I need to have a very precise control of the electric power provided to a resistive heater. I will monitor output voltage and total current and make fine adjustments of PWM duty cycle.
That surface mount package cannot handle 200A or anything like it on a PCB.
The copper traces will have more resistance than the MOSFET and put out more
heat and just melt. Well perhaps with 1mm thick copper board you might have
a chance but that's 28oz/square foot, unheard of. 2.5mm^2 copper wire
makes a good 150A fuse.
Those high current ratings are pulse ratings assuming perfect heat dissipation and
no lead resistance. If you're dealing with such high continuous current levels you use
MOSFETs in big chunky screw-down packages like ISOTOP and copper or aluminium
bus-bars to distribute power, not surface mount!
Oh, the package is quite a good point. And those cost anywhere from $20-$200 each depending on the situation. I would also look into IGBTs. They tend to handle current and voltage spikes better. You'll also need to heat sink them, which means that it will weigh probably 40lbs. I've built a mediocre medium frequency switching power supply before. Its not fun.
IGBT's are utterly utterly wrong for such low voltages, they will vaporize!!!!
MOSFETs behave like a low value resistor when on, IGBTs behave like
a darlington when on with saturation voltage even higher, perhaps 3V.
Your load is less than 3V, you'll be wasting 3kW in your devices!
Anything less than 100V and IGBT is poor choice. Anything over 200V is
a poor choice for MOSFETs and IGBTs are much more robust.
Something in TO-247 package might be upto the job, such as this:
Although the datasheet claims 195A package limit, take that with a pinch of salt,
its probably marketing amps, not real amps.
For comparison look at this datasheet for an ISOTOP MOSFET - the current rating
for the chunky screw terminals is 100A (continuous), and that's quite a bit of copper...
That style of package also keeps the gate circuit well away from the large magnetic
fields associated with the source-drain circuit - switching 100's of A fast causes
real issues with electromagnetic induction in nearby wires.
Ohmic heating goes as the square of current, so 200A is 16 times more problematic
than 50A, for instance, unless you make the conductors 4 times thicker, then its only
4 times as much heat to get rid of.
Thank you for your take on Arduino, I will try Due forum as well.
Of course I am no going to build the whole thing and burn it altogether by mistake. I'll burn a single buck converter first.
mirith:
My experience has been that such things run from 100-400kHz, and at the very least, the basic Arduino PWM won't handle that. I would maybe look at Atmel's XMega series, or even their 32Bit stuff.
Keep in mind that for low noise, you want a linear regulator, and for high efficiency you want switching. Switching power supplies will always generate noise/ripple.
What you are describing would generally cost at least on the scale of tens of thousands of dollar. And there is good reason for that, it is not trivial.
I planned to switch at 20-40kHz. Bigger inductors/caps are ok. I need high resolution duty cycle, more than 10 bits, is it possible to achieve with 200kHz switching? Some sort of dithering might work i guess. Also, at 100kHz skin depth is 0.2mm, already a bit limiting for high current?
What would push the cost that high? Grumpy Mike mentioned design stability. Will it matter in the application where the load changes very slowly in time? I did not intend to use a built-in control loop. I have an external power monitor that would give the value to a controlling PC.