|
I'm sorry Joan ...
But I think you made a mistake.
Of course ... you could use allways the same accelaration - but if you for example change the speed from one movement to the other then time you need for this change must be different because you only have to work with the delta-Speed (the difference between the actual speed and this one you want to have next). So ... the way for this change must also be different. ...
I'm not sure if you took the right values for the calculation ...
...
|
|
|
|
|
Don't be sorry...
I'm sure I've made plenty of them.
Tomorrow I'll continue with the testing at the customer workshop.
I'll let you know if I get something working or not...
Thank you again!
modified 8-Feb-17 15:07pm.
|
|
|
|
|
I'm awaiting your feedback ...
|
|
|
|
|
I think I understand now my problem...
When the da + df are bigger than the total distance...
I'm doing a proportional reduction which approximates the vmax to it's desired/needed value.
The problem here I think is that part: I don't have to make a proportional reduction, I do need to find the position in which the acceleration movement and the deceleration movement are coincident once I will have this position then I should check the speed any of the movements has in that position. And that one should be vmax.
Now the issue is doing that, but tonight I'll try to get it.
I could use 0 as the starting position for the acceleration and xf as the starting position for the deceleration.
Both accelerations are the same (different signs).
...
Let's see...
|
|
|
|
|
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.
|
|
|
|