Problem in Building the project of DRV8312 Stellaris kit

Hi,

I have the Stellaris DK-LM3S-DRV8312 Kit and I am building it. The problem is when I reach level 7, i got a probelm which is the motor starts spinning then the fault LED goes on!! I read in the forum someone asked the same question but with no answer. Please Help!

Thanks,

Ahmad

  • In reply to ChrisClearman:

    Chris,

    I am using the same power supply too with 24V and 5.5A. I am driving the motor at 1500 RPM = 0.5 PU. I am thinking of a solution which is when the speed ref is zero, i shut down the PI controller and turn on the three PWM signals with no frequency so the rotor will stay fixed, is that applicable?? any ideas??

    Thanks,

    Ahmed

  • In reply to Ahmed Yousif:

    what are you trying to do, just bring the motor to a stop, or to a coast?

    this is with the kit motor (NEMA17), and going from 0.5 PU speed to 0 PU speed causes a fault when it gets to 0?

    I'll have to try this out....certainly isn't normal behavior

    did you follow the InstaSPIN-BLDC lab document to tune the motor?

  • In reply to ChrisClearman:

    Hi Chris,

    I am building a Delta Robot for my graduation project which is let's say a robotic arm with a small payload. what I want is that when the arm reaches certain position, the motor stops and stay fixed - I don't know if it is called coast - but not simply turn off the motor because this will cause the arm to fall down from the load exerted on it.

    My objective is not to use an encoder to stop the motor, I need the encoder only to get position.

    I followed the document step by step. You can't see this behavior with Duty Cycle mode but you will see it in Velocity or Cascade Mode.

    I managed yesterday to stop the motor by turning on  all the PWMs but of course the motor's temperature will rise.

    I hope this will help you understanding my problem.

    Thanks,

    Ahmed

  • In reply to Ahmed Yousif:

    just having an encoder won't make the motor stop and provide torque against the weight for free.

    what it can allow you to do is allow you to provide the right / minimum amount of torque to try to hold that position.

    with a sensorless solution (self sensored based on currents/voltages) at some point the rotor position estimation gives out if the signals are small (no Bemf, low Bemf of motor, low currents).

    to really try to do what you would like to do, you would have to consider some very advanced zero speed rotor position estimation techniques.  there are several including high frequency injection, PWM pulsing, and some saliency techniques.  

    I think that is a bit out of your range for a class project, so I'd recommend a rotor sensor if you need positional  holding torque.

  • In reply to ChrisClearman:

    Chris,

    after trying to solve the problem, I found the solution for that and wrote the code concerns. When the SpeedRef = _IQ(0.0), simply sync the PWMs by

    GPIOPinWrite(RESETA_BASE, RESETA_PIN, RESETA_PIN);
    GPIOPinWrite(RESETB_BASE, RESETB_PIN, RESETB_PIN);
    GPIOPinWrite(RESETC_BASE, RESETC_PIN, RESETC_PIN);

    // Synchronize the three PWMs so they work at the same time to stop the motor
    PWMSyncUpdate(PWM_BASE, PWM_GEN_0_BIT & PWM_GEN_1_BIT & PWM_GEN_2_BIT);
    
    
    This will cause the motor to hold its position.
    Another thing is to reinitialize the variables if the previous speed ref was zero and the new speed ref is not zero.
    I have tried this and it is working perfectly.
    
    
    Thank you for your help.
    Ahmed