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.

Help selecting motor control microcontroller

Other Parts Discussed in Thread: LAUNCHXL-F280049C

Hello,

I need to drive 3x voicecoils (small ones) with low force requirements.  I know this is vague, but I'm just trying to get an idea of what direction to go regarding TI's motor control MCU products as I am unfamiliar.  My understanding is that voice coils and servos generally use a "cascade" or nested PI control loop using position, velocity and current terms.  I've attached a picture showing this.  

Anyways, to drive three separate relatively small voice coils where would I look for a good family of microcontrollers?

  • yes, C2000 would be a good solution and yes, what you show is generally what is done for servo control

    I would recommend LAUNCHXL-F280049C as a starting point

  • How would you recommend estimating whether that part (F280049C) has enough bandwidth to run a loop.  

    The loop I'm trying to run is shown above.  I will have 3 nested loops with the fastest loop (current loop) running at 20k, the velocity loop at 2k and the position loop at 1k.  I will also have to use the ADCs on the MCU to read the current values for three voice coil phases (just inductors).  So from the CPUs perspective it has to run one of the cascaded servo loops, the ADC to read current readings from the winding at around 200k (10x the current loop) and receive/send simple asynchronous serial messages.  I think the messaging is fairly irrelevant, but I wanted to mention it for completeness.  Say 5 bytes every 10mS as an example.  I feel like this part would have no problem, but I have only done control systems with FPGAs so I'm a little unsure how to get confidence in whether this part will have sufficient bandwidth.

    I assumed 100Mhz/20kHz (max high speed loop rate) which yields ~5000 instructions.  It looks like most are 1:1 and I think I read in the ALU instruction set (math co-processor) that a multiply was 3 clocks.  Am I on the right track so far?  What other ways of looking/evaluating this would you recommend?

  • suggest you review

    http://www.ti.com/lit/spraco3 

    this is the latest release and can also be found in www.ti.com/tool/c2000ware-motorcontrol-sdk

  • Chris,

    I hope you don't mind, but is it possible for you to explain the purpose of the current loop in the above servo loop diagram?  I am trying to control a voice coil and am seeing that topology a lot.  Can that topology be used to hold position and if so what is the purpose of the current loop?

  • a change in position requires a movement of velocity.

    a well controlled movement of velocity requires a controlled current/torque based on the load

    remember that the PWM generation is effectively putting a voltage duty cycle onto the inverter. what you can measure from the inverter is voltage and or current. 

  • I have an acceleration spec for this voice coil.  This seems to be a spec controlled by the current loop (correct me if I'm wrong).  Is there a benefit to using the current loop instead of taking the derivative (difference between two velocity samples) using the encoder feedback?  This would then eliminate the need for a data converter (ADC) reading the current values from the windings.

  • I really can't speak to the use in a voice coil.

    if measuring the current isn't important to your application it's reasonable to just use the outer loops

  • Fair enough.

    Is the point of the current loop to handle step loads or load changes? Or would the current increase command have to com down from position-velocity since the error term is ultimately derived from velocity?

    Also, where do people put logic in to limit the current so the acceleration doesn't get too high?

  • acceleration is typically a limit of the motion engine, which will either feed the position or bypass and feed the velocity directly.

    the current loop is added to give tighter and more efficient control and will typically run at a much higher rate than the velocity or position control

    but there are applications which don't require this precision/efficiency and may just run with a slower outer loop, sometimes without feedback at all.  most stepper control and much induction motor control is open loop (no feedback).

  • Sorry to be bothering you with all these questions, but it is helpful to hear thoughts from someone educated in this area.

    1. Conceptually it looks like the acceleration will accumulate quite a large error as long as you are moving over a large distance.  When you say "acceleration is a limit of the motion engine" do you mean a limit of the mechanical motion system?  Like the motor or voice coil or servo etc...?  

    2. Also, with the current loop running the highest so you usually put a limit on that so the acceleration can't get too big?  For example, if you command the system to move a large distance/displacement the position error will be large, initially the velocity error will be large and as these feed into the current loop that error term will be large even ass the mechanical system begins to accelerate.  With a fast loop this error term could get quite large and command a quite large PWM value.  If you are moving a large distance the velocity and current error terms could become quite large and cause the system to accelerate and move (velocity wise) too fast.  How do you generally limit this since each loop is based on an error term that flows down from the previous one.

    3. For induction motors, don't you want to know current so you know torque?

    I see that as current and velocity increase the error term gets smaller, but until position is closed it will still be a positive number accumulating.  I hope that isn't too convoluted of a question.  

  • 1. for a servo system typically there is an outer motion control system (either on the chip or a separate device like a PLC).  The motion system is building a set of position/velocity commands based on other limits: acceleration, jerk, motion type/path, coordination of other axis, etc

    2. acceleration would be limited by the velocity commands (by the position commands or upper level motion control system) that are being supplied as an input reference. torque will be generated based on the error of the velocity controller. More error, more torque.

    3. if you care about torque, of course.  many induction motor applications run open loop and only care about freqeuncy

  • Thank you for the help Chris!  This has been very enlightening!