by tah1 » Wed Jun 17, 2009 10:43 am
by tah1
Wed Jun 17, 2009 10:43 am
StuartL wrote:The torque question has definitely come up before... In short: To my knowledge noone has decoded what it means in the real world and the accuracy/quantisation of the torque figures make it almost unusable.
Instead you may wish to consider the difference between the goal position and the achieved position. This is probably a better and more useful start.
We have been doing some tests and measurements on the Bioloid AX12 related to the PRESENT LOAD data it stores in addresses 40-41 ($28-$29).
Our findings are as follows:
1) There is a threshold of motor current, below which the AX12 reports "Load" as zero. This threshold is ~110 to 120mA (including the static standby current of the servo).
2) The "Load" data are highly quantised. Although this is a 10bit number, the 10bit results posted in this address are always multiples of 32; i.e. the low 5 sig bits are always zero. So the result is really only a 5-bit result.
3) The "Load" data are directly related to measurements of motor current, and somewhat indirectly to servo output-torque. In particular, for a given motor current, there is a large difference between:
a) the quasi-static HOLDING torque of the system (i.e. the current needed to approx. maintain an output shaft position against an externally applied torque, or load), and...
b) the DYNAMIC DRIVING torque (i.e. how much torque the servo can apply to an external load to achieve a NEW position against an external load).
4) We have done measurements of both types, using a 0.5% accuracy force meter.
For the Static Position tests (holding torques, where we park the servo at a given position and then apply various torque loads by moving the attached force meter)) we measure a (quantised - see above) relation between "Load" value L (i.e. the value in address $28-$29), and static holding torque T [kg.cm] as follows:
L = 35.5T +7
and in this same mode, the relationship between the total servo current I [amps] and static holding torque T is:
I = 0.0125T+0.085
So for example holding position against an external load of 17N applied to the end of a 52mm servo arm (=> T= 17*5.2/9.81 = 8.98 [kg.cm]) will produce a (measured) Load reading from the servo of
320. Similarly, this requires a (measured) holding current of I = 0.2A (the formula above which is also subject to heavy quantisation, gives a result of 0.197)
For the Dynamic Torque situation (where we drive the servo towards a desired position in opposition to the load of the stationary force meter), the results are quite different. The quantisation of the Load readings, together with the significant hysteresis of the servo, produce a Torque T [kg.cm] result as follows:
T = 0.0074L + 0.323
Here we are
setting position, and
measuring torque so the equation is expressed differently, but were the servos linear and had zero hysteresis, the slopes in each equation would be the inverse of each other. However 1/0.0074 = 135.1 which is VERY different from the slope of the first equation (35.5). So one needs to use the appropriate formula to match the load/drive situation appropriately. It's likely that gearbox friction, motor-cogging, and backlash in the gear train contribute greatly to these differences, but I believe there is much that could be done with the internal control algorithm of the AX12 to reduce this huge discrepancy).
The relation between servo current I [amps] and Load L in the dynamic case is:
I = 0.0007L + 0.027
(the correlation coefficient in this case is ~0.93 so within the limits of quantisation, this is a reasonably linear relationship)
5) What all of this means is:
a) Load units as reported relate directly to motor current
b) Although the internal ADC in the AX12 is a 10bit device, only 5bits (presumably the MSBs) are reported externally, seriously reducing the usefulness of this data.
c) Although the Current/Load relationship is linear, the measured current (and thus the Load value reported), bears a complicated relationship to the externally applied load, and is a strong function of the dynamics / statics of the particular situation.
6) Most damning of all, as far as we can tell, during a servo MOVE (i.e. during the time it takes for the servo to implement and complete the execution of a command to move from position P0 to P1), the AX12 reports NO useful Load values at all - one always reads ZERO during the move itself - (barring the very very occasional odd non-zero reading that appears to be spurious). This means that the Load data is completely useless for precision torque control - i.e. where one is trying to move to a target position P1 but subject to the over-riding constraint that the servo must never apply more torque to the load than T1. This simply cannot be done, because a torque reading (proxied by Load) is not given until the position move has completed, by which time it's usually too late.
7) Conclusions:
a) The Load data in $28-$29 are directly related to the motor current, WHEN they are valid data.
b) The motor current bears a complex relationship with output load torque.
c) all else being equal, a bigger Load value does mean a bigger torque (but read ALL the caveats above - usually one cannot make a useful inference in practice)
d) NO USEFUL Load (and therefore Torque) information is available from the AX12 during the execution of a position move command.
We strongly recommend that Bioloid fix their firmware to tidy up this situation, as presently what is an otherwise very good (precise and strong) servo, is rendered completely useless for precision torque limited applications.
t
StuartL wrote:The torque question has definitely come up before... In short: To my knowledge noone has decoded what it means in the real world and the accuracy/quantisation of the torque figures make it almost unusable.
Instead you may wish to consider the difference between the goal position and the achieved position. This is probably a better and more useful start.
We have been doing some tests and measurements on the Bioloid AX12 related to the PRESENT LOAD data it stores in addresses 40-41 ($28-$29).
Our findings are as follows:
1) There is a threshold of motor current, below which the AX12 reports "Load" as zero. This threshold is ~110 to 120mA (including the static standby current of the servo).
2) The "Load" data are highly quantised. Although this is a 10bit number, the 10bit results posted in this address are always multiples of 32; i.e. the low 5 sig bits are always zero. So the result is really only a 5-bit result.
3) The "Load" data are directly related to measurements of motor current, and somewhat indirectly to servo output-torque. In particular, for a given motor current, there is a large difference between:
a) the quasi-static HOLDING torque of the system (i.e. the current needed to approx. maintain an output shaft position against an externally applied torque, or load), and...
b) the DYNAMIC DRIVING torque (i.e. how much torque the servo can apply to an external load to achieve a NEW position against an external load).
4) We have done measurements of both types, using a 0.5% accuracy force meter.
For the Static Position tests (holding torques, where we park the servo at a given position and then apply various torque loads by moving the attached force meter)) we measure a (quantised - see above) relation between "Load" value L (i.e. the value in address $28-$29), and static holding torque T [kg.cm] as follows:
L = 35.5T +7
and in this same mode, the relationship between the total servo current I [amps] and static holding torque T is:
I = 0.0125T+0.085
So for example holding position against an external load of 17N applied to the end of a 52mm servo arm (=> T= 17*5.2/9.81 = 8.98 [kg.cm]) will produce a (measured) Load reading from the servo of
320. Similarly, this requires a (measured) holding current of I = 0.2A (the formula above which is also subject to heavy quantisation, gives a result of 0.197)
For the Dynamic Torque situation (where we drive the servo towards a desired position in opposition to the load of the stationary force meter), the results are quite different. The quantisation of the Load readings, together with the significant hysteresis of the servo, produce a Torque T [kg.cm] result as follows:
T = 0.0074L + 0.323
Here we are
setting position, and
measuring torque so the equation is expressed differently, but were the servos linear and had zero hysteresis, the slopes in each equation would be the inverse of each other. However 1/0.0074 = 135.1 which is VERY different from the slope of the first equation (35.5). So one needs to use the appropriate formula to match the load/drive situation appropriately. It's likely that gearbox friction, motor-cogging, and backlash in the gear train contribute greatly to these differences, but I believe there is much that could be done with the internal control algorithm of the AX12 to reduce this huge discrepancy).
The relation between servo current I [amps] and Load L in the dynamic case is:
I = 0.0007L + 0.027
(the correlation coefficient in this case is ~0.93 so within the limits of quantisation, this is a reasonably linear relationship)
5) What all of this means is:
a) Load units as reported relate directly to motor current
b) Although the internal ADC in the AX12 is a 10bit device, only 5bits (presumably the MSBs) are reported externally, seriously reducing the usefulness of this data.
c) Although the Current/Load relationship is linear, the measured current (and thus the Load value reported), bears a complicated relationship to the externally applied load, and is a strong function of the dynamics / statics of the particular situation.
6) Most damning of all, as far as we can tell, during a servo MOVE (i.e. during the time it takes for the servo to implement and complete the execution of a command to move from position P0 to P1), the AX12 reports NO useful Load values at all - one always reads ZERO during the move itself - (barring the very very occasional odd non-zero reading that appears to be spurious). This means that the Load data is completely useless for precision torque control - i.e. where one is trying to move to a target position P1 but subject to the over-riding constraint that the servo must never apply more torque to the load than T1. This simply cannot be done, because a torque reading (proxied by Load) is not given until the position move has completed, by which time it's usually too late.
7) Conclusions:
a) The Load data in $28-$29 are directly related to the motor current, WHEN they are valid data.
b) The motor current bears a complex relationship with output load torque.
c) all else being equal, a bigger Load value does mean a bigger torque (but read ALL the caveats above - usually one cannot make a useful inference in practice)
d) NO USEFUL Load (and therefore Torque) information is available from the AX12 during the execution of a position move command.
We strongly recommend that Bioloid fix their firmware to tidy up this situation, as presently what is an otherwise very good (precise and strong) servo, is rendered completely useless for precision torque limited applications.
t
Last edited by tah1 on Wed Jun 17, 2009 12:47 pm, edited 1 time in total.