The TMC4671 does not directly support an SSI encoder, but an SSI encoder can be used with the TMC4671.
In order to do this, you will need to connect the SSI encoder to a microcontroller (or similar host device), and then use either the TMC4671's UART interface or the TMC4671's SPI debug interface to periodically update PHI_E_EXT with the encoder's position.
In order to do this, you will need to connect the SSI encoder to a microcontroller (or similar host device), and then use either the TMC4671's UART interface or the TMC4671's SPI debug interface to periodically update PHI_E_EXT with the encoder's position.
First, one must set PHI_E_SELECTION to use PHI_E_EXT (write a value of 1 to register 0x52) in order to enable use of this encoder for FOC. Then, the PHI_E_EXT register should be updated with the encoder's position (modified by an offset and number of motor pole pairs) every 1ms using the procedure below:
General procedure:
- read absolute encoder position
- substract the previously measured offset
- scale it to a 16-bit value
- multiply it by the number of pole pairs (convert mechanical to electrical angle)
- update PHI_E_EXT with the resulting number
- repeat procedure to update PHI_E_EXT at a rate of 1KHz (every 1ms) in order to ensure good performance with FOC