eddy_em: (Default)
[personal profile] eddy_em
Пока разбирался с маленьким контроллером ШД 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 (теоретически, "пятачки" для них должны быть).

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

April 2025

S M T W T F S
  1 23 45
67 89101112
13141516171819
20212223242526
27282930   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 22nd, 2025 05:27 pm
Powered by Dreamwidth Studios