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.

InstaSPIN, Odd Sensor Configuration

Other Parts Discussed in Thread: MOTORWARE

I have an unusual mechanical configuration and I’m hoping to get some direction before I go forward and run right off the cliff.

 

We have a BLDC motor connected to a crankshaft and a linear bearing. The linear part has a linear encoder on it.

 

We want to run the device in two modes:

  1. Constant linear velocity. We want to rotate the BLDC motor approximately at 240 RPM, but vary the target speed signal so that the linear part moves linear in velocity as much as possible. (Of course it will be nonlinear at both extreme ends where the crankshaft is causing the linear part to slow down, stop and reverse motion. That’s not a problem.)
  2. Position control mode. We want to move the linear part to a location and have it stay there and then move it to another location.

 

We don’t want to have to have both a linear and a rotary encoder, so I’m thinking about using sensorless FOC to estimate the rotor position, and using the linear encoder to generate an error-in-position value for the position control loop.

 

Things are going to get crazy if I try to use the linear encoder to estimate rotor position since the linear values increase for half the crank rotation and then decrease for the second half of the crank rotation. I’d have to really dig into the ENC module and especially ENC_calcElecAngle() to somehow use the FOC-calculated STPOSCONV_getPosition_mrev() and use both the estimated rotor angle and the linear encoder value to back-calculate a new rotor angle for the rest of the control loop.

  • And a bit more information...

     

    It’s not clear to me how to close the loop for position control yet.

     

    I’ll have the QEP accumulating incremental encoder counts from the linear encoder, and I can build a PD controller from that, but I then need to drive an error signal into the motor torque loop to correct that error in position.

    I’m not sure how FAST can get an accurate estimate of rotor position at zero velocity in sensor less mode.

    I figured I would need to help the system estimate rotor position by doing some inverse kinematics on the linear position sensor and feed that to the torque control loop.

     

    I think I need to do some more studying today to get a better understanding of the whole system.

  • Chris Lee said:
    I’m not sure how FAST can get an accurate estimate of rotor position at zero velocity in sensor less mode

    It can not. Today you need to use an Encoder or Resolver for position control.  We also have some sensorless techniques (high frequency injection) that can track position a zero and low speed, but 1) you need a specially designed motor with high saliency and 2) we have not demonstrated closed loop position control with this technique.  It can certainly be done if 1) is satisfied and there is a Japanese Servo Drive manufacturer who sells this solution today.

     

    I've sent this over to LineStream. They are the experts on position control and have provided the SpinTAC Suite and InstaSPIN-MOTION examples in MotorWare.

     

  • Chris,

    Pretty interesting system you are constructing.  How much slop is allowable in the position of the linear stage?  In order to get good position control of the motor we need to have a good relationship between the motor position and the encoder position.  Would it be possible to only have a rotary encoder and use kinematics to determine the position of the linear stage?  

    In your example mode 1 would be doable via  alinear encoder and the sensorless estimator.  Mode 2 presents a lot of challenges sensorless.  It might be possible to do with the linear encoder but there would need to be a very good relationship between a reading on the linear encoder and the actual motor position.  

  • Thanks everyone. It’s too bad, but that’s the answer we were expecting.

     

    I’ll describe the system we have and the positioning requirements and see if the TI BLDC solution is appropriate for this application.

     

    Imagine a BLDC motor connected to a crankshaft and through a connecting rod to a linear motion component.

                    Rotary to linear diagram

     

    We really want to position the linear component to a setpoint at 50 microns +/- 25 microns which using the inverse kinematics of the crank and rod mean we need to position the rotor angle at 0.001 radian +/- 0.0005 radian.

     

    I can imagine a system where the BLDC motor is in torque mode like InstaSPIN-FOC Lab4 and I have a PD control loop with inputs of (the desired linear position and the actual linear position) and with an output of gMotorVars.IqRef_A which will generate a torque to rotate the motor in the direction to reduce the linear position error.

     

    However, I’m not sure I can stand to have gMotorVars.Flag_enableForceAngle set to a 1 so the motor can start up from zero velocity. I think this will create significant “bumps” in my position when leaving (zero-torque/zero-velocity).

    I’m also not sure how the motor will respond when gMotorVars.IqRef_A makes the transition from a value of zero (when we are at the target setpoint) to nonzero when we are disturbed off the desired setpoint.

     

    We can close the loop twice, once with a rotary encoder on the BLDC motor (to close the loop on rotor position) and again with a linear encoder on the load, but of course, that’s at least twice the cost and complexity.

     

    We have been thinking about using the linear encoder only, and inverse kinematics to generate a synthetic rotor position, but the transition from (fully extended) to (starting to retract) gets complicated since a change in rotor direction right at the maximum limit of linear position will be indistinguishable from a continuous rotor motion in the same direction. I’m not sure I need to worry about this, but it makes me a little nervous.

     

    If you could help me understand the transition from zero-velocity/zero-torque to small-torque when in torque control mode, we can make some progress.

     

    I have a test bench setup with a linear encoder, and we are receiving a BLDC dual-shaft motor and encoder on Tuesday, so I can perform experiments with different configurations quickly.

     

    Thanks for the help. We love the lab notebook and were able to make significant progress within days of getting the devkit. We just need to get over the architecture challenge of this configuration to make more progress.

  • you will need a very, very precise sensor to achieve the control you desire. Don't even think about doing this sensorlessly.  I also suspect you will make your job much easier if you can gear your motor, so a larger position change from your rotor can cause a much smaller position change at the linear stage.