Взаимодействие с датчиком SSI?

Я пытаюсь взаимодействовать с версией RM08S этого поворотного энкодера, используя Arduino Mega. Датчик поддерживает интерфейс "Synchro serial interface (SSI), single ended". Я не знаком с этим протоколом.

Несмотря на название, он, по-видимому, не соответствует описанию официальной спецификации SSI или RS-422, поскольку для этого требуется два провода для дифференциальных часов и линий передачи данных, тогда как у этого датчика есть только один провод для каждого. Это делает его более похожим на IIC, но без функциональности, подобной шине.

Поиск в Google дает очень мало результатов по взаимодействию Arduino с устройствами SSI, не говоря уже о каких-либо стандартных библиотеках. В этой ветке форума задается аналогичный вопрос, но, похоже, проблема не решена.

Поскольку есть только часы и строка данных, будет ли чтение из этого таким же простым, как переключение часов, а затем считывание 10-битных данных из строки данных последовательно с каждым тактом, с учетом того, какие биты используются для заполнения пакета?

, 👍1

Обсуждение

На моем RM08 подключен интерфейс RS422. Могу ли я просто подключить Data + к Miso и CLK + к SCK? @Majenko, @TobiMiller


1 ответ


Лучший ответ:

3

Это просто СПИ.

SPI.begin();
SPI.setDataMode(SPI_MODE2);

// ...

uint8_t h = SPI.transfer(0x00);
uint8_t l = SPI.transfer(0x00);
delayMicroseconds(20); // Указывает EOT
uint16_t v = (h << 8) | l;
v >>= 4; // для 12-битного разрешения, 5 для 11 бит, 6 для 10 бит и т.д.

Для разрешения 8 бит или меньше вам понадобится только один SPI.transfer и вычтите 8 из суммы сдвига вправо.

Подключение простое: часы к SCK (52 или ICSP 3) и данные к MISO (50 или ICSP 1).

Временные диаграммы в техническом описании (стр. 5) описывают все это в деталях.

,

Если это функционально SPI, почему они называют это SSI? Разве это не очень разные вещи?, @Cerin

Это * почти * СПИ. Достаточно близко, чтобы работать. Вывод CS отсутствует, а время более критично, поэтому они не могут на самом деле назвать это SPI. Это последовательный интерфейс, и он синхронный., @Majenko

В техническом описании отмечается, что часы должны начинаться с высокого значения, и после спадающего фронта значение датчика фиксируется, а на следующем восходящем фронте вы получаете MSB. Для SPI часы не начинаются с низкого уровня, поэтому вы не получите MSB до 2-го цикла (2-й бит)?, @jose can u c

@josecanuc Это зависит от "режима" SPI. Возможно, вам потребуется ввести SPI.setDataMode(...), чтобы установить SPI в правильную фазу / полярность., @Majenko

@josecanuc, кстати, спасибо, что указал на это. Я добавил правильный вызов режима к приведенному выше примеру. Похоже, что SPI_MODE2 должен это сделать (полярность = 1, фаза = 0), @Majenko