Renesas IPS2200 Sin Cos Encoder wiring and configuration?

Hey Folks,

First, thank you so much for all your hard work on this project. Your efforts have unlocked a massive amount of value in the world and I really appreciate it. I hope to help contribute more meaningfully in the coming months.

I am attempting to configure ODrive as an incremental, precision position controller with a BLDC Gimbal motor and a SIN/COS encoder, but am failing to successfully calibrate (or control the motor).

We have discovered the Renesas IPS2200 inductive position sensors, which output a Sin Cos analog signal across either 3 wires (SIN, COS, Ref) or 4 wires (SIN, SINN, COS, COSN), depending on configuration parameters. We are starting with the 3 wire configuration.

I have found a number of (quite old) previous SIN COS threads, including one that references this specific encoder, but I have not been able to get the ODrive to work with this device in position control mode.

What have I done so far?

I have configured the IPS2200 for 3 wire output (as this seemed to more easily map to the pins ODrive is looking for), and then connected to GPIO 2, GPIO 3 and GND with the 3 output pins (SIN, COS and SINREF).

I verified that the encoder.config values are pointed at GPIO 2 and 3.

I have attempted to calibrate the ODrive from odrivetools by asking for a FULL Calibration and an INDEX calibration. Each one will turn the motor in one direction and then fail with an encoder error indicating that an index was not found.

I have attempted to select different GPIOs and configure them from odrivetool.

I have attempted to connect the encoder outputs to the same pins as the suported CUI device encoders.

This encoder is only configured as an incremental encoder and does not include an index signal. We expect to home the device in the future using hall effect end stops.

I assume there’s something simple that I’m missing here, but can’t seem to find the secret key.

Any tips or pointers would be greatly appreciated!

Thank you,


Can you paste the setup script / commands that you have?

It should be something like

odrv0.config.gpio2_mode = GPIO_MODE_ANALOG_IN
odrv0.config.gpio3_mode = GPIO_MODE_ANALOG_IN
odrv0.axis0.encoder.sincos_gpio_pin_sin = 2
odrv0.axis0.encoder.sincos_gpio_pin_cos = 3
odrv0.axis0.encoder.config.encoder.mode = 2

odrv0.axis0.requested_state = AXIS_STATE_FULL_CALIBRATION_SEQUENCE
dump_errors(odrv0) # check for errors

Make sure your signals are going ± 3.3V, or so.