|
I think you are right.
V-max is the speed you want to get - but this speed you couldn't get because of the acceleration-decelaration-triangles.
What I have done is : I calculated the possible speed (V-x) respectively the resulting changes.
But Joan ... for me this is a very interesting discussion.
Also : thanks a lot for the votings you gave to me ...
|
|
|
|
|
You are welcome!
Any idea on how to solve that problem?
This remembers me the school days when we had to find the intersection of two vectors...
Believe it or not I enjoyed that a lot, but I can't simply remember how it works
|
|
|
|
|
Hi Joan,
Joan M wrote: Any idea on how to solve that problem?
Joan M wrote: This remembers me the school days when we had to find the intersection of two vectors...
I think, both quotes belong together ...
And ... I believe you because I also searched for the same : how to get the point, where both vector-lines crosses.
My Approach is that this consists of 2 right-angled triangles. Both angles have the same opposite-side, so that would be the common part of the equation.
But if I thought a Moment that this is the Solution then I must say : mistaken - but I promise that I will think about it.
I come back if I know how to get further ...
|
|
|
|
|
An idea :
Assuming that you have the same Acceleration- and Decelaration-Value your Acceleration-Distance (if you could not reach v-max) must be half of the distance between x0 and x1.
What we can do is to calculate the distance for Acceleration. At the end of this we have v-max.
Now we can use the rule-of-3 (I hope this is the right name for that Operation) to calculate the Speed v-x because there is a direct relation between da : s/2 and v-max : v-x
Could you follow me (and check if you could work with that) ?
see you
Ralf
|
|
|
|
|
This already works, only if the v0 is equal vf.
If both speeds are different (we start from a moving situation and end stopped) then this approach fails.
|
|
|
|
|
I can't understand because in this case (i wrote it allready somewhere before) you have to calculate with the difference between both Speeds.
As long as the angle (accelaration/decelaration) is not different this calculation MUST match ...
|
|
|
|
|
Then I have not understood you before, and I don't know what you exactly meant with the speed difference...
|
|
|
|
|
Excuse me ...
The Speed-difference is the difference between the Speed with which you actually drive (between X0 and X1) and the Speed you wish to drive (between X1 and X2).
But for me it is the same as if you reduce to Zero - then the difference would be the complete Speed - otherwise it is the delta-Speed.
Could you follow me now ?
|
|
|
|
|
Another question for this "exercise" :
Have you realized that asynchronous Motors, driven by a frequency-controller, don't have the same turning-moment during the used frequency-range ?
That means : as lower your frequency is as lower is your turning Moment.
This would be a Problem to get the right final-Position when decelarating.
A synchronous Motor (servo-axis) is able to compensate itself (and the perhaps not correct reached final Position) - a asynchonous Motor not ...
|
|
|
|
|
Yes, at the exit of the theoretically calculated position I do have a PID that is used to get the motor to the place. And of course a minimum movement distance is also adjusted.
|
|
|
|
|
Another part which interest me :
How do you get the data out of your .Net-Application into the Motor-Controller ?
|
|
|
|
|
I'm not sending the values to the application now.
I'm just calculating in excel and then testing stress cases, all the calculations are done in the PLC and then everything works from there.
But if I would have to do it, if I would work with Beckhoff (which is the main brand I've worked with) then I would use ADS and it would be a breeze doing that...
I guess that each brand will have their methods... OPC and others, but when (like me) PC control is used then it is extremely easy to do that kind of operation.
|
|
|
|
|
I understand ...
But also the PLC should be able to do this work - either Beckhoff or Siemens (with which I work most of time) - and the calculation in ST (or with SLC when using Siemens) should be easy if once the formula and the algorithm is ready ...
|
|
|
|
|
Working now, updated the initial post if you want to see how I've done it.
Thank you for your hints...
|
|
|
|
|
Very good explained - thank you - I've bookmarked your post. Perhaps it could be also for me useful sometime in future.
In fact I enjoyd this discussion very much.
|
|
|
|
|
|
Yes, I know it very well ... but also (from another Forum where I'm very active) I knew how useful help (and also a discussion) can be.
Mostly it is not the first idea, which guides to the goal, but most often the discussion does ...
Along these lines ...
|
|
|
|
|
You should edit/Update your question with actual code and explain what is actual problem.
So that everyone can see it without digging in discussion.
Patrice
“Everything should be made as simple as possible, but no simpler.” Albert Einstein
|
|
|
|
|
Why not use some sort of cubic spline interpolation? This gives you smooth acceleration, as well as smooth velocity.
In your case, you would have "control points" (or knots) consisting of points xi through which the robot arm must pass at times ti. For three-dimensional movement, you would have a vector Xi, and a separate interpolation for each ordinate.
This gives you a useful way of describing the constraints:
- For N "control points", you have N-1 cubic functions.
- Each function is of the form f(x) = ax^3 + bx^2 +cx + d
- The 1st derivative of each function is the velocity f'(x) = 3ax^2 + 2bx + c, and it will be continuous (no abrupt velocity changes)
- The 2nd derivative of each function is the acceleration f''(x) = 6ax + 2bx, and it will be continuous (no jerks)
- f0(t0) = x0
- f0'(t0) = v0
- fN-1(tN) = xN
- fN-1'(tN) = vN
Calculating the spline is a fairly straightforward operation.
If you have an important point to make, don't try to be subtle or clever. Use a pile driver. Hit the point once. Then come back and hit it again. Then hit it a third time - a tremendous whack.
--Winston Churchill
|
|
|
|
|
Hi Daniel,
Thank you for your suggestion.
A Spline is perfect to join movements and, as you say it is a good option.
In fact I would like to have a controlled acceleration and having all the job done till now I would like to keep it. This is the last week I spend with that... if it is not working, then I'll have to switch to other methods and the spline would be an option.
Thank you for your comment!
|
|
|
|
|
Working now! thank you for your comment Daniel, I've updated the original post to explain the solution.
|
|
|
|
|
Glad I could help.
If you have an important point to make, don't try to be subtle or clever. Use a pile driver. Hit the point once. Then come back and hit it again. Then hit it a third time - a tremendous whack.
--Winston Churchill
|
|
|
|
|
Joan M wrote: I've tried to make my own which works perfectly when the values allow the motor to reach the maximum speed "plateau" but it is not working well when is not possible to achieve this speed
First calc if motor will reach plateau or not.
if not reach the plateau:
do shorter acceleration and deceleration in order to create a plateau at lower speed.
Patrice
“Everything should be made as simple as possible, but no simpler.” Albert Einstein
|
|
|
|
|
Hi ppolymorphe,
Thank you for your comment.
What you suggest changes the acceleration... I would like to change the speed and find the lowest permissible speed without changing the acceleration.
The idea is to keep the same dynamics for all the movements.
Doing what you suggest would end with a near to infinite acceleration in really short movements... reducing the speed would keep movements soft and get the same result...
But I've not been able to understand why I can't find it directly, if you take a look at the code snippet I've pasted into the thread with Ralf you will see that at the end, after a first approximation, I'm searching for a suitable speed decreasing it by one (terrible).
Thank you for your post.
Joan.
|
|
|
|
|
Joan M wrote: What you suggest changes the acceleration... I would like to change the speed and find the lowest permissible speed without changing the acceleration.
I suggest to change the acceleration duration, not the rate.
In a car, if it takes 60 secondes to accelerate from 0 to 100km/h, then plateau and decelerate.
it will take 15 secondes to reach 25km/h, 30 secondes to reach 50km/h, 45 secondes to reach 75km/h.
Patrice
“Everything should be made as simple as possible, but no simpler.” Albert Einstein
|
|
|
|