0% found this document useful (0 votes)
156 views

Arduino Power Inverter Circuits

This document describes an Arduino-controlled power inverter circuit that converts DC voltage to AC voltage. It uses an Arduino microcontroller to generate switching signals that drive power MOSFETs connected to a transformer. This allows it to produce a modified square wave AC output. It includes features like monitoring battery voltage, transistor temperature, and soft-starting the output to prevent current surges. Diagrams and code are provided to illustrate two approaches - one using a center-tapped transformer, the other a non-center-tapped design.

Uploaded by

juliocast
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
156 views

Arduino Power Inverter Circuits

This document describes an Arduino-controlled power inverter circuit that converts DC voltage to AC voltage. It uses an Arduino microcontroller to generate switching signals that drive power MOSFETs connected to a transformer. This allows it to produce a modified square wave AC output. It includes features like monitoring battery voltage, transistor temperature, and soft-starting the output to prevent current surges. Diagrams and code are provided to illustrate two approaches - one using a center-tapped transformer, the other a non-center-tapped design.

Uploaded by

juliocast
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 8

Arduino Power Inverter Circuits

  Tweet
Videos for this project:
Arduino power inverter new version: Arduino Power Inverter Revisited.

Arduino power inverter old version: Arduino Power inverter.


In my resent college classes several of my students plan to study solar energy in
particular how power inverters operate. This is a demonstration I setup for my class.
A DC to AC inverter changes 12 or 24 volts DC to 120 or 240 VAC. This is a version of
this using the Arduino micro-controller. We have two variations as presented below and
will use the exact same micro-controller program not only to drive the power conversion
process but to monitor other functions as well. Other features include:

 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:

 Opto-Isolated Transistor Drivers for Micro-Controllers


 Build a H-Bridge Motor Control with Power MOSFETS
 Basic Power Transformers

/*
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

int x = 0; int y = 0; int z = 0;

void setup() {

  pinMode(MOSFET1, OUTPUT); // MOSFET 1


  pinMode(MOSFET2, OUTPUT); // MOSFET 2

  pinMode(EnablePower, INPUT); // N.O. switch


  digitalWrite(EnablePower, HIGH); // pull up enabled
  
  pinMode(HVON, OUTPUT);
  digitalWrite(HVON, LOW);
  
  pinMode(batteryGoodInd, OUTPUT);
  digitalWrite(batteryGoodInd, LOW);
  pinMode(fanOnInd, OUTPUT);
  digitalWrite(fanOnInd, LOW);

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);

// cooling fan off


     
  if ((digitalRead(EnablePower) == 0) && (y > 150)) {
// check for closed enable switch, battery state
    SoftStart();  // bring power up slowly
    while ((digitalRead(EnablePower) == 0) && (y > 150)) {
      digitalWrite(MOSFET1, HIGH); // MOSFET1 on
      delayMicroseconds(360);
      delay(8); // wait for 8.3 mS
      digitalWrite(MOSFET1, LOW); // MOSFET1 off

      digitalWrite(MOSFET2, HIGH); // MOSFET2 on


      delayMicroseconds(360);
      delay(8); // wait for 8.3 mS
      digitalWrite(MOSFET2, LOW); // MOSFET2 off

      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

    } // end while


  } //

}  // end loop

void toggle(int pinNum) {


// toggle the state on a pin

  int pinState = digitalRead(pinNum);


  pinState = !pinState;
  digitalWrite(pinNum, pinState);
}

//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) {

    digitalWrite(MOSFET1, HIGH); // MOSFET1 on


    delayMicroseconds(360);
    delay(y); // wait for 8.3 mS
    digitalWrite(MOSFET1, LOW); // MOSFET1 off
    delay(z);

    digitalWrite(MOSFET2, HIGH); // MOSFET2 on


    delayMicroseconds(360);
    delay(y); // wait for 8.3 mS
    digitalWrite(MOSFET2, LOW); // MOSFET2 off
    delay(z);

    x++;
    if (x == 30) {
      y = y + 2;
      z = z - 2; 
      x=0;

    }
  }
}

You might also like