IONI Pro (FW 1.7.21) : I am struggling to understand the principle of the “raw” position feedback reported by the API with SMP_ACTUAL_POSITION_FB (and shown by Granity).
We have an absolute position encoder (BiSS-C, 26-bit), and the (absolute) position reported with SMP_ACTUAL_POSITION_FB_NEVER_RESETTING looks (absolutely) correct.
But the SMP_ACTUAL_POSITION_FB is relative, it is more-or-less reset to 0 after a power cycle, or after a restart command (with SMP_SYSTEM_CONTROL_RESTART). I write more or less because the value is not zero, but something in the range of ±500 units approximately.
Also, I observe that the reset value will be kept (the sensor not being moved, of course) after subsequent resets. Just like if some LSBs of the sensor data were not taken into account for a subtraction.
SMP_ACTUAL_POSITION_FB is reset to zero at power-on, and can be also reset over SimpleMotion if necessary. Any change of position readout after the reset is accumulated to that value.
Is it possible that motor makes tiny motion between the reset and observation moment? +/-500 counts at 26 bits is just +/-0.0000075 mechanical revolutions.
If not caused by an external rotation, IONI may also induce tiny motion to motor as it momentarily enables power drive during initialization.
No sorry, the motor does not make tiny motion because it is powered off, and the sensor does not move because the system is open loop: sensor and motor are disassembled.
No SMP_ACTUAL_POSITION_FB is not reset at power-on: a low value remains, and as I wrote, this value is exactly kept if further power-off-on or resets occur. This value appears to be random at first, then no more, as if it was kept in memory.
The consequence is that at reset or power-on, the [relative] target is set to 0, the [relative] position should be set to zero but is not. So the servo should not move if 0=0 but this is not the case and it move by a few hundred LSBs (then the software sends the target and it moves back to the right place).
Of course, 26 bits is a huge lot; in our application, only 16 bits are actually non-zero. But this is how the ( linear) sensor is done, and we have to rely on the LSB. Owing to the way the BiSS-C protocol works, I don’t think I should tamper with those word length settings, should I ? If the data was transferred incorrectly, it would anyway be subtracted from itself and the result would be 0. Or if it was transferred with random errors, the residual value would change every time.
A rather unlikely hypothesis could be that the sensor would report an slightly wrong initial value, used by the IONI to reset, and then reports another slightly different value. I could understand this behavior at power-up. But it is much more unlikely after a IONI reset, without a sensor power cycle.
How many sensor readings are made to reset the position value ? It is quite customary that the first reading be discarded, and the second one is considered valid.