BLDC Power Inverter Problem.. Need Help..

Discussion in 'The Projects Forum' started by Sufi Rider, Apr 8, 2016.

  1. Sufi Rider

    Thread Starter New Member

    Apr 8, 2016
    6
    0
    Hello Friends,
    I am new to the forum and new to electronics.
    Soo, practically a noob here, please forgive me for the shabby diagram and poor knowledge.

    But i am trying to run a BLDC motor using an Arduino based control.

    Bellow is the schematic of the power inverter I am using.
    M using IRF4905 P channel Mosfet.

    Once I connect the power supply, I am getting continuity between source and drain with all the connections removed. Need urgent help.
    Connecting the power supply just blew away all my High Side Mosfets. dont know what to do. its the second time its happening. need urgent help.
     
  2. wayneh

    Expert

    Sep 9, 2010
    12,144
    3,054
    Can you please explain more what you mean by that? Do you mean the gate connections are left floating or are they tied to the upper rail with the 10k resistors?

    It would be nice if you labeled the zeners with their voltages.

    The IRF540s are huge overkill for switching the high-side MOSFETs. I'm not sure you need them at all?

    Another obvious solution could be to check and double check the pinouts of your MOSFETs. It's really easy to confuse the pins and install them backwards. Then current flows through the body diodes whether the gate is on or not.
     
  3. Sufi Rider

    Thread Starter New Member

    Apr 8, 2016
    6
    0
    Nope, The gates are tied to upper rail by 10k resistor. the zener diodes are 10v, forgot to mention. had the IRF540s extra, to used them for switching the IRF4905.
    What i mean is, once I connect the power to the circuit, the higher side mosfets get damaged. I desoldered the mosfets and checked between Drain and Source. its really freaking my out. Might try using high side FET driver may be.
     
  4. Alec_t

    AAC Fanatic!

    Sep 17, 2013
    5,801
    1,105
    Just guessing, but on connecting the supply are the Arduino I/O pins set as inputs by default? If so, despite pull-up or pull-down resistors on the FET gates there may be some interference causing uncontrolled turn-on of the FETs. That could result in damaging shoot-through.
     
  5. Sufi Rider

    Thread Starter New Member

    Apr 8, 2016
    6
    0
    T
    Thanks, but I am using either 1k or 10k resistors on all the 9 mosfets, 6 as pull down, and on upper high side mosfets as pullup resistors.

    How does the shoot-through happens though? Is it reversible? I think thats what is happening in mine. But only high side IRF4905s are getting damaged. And are always allowing current then onwards irrespective of the gate state.
    Tried disconnecting the arduino, in case I havent programmed it correctly, still doesnt work. Removed the gate input, left them pulled up (as P channel) and are still allowing current through.
     
  6. Sufi Rider

    Thread Starter New Member

    Apr 8, 2016
    6
    0
    Sorry, misunderstood your point, Nope, I have set the pins to Output.
     
  7. Sufi Rider

    Thread Starter New Member

    Apr 8, 2016
    6
    0
    Ok.. One more thing, after reading about shoot through, i think the problem might be because i didn't have delay in my Arduino code.
    Can that be the case?
     
  8. Sufi Rider

    Thread Starter New Member

    Apr 8, 2016
    6
    0
    Again Blew all the new IRF540s

    Was using this circuit-
    http://4.bp.blogspot.com/-0oqvn95WCf8/UPvndlg4kfI/AAAAAAAAAZw/pz0uShYp3qw/s1600/IR2110+-+2.png

    Dont know whats wrong.
    Bellow is the arduino code used.

    Code (C):
    1.  
    2. int HallState1; //Variables for the three hall sensors (3,2,1)
    3. int HallState2;
    4. int HallState3;
    5. int HallVal = 1; //binary value of all 3 hall sensors
    6.  
    7. int mSpeed = 0; //speed level of the motor
    8. int bSpeed = 0; //braking level
    9. int throttle = 0; //this variable is used with analog in to measure the position of the throttle potentiometer
    10. void setup() {
    11.   pinMode(2,INPUT);    // Hall 1
    12.   pinMode(4,INPUT);    // Hall 2
    13.   pinMode(7,INPUT);    // Hall 3
    14.  
    15.   pinMode(3,OUTPUT);   // IN 1
    16.   pinMode(5,OUTPUT);   // IN 2
    17.   pinMode(6,OUTPUT);   // IN 3  
    18.   pinMode(9,OUTPUT);   // EN 1
    19.   pinMode(10,OUTPUT);  // EN 2
    20.   pinMode(11,OUTPUT);  //  EN 3  // put your setup code here, to run once:
    21.  
    22. }
    23.  
    24. void loop() {
    25.   throttle = analogRead(0); //value of the throttle potentiometer
    26.   mSpeed = map(throttle, 512, 1023, 0, 255); //motoring is mapped to the top half of potentiometer
    27.   bSpeed = map(throttle, 0, 511, 255, 0);    // regenerative braking on bottom half of pot
    28.   //mSpeed = 100; //used for debugging
    29.  
    30.   HallState1 = digitalRead(2);  // read input value from Hall 1
    31.   HallState2  = digitalRead(4);  // read input value from Hall 2
    32.   HallState3  = digitalRead(7);  // read input value from Hall 3 // put your main code here, to run repeatedly:
    33.  
    34.   if (throttle > 511){
    35.     if (HallState1 == 1 && HallState2 == 0 && HallState3 == 0) {
    36.        analogWrite(9,0);
    37.        analogWrite(10,0);
    38.        analogWrite(11,0);
    39.        analogWrite(3,0);
    40.        analogWrite(5,0);
    41.        analogWrite(6,0);
    42.      
    43.        analogWrite(9,0);
    44.        analogWrite(10,mSpeed);
    45.        analogWrite(11,0);
    46.        analogWrite(3,255);
    47.        analogWrite(5,0);
    48.        analogWrite(6,0);
    49.     }
    50.     else if (HallState1 == 1 && HallState2 == 0 && HallState3 == 1) {
    51.        analogWrite(9,0);
    52.        analogWrite(10,0);
    53.        analogWrite(11,0);
    54.        analogWrite(3,0);
    55.        analogWrite(5,0);
    56.        analogWrite(6,0);
    57.      
    58.        analogWrite(9,0);
    59.        analogWrite(10,mSpeed);
    60.        analogWrite(11,0);
    61.        analogWrite(3,0);
    62.        analogWrite(5,0);
    63.        analogWrite(6,255);
    64.     }
    65.     else if (HallState1 == 0 && HallState2 == 0 && HallState3 == 1) {
    66.        analogWrite(9,0);
    67.        analogWrite(10,0);
    68.        analogWrite(11,0);
    69.        analogWrite(3,0);
    70.        analogWrite(5,0);
    71.        analogWrite(6,0);
    72.      
    73.        analogWrite(9,mSpeed);
    74.        analogWrite(10,0);
    75.        analogWrite(11,0);
    76.        analogWrite(3,0);
    77.        analogWrite(5,0);
    78.        analogWrite(6,255);
    79.     }
    80.     else if (HallState1 == 0 && HallState2 == 1 && HallState3 == 1) {
    81.        analogWrite(9,0);
    82.        analogWrite(10,0);
    83.        analogWrite(11,0);
    84.        analogWrite(3,0);
    85.        analogWrite(5,0);
    86.        analogWrite(6,0);
    87.      
    88.        analogWrite(9,mSpeed);
    89.        analogWrite(10,0);
    90.        analogWrite(11,0);
    91.        analogWrite(3,0);
    92.        analogWrite(5,255);
    93.        analogWrite(6,0);
    94.     }
    95.     else if (HallState1 == 0 && HallState2 == 1 && HallState3 == 0) {
    96.        analogWrite(9,0);
    97.        analogWrite(10,0);
    98.        analogWrite(11,0);
    99.        analogWrite(3,0);
    100.        analogWrite(5,0);
    101.        analogWrite(6,0);
    102.      
    103.        analogWrite(9,0);
    104.        analogWrite(10,0);
    105.        analogWrite(11,mSpeed);
    106.        analogWrite(3,0);
    107.        analogWrite(5,255);
    108.        analogWrite(6,0);
    109.     }
    110.     else if (HallState1 == 1 && HallState2 == 1 && HallState3 == 0) {
    111.        analogWrite(9,0);
    112.        analogWrite(10,0);
    113.        analogWrite(11,0);
    114.        analogWrite(3,0);
    115.        analogWrite(5,0);
    116.        analogWrite(6,0);
    117.      
    118.        analogWrite(9,0);
    119.        analogWrite(10,0);
    120.        analogWrite(11,mSpeed);
    121.        analogWrite(3,255);
    122.        analogWrite(5,0);
    123.        analogWrite(6,0);
    124.     }
    125.   }
    126.   else {
    127.     if (HallState1 == 1 && HallState2 == 0 && HallState3 == 0) {
    128.        analogWrite(9,0);
    129.        analogWrite(10,0);
    130.        analogWrite(11,0);
    131.        analogWrite(3,0);
    132.        analogWrite(5,0);
    133.        analogWrite(6,0);
    134.      
    135.        analogWrite(9,0);
    136.        analogWrite(10,0);
    137.        analogWrite(11,0);
    138.        analogWrite(3,bSpeed);
    139.        analogWrite(5,0);
    140.        analogWrite(6,0);
    141.     }
    142.     else if (HallState1 == 1 && HallState2 == 0 && HallState3 == 1) {
    143.        analogWrite(9,0);
    144.        analogWrite(10,0);
    145.        analogWrite(11,0);
    146.        analogWrite(3,0);
    147.        analogWrite(5,0);
    148.        analogWrite(6,0);
    149.      
    150.        analogWrite(9,0);
    151.        analogWrite(10,0);
    152.        analogWrite(11,0);
    153.        analogWrite(3,0);
    154.        analogWrite(5,0);
    155.        analogWrite(6,bSpeed);
    156.     }
    157.     else if (HallState1 == 0 && HallState2 == 0 && HallState3 == 1) {
    158.        analogWrite(9,0);
    159.        analogWrite(10,0);
    160.        analogWrite(11,0);
    161.        analogWrite(3,0);
    162.        analogWrite(5,0);
    163.        analogWrite(6,0);
    164.      
    165.        analogWrite(9,0);
    166.        analogWrite(10,0);
    167.        analogWrite(11,0);
    168.        analogWrite(3,0);
    169.        analogWrite(5,0);
    170.        analogWrite(6,bSpeed);
    171.     }
    172.     else if (HallState1 == 0 && HallState2 == 1 && HallState3 == 1) {
    173.        analogWrite(9,0);
    174.        analogWrite(10,0);
    175.        analogWrite(11,0);
    176.        analogWrite(3,0);
    177.        analogWrite(5,0);
    178.        analogWrite(6,0);
    179.      
    180.        analogWrite(9,0);
    181.        analogWrite(10,0);
    182.        analogWrite(11,0);
    183.        analogWrite(3,0);
    184.        analogWrite(5,bSpeed);
    185.        analogWrite(6,0);
    186.     }
    187.     else if (HallState1 == 0 && HallState2 == 1 && HallState3 == 0) {
    188.        analogWrite(9,0);
    189.        analogWrite(10,0);
    190.        analogWrite(11,0);
    191.        analogWrite(3,0);
    192.        analogWrite(5,0);
    193.        analogWrite(6,0);
    194.      
    195.        analogWrite(9,0);
    196.        analogWrite(10,0);
    197.        analogWrite(11,0);
    198.        analogWrite(3,0);
    199.        analogWrite(5,bSpeed);
    200.        analogWrite(6,0);
    201.     }
    202.     else if (HallState1 == 1 && HallState2 == 1 && HallState3 == 0) {
    203.        analogWrite(9,0);
    204.        analogWrite(10,0);
    205.        analogWrite(11,0);
    206.        analogWrite(3,0);
    207.        analogWrite(5,0);
    208.        analogWrite(6,0);
    209.      
    210.        analogWrite(9,0);
    211.        analogWrite(10,0);
    212.        analogWrite(11,0);
    213.        analogWrite(3,bSpeed);
    214.        analogWrite(5,0);
    215.        analogWrite(6,0);
    216.     }
    217.   }
    218. }
    219.  
    Moderators note: Please use code tags for pieces of code
     
    Last edited by a moderator: Apr 9, 2016
  9. wayneh

    Expert

    Sep 9, 2010
    12,144
    3,054
    I thought you were blowing only the high side MOSFETs? Is this something new?

    Maybe a photo is in order, to get another set of eyes on it. A pinout mistake is still possible.
     
Loading...