April 18th, 2020

Костерок

Автоопределение типа драйвера ШД

Делаю очередную управлялку шаговиком. У меня в наличии есть модули драйверов DRV8825, A4988 и TMC2130 — самые распространенные на али.
Хочу сделать автоматическое определение типа вставленной платы (потому что у 8825 и 4988 различаются настройки микрошага, а 2130 вообще управляется по SPI). Чтобы проверить, что нога висит в воздухе, я переключаю ее в режим PPout, затем подаю 1 или 0 на пару миллисекунд, потом переключаю в режим floating IN, жду пару миллисекунд и считываю данные. Если там в обоих случаях то же, что было подано — нога болтается в воздухе.

Однако, с 8825 и 4988 возник косяк: там единственная разница в том, что на самой плате драйвера ~FAULT (а у 4988 это - питание логики) соединена с ~SLEEP. Если подавать на ~SLEEP что-то, никаких эффектов нет; аналогично нет никакой закономерности, если я считываю с ноги ~SLEEP, а изменяю состояние ~FAULT. Тут еще осложняется тем, что если я подаю 1 на FAULT, логика 4988 запитывается от ноги МК!
Второй день голову ломаю: все чушь какая-то получается.

Вот как надежно определить, что за зверь висит на разъеме: DRV8825 или A4988?
Или уже сдаться, и заставлять пользователя указывать тип установленного драйвера, а при включении лишь проверять, что некоторые ноги не болтаются в воздухе? Но некошерно как-то получается…