Получаю данные из абсолютного энкодера ЛИР-158ДА, 17 бит на оборот.
Энкодер ЛИР-158ДА
Распайка разъема на самом корпусе энкодера:
Настройки SPI
Инструкция от производителя. На реальных осциллограммах немного не так.
Получаем значение из энкодера:
//****************************************************************************
// Получить 17bit данные из абсолютного энкодера по интерфейсу SSI
//****************************************************************************
static uint32_t get_SSI_data (void) {
uint32_t SSI_data;
HAL_SPI_Receive(&hspi2, SPI2_buf, 5, 100);
SSI_data = (SPI2_buf[2] >> 5) & 0x07;
SSI_data |= ((uint32_t)SPI2_buf[1] << 3);
SSI_data |= (((uint32_t)SPI2_buf[0] & 0x3F) << 11);
return SSI_data;
}
Пример - значение энкодера 88602:
Бит выделенный красным - «моргает», нужно маскировать. Далее на осциллограммах показан этот бит.
Осциллограммы для значения 88602, читаем два раза:
"Красного" бита нет
"Красный" бит есть
Полный кадр, по окончании долгий 0 данных - это маркер конца передачи
"Красный" бит крупно
"Красного" бита нет