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.

LAUNCHXL-F280049C: LAUNCHXL-F280049C

Part Number: LAUNCHXL-F280049C
Other Parts Discussed in Thread: BOOSTXL-DRV8320RS, C2000WARE

Hi:

I am using:
LAUNCHXL-F280049C
BOOSTXL-DRV8320RS
CCS10.1.0.00010
C2000Ware_MotorControl_SDK_3_00_01_00
with a small BLDC motor.

Lab is05 worked to id and spin my motor, and changing motorVars.speedRef_Hz in the
expressions watch window controls the speed as expected.

However, when I try lab is06, the motor fails to start spinning.
If I grab the motor and twist the shaft by hand, it then spins and
torque control by setting IdqSet_A.value[1] seems to work.
But if I then set IdqSet_A.value[1] to 0.0, or any value low enough for the motor to stop,
it will not spin unless I again start it by hand.

My questions:

1) How can I be sure my motor can spin from stopped using torque control?

2) Why should eliminating the outer speed controller change the startup
behavior of the motor?

3) Do I need to change some other code, or perhaps ramp IdqSet_A.value[1]
to get it to start? I am guessing ramping IdqSet_A.value[1] is (part of?)
what the speed controller does in lab is05.

4) What exactly is IdqSet_A.value and where is this documented?
Is is amps? Percent of some max torque? What about the high byte IdqSet_A.value[0]?
The comment in is06_torque_control.c only says:
IdqSet_A.value[1] = 1.0; // Need to change this value based on motor
which is not informative.

Thanks.

  • 1. Enable the motor by setting the "motorVars.flagRunIdentAndOnLine" to "true", and set the right Iq reference value.

    2. Only in is06_torque_control that shows torque control. All other subsequent labs enable the speed loop during startup. 

    3. Yes, it's better to add a ramp control for setting the torque current.

    4. That depends on the motor/system to overcome friction and load during the startup, not a unique value for all motors/systems.  IdqSet_A.value[0] is for setting the d-axis current that is set to zero for PMSM.

  • 1)  Yes, I set motorVars.flagRunIdentAndOnLine to 1.  That is clearly the case because the motor is trying to turn, and does turn once the shaft is twisted by hand to start spinning.   What do you mean by the "right" Iq reference value?   I have tried many different values for IdqSet_A.value[1] in the range 0.0 to 1.0.   Once the motor is spinning, motor torque does increase with this value.   But none of these values will cause the motor to start spinning.

    2) I realize that only is06 demonstrates torque control.  (But why does TI leave all the code for speed control in the is06 example?  That is confusing and should be removed so the code for is06 is a minimal example of torque control).

    3) I tried ramping 

  • 1. I did set motorVars.flagRunIdentAndOnLine to true. As mentioned, the motor is trying to spin,
    and will spin if the shaft is twisted by hand to start it spinning. And I do not know what
    you mean by the "right" reference value. I initially tried IdqSet_A.value[1] = 1.0
    as in the example. I have tried a very large number of values from 0.0 to 1.0.
    None of these spins the motor from standstill. All of them bigger than about 0.3 will
    spin the motor if the shaft is twisted by hand to start it spinning. And once spinning,
    torque does increase with the IdqSet_A.value[1] setting.

    2. I am aware of that. (But why does TI leave a lot of speed-related code in is06, which could
    be minimized to remove all speed related code and be less confusing?)

    3. I tried that. I started with IdqSet_A.value[1] = 0.0 and then increased it by 0.0001 each
    millisecond, so it takes 10 sec to ramp IdqSet_A.value[1] from 0.0 to 1.0.
    Again, the motor DOES NOT SPIN from standstill. Although, if the motor shaft is started by
    hand, the motor does start and accelerates as the torque setting increases.

    4. My motor has no load, just friction. I note that as IdqSet_A.value[1] increases,
    it is harder to start by hand, but does spin faster once started.

    Why can is05 speed control manage to start the motor spinning, whereas is06 even with a
    very slow ramp of current does not?

  • Can you please offer further information?

    I would like to eliminate the speed controller and only use the torque control PI.

    But this fails to start my identified motor, even with a very slow increase of current.

  • Only is05_motor_id supports motor identification that must use both speed and current controllers. All of the other labs don't support motor identification.

    As mentioned in the lab guide, the is06 is the torque control that needs setting the right current for overcoming the friction for a startup. You can remove the speed controller in this lab.

    BTW, the instaSPIN on F28004x uses the SI format, so the range of the target current is not from 0.0~1.0.

     

  • Yes, thank you.

    While waiting for your reply I tried increasing IdqSet_A.value[1] to a value >1, and by the time it reached about 2.0 my motor started spinning.   So I understand now the units for IdqSet_A.value[1] are amps.

    It seems I cannot fully remove the speed controller from this lab is06.   For my application, I need to be able to control torque in both clockwise and counterclockwise rotation.  And it seems I need to set both IdqSet_A.value[1] and motorVars.speedRef_Hz to negative values for my motors to spin counterclockwise.   

    When only controlling torque as in lab is06, when there is no speed control at all, why does motorVars.speedRef_Hz need to be set (negative)?   It seems specifying  IdqSet_A.value[1] < 0 should be enough?  Why is a speed reference necessary for torque (current) control?

    Thank you.

  • FAST library needs the reference speed to know the target rotation direction, it's necessary to set the correct sign of the reference speed according to the torque current.