hexagon logo

Motor torque requirements

Hello,
 
I am trying to estimate the torqie required to drive a lead screw. To do this, so far I 've been using a motion instead of the torque and then viewing the required torque to produce said motino throught the ppt. This doesn't seem to be the correct way though as the results I am getting seem completely off.
 
Is there a more standard way to do this?
 
Thanks,
 
Josef K.
  • There's nothing inherently wrong with your method. However, if you have issues with the following, those could affect the torques you are seeing:
    1. Redundant constraints
    2. Friction is unrealistic
    3. Some other modeling issue.
  • That would be the way I would do it. You may want to check your model.
    Any unwanted damping/stiffness? Are you using the correct units for such elements?
     
    Regards
    Thomas
  • My model has 4 sliding joints, 4 screw joints and 3 couplers. These are used to model a telescopic system. My main concern are the screw joints and the couplers as I could not find any parameters related to their forces. Might it be a problem of the fact that I am using a motion along with idealized joints, where the one results in the increase of the force of the other?
     
    Thanks for both your answers, its good to know I'm on the right path at least.
     
    Josef
  • As Chris says, friction and flexibility can produce very high, spiky torques in a motion. I usually don't use this method, more than to get a first estimate. A motion is a kinematic constraint and will produce whatever torque is required, with no limit, to produce the motion you ask for.
    Do your run, plot the torque (from a measure or request in the correct coordinates), then filter it to get an average value.
    Now remove the motion and create a SForce torque driven by a PID controller instead. You can get initial parameters from the filtered curve from the motion.
  • I see, thanks.
     
    If I am not mistaken to use a PID controller I need to cosimulate with simulink, is that correct?
  • No, why would you need to do that?
    A PID controller is a very simple element combined by a variable and two differential equations.
    In Adams/View, look under Elements -> Controls Toolkit and there is a PID element.
    Or you can create it yourself.
    It's a little tricky with rotations due to flip at +/-180 deg. It might be better to control rotational velocity instead of angle.
    Create a variable with the function of the velocity profile you want, for example spinning up from 0 to 30 deg/s over one second. q=step(time,0,0,1,30d)
    Create another variable that measures the angular velocity of the screw: x=WZ(Mi,Mj,Mj)
    Error is now: e=VARVAL(x)-VARVAL(q)
    Now you can create a P-controller: P*VARVAL(e)
    Create a diff-equation to integrate to angle: x1_dot = dx1/dt = VARVAL(e)
    Now you have a PI-controller: P*VARVAL(e)+I*DIF(x1_dot)
    That is probably enough to get you going and should be able to produce a smooth curve. Tune P and I to have sufficient small error in angular velocity.
    For the D-part, you can do an approximation and just use WDTZ(Mi,Mj,Mj), but that is really only valid for steady state target.
    To create a real differential part, create an implicit differential equation:
    0 = VARVAL(e) - DIF(x2)
    This is a weird construct, it basically says that the integrated value of the differential equation x2 is equal to the error. From this follows that the derivative of x2 must be equal to the derivative of x.
    Now you have the final PID controller:
    F = P*VARVAL(e) + I*DIF(x1_dot) + D*DIF1(x2)
     
    So no co-simulation is necessary.
     
     
     
  • Thanks for your tips!
     
    I tried employing this in two ways:
     
    1) Created two inputs, one for the desired angular velocity (e.g. 3600d/s) and one for the actual (measre of the object's angular velocity) and used their difference as input to a gain block which was then used as input to a Torque. I tried various values for the gain, ranging from 100 to 1e10 (I know its unrealistic as gain but I was just testing the limits).
     
    2) Created two inputs, one for the desired angular velocity (e.g. 3600d) and one for the actual (measre of the object's angular velocity) and used their difference as input to a PID controller block which was then used as input to a Torque. Here I adjusted the P, I and D gains several times which somehow always lead to the same result.
     
    Both ways result in a motion which for some reason never surpasses the 2000ds, regardless of the values I use in the parameters. I used a relatively small step (1e-3) so as not to have too many numerical errors.
     
    If I understand what you told me correctly, then The difference between the actual and desired values should lead to an increase in torque, until the difference approaches zero. However this doesn't seem to be the case. If anything, the difference actually becomes larger as time moves on.
     
    Did I perhaps not understand something you told me correctly?
     
    Thanks,
     
    Josef
  • The P-part will result in a constant error. It is basically a "spring" with stiffness P, the force from it is proportional to the error P*error. The error can never be zero in steady-state with only the P-part.
    To eat up the constant error, you need an I-part to your controller. This will integrate the error and add more and more force the longer time goes on if an error remains.
    The D-part is the "damper", it reacts to sudden changes. Be very careful with this. It is easy to make the system unstable.
     
    But you should have seen wild fluctuations with that high P gain.
    I can only draw the conclusion that
    1. You did not deactivate the motion, it is still in there.
    2. You have a sign error in at least one of the terms. This is one reason why I like to build my own PID instead of using the PID block, it makes it easier for me to determine what is going on with each individual part.
     
    The classic way to do an initial tuning of a PID controller is to follow Ziegler-Nichols rule. Note that method is in some cases based on a slightly different formulation of the PID controller.
     
    1. Start with setting I=D=0.
    2. Increase P until the system oscillates with a constant amplitude (limit stable). This P value will be called Ku in articles. The time period of the oscillations is called Tu.
    3. Select P=Kp, I=Ki, D=Kd from the article linked above.
     
     
  • Thank you! You've been of great assistance as always. I will look further into it.
  • Hello,
     
    I 've found what the error was. As it turns out, the problem was that I was requesting the value in degrees (i.e. q = 3160d) which while was what I wanted, the D seemed to cause a problem. When I rewrote q as q = step(time,0,0,2,3160) the model worked fine.
     
    I went with your method in the end and constructed my own PI controller. I do still have some issues however. There are still some "spikes" in the torque in order to maintain a constant angular velocity. I assume that this can be dealt with by using a D part to formulate a complete PID controller. However, when I tried creating the implicit differenital equation you suggested (VARVAL(e) - DIF(x2)) I get errors. I assume it has something to do with x2. Must I define x2 in some manner before inputting it to the implicit equation?
     
    Thanks,
     
    Josef K.