0
\$\begingroup\$

I've been trying to make a 3 phase inverter to drive a BLDC motor.

Mosfets : IRF3205

Driver : IR2101

Supply voltage for FETs and drivers : 12V

BLDC : https://media.digikey.com/pdf/Data%20Sheets/Seeed%20Technology/108990010_Web.pdf

I wrote a simple code for Arduino Uno. I change firing sequence of the MOSFETs manually, based on the figure given. enter image description here

Arduino reads the voltage from the potantiometer and creates frequency range between 15Hz-60Hz in terms of revolution. Duty cycle is 1/3.

The Code:

 int AA1=7;
 int AA2=6;
 int BB1=5;
 int BB2=4;
 int CC1=3;
 int CC2=2;
 int IN=A0;


 void setup() {

  pinMode(AA1,OUTPUT);
  pinMode(AA2,OUTPUT);
  pinMode(BB1,OUTPUT);
  pinMode(BB2,OUTPUT);
  pinMode(CC1,OUTPUT);
  pinMode(CC2,OUTPUT);

}

 void loop() {

 int t =analogRead(IN); //From the potentiometer
 Delay=map(t,0,1024,10000,3000); //we obtain the delay speed using the 
potentiometer


  digitalWrite(AA1,LOW);
  digitalWrite(AA2,LOW);
  digitalWrite(BB1,LOW);
  digitalWrite(CC2,LOW);
  digitalWrite(BB2,HIGH);
  digitalWrite(CC1,HIGH);
  delayMicroseconds(Delay);

  digitalWrite(AA2,LOW);
  digitalWrite(BB1,LOW);
  digitalWrite(CC1,LOW);
  digitalWrite(CC2,LOW);
  digitalWrite(AA1,HIGH);
  digitalWrite(BB2,HIGH);
  delayMicroseconds(Delay);

  digitalWrite(AA2,LOW);
  digitalWrite(BB1,LOW);
  digitalWrite(BB2,LOW);
  digitalWrite(CC1,LOW);
  digitalWrite(CC2,HIGH);
  digitalWrite(AA1,HIGH);
  delayMicroseconds(Delay);

  digitalWrite(AA1,LOW);
  digitalWrite(AA2,LOW);
  digitalWrite(BB2,LOW);
  digitalWrite(CC1,LOW);
  digitalWrite(BB1,HIGH);
  digitalWrite(CC2,HIGH);
  delayMicroseconds(Delay);

  digitalWrite(AA1,LOW);
  digitalWrite(BB2,LOW);
  digitalWrite(CC1,LOW);
  digitalWrite(CC2,LOW);
  digitalWrite(AA2,HIGH);
  digitalWrite(BB1,HIGH);
  delayMicroseconds(Delay);


  digitalWrite(AA1,LOW);
  digitalWrite(BB1,LOW);
  digitalWrite(BB2,LOW);
  digitalWrite(CC2,LOW);
  digitalWrite(CC1,HIGH);
  digitalWrite(AA2,HIGH);
  delayMicroseconds(Delay);

}

The problem is there is no PWM signal output at the high side whereas low side has a PWM output. So, the motor does not turn, it just vibrates but not even goes one step.

I calculated the value for bootstrap capacitor and found that around 200-300nF. I think the problem has to do with bootstrapping and I've tried different capacitor values : 220nF, 4.7uF(including electrolyte), 10uF(including electrolyte), 2.2uF(including electrolyte) so far. However, none of them has not worked.

There is only a DC voltage near to 10Vdc at the high side of the driver. When I change capacitors, it's ripple changes but I can't see PWM output.

What could cause the problem ? Thanks.

Here is my circuit : enter image description here

\$\endgroup\$
  • \$\begingroup\$ You're not doing anything to generate a PWM. Your code generates the six steps, and each one is fully on for the duration. Since you have no ramp-up to minimum speed, it may be that the motor is failing to get in synchronization with the switching of the bridge. \$\endgroup\$ – Phil G Apr 13 at 17:32
  • 1
    \$\begingroup\$ There is only a DC voltage at the high side of the driver. Is it 0Vdc of 12Vdc or something in between? Please share values, or better: scope images. \$\endgroup\$ – Huisman Apr 13 at 21:28
  • \$\begingroup\$ @Huisman, it is not 0Vdc, close to 10Vdc. \$\endgroup\$ – PIC16F84A Apr 13 at 23:58
0
\$\begingroup\$

I think you may have damaged the 1N4148 diodes by arbitrary trying bootstraps capacitors.
The current through the bootstrap diode is limited by the ESR of the cap and \$R_{DSon}\$, so, hardly nothing limits the current. Depending on brand, the 1N4148 can handle a surge current of 1 to 2A.
Start by checking these diodes.

Next, you'd better calculate what bootstrap capacitor you require.
Check for example: Chapter 3 Bootstrap Components Selection
Or: Chapter 3. How to select the bootstrap components
(I think it should be in the order of 200 - 300nF, but I don't know the switching frequency).
Do add a bootstrap resistor to protect the bootstrap diode at start-up.

Moreover, do also add a 10 nF as close as possible to each IR2101's power pins. And replace C1, C3 and C5 by about 1uF or 2.2uF ceramic capacitors (about 10x the bootstrap capacitor value). They should be second closest to the IR2101.

PS. I didn't check the code. Since you're claiming the low side is PWM'ing, I think the bootstrap circuit should be fixed first.

\$\endgroup\$
  • \$\begingroup\$ "I think it should be in the order of 200 - 300nF". Yes I had calculated the value and it is between 200nF-300nF. I've checked the diodes and they work. \$\endgroup\$ – PIC16F84A Apr 14 at 0:01
  • \$\begingroup\$ If you know the value, why not share it? This way, it stays vague. \$\endgroup\$ – Huisman Apr 14 at 5:50
0
\$\begingroup\$

I would debug this in two separate pieces, starting with the following ...

  1. As you're doing six-step commutation, you can should verify that you can command a commutation state on your Arduino and you see the right outputs on the six PWM outputs. Be sure you review typical six-step commutation strategies ... where you basically have three states: PWM, ON and OFF (high impedance)

  2. Drive a single pre-driver and bootstrap with a function generator. Do you see the same behavior?

\$\endgroup\$

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.