- #1
KLoux
- 176
- 1
Hello. A few of us at my company have been trying to solve this problem for a few weeks now, without success, and so now I turn to the brilliant minds of the people who frequent this forum for help :-)
We operate a centrifuge that spins between 1.4 G and 9 G. The command that we send to our motion control algorithm is a G command, so our algorithm takes the G command and computes the required speed of the arm to reach that desired G level. For steady-state, this is easy and we use the following equation:
[tex]
\omega = \sqrt{ \frac{ g }{ R } \sqrt{ G_c_m_d^2 - 1 } }
[/tex]
which is derived from
[tex]
G_a_c_t^2 = \left( \frac{ \omega^2 R }{ g } \right)^2 + 1
[/tex]
where [tex]g[/tex] is the acceleration due to gravity, [tex]R[/tex] is the arm length, and [tex]G[/tex] is the commanded or actual G level.
We are often required to follow an arbitrary G profile, however, and the arm's tangential acceleration comes into play. The new equation that describes the machine's G level is this:
[tex]
G_a_c_t^2 = \left( \frac{ \omega^2 R }{ g } \right)^2 + \left( \frac{ \alpha R }{ g } \right)^2 + 1
[/tex]
This is of course quartic in [tex]\omega[/tex] instead of quadratic, as is true when tangential acceleration is neglected. We have tried making the substitution [tex]\omega = \omega_0 + \alpha \triangle t[/tex] and solving for alpha as well as the substitution [tex]\alpha = \frac{ \omega - \omega_0 }{ \triangle t }[/tex], where [tex]\omega_0[/tex] is the arm speed calculated at the previous frame and [tex]\triangle t[/tex] is the time elapsed between frames. In both cases, we can solve the resulting quartic equation, and we get two real roots and two complex roots. Ignoring the complex roots leaves us with two choices. In case of an increasing G command, we can choose either of the remaining roots, and it gives us a satisfactory solution, where as the G command reaches a plateau, the tangential term is reduced to zero and the solution of this equation matches the solution of the simpler equation above.
The problem is in the case of a decreasing G command. There are still only two real solutions. Depending on the shape of the curve we are trying to follow, we must choose one root or the other, and sometimes it is necessary to switch between the two to avoid reaching a point where all four roots are complex. Unfortunately, while we are capable of doing this, in most cases we can even decide when to switch roots, and the magnitude of the G forces that are generated match the command exactly, the machine motion is unacceptable. For example, the centrifuge will start deccelerating rapidly, so that the arm actually stops and changes direction and all of the acceleration is a result of the tangential acceleration of the arm. There would then be a step change the speed or acceleration (or both) to correct the speed and give a more reasonable number. This, of course, is a solution that we cannot implement. There is no case in which the arm speed should be less than the speed required to generate 1.4 G.
1. If a solution exists for the onset, a solution must exist for the offset, right? I know I can take the desired curve, flip it around in time, find the time history of the rotation rate that generates the correct curve, and flip that around again to get a solution that works. It will work every time. Why can't I do this in real-time?
2. Is there a way that I can impose my additional constraints on the arm speed and acceleration (no step changes in speed, no speed less than the 1.4 G speed, etc.) and solve the problem such that these constraints are met?
Thank you in advance for your help!
-Kerry
We operate a centrifuge that spins between 1.4 G and 9 G. The command that we send to our motion control algorithm is a G command, so our algorithm takes the G command and computes the required speed of the arm to reach that desired G level. For steady-state, this is easy and we use the following equation:
[tex]
\omega = \sqrt{ \frac{ g }{ R } \sqrt{ G_c_m_d^2 - 1 } }
[/tex]
which is derived from
[tex]
G_a_c_t^2 = \left( \frac{ \omega^2 R }{ g } \right)^2 + 1
[/tex]
where [tex]g[/tex] is the acceleration due to gravity, [tex]R[/tex] is the arm length, and [tex]G[/tex] is the commanded or actual G level.
We are often required to follow an arbitrary G profile, however, and the arm's tangential acceleration comes into play. The new equation that describes the machine's G level is this:
[tex]
G_a_c_t^2 = \left( \frac{ \omega^2 R }{ g } \right)^2 + \left( \frac{ \alpha R }{ g } \right)^2 + 1
[/tex]
This is of course quartic in [tex]\omega[/tex] instead of quadratic, as is true when tangential acceleration is neglected. We have tried making the substitution [tex]\omega = \omega_0 + \alpha \triangle t[/tex] and solving for alpha as well as the substitution [tex]\alpha = \frac{ \omega - \omega_0 }{ \triangle t }[/tex], where [tex]\omega_0[/tex] is the arm speed calculated at the previous frame and [tex]\triangle t[/tex] is the time elapsed between frames. In both cases, we can solve the resulting quartic equation, and we get two real roots and two complex roots. Ignoring the complex roots leaves us with two choices. In case of an increasing G command, we can choose either of the remaining roots, and it gives us a satisfactory solution, where as the G command reaches a plateau, the tangential term is reduced to zero and the solution of this equation matches the solution of the simpler equation above.
The problem is in the case of a decreasing G command. There are still only two real solutions. Depending on the shape of the curve we are trying to follow, we must choose one root or the other, and sometimes it is necessary to switch between the two to avoid reaching a point where all four roots are complex. Unfortunately, while we are capable of doing this, in most cases we can even decide when to switch roots, and the magnitude of the G forces that are generated match the command exactly, the machine motion is unacceptable. For example, the centrifuge will start deccelerating rapidly, so that the arm actually stops and changes direction and all of the acceleration is a result of the tangential acceleration of the arm. There would then be a step change the speed or acceleration (or both) to correct the speed and give a more reasonable number. This, of course, is a solution that we cannot implement. There is no case in which the arm speed should be less than the speed required to generate 1.4 G.
1. If a solution exists for the onset, a solution must exist for the offset, right? I know I can take the desired curve, flip it around in time, find the time history of the rotation rate that generates the correct curve, and flip that around again to get a solution that works. It will work every time. Why can't I do this in real-time?
2. Is there a way that I can impose my additional constraints on the arm speed and acceleration (no step changes in speed, no speed less than the 1.4 G speed, etc.) and solve the problem such that these constraints are met?
Thank you in advance for your help!
-Kerry