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.
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)?
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.
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?