Arduino Power Inverter Circuits
Arduino Power Inverter Circuits
Tweet
Videos for this project:
Arduino power inverter new version: Arduino Power Inverter Revisited.
Monitor battery and input power condition and shutdown if battery voltage is too
low. (Less than 11 volts.)
Monitor the transistor heat sink assembly and turn on a cooling fan if too hot.
Power up slowly to prevent huge current surges on the 12/24 volts source.
The drive output from digital pins 9 and 10 provide two square waves 180 degrees out
of phase. In a normal 60 Hz. the AC half-cycle period is about 8.33 milli-Sec. pulse
width. The frequency and pulse width are very important in determining power output.
This was very easy to control with the delay routines in the software.
Both diagrams below were tested on a compact fluorescent lamp, a dual tube four-foot
shop light, and a Black and Becker power drill. I also tested several transformer types
while one transformer designed for a 400 watt uninterruptible power supply (UPS)
provided best performance. See Wiki for more on a UPS.
In fact this is a recreation of a UPS. I only tested these circuits at 12 volts. The output is
a modified square wave.
Figure 2.
In figure 2 above we use a 24-volt center-tapped transformer and drive this with N-
channel power MOSFETs. I have tried to use bipolar transistors but the performance
and output was poor. I used surplus IRFP450s and IRFZ46N types. Both worked well
and must be heat sinked. By switching one-half of the transformer side at a time, we
recreate the negative/positive half-cycles on the AC output.
If I used a 12 volt center-tapped transformer my output would be 240 volts. The 4N37
opto-isolators serve to isolate the micro-controller from the higher voltages and
electrical noise of the output circuits. The MOSFETs can be simply paralleled source to
source, drain to drain, and gate to gate for higher currents and power output. The 15k
resistors are used to bleed the charges off the MOSFETs gates to turn the device off.
Figure 3.
In figure three I used my H-bridge circuit to drive a transformer. It works a little better
than figure 2 and has the advantage of using a non-center-tapped transformer. It does
use more power MOSFETs. The MOSFETs can still be wired in parallel as shown in
figure 2 for greater power.
Related:
/*
This outputs two square wave pulses to drive inverter circuits using power MOSFETS
driving a 24-volt CT transformer to output 120 volts AC.
The period for a 60 Hertz sine wave is 16.666 mSec. So each half-cycle is about 8.3
mSec.
The programs below puts out two square waves one for each half cycle, 180 degrees
out of phase.
This also has a soft start feature to limit power surges on power up.
This also measure the voltage on the battery and disables output if the voltage drops
below 10 volts.
A 10k and 2.7k are in series and connected to the 12 volt battery bank or power supply
(+ 12 connected to 10k) while one end of the 2.7k goes to ground. The 2.7k/10k junction
goes to one of the Arduino ADCs and when the battery voltage drops below a half-volt
(about 10 volts on the battery) is disabled until battery is recharged.
/*
#define MOSFET1 9
#define MOSFET2 10
#define EnablePower 2 // HV power on switch
#define batteryVoltage 0 // Ad0
#define heatSink 1 // Ad1
#define batteryGoodInd 12
#define fanOnInd 11
#define HVON 13 // high voltage on blinks
void setup() {
void loop() {
y = analogRead(batteryVoltage);
if (y > 150) digitalWrite(batteryGoodInd, LOW);
// battery LED off
else digitalWrite(batteryGoodInd, HIGH);
// battery too low LED on
if (analogRead(heatSink) > 500) digitalWrite(fanOnInd, HIGH);
// cooling fan on
else digitalWrite(fanOnInd, LOW);
x++;
if (x == 20) { // flash HVON LED
toggle(HVON);
y = analogRead(0);
x=0;
if (analogRead(heatSink) > 500) digitalWrite(fanOnInd, HIGH);
// cooling fan on
else digitalWrite(fanOnInd, LOW);
// cooling fan off
} // end 2nd if
//SoftStart allows power to come up slowly to prevent excessive surges
// time is about 2 seconds
void SoftStart(void) {
int y = 2;
int x = 0;
int z = 6;
while (y < 8) {
x++;
if (x == 30) {
y = y + 2;
z = z - 2;
x=0;
}
}
}