I’m developing a 6-DoF biped robot, but I can’t save the initial positions of each actuator. The Odrive S1 contains the MA702 encoder on the board, which I have near my magnet, and it works perfectly. However, according to that encoder’s datasheet:
“…On-chip non-volatile memory provides storage for configuration parameters, including the reference zero angle position, ABZ encoder settings, and magnetic field detection thresholds…”
But every time I operate my Odrive S1, unplug it, move the motor, and turn it back on, the driver doesn’t recognize that it has moved and doesn’t save the last position.
- Can this be fixed through software?
- Do I need a new encoder?
- Is this an Odrive issue?
Does anyone have more knowledge of these problems?
Hi! So, the MA702 is a single turn absolute encoder, it can only store the position from 0-360°. You can restore the position automatically but only within a single turn, see here.
If you want to know the absolute position across multiple turns, you need either a battery backup multiturn encoder (e.g. RLS Orbis w/ Battery Backup), or an additional absolute encoder on the gearbox output, like an OA1.
Alternatively, you can have some sort of homing procedure with endstops or digital hall sensors that would allow you to move the joints until the sensors are triggered to restore the absolute position, but this would require a good amount of movement on power-on, across all joints.
Finally, you could add something like an FRAM IC to your main controller, and be constantly writing the ODrive joint position to memory. Then, when the robot power cycles, you could write the last known position to approx_init_pos and then have the ODrive initialize the angle based off a combination of the last known position and the MA702 angle.
Typically for this task I see people using an additional absolute output encoder, which would be my recommendation.