Hello! I’m working on a project that uses a Chinese servo drive with a built-in absolute encoder Reagle SRMA46-M16S17Bit-SY. It communicates via RS-485 using a proprietary protocol, which is unfortunately not supported by ODrive Pro directly.
Encoder technical details:
- Interface: RS-485 (2-wire differential: A/B)
- Protocol: proprietary, using frame structure:
- CF – Command Frame
- SF – Status Frame
- DF – Data Frame
- CRC8 (polynomial x⁸ + 1)
- Read command:
0x1A
(ID3 – ABS Read)
- Resolution: 17-bit (single-turn)
- Supply voltage: 5 V
- Baud rate:1.25 Mbps
Goal:
ODrive Pro supports only a limited set of RS-485 encoders (e.g., AMT21, MBS, OA1), but Reagle SRMA46 is not among them.
My goal is to build a protocol converter using ESP32, which would:
- Receive RS-485 frames from the encoder (via SN65HVD75-based transceiver)
- Parse the proprietary protocol and verify CRC8
- Extract absolute position
- Output data in SSI or BiSS-C format
- Feed the position into ODrive Pro (or other driver)
Questions for the community:
- Has anyone worked with Reagle SRMA or similar RS-485 encoders?
- Are there any existing ESP32 firmware examples for such protocol conversion?
- Which interface would be easier to implement and better supported by ODrive Pro: SSI or BiSS-C?
- Are there any ready-made RS-485 to SSI/BiSS-C decoders?
- Do any motor drivers natively support Reagle SRMA46?
Thanks in advance for any advice or references!
Hi! I think the best move here would be to just add support for this encoder on the ODrive itself. Feel free to send me an email at solomon.greenberg@odriverobotics.com.
The reason this is the best solution – the ODrive internally timestamps the received encoder data for the purposes of interpolation and latency correction. As such, you require a known and stable (deterministic) latency between the ODrive encoder data read request and the actual data timestamp from the encoder, or you will have significant issues with high speed control. Additionally, the data must be immediately accessible upon ODrive request. So if you have e.g. an ESP32 that reads the data and then retransmits to the ODrive, you would have to read the encoder in the background and cache the data for the ODrive, which would result in a nondeterministic latency (unless you always return the encoder data from the previous read request, which would result in a 125us latency given the ODrive’s 8kHz loop, and pretty poor performance at high speeds / transients).
The alternative would be for the ESP32 to automatically poll and send the encoder data at about 10kHz via the AMT21_EVENT_DRIVEN protocol. However, this would take some well-written custom firmware; if you’re less experienced with firmware development, this may take a bit of work.
Dear Mr. Solomon,
Just wanted to let you know that I’ve sent you an email to solomon.greenberg@odriverobotics.com from my personal address 28perf......er@gmail.com
Thank you sincerely for your willingness to help with adding support for the Reagle SRMA46-M16S17Bit-SY encoder to the ODrive Pro firmware.
This is extremely important for my project, and I truly appreciate your offer.
Best regards,
Vsevolod