eddy_em: (Default)
eddy_em ([personal profile] eddy_em) wrote2020-05-08 06:15 pm

Суровые и беспощадные китайские даташиты!

Пока разбирался с маленьким контроллером ШД PMC007c2, столкнулся со странностью: вход EXT1 для концевика никак не получалось настроить как вход с подтяжкой со срабатыванием на высокий уровень сигнала (как стандартный концевик: пока замкнуто, все ОК, как разомкнуто — ошибка).
Сегодня взялся за более мощную версию — PMC007c6:

И опять столкнулся с проблемой с EXT1. Методом Монте-Карло тыка было установлено, что в даташите написана чушь! Во-первых, EXT1 всегда включен с подтяжкой к нулю (видимо, подтяжки к 1 у него нет), поэтому если его использовать как вход концевика, нужно подавать на концевик 3.3..5В питания (что не очень-то хорошо, но в принципе, можно сделать от внешнего источника через резистор в 100Ом). Во-вторых, все остальные настройки у этого входа инвертированы! И даже показания EXTI, которые читаются в SDO 0x6012 — все биты там нормальные, а этот инвертирован.
Итоговые настройки:
# EXT1&EXT2 emergency stop: EXT1@falling edge (normal state == 1), EXT2@rising edge (normal state == 0)
# Rising edge trigger for #2, falling for #1 (inverted!)
0x600F, 2, 3
# Turn on pullup for #2 (EXT1 is always pulled down)
0x600F, 3, 2
# Enable EXT1, EXT2
0x600F, 1, 3

В subindex 2 SDO 0x600F пишем тройку (срабатывание EXT2 на переход 0→1, а EXT1 — на 1→0), в subindex 3 этого же SDO — пишем 0 (если же EXT2 должен сработать на переход 1→0, то сюда нужно будет записать 2), а в subindex 1 записываем 3 (чтобы оба входа активировать).

Очень неудобно то, что хоть мотор и отключается после срабатывания концевика и устанавливается состояние ошибки (в котором движение запрещено), можно программно это состояние сбросить и ехать на концевик дальше. В общем, не хватает связи между концевиком и направлением движения (чтобы контроллер запрещал двигаться в сторону сработавшего концевика, даже если ты программно сбросишь ошибку).
Зато протокол этого контроллера совершенно тот же самый, что и у предыдущего. И уже в контроллере прошито деление шага на 32 и максимальный ток — 1.62А. Но т.к. мотор мощней и больше, предельная скорость уже ниже: на 1500 шагов в секунду вал хоть и крутился, но я легко его тормозил пальцами. Только затормозил — контроллер выпал в осадок показал ошибку: STALL. На предыдущим я эту опцию не проверял. Очень интересная штука: драйвер ШД определяет, что заполнение ШИМа приходится делать намного выше, и детектирует заклинивание. Надо будет эту опцию и на мелких драйверах активировать. Но лучше все-таки попробовать еще работу с энкодером.

Да, чуть не забыл еще интересную "особенность" даташита на контроллер: в распиновке разъема J1 (концевики, CAN-шина и т.п.) серый проводок обозначен как EXT3/ENC1. Я и закоротил его на землю, думая проверить работу третьего канала внешних концевиков. А фиг вам! Светодиодики на контроллере потухли... Померил напряжение — а на этом контакте 12В! Что-то китайцы попутали в даташите, потому что не может быть на этой ноге 12В, если она действительно EXT3/ENC1! Как туда подключать энкодер - непонятно. Есть, правда, еще внешний контакт на GPIO8. А еще я думаю, что кодировать положения турелей можно, если вскрыть корпус и подпаяться напрямую к этим GPIOx (теоретически, "пятачки" для них должны быть).

И еще "да": я упомянул про светодиодики. Если судить по документации, получается, что китайцы не предусмотрели их отключение. Придется решать стандартным путем: либо залепить черной изолентой (или пластилином), либо вскрыть и замазать черным лаком (а еще лучше - вообще выпаять к чертовой матери!).

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org