SSI communication from PC - Page 1
Forum section: electronics / projects

author: loistvan
author_rank: Newbie
timestamp: November 08, 2021, 11:22:57 am
content: Hi,I have to design an interface between a PC and a motor controller, but I am not sure how to do it. The controller uses SSI interface, so what I need is a module that:1. I could plug into the PC via USB2. Can receive positional data from the PC (i.e. I'll write a software that communicates with this module)3. Transmits this data towards the controller via SSII know that SSI is a synchronous protocol, but the communication bandwidth between the PC and the motor is so low (10 Hz) that it should not cause any conflicts.Any ideas how I should approach this problem?

author: Terry Bites
author_rank: Super Contributor
timestamp: November 08, 2021, 01:48:45 pm
content: This may make your day!https://www.posital.com/media/posital_media/documents/AbsoluteEncoders_Context_Technology_SSI_AppNote.pdf

author: capt bullshot
author_rank: Super Contributor
timestamp: November 08, 2021, 01:57:24 pm
content: SSI is pretty simple, but controlled by the motor controller.The controller outputs a clock signal and receives a number of bits through the data line. A pause on the clock signal indicates the start of a new data word.So you'd need to build a circuit that- can detect some time of inactivity on the clock line- shift out the required number of bits using the clock signalThe number of bits depends on the type of encoder to be simulated, and varies typically between 20 ... 28 bits. The SSI (slave) hardware typically is a shift register with parallel load.So most probably you'd use an uC to connect to USB and receive positional data from the PC. Most probably you can emulate the SSI slave using an SPI peripheral of the uC and a bit of firmware detecting the pause. Your SPI peripheral receives the clock signal from the motor controller and sends the data back.I'd recommend to get some documentation of a typical SSI encoder to see what kind of data is to be transferred (how many bits per rotation and how many bits for multi-turn information, or linear position, depending on the type of encoder).IMO 10Hz update rate is a bit too slow, a typical motor controller most probably reads out the positional data at the control loop rate, e.g. 4kHz or 8kHz. The clock frequency will be some 100kHz.

author: harerod
author_rank: Frequent Contributor
timestamp: November 08, 2021, 03:53:27 pm
content: A pretty long time ago I sold converters based on FPGA:https://harerod.de/applications_eng.html#SSI_TOOL1Later I converted the design to a cheaper, STM32F4-based version:https://harerod.de/applications_eng.html#SSI_USBThose devices run OEM-firmware, according to each customer's specific requirements. The DUO-version has two SSI-ports, which allow it to act as a converter/emulator for no longer available encoders.https://harerod.de/applications_eng.html#SSI_USB_DUOSo to answer your question:It depends, among other things, on how many units you plan to build and your hourly rate. There are off the shelf solutions available.If you need to design something proprietary - just take a USB-capable MCU and add some drivers.

author: loistvan
author_rank: Newbie
timestamp: November 08, 2021, 10:02:22 pm
content: Thank you very much for all of you, let me check out what you have linked, and I'll get back to you!

author: loistvan
author_rank: Newbie
timestamp: November 15, 2021, 03:54:08 pm
content: Hi all,eventually, I have decided to go with a microcontroller that I can reach from the PC via SPI. There are solutions from FTDI to for this. The MCU also acts as a buffer. Finally, I'm using RS-422 transceivers for the TTL --> differential level conversion.Thanks for your help again, it helped me a lot to better understand the problem.