1
\$\begingroup\$

I am making a 5 level inverter using an Arduino Mega. I am using an IRFZ44N MOSFET for switching and also an MCT2E as a MOSFET driver.

The problem I am facing is that I am a getting a lower output voltage than expected: the actual output should be 24V, but I am getting 12 - 13V as output.

Can anyone help me out with this problem?

This is the schematic:

enter image description here

This is the code I am using:

float f = 50;
float t = (1 / f) * 1000000;
float a1 = 10;
float a2 = 40;
float a1p1 = (a1 * t) / 360;
float a1p2 = (a2 * t) / 360;
float d = 5;

int pin1 = 1;
int pin2 = 2;
int pin3 = 3;
int pin4 = 4;
int pin5 = 5;
int pin6 = 6;
int pin7 = 7;
int pin8 = 8;

void setup() {
  pinMode(pin1, OUTPUT);
  pinMode(pin2, OUTPUT);
  pinMode(pin3, OUTPUT);
  pinMode(pin4, OUTPUT);
  pinMode(pin5, OUTPUT);
  pinMode(pin6, OUTPUT);
  pinMode(pin7, OUTPUT);
  pinMode(pin8, OUTPUT);
}

void loop() {
  digitalWrite(pin1, HIGH);
  digitalWrite(pin2, HIGH);
  digitalWrite(pin5, HIGH);
  digitalWrite(pin6, HIGH);
  delayMicroseconds(a1p1 - d);                                                                                                                                                                                                                                   

  digitalWrite(pin2, LOW);
  delayMicroseconds(d);
  digitalWrite(pin4, HIGH);
  delayMicroseconds(a1p2 - a1p1 - d);

  digitalWrite(pin6, LOW);
  delayMicroseconds(d);
  digitalWrite(pin8, HIGH);
  delayMicroseconds(t / 2 - (2 * a1p2) - d);

  digitalWrite(pin5, LOW);
  delayMicroseconds(d);
  digitalWrite(pin7, HIGH);
  delayMicroseconds(a1p2 - a1p1 - d);

  digitalWrite(pin1, LOW);
  delayMicroseconds(d);
  digitalWrite(pin3, HIGH);
  delayMicroseconds((2 * a1p1) - d);

  digitalWrite(pin4, LOW);
  delayMicroseconds(d);
  digitalWrite(pin2, HIGH);
  delayMicroseconds(a1p2 - a1p1 - d);

  digitalWrite(pin8, LOW);
  delayMicroseconds(d);
  digitalWrite(pin6, HIGH);
  delayMicroseconds(t / 2 - (2 * a1p2) - d);

  digitalWrite(pin7, LOW);
  delayMicroseconds(d);
  digitalWrite(pin5, HIGH);
  delayMicroseconds(a1p2 - a1p1 - d);

  digitalWrite(pin3, LOW);
  delayMicroseconds(d);
  digitalWrite(pin1, HIGH);
  delayMicroseconds(a1p1);
}
```
\$\endgroup\$
1
  • 2
    \$\begingroup\$ You may want to consider what gate voltages you need to switch on your high-side N-FETs \$\endgroup\$ – sstobbe Dec 29 '20 at 4:31
0
\$\begingroup\$

To keep the high-side FETs turned on their Gates need to go above the battery voltage by >=10 V. However you must also ensure that they don't receive more than 20 V between Gate and Source, so you can't just boost the battery voltage by 10 V because then the total would be 22 V which could blow up the FETs.

One way to do it is with an isolated DC/DC converter such as the Recom ROL-1212S, powered by the battery being switched and with its output connected between the optocoupler positive supply and FET Source. You will need one converter per high-side FET.

For testing you could use PP9 dry cell batteries, which should last a long time at the low current your Gate driver draws.

Apart from that your circuit and program appear to be correct. The rms output voltage should be ~20 V.

\$\endgroup\$
0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.