This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Is it possible to control BLDC motor if one of the hall sensor out

Hello,

Is it possible to control BLDC motor if one of the hall sensor out of three hall sensor is faulty and fault state that is either high or low is known in advanced. if yes then how? By measuring back emf it is possible but I don't have provision to measure back emf, so it is required to control  from two hall sensor feedback only.

  • You can position the missing edge using timer compare based off the past edges. Basically you may get two pulse widths corresponding to 120 deg and 240 deg. Capture the time width of 120 deg and use it in a compare reg to generate the missing 120 deg edge. This will be coarse during speed change, but this is all you can do  I suppose. We don't have any software doing this and you are on your own.

  • Does it work in the starting?
  • May not be reliable as such. May need to align/ force rotate start like in sensorless control to improve starting performance, but such as approach beats the adv of sensored control. With poor feedback, I guess this is a compromise.
  • Okay I will implement it. is there any other way?
  • May be there but we don't know.
  • So all I need to do is start the motor in open loop, Capture the timing of any one pulse available by eCAP module and generate the missing pulse by ePWM module which again given to hall sensor feedback as and when I have all three hall sensor feedback switch over to closed loop control. Okay? Please correct me If I am wrong..
  • Kishan,

    We would not like to dwelve in more details on untested ideas. Whatever I said was a suggestion, just seeding a thought. Suggest you to figure out a way from it if it makes sense. All the best.
  • In my case hall sensor C is damaged. I have inverted hall logic. Following is the sequence which is observed if Hall sensor C is always 0 and actual sequence as well.

    HallGpioAccepted Actual Seq.
    2 2
    2 6
    0 4
    1 5
    1 1
    3 3

    Accordingly I mapped the sequence. Have a look at the code inside LEVEl4. it is working and I am able to control the speed of the motor yet there are some vibration. Hope it will help to someone. Thank you.

    Uint16 u16GpioC = 0;
    rmp2.DesiredInput = DFuncDesired;
    	  RC2_MACRO(rmp2)
    #if (TWO_HALL_LOGIC1)
    
          if (2 == hall1.HallGpioAccepted) {
    
            if (u16GpioC == 0) {
                hall1.HallGpioAccepted = 2;
                u16GpioC = 1;
    
            } else {
    
                hall1.HallGpioAccepted = 6;
                u16GpioC = 0;
    
            }
          } else if (1 == hall1.HallGpioAccepted) {
    
              if (u16GpioC == 0) {
                  hall1.HallGpioAccepted = 5;
                  u16GpioC = 1;
    
              } else {
    
                  hall1.HallGpioAccepted = 1;
                  u16GpioC = 0;
    
              }
    
          } else if (0 == hall1.HallGpioAccepted) {
    
              hall1.HallGpioAccepted = 4;
    
          } else if (3 == hall1.HallGpioAccepted) {
    
              hall1.HallGpioAccepted = 3;
          }
    
    #endif
    // ------------------------------------------------------------------------------
    //    Connect inputs of the PWM_DRV module and call the PWM signal generation
    //    update macro.
    // ------------------------------------------------------------------------------