Чтение данных по SSI интерфейсу

Feb 01, 2023 17:22


Получаю данные из абсолютного энкодера ЛИР-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 данных - это маркер конца передачи



"Красный" бит крупно



"Красного" бита нет

Энкодер, Робот мусорщик

Previous post Next post
Up