Maxon SSI encoder interface with Arduino Mega


I have been trying to interface a Maxon SSI encoder with an Arduino mega but I am struggling to get consistent angles. The encoder uses gray code and I need to convert that to an angle.

Information about SSI encoder:

Steps per turn: 4096
Resolution: 12 bit single turn
Data encoding: gray symmetric
Clock frequency: 0.04...4 MHz

I am using a SN75179B differential driver and receiver IC. I have the hardware set up as seen on pages 61-62 of the following document:

I am using a program I found on the Arduino forum that can be found here:

I have a feeling the Arduino may not be able to read the information fast enough that is been sent to it from the SSI encoder.

If anyone knows how this can be done or even if its possible, any help would be greatly appreciated in relation to code and hardware.
Thank you.

@harry_beggy, your topic has been moved to a more suitable location on the forum.

@sterretje Thank you.

What is the purpose of the EPOS4 module? It appears to act as a go-between between the SSI encoder and some other device: USB, RS232, CAN bus, or EtherCat. What has that got to do with Arduino? Are you trying to replace the EPOS4 with an Arduino? Are you trying to control the EPOS4 with an Arduino using one of the control interfaces (USB, RS232, CAN bus, or EtherCat)?

Hi, @harry_beggy

I used @johnwasser code to develop an SSI link to an encoder a few years ago.
I ended up porting it to a DUE to get the speed I needed.
The UNO could not reliably read the SSI bus.

The device was Turck RI360P0-QR24M0-HESG25X3-H1181.

Tom... :smiley: :+1: :coffee: :australia:

@TomGeorge thanks very much for the advice. I have been struggling with this for a while

@johnwasser I am trying to use an Arduino instead of buying a Maxon controller.

Can you please provide a like to the specific encoder you are using.

@cattledog file:///C:/Users/harry/Downloads/b7cfd781898a_2%20(1).pdf


Not a valid link.

@cattledog Online shop for high precise drive systems by maxon | maxon group

Your link took me to this

Encoder ENX 16 EASY Absolute XT, with SSI interface

And then to a download link for this product information sheet

Is this your encoder?

Yes, the ENX 16 EASY ABSOLUTE XT encoder is the one I am using.

I have a feeling the Arduino may not be able to read the information fast enough that is been sent to it from the SSI encoder.

What have you tried? Some of the code presented in Absolute rotary Encoder SSI SPI how ? - #4 by johnwasser
uses double readings and uses a delayMicroseconds(1) between the digitalWrite() clock commands.

For faster performance you can use direct port commands or digitalWriteFast/digitalReadFast instead of digitalWrite() and digitalRead().

Can you post the Arduino code you are using and some indication of the performance issues? How fast do you need to read the encoder? There is a 16 microsecond timeout between readings.

As has been suggested, a faster mcu than the Mega might be required. Is there an absolute need for the Mega?