Implement Biss-c protocol, with two RS485 module for Renishaw absolute encoder

Dear community,

I want to implement biss-c for a Renishaw absolute encoder on arduino mega.

here are the datasheet for the encoder:
http://resources.renishaw.com/en/download/data-sheet-resolute-absolute-optical-encoder-with-biss-serial-communications--103093

Of course i found the biss-c protocol datasheet from renishaw:
http://resources.renishaw.com/en/download/data-sheet-biss-c-mode-unidirectional-for-resolute-encoders-recommended--88887

It mention that:
The master controls the timing of position acquisition and the data transmission speed,
and the encoder is the slave. The interface consists of two unidirectional differential pairs of lines:
• “MA” transmits position acquisition requests and timing information (clock) from master to encoder
• “SLO” transfers position data from encoder to master, synchronised to MA.

Based on it, i bought two rs485 module to arduino. One will be the Ma pair, and one the Slo pair.
I tried implement with one rs485 module, to communicate with the encoder, but thats not worked.
(connected Ma +/Slo + together and Ma -/Slo - together) tried to send out 255 and 0 on Serial1 with rs485 output mode and changed to input mode to read out the bits, but its not worked as i thinked.

So, my question is, how can i produce the clock speed with Serial1?

With an USB adapter, and the software added to it (it is an RLS-E201-9s adapter) a 280kHZ frequency, and 2 status bits, 6 CRC bits, 26 data bits i was able to read out the absolute position, but i need to read out, with the arduino because of a controlling mechanism.

This adapter is an rs422 implementation, so thats the reason why i will use two rs485, to implement full-duplex phy level.
One will be the Ma+ and Ma- what is clock + and -.
The other will be the Slo+ and Slo-, what is data + and -.

I want to read out now the 26 bits on Serial2, but maybe i will have another encoder, with 32 bit or other. Thats not problem. If i will produce clock signal, i will able to read out data bytes and manipulate it to an unsigned long. After it will work, i will use the CRC bits too.

Thanks a lot in advance.

I want to inform the community, ASCII based clock signal with serial port to max485, is not a working idea. (Sending e.g. 255 to high level, or 170 to square wave 10101010, keep in mind the start 0 bit and stop 1 bit, from serial communication protocol)

Trying square wave signal 1:1 on 270 kHZ, with bit-banging the 0/1 with precise timing to the RS485 converter neither work.
I can't produce the whole-dividing of quartz signal to near 270 000 hz =~3,571 us delay.

The delaying between 12-13 pin on MEGA cant reach perfect clock signal timing.

Please, let me know, is it work with SPI? They mention that in BISS-C datasheet. SPI can produce 270 kHz signal?

This BISS-C is an SSI compatible protocol, and SSI can produced by SPI interface, right? I have the differential level converters, so the RS422 layer is done.

Thank you.

I had an excelent solution, based on the SPI protocol.
No slave select, no MOSI line, only with MISO and SCLK, i was able to read datas from the Biss-c protocol, what was unidirectional, so only read options.

In advance, if anybody have to implement the protocol, try with SPI, what can handle the SSI protocol. And the Biss-c is hardware compatible with the SSI, what is compatible with the SPI. End of the story.

The following stepps was, i had to connect the MISO and the SCLK properly with the RS485 connector, set the data direction well, and read some or a little bit more than enaught byte with sending dummy bytes on the SPI interface, find the start sequence in the byte series, read the usefull data, and ignore the rest bits.

Problem solved!

2 Likes